Original Social Media Photo by JOSE LARRAZOLO on Unsplash
A builtin-elements based µce alternative:
- based on µhtml engine
- requires zero polyfills and it doesn't need a registry
- works SSR too (islands out of the box)
- roughly 4KB once minified and gzipped
// Some Builtin definition example import {HTML, render, html} from 'ube'; export default class Div extends HTML.Div { upgradedCallback() { const {hello} = this.dataset; render(this, html`Hello <strong>${hello}</strong> 👋`); // this.textContent and this.innerHTML work too } } // Some rendering import {render, html} from 'ube'; import Div from './div-component.js'; render(document.body, html`<${Div} data-hello="µbe" />`);import {HTML, render, html} from 'ube'; import {hooked, useState} from 'uhooks'; class Div extends HTML.Div { upgradedCallback() { this.render = hooked(this.render); this.render(); } render() { const [count, update] = useState(0); render(this, html` <button @click=${() => update(count + 1)}> Clicked ${count} times </button> `); } } render(document.body, html`Click test <${Div} />`);- kaboobie is the most similar project, but the elements lifecycle is different, as these are replaced once discovered, while builtin-elements are real builtin elements with Custom Elements super power, hence more portable, and SSR compatible
- µland, at the core of kaboobie, is the one that inspired me the most
- wicked-elements and hooked-elements also work in a similar way, and each element can have multiple definitions, but it requires a registry
