0.0.3 • Published 3 years ago

@neondot/dot v0.0.3

Weekly downloads
81
License
MIT
Repository
github
Last release
3 years ago

DOT Logo

Starting up as a personal experiment the framework is not in even in an alpha state right now, so please use it just for testing and helping with the development.


DOCS

Full documentation is available here https://neondot.rndv.studio/

Example of basic usage

To test this file use a bundler and include the result in an html file

import { DotApp, DotComponent, register, html } from 'dot';

const app = new DotApp();

class AppTitle extends DotComponent {
  // Declare observed attributes thath will trigger renders on change
  static get observedAttributes() { return ['title']; }
  static get tag() { return 'app-title' }

  constructor() {
    super();

    this.$data.something = null;

    // Watch this data and log it's value on change
    this.$watchers.set('something', (newValue, oldValue) => {
      console.log('Old: ', oldValue);
      console.log('New: ', newValue);
    });

    this.$template = () => html`
      <style>
        h1 { color: darkgray; }
      </style>
      <h1>${this.getAttribute('title')}</h1>
    `;
  }
}

class TextBlock extends DotComponent {
  static get tag() { return 'text-block' }

  constructor() {
    super();

    this.$template = () => html`
      <!-- Mount a child compinent using the template -->
      <app-title title="Hello world!" ref="title"></app-title>
    `;

    requestAnimationFrame(() => {
      // Wait next tick and render its child
      this.$refs.title.render();
    });

    setTimeout(() => {
      // Update the title attribute, and trigger the update
      this.$refs.title.setAttribute('title', '...Hooray!');
      // Also trigger a watcher by changing a watched data
      this.$refs.title.$data.something = 'hello!';
    }, 2000);
  }
}

// Create the app mounting it on a DOM node
app.create(document.querySelector('#app'));

// Register both the components
register(AppTitle);
register(TextBlock);

// Pragmatically create a TextBlock component
const tb = new TextBlock();
// Mount the text block on the app node by not settina a parent
app.mount(tb);

console.log(app.$children);