UNPKG

@benev/slate

Version:
54 lines 1.94 kB
export function attributes(element, spec) { Attributes.on_change(element, () => element.requestUpdate()); return Attributes.proxy(element, spec); } export var Attributes; (function (Attributes) { Attributes.proxy = (element, spec) => new Proxy(spec, { get: (_target, name) => { const type = spec[name]; const raw = element.getAttribute(name); switch (type) { case String: return raw ?? undefined; case Number: return raw !== null ? Number(raw) : undefined; case Boolean: return raw !== null; default: throw new Error(`invalid attribute type for "${name}"`); } }, set: (_target, name, value) => { const type = spec[name]; switch (type) { case String: { element.setAttribute(name, value); return true; } case Number: { element.setAttribute(name, value.toString()); return true; } case Boolean: { if (value) element.setAttribute(name, ""); else element.removeAttribute(name); return true; } default: throw new Error(`invalid attribute type for "${name}"`); } }, }); function on_change(element, handle_change) { const observer = new MutationObserver(handle_change); observer.observe(element, { attributes: true }); return () => observer.disconnect(); } Attributes.on_change = on_change; })(Attributes || (Attributes = {})); //# sourceMappingURL=attributes.js.map