rvx
Version:
A signal based rendering library
48 lines • 1.42 kB
JavaScript
import { Context } from "./context.js";
import { NODE, XMLNS } from "./element-common.js";
import { ENV } from "./env.js";
import { appendContent } from "./internals/append-content.js";
import { setAttr } from "./internals/set-attr.js";
import { setClass } from "./internals/set-class.js";
import { setStyle } from "./internals/set-style.js";
import { isolate } from "./isolate.js";
import { watch } from "./signals.js";
export class ElementBuilder {
#env = ENV.current;
elem;
get [NODE]() {
return this.elem;
}
constructor(elem) {
this.elem = elem;
}
on(type, listener, options) {
const wrapped = Context.wrap(listener);
this.elem.addEventListener(type, event => isolate(wrapped, event), options);
return this;
}
style(value) {
setStyle(this.elem, value);
return this;
}
class(value) {
setClass(this.elem, value);
return this;
}
set(name, value) {
setAttr(this.elem, name, value);
return this;
}
prop(name, value) {
watch(value, value => this.elem[name] = value);
return this;
}
append(...content) {
appendContent(this.elem, content, this.#env);
return this;
}
}
export function e(tagName) {
return new ElementBuilder(ENV.current.document.createElementNS(XMLNS.current, tagName));
}
//# sourceMappingURL=element-builder.js.map