defineComponent(name, Component, options)Web Components adapter.
import { defineComponent } from "@ztools.org/runtime/client";
Use wc.js when you want framework-agnostic custom elements with reactive internals and plain HTML usage.
defineComponent(name, Component, options?)Defines a custom element and mounts ztools content inside it.
Component receives:
props.attrs — current attributes snapshotprops.$ — reactive attribute signals (for observed attrs)props.setAttr(name, value)props.emit(type, detail, opts?)Common options:
shadow (default true)mode (open/closed)observedAttributesmapAttrimport { defineComponent, tags as t } from "@ztools.org/runtime/client";
defineComponent("x-hello", (props) => {
return t.div(
t.strong("Hello, "),
() => props.$["name"]() || "world"
);
}, {
shadow: true,
observedAttributes: ["name"]
});
<x-hello name="Max"></x-hello>
props.emit)defineComponent("x-counter", (props) => {
let value = Number(props.$["value"]() || 0);
return t.button({
onClick: () => {
value += 1;
props.setAttr("value", String(value));
props.emit("change", { value });
}
}, () => `Count: ${props.$["value"]() || 0}`);
}, {
shadow: true,
observedAttributes: ["value"]
});
document.querySelector("x-counter")
.addEventListener("change", (e) => {
console.log("new value", e.detail.value);
});