diff --git a/dist/dde-with-signals.js b/dist/dde-with-signals.js index de4de9b..d5a5536 100644 --- a/dist/dde-with-signals.js +++ b/dist/dde-with-signals.js @@ -1,870 +1,668 @@ //deka-dom-el library is available via global namespace `dde` (()=> { // src/signals-common.js -var signals_global = { - isSignal(attributes) { - return false; +var T = { + isSignal(t) { + return !1; }, - processReactiveAttribute(obj, key, attr, set) { - return attr; + processReactiveAttribute(t, e, r, n) { + return r; } }; -function registerReactivity(def, global = true) { - if (global) return Object.assign(signals_global, def); - Object.setPrototypeOf(def, signals_global); - return def; +function H(t, e = !0) { + return e ? Object.assign(T, t) : (Object.setPrototypeOf(t, T), t); } -function signals(_this) { - return signals_global.isPrototypeOf(_this) && _this !== signals_global ? _this : signals_global; +function j(t) { + return T.isPrototypeOf(t) && t !== T ? t : T; } // src/helpers.js -var hasOwn = (...a) => Object.prototype.hasOwnProperty.call(...a); -function isUndef(value) { - return typeof value === "undefined"; +var I = (...t) => Object.prototype.hasOwnProperty.call(...t); +function S(t) { + return typeof t > "u"; } -function typeOf(v) { - const t = typeof v; - if (t !== "object") return t; - if (v === null) return "null"; - return Object.prototype.toString.call(v); +function X(t) { + let e = typeof t; + return e !== "object" ? e : t === null ? "null" : Object.prototype.toString.call(t); } -function onAbort(signal2, listener) { - if (!signal2 || !(signal2 instanceof AbortSignal)) - return true; - if (signal2.aborted) - return; - signal2.addEventListener("abort", listener); - return function cleanUp() { - signal2.removeEventListener("abort", listener); - }; +function P(t, e) { + if (!t || !(t instanceof AbortSignal)) + return !0; + if (!t.aborted) + return t.addEventListener("abort", e), function() { + t.removeEventListener("abort", e); + }; } -function observedAttributes(instance, observedAttribute2) { - const { observedAttributes: observedAttributes3 = [] } = instance.constructor; - return observedAttributes3.reduce(function(out, name) { - out[kebabToCamel(name)] = observedAttribute2(instance, name); - return out; +function W(t, e) { + let { observedAttributes: r = [] } = t.constructor; + return r.reduce(function(n, o) { + return n[dt(o)] = e(t, o), n; }, {}); } -function kebabToCamel(name) { - return name.replace(/-./g, (x) => x[1].toUpperCase()); +function dt(t) { + return t.replace(/-./g, (e) => e[1].toUpperCase()); } // src/dom-common.js -var enviroment = { - setDeleteAttr, +var d = { + setDeleteAttr: pt, ssr: "", D: globalThis.document, F: globalThis.DocumentFragment, H: globalThis.HTMLElement, S: globalThis.SVGElement, M: globalThis.MutationObserver, - q: (p) => p || Promise.resolve() + q: (t) => t || Promise.resolve() }; -function setDeleteAttr(obj, prop, val) { - Reflect.set(obj, prop, val); - if (!isUndef(val)) return; - Reflect.deleteProperty(obj, prop); - if (obj instanceof enviroment.H && obj.getAttribute(prop) === "undefined") - return obj.removeAttribute(prop); - if (Reflect.get(obj, prop) === "undefined") - return Reflect.set(obj, prop, ""); +function pt(t, e, r) { + if (Reflect.set(t, e, r), !!S(r)) { + if (Reflect.deleteProperty(t, e), t instanceof d.H && t.getAttribute(e) === "undefined") + return t.removeAttribute(e); + if (Reflect.get(t, e) === "undefined") + return Reflect.set(t, e, ""); + } } -var keyLTE = "__dde_lifecyclesToEvents"; -var evc = "dde:connected"; -var evd = "dde:disconnected"; -var eva = "dde:attributeChanged"; +var O = "__dde_lifecyclesToEvents", w = "dde:connected", y = "dde:disconnected", k = "dde:attributeChanged"; // src/dom.js -function queue(promise) { - return enviroment.q(promise); +function Mt(t) { + return d.q(t); } -var scopes = [{ +var A = [{ get scope() { - return enviroment.D.body; + return d.D.body; }, - host: (c) => c ? c(enviroment.D.body) : enviroment.D.body, - prevent: true -}]; -var scope = { + host: (t) => t ? t(d.D.body) : d.D.body, + prevent: !0 +}], x = { get current() { - return scopes[scopes.length - 1]; + return A[A.length - 1]; }, get host() { return this.current.host; }, preventDefault() { - const { current } = this; - current.prevent = true; - return current; + let { current: t } = this; + return t.prevent = !0, t; }, get state() { - return [...scopes]; + return [...A]; }, - push(s = {}) { - return scopes.push(Object.assign({}, this.current, { prevent: false }, s)); + push(t = {}) { + return A.push(Object.assign({}, this.current, { prevent: !1 }, t)); }, pushRoot() { - return scopes.push(scopes[0]); + return A.push(A[0]); }, pop() { - if (scopes.length === 1) return; - return scopes.pop(); + if (A.length !== 1) + return A.pop(); } }; -function append(...els) { - this.appendOriginal(...els); - return this; +function Y(...t) { + return this.appendOriginal(...t), this; } -function chainableAppend(el) { - if (el.append === append) return el; - el.appendOriginal = el.append; - el.append = append; - return el; +function lt(t) { + return t.append === Y || (t.appendOriginal = t.append, t.append = Y), t; } -var namespace; -function createElement(tag, attributes, ...addons) { - const s = signals(this); - let scoped = 0; - let el, el_host; - if (Object(attributes) !== attributes || s.isSignal(attributes)) - attributes = { textContent: attributes }; - switch (true) { - case typeof tag === "function": { - scoped = 1; - const host = (...c) => !c.length ? el_host : (scoped === 1 ? addons.unshift(...c) : c.forEach((c2) => c2(el_host)), void 0); - scope.push({ scope: tag, host }); - el = tag(attributes || void 0); - const is_fragment = el instanceof enviroment.F; - if (el.nodeName === "#comment") break; - const el_mark = createElement.mark({ +var $; +function M(t, e, ...r) { + let n = j(this), o = 0, c, u; + switch ((Object(e) !== e || n.isSignal(e)) && (e = { textContent: e }), !0) { + case typeof t == "function": { + o = 1; + let i = (...h) => h.length ? (o === 1 ? r.unshift(...h) : h.forEach((E) => E(u)), void 0) : u; + x.push({ scope: t, host: i }), c = t(e || void 0); + let p = c instanceof d.F; + if (c.nodeName === "#comment") break; + let v = M.mark({ type: "component", - name: tag.name, - host: is_fragment ? "this" : "parentElement" + name: t.name, + host: p ? "this" : "parentElement" }); - el.prepend(el_mark); - if (is_fragment) el_host = el_mark; + c.prepend(v), p && (u = v); break; } - case tag === "#text": - el = assign.call(this, enviroment.D.createTextNode(""), attributes); + case t === "#text": + c = q.call(this, d.D.createTextNode(""), e); break; - case (tag === "<>" || !tag): - el = assign.call(this, enviroment.D.createDocumentFragment(), attributes); + case (t === "<>" || !t): + c = q.call(this, d.D.createDocumentFragment(), e); break; - case Boolean(namespace): - el = assign.call(this, enviroment.D.createElementNS(namespace, tag), attributes); + case !!$: + c = q.call(this, d.D.createElementNS($, t), e); break; - case !el: - el = assign.call(this, enviroment.D.createElement(tag), attributes); + case !c: + c = q.call(this, d.D.createElement(t), e); } - chainableAppend(el); - if (!el_host) el_host = el; - addons.forEach((c) => c(el_host)); - if (scoped) scope.pop(); - scoped = 2; - return el; + return lt(c), u || (u = c), r.forEach((i) => i(u)), o && x.pop(), o = 2, c; } -createElement.mark = function(attrs, is_open = false) { - attrs = Object.entries(attrs).map(([n, v]) => n + `="${v}"`).join(" "); - const end = is_open ? "" : "/"; - const out = enviroment.D.createComment(``); - if (is_open) out.end = enviroment.D.createComment(""); - return out; +M.mark = function(t, e = !1) { + t = Object.entries(t).map(([o, c]) => o + `="${c}"`).join(" "); + let r = e ? "" : "/", n = d.D.createComment(``); + return e && (n.end = d.D.createComment("")), n; }; -function createElementNS(ns) { - const _this = this; - return function createElementNSCurried(...rest) { - namespace = ns; - const el = createElement.call(_this, ...rest); - namespace = void 0; - return el; +function jt(t) { + let e = this; + return function(...n) { + $ = t; + let o = M.call(e, ...n); + return $ = void 0, o; }; } -function simulateSlots(element, root = element) { - const mark_e = "\xB9\u2070", mark_s = "\u2713"; - const slots = Object.fromEntries( - Array.from(root.querySelectorAll("slot")).filter((s) => !s.name.endsWith(mark_e)).map((s) => [s.name += mark_e, s]) +function Pt(t, e = t) { + let r = "\xB9\u2070", n = "\u2713", o = Object.fromEntries( + Array.from(e.querySelectorAll("slot")).filter((c) => !c.name.endsWith(r)).map((c) => [c.name += r, c]) ); - element.append = new Proxy(element.append, { - apply(orig, _, els) { - if (els[0] === root) return orig.apply(element, els); - for (const el of els) { - const name = (el.slot || "") + mark_e; + if (t.append = new Proxy(t.append, { + apply(c, u, i) { + if (i[0] === e) return c.apply(t, i); + for (let p of i) { + let v = (p.slot || "") + r; try { - elementAttribute(el, "remove", "slot"); - } catch (_error) { + bt(p, "remove", "slot"); + } catch { } - const slot = slots[name]; - if (!slot) return; - if (!slot.name.startsWith(mark_s)) { - slot.childNodes.forEach((c) => c.remove()); - slot.name = mark_s + name; - } - slot.append(el); + let h = o[v]; + if (!h) return; + h.name.startsWith(n) || (h.childNodes.forEach((E) => E.remove()), h.name = n + v), h.append(p); } - element.append = orig; - return element; + return t.append = c, t; } - }); - if (element !== root) { - const els = Array.from(element.childNodes); - element.append(...els); + }), t !== e) { + let c = Array.from(t.childNodes); + t.append(...c); } - return root; + return e; } -var assign_context = /* @__PURE__ */ new WeakMap(); -var { setDeleteAttr: setDeleteAttr2 } = enviroment; -function assign(element, ...attributes) { - if (!attributes.length) return element; - assign_context.set(element, assignContext(element, this)); - for (const [key, value] of Object.entries(Object.assign({}, ...attributes))) - assignAttribute.call(this, element, key, value); - assign_context.delete(element); - return element; +var F = /* @__PURE__ */ new WeakMap(), { setDeleteAttr: tt } = d; +function q(t, ...e) { + if (!e.length) return t; + F.set(t, rt(t, this)); + for (let [r, n] of Object.entries(Object.assign({}, ...e))) + nt.call(this, t, r, n); + return F.delete(t), t; } -function assignAttribute(element, key, value) { - const { setRemoveAttr, s } = assignContext(element, this); - const _this = this; - value = s.processReactiveAttribute( - element, - key, - value, - (key2, value2) => assignAttribute.call(_this, element, key2, value2) +function nt(t, e, r) { + let { setRemoveAttr: n, s: o } = rt(t, this), c = this; + r = o.processReactiveAttribute( + t, + e, + r, + (i, p) => nt.call(c, t, i, p) ); - const [k] = key; - if ("=" === k) return setRemoveAttr(key.slice(1), value); - if ("." === k) return setDelete(element, key.slice(1), value); - if (/(aria|data)([A-Z])/.test(key)) { - key = key.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); - return setRemoveAttr(key, value); - } - if ("className" === key) key = "class"; - switch (key) { + let [u] = e; + if (u === "=") return n(e.slice(1), r); + if (u === ".") return et(t, e.slice(1), r); + if (/(aria|data)([A-Z])/.test(e)) + return e = e.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(), n(e, r); + switch (e === "className" && (e = "class"), e) { case "xlink:href": - return setRemoveAttr(key, value, "http://www.w3.org/1999/xlink"); + return n(e, r, "http://www.w3.org/1999/xlink"); case "textContent": - return setDeleteAttr2(element, key, value); + return tt(t, e, r); case "style": - if (typeof value !== "object") break; + if (typeof r != "object") break; /* falls through */ case "dataset": - return forEachEntries(s, key, element, value, setDelete.bind(null, element[key])); + return B(o, e, t, r, et.bind(null, t[e])); case "ariaset": - return forEachEntries(s, key, element, value, (key2, val) => setRemoveAttr("aria-" + key2, val)); + return B(o, e, t, r, (i, p) => n("aria-" + i, p)); case "classList": - return classListDeclarative.call(_this, element, value); + return ht.call(c, t, r); } - return isPropSetter(element, key) ? setDeleteAttr2(element, key, value) : setRemoveAttr(key, value); + return gt(t, e) ? tt(t, e, r) : n(e, r); } -function assignContext(element, _this) { - if (assign_context.has(element)) return assign_context.get(element); - const is_svg = element instanceof enviroment.S; - const setRemoveAttr = (is_svg ? setRemoveNS : setRemove).bind(null, element, "Attribute"); - const s = signals(_this); - return { setRemoveAttr, s }; +function rt(t, e) { + if (F.has(t)) return F.get(t); + let n = (t instanceof d.S ? mt : vt).bind(null, t, "Attribute"), o = j(e); + return { setRemoveAttr: n, s: o }; } -function classListDeclarative(element, toggle) { - const s = signals(this); - forEachEntries( - s, +function ht(t, e) { + let r = j(this); + return B( + r, "classList", - element, - toggle, - (class_name, val) => element.classList.toggle(class_name, val === -1 ? void 0 : Boolean(val)) - ); - return element; + t, + e, + (n, o) => t.classList.toggle(n, o === -1 ? void 0 : !!o) + ), t; } -function elementAttribute(element, op, key, value) { - if (element instanceof enviroment.H) - return element[op + "Attribute"](key, value); - return element[op + "AttributeNS"](null, key, value); +function bt(t, e, r, n) { + return t instanceof d.H ? t[e + "Attribute"](r, n) : t[e + "AttributeNS"](null, r, n); } -function isPropSetter(el, key) { - if (!(key in el)) return false; - const des = getPropDescriptor(el, key); - return !isUndef(des.set); +function gt(t, e) { + if (!(e in t)) return !1; + let r = ot(t, e); + return !S(r.set); } -function getPropDescriptor(p, key) { - p = Object.getPrototypeOf(p); - if (!p) return {}; - const des = Object.getOwnPropertyDescriptor(p, key); - if (!des) return getPropDescriptor(p, key); - return des; +function ot(t, e) { + if (t = Object.getPrototypeOf(t), !t) return {}; + let r = Object.getOwnPropertyDescriptor(t, e); + return r || ot(t, e); } -function forEachEntries(s, target, element, obj, cb) { - const S = String; - if (typeof obj !== "object" || obj === null) return; - return Object.entries(obj).forEach(function process([key, val]) { - if (!key) return; - key = new S(key); - key.target = target; - val = s.processReactiveAttribute(element, key, val, cb); - cb(key, val); - }); +function B(t, e, r, n, o) { + let c = String; + if (!(typeof n != "object" || n === null)) + return Object.entries(n).forEach(function([i, p]) { + i && (i = new c(i), i.target = e, p = t.processReactiveAttribute(r, i, p, o), o(i, p)); + }); } -function setRemove(obj, prop, key, val) { - return obj[(isUndef(val) ? "remove" : "set") + prop](key, val); +function vt(t, e, r, n) { + return t[(S(n) ? "remove" : "set") + e](r, n); } -function setRemoveNS(obj, prop, key, val, ns = null) { - return obj[(isUndef(val) ? "remove" : "set") + prop + "NS"](ns, key, val); +function mt(t, e, r, n, o = null) { + return t[(S(n) ? "remove" : "set") + e + "NS"](o, r, n); } -function setDelete(obj, key, val) { - Reflect.set(obj, key, val); - if (!isUndef(val)) return; - return Reflect.deleteProperty(obj, key); +function et(t, e, r) { + if (Reflect.set(t, e, r), !!S(r)) + return Reflect.deleteProperty(t, e); } // src/events-observer.js -var c_ch_o = enviroment.M ? connectionsChangesObserverConstructor() : new Proxy({}, { +var C = d.M ? Et() : new Proxy({}, { get() { return () => { }; } }); -function connectionsChangesObserverConstructor() { - const store = /* @__PURE__ */ new Map(); - let is_observing = false; - const observerListener = (stop2) => function(mutations) { - for (const mutation of mutations) { - if (mutation.type !== "childList") continue; - if (observerAdded(mutation.addedNodes, true)) { - stop2(); - continue; +function Et() { + let t = /* @__PURE__ */ new Map(), e = !1, r = (s) => function(f) { + for (let a of f) + if (a.type === "childList") { + if (h(a.addedNodes, !0)) { + s(); + continue; + } + E(a.removedNodes, !0) && s(); } - if (observerRemoved(mutation.removedNodes, true)) - stop2(); - } - }; - const observer = new enviroment.M(observerListener(stop)); + }, n = new d.M(r(i)); return { - observe(element) { - const o = new enviroment.M(observerListener(() => { + observe(s) { + let f = new d.M(r(() => { })); - o.observe(element, { childList: true, subtree: true }); - return () => o.disconnect(); + return f.observe(s, { childList: !0, subtree: !0 }), () => f.disconnect(); }, - onConnected(element, listener) { - start(); - const listeners = getElementStore(element); - if (listeners.connected.has(listener)) return; - listeners.connected.add(listener); - listeners.length_c += 1; + onConnected(s, f) { + u(); + let a = c(s); + a.connected.has(f) || (a.connected.add(f), a.length_c += 1); }, - offConnected(element, listener) { - if (!store.has(element)) return; - const ls = store.get(element); - if (!ls.connected.has(listener)) return; - ls.connected.delete(listener); - ls.length_c -= 1; - cleanWhenOff(element, ls); + offConnected(s, f) { + if (!t.has(s)) return; + let a = t.get(s); + a.connected.has(f) && (a.connected.delete(f), a.length_c -= 1, o(s, a)); }, - onDisconnected(element, listener) { - start(); - const listeners = getElementStore(element); - if (listeners.disconnected.has(listener)) return; - listeners.disconnected.add(listener); - listeners.length_d += 1; + onDisconnected(s, f) { + u(); + let a = c(s); + a.disconnected.has(f) || (a.disconnected.add(f), a.length_d += 1); }, - offDisconnected(element, listener) { - if (!store.has(element)) return; - const ls = store.get(element); - if (!ls.disconnected.has(listener)) return; - ls.disconnected.delete(listener); - ls.length_d -= 1; - cleanWhenOff(element, ls); + offDisconnected(s, f) { + if (!t.has(s)) return; + let a = t.get(s); + a.disconnected.has(f) && (a.disconnected.delete(f), a.length_d -= 1, o(s, a)); } }; - function cleanWhenOff(element, ls) { - if (ls.length_c || ls.length_d) - return; - store.delete(element); - stop(); + function o(s, f) { + f.length_c || f.length_d || (t.delete(s), i()); } - function getElementStore(element) { - if (store.has(element)) return store.get(element); - const out = { + function c(s) { + if (t.has(s)) return t.get(s); + let f = { connected: /* @__PURE__ */ new WeakSet(), length_c: 0, disconnected: /* @__PURE__ */ new WeakSet(), length_d: 0 }; - store.set(element, out); - return out; + return t.set(s, f), f; } - function start() { - if (is_observing) return; - is_observing = true; - observer.observe(enviroment.D.body, { childList: true, subtree: true }); + function u() { + e || (e = !0, n.observe(d.D.body, { childList: !0, subtree: !0 })); } - function stop() { - if (!is_observing || store.size) return; - is_observing = false; - observer.disconnect(); + function i() { + !e || t.size || (e = !1, n.disconnect()); } - function requestIdle() { - return new Promise(function(resolve) { - (requestIdleCallback || requestAnimationFrame)(resolve); + function p() { + return new Promise(function(s) { + (requestIdleCallback || requestAnimationFrame)(s); }); } - async function collectChildren(element) { - if (store.size > 30) - await requestIdle(); - const out = []; - if (!(element instanceof Node)) return out; - for (const el of store.keys()) { - if (el === element || !(el instanceof Node)) continue; - if (element.contains(el)) - out.push(el); - } - return out; + async function v(s) { + t.size > 30 && await p(); + let f = []; + if (!(s instanceof Node)) return f; + for (let a of t.keys()) + a === s || !(a instanceof Node) || s.contains(a) && f.push(a); + return f; } - function observerAdded(addedNodes, is_root) { - let out = false; - for (const element of addedNodes) { - if (is_root) collectChildren(element).then(observerAdded); - if (!store.has(element)) continue; - const ls = store.get(element); - if (!ls.length_c) continue; - element.dispatchEvent(new Event(evc)); - ls.connected = /* @__PURE__ */ new WeakSet(); - ls.length_c = 0; - if (!ls.length_d) store.delete(element); - out = true; + function h(s, f) { + let a = !1; + for (let b of s) { + if (f && v(b).then(h), !t.has(b)) continue; + let N = t.get(b); + N.length_c && (b.dispatchEvent(new Event(w)), N.connected = /* @__PURE__ */ new WeakSet(), N.length_c = 0, N.length_d || t.delete(b), a = !0); } - return out; + return a; } - function observerRemoved(removedNodes, is_root) { - let out = false; - for (const element of removedNodes) { - if (is_root) collectChildren(element).then(observerRemoved); - if (!store.has(element)) continue; - const ls = store.get(element); - if (!ls.length_d) continue; - (globalThis.queueMicrotask || setTimeout)(dispatchRemove(element)); - out = true; - } - return out; + function E(s, f) { + let a = !1; + for (let b of s) + f && v(b).then(E), !(!t.has(b) || !t.get(b).length_d) && ((globalThis.queueMicrotask || setTimeout)(L(b)), a = !0); + return a; } - function dispatchRemove(element) { + function L(s) { return () => { - if (element.isConnected) return; - element.dispatchEvent(new Event(evd)); - store.delete(element); + s.isConnected || (s.dispatchEvent(new Event(y)), t.delete(s)); }; } } // src/customElement.js -function customElementRender(target, render, props = observedAttributes2) { - const custom_element = target.host || target; - scope.push({ - scope: custom_element, - host: (...c) => c.length ? c.forEach((c2) => c2(custom_element)) : custom_element - }); - if (typeof props === "function") props = props.call(custom_element, custom_element); - const is_lte = custom_element[keyLTE]; - if (!is_lte) lifecyclesToEvents(custom_element); - const out = render.call(custom_element, props); - if (!is_lte) custom_element.dispatchEvent(new Event(evc)); - if (target.nodeType === 11 && typeof target.mode === "string") - custom_element.addEventListener(evd, c_ch_o.observe(target), { once: true }); - scope.pop(); - return target.append(out); +function It(t, e, r = _t) { + let n = t.host || t; + x.push({ + scope: n, + host: (...u) => u.length ? u.forEach((i) => i(n)) : n + }), typeof r == "function" && (r = r.call(n, n)); + let o = n[O]; + o || xt(n); + let c = e.call(n, r); + return o || n.dispatchEvent(new Event(w)), t.nodeType === 11 && typeof t.mode == "string" && n.addEventListener(y, C.observe(t), { once: !0 }), x.pop(), t.append(c); } -function lifecyclesToEvents(class_declaration) { - wrapMethod(class_declaration.prototype, "connectedCallback", function(target, thisArg, detail) { - target.apply(thisArg, detail); - thisArg.dispatchEvent(new Event(evc)); - }); - wrapMethod(class_declaration.prototype, "disconnectedCallback", function(target, thisArg, detail) { - target.apply(thisArg, detail); - (globalThis.queueMicrotask || setTimeout)( - () => !thisArg.isConnected && thisArg.dispatchEvent(new Event(evd)) +function xt(t) { + return J(t.prototype, "connectedCallback", function(e, r, n) { + e.apply(r, n), r.dispatchEvent(new Event(w)); + }), J(t.prototype, "disconnectedCallback", function(e, r, n) { + e.apply(r, n), (globalThis.queueMicrotask || setTimeout)( + () => !r.isConnected && r.dispatchEvent(new Event(y)) ); - }); - wrapMethod(class_declaration.prototype, "attributeChangedCallback", function(target, thisArg, detail) { - const [attribute, , value] = detail; - thisArg.dispatchEvent(new CustomEvent(eva, { - detail: [attribute, value] - })); - target.apply(thisArg, detail); - }); - class_declaration.prototype[keyLTE] = true; - return class_declaration; + }), J(t.prototype, "attributeChangedCallback", function(e, r, n) { + let [o, , c] = n; + r.dispatchEvent(new CustomEvent(k, { + detail: [o, c] + })), e.apply(r, n); + }), t.prototype[O] = !0, t; } -function wrapMethod(obj, method, apply) { - obj[method] = new Proxy(obj[method] || (() => { - }), { apply }); +function J(t, e, r) { + t[e] = new Proxy(t[e] || (() => { + }), { apply: r }); } -function observedAttributes2(instance) { - return observedAttributes(instance, (i, n) => i.getAttribute(n)); +function _t(t) { + return W(t, (e, r) => e.getAttribute(r)); } // src/events.js -function dispatchEvent(name, options, host) { - if (!options) options = {}; - return function dispatch(element, ...d) { - if (host) { - d.unshift(element); - element = typeof host === "function" ? host() : host; - } - const event = d.length ? new CustomEvent(name, Object.assign({ detail: d[0] }, options)) : new Event(name, options); - return element.dispatchEvent(event); +function Gt(t, e, r) { + return e || (e = {}), function(o, ...c) { + r && (c.unshift(o), o = typeof r == "function" ? r() : r); + let u = c.length ? new CustomEvent(t, Object.assign({ detail: c[0] }, e)) : new Event(t, e); + return o.dispatchEvent(u); }; } -function on(event, listener, options) { - return function registerElement(element) { - element.addEventListener(event, listener, options); - return element; +function _(t, e, r) { + return function(o) { + return o.addEventListener(t, e, r), o; }; } -var lifeOptions = (obj) => Object.assign({}, typeof obj === "object" ? obj : null, { once: true }); -on.connected = function(listener, options) { - options = lifeOptions(options); - return function registerElement(element) { - element.addEventListener(evc, listener, options); - if (element[keyLTE]) return element; - if (element.isConnected) return element.dispatchEvent(new Event(evc)), element; - const c = onAbort(options.signal, () => c_ch_o.offConnected(element, listener)); - if (c) c_ch_o.onConnected(element, listener); - return element; +var ct = (t) => Object.assign({}, typeof t == "object" ? t : null, { once: !0 }); +_.connected = function(t, e) { + return e = ct(e), function(n) { + return n.addEventListener(w, t, e), n[O] ? n : n.isConnected ? (n.dispatchEvent(new Event(w)), n) : (P(e.signal, () => C.offConnected(n, t)) && C.onConnected(n, t), n); }; }; -on.disconnected = function(listener, options) { - options = lifeOptions(options); - return function registerElement(element) { - element.addEventListener(evd, listener, options); - if (element[keyLTE]) return element; - const c = onAbort(options.signal, () => c_ch_o.offDisconnected(element, listener)); - if (c) c_ch_o.onDisconnected(element, listener); - return element; +_.disconnected = function(t, e) { + return e = ct(e), function(n) { + return n.addEventListener(y, t, e), n[O] || P(e.signal, () => C.offDisconnected(n, t)) && C.onDisconnected(n, t), n; }; }; -var store_abort = /* @__PURE__ */ new WeakMap(); -on.disconnectedAsAbort = function(host) { - if (store_abort.has(host)) return store_abort.get(host); - const a = new AbortController(); - store_abort.set(host, a); - host(on.disconnected(() => a.abort())); - return a; +var Z = /* @__PURE__ */ new WeakMap(); +_.disconnectedAsAbort = function(t) { + if (Z.has(t)) return Z.get(t); + let e = new AbortController(); + return Z.set(t, e), t(_.disconnected(() => e.abort())), e; }; -var els_attribute_store = /* @__PURE__ */ new WeakSet(); -on.attributeChanged = function(listener, options) { - if (typeof options !== "object") - options = {}; - return function registerElement(element) { - element.addEventListener(eva, listener, options); - if (element[keyLTE] || els_attribute_store.has(element)) - return element; - if (!enviroment.M) return element; - const observer = new enviroment.M(function(mutations) { - for (const { attributeName, target } of mutations) - target.dispatchEvent( - new CustomEvent(eva, { detail: [attributeName, target.getAttribute(attributeName)] }) +var wt = /* @__PURE__ */ new WeakSet(); +_.attributeChanged = function(t, e) { + return typeof e != "object" && (e = {}), function(n) { + if (n.addEventListener(k, t, e), n[O] || wt.has(n) || !d.M) return n; + let o = new d.M(function(u) { + for (let { attributeName: i, target: p } of u) + p.dispatchEvent( + new CustomEvent(k, { detail: [i, p.getAttribute(i)] }) ); }); - const c = onAbort(options.signal, () => observer.disconnect()); - if (c) observer.observe(element, { attributes: true }); - return element; + return P(e.signal, () => o.disconnect()) && o.observe(n, { attributes: !0 }), n; }; }; // src/signals-lib.js -var mark = "__dde_signal"; -function isSignal(candidate) { +var l = "__dde_signal"; +function U(t) { try { - return hasOwn(candidate, mark); - } catch (e) { - return false; + return I(t, l); + } catch { + return !1; } } -var stack_watch = []; -var deps = /* @__PURE__ */ new WeakMap(); -function signal(value, actions) { - if (typeof value !== "function") - return create(false, value, actions); - if (isSignal(value)) return value; - const out = create(true); - const contextReWatch = function() { - const [origin, ...deps_old] = deps.get(contextReWatch); - deps.set(contextReWatch, /* @__PURE__ */ new Set([origin])); - stack_watch.push(contextReWatch); - write(out, value()); - stack_watch.pop(); - if (!deps_old.length) return; - const deps_curr = deps.get(contextReWatch); - for (const dep_signal of deps_old) { - if (deps_curr.has(dep_signal)) continue; - removeSignalListener(dep_signal, contextReWatch); - } +var z = [], g = /* @__PURE__ */ new WeakMap(); +function m(t, e) { + if (typeof t != "function") + return it(!1, t, e); + if (U(t)) return t; + let r = it(!0), n = function() { + let [o, ...c] = g.get(n); + if (g.set(n, /* @__PURE__ */ new Set([o])), z.push(n), at(r, t()), z.pop(), !c.length) return; + let u = g.get(n); + for (let i of c) + u.has(i) || R(i, n); }; - deps.set(out[mark], contextReWatch); - deps.set(contextReWatch, /* @__PURE__ */ new Set([out])); - contextReWatch(); - return out; + return g.set(r[l], n), g.set(n, /* @__PURE__ */ new Set([r])), n(), r; } -signal.action = function(s, name, ...a) { - const M = s[mark], { actions } = M; - if (!actions || !(name in actions)) - throw new Error(`'${s}' has no action with name '${name}'!`); - actions[name].apply(M, a); - if (M.skip) return delete M.skip; - M.listeners.forEach((l) => l(M.value)); +m.action = function(t, e, ...r) { + let n = t[l], { actions: o } = n; + if (!o || !(e in o)) + throw new Error(`'${t}' has no action with name '${e}'!`); + if (o[e].apply(n, r), n.skip) return delete n.skip; + n.listeners.forEach((c) => c(n.value)); }; -signal.on = function on2(s, listener, options = {}) { - const { signal: as } = options; - if (as && as.aborted) return; - if (Array.isArray(s)) return s.forEach((s2) => on2(s2, listener, options)); - addSignalListener(s, listener); - if (as) as.addEventListener("abort", () => removeSignalListener(s, listener)); +m.on = function t(e, r, n = {}) { + let { signal: o } = n; + if (!(o && o.aborted)) { + if (Array.isArray(e)) return e.forEach((c) => t(c, r, n)); + Q(e, r), o && o.addEventListener("abort", () => R(e, r)); + } }; -signal.symbols = { +m.symbols = { //signal: mark, onclear: Symbol.for("Signal.onclear") }; -signal.clear = function(...signals2) { - for (const s of signals2) { - const M = s[mark]; - if (!M) continue; - delete s.toJSON; - M.onclear.forEach((f) => f.call(M)); - clearListDeps(s, M); - delete s[mark]; +m.clear = function(...t) { + for (let r of t) { + let n = r[l]; + n && (delete r.toJSON, n.onclear.forEach((o) => o.call(n)), e(r, n), delete r[l]); } - function clearListDeps(s, o) { - o.listeners.forEach((l) => { - o.listeners.delete(l); - if (!deps.has(l)) return; - const ls = deps.get(l); - ls.delete(s); - if (ls.size > 1) return; - s.clear(...ls); - deps.delete(l); + function e(r, n) { + n.listeners.forEach((o) => { + if (n.listeners.delete(o), !g.has(o)) return; + let c = g.get(o); + c.delete(r), !(c.size > 1) && (r.clear(...c), g.delete(o)); }); } }; -var key_reactive = "__dde_reactive"; -signal.el = function(s, map) { - const mark_start = createElement.mark({ type: "reactive" }, true); - const mark_end = mark_start.end; - const out = enviroment.D.createDocumentFragment(); - out.append(mark_start, mark_end); - const { current } = scope; - let cache = {}; - const reRenderReactiveElement = (v) => { - if (!mark_start.parentNode || !mark_end.parentNode) - return removeSignalListener(s, reRenderReactiveElement); - const cache_tmp = cache; - cache = {}; - scope.push(current); - let els = map(v, function useCache(key, fun) { - let value; - if (hasOwn(cache_tmp, key)) { - value = cache_tmp[key]; - delete cache_tmp[key]; - } else - value = fun(); - cache[key] = value; - return value; +var D = "__dde_reactive"; +m.el = function(t, e) { + let r = M.mark({ type: "reactive" }, !0), n = r.end, o = d.D.createDocumentFragment(); + o.append(r, n); + let { current: c } = x, u = {}, i = (p) => { + if (!r.parentNode || !n.parentNode) + return R(t, i); + let v = u; + u = {}, x.push(c); + let h = e(p, function(f, a) { + let b; + return I(v, f) ? (b = v[f], delete v[f]) : b = a(), u[f] = b, b; }); - scope.pop(); - if (!Array.isArray(els)) - els = [els]; - const el_start_rm = document.createComment(""); - els.push(el_start_rm); - mark_start.after(...els); - let el_r; - while ((el_r = el_start_rm.nextSibling) && el_r !== mark_end) - el_r.remove(); - el_start_rm.remove(); - if (mark_start.isConnected) - requestCleanUpReactives(current.host()); + x.pop(), Array.isArray(h) || (h = [h]); + let E = document.createComment(""); + h.push(E), r.after(...h); + let L; + for (; (L = E.nextSibling) && L !== n; ) + L.remove(); + E.remove(), r.isConnected && At(c.host()); }; - addSignalListener(s, reRenderReactiveElement); - removeSignalsFromElements(s, reRenderReactiveElement, mark_start, map); - reRenderReactiveElement(s()); - return out; + return Q(t, i), ut(t, i, r, e), i(t()), o; }; -function requestCleanUpReactives(host) { - if (!host || !host[key_reactive]) return; - (requestIdleCallback || setTimeout)(function() { - host[key_reactive] = host[key_reactive].filter(([s, el]) => el.isConnected ? true : (removeSignalListener(...s), false)); +function At(t) { + !t || !t[D] || (requestIdleCallback || setTimeout)(function() { + t[D] = t[D].filter(([e, r]) => r.isConnected ? !0 : (R(...e), !1)); }); } -var observedAttributeActions = { - _set(value) { - this.value = value; +var St = { + _set(t) { + this.value = t; } }; -function observedAttribute(store) { - return function(instance, name) { - const varS = (...args) => !args.length ? read(varS) : instance.setAttribute(name, ...args); - const out = toSignal(varS, instance.getAttribute(name), observedAttributeActions); - store[name] = out; - return out; +function Ot(t) { + return function(e, r) { + let n = (...c) => c.length ? e.setAttribute(r, ...c) : K(n), o = ft(n, e.getAttribute(r), St); + return t[r] = o, o; }; } -var key_attributes = "__dde_attributes"; -signal.observedAttributes = function(element) { - const store = element[key_attributes] = {}; - const attrs = observedAttributes(element, observedAttribute(store)); - on.attributeChanged(function attributeChangeToSignal({ detail }) { +var G = "__dde_attributes"; +m.observedAttributes = function(t) { + let e = t[G] = {}, r = W(t, Ot(e)); + return _.attributeChanged(function({ detail: o }) { /*! This maps attributes to signals (`S.observedAttributes`). * Investigate `__dde_attributes` key of the element.*/ - const [name, value] = detail; - const curr = this[key_attributes][name]; - if (curr) return signal.action(curr, "_set", value); - })(element); - on.disconnected(function() { + let [c, u] = o, i = this[G][c]; + if (i) return m.action(i, "_set", u); + })(t), _.disconnected(function() { /*! This removes all signals mapped to attributes (`S.observedAttributes`). * Investigate `__dde_attributes` key of the element.*/ - signal.clear(...Object.values(this[key_attributes])); - })(element); - return attrs; + m.clear(...Object.values(this[G])); + })(t), r; }; -var signals_config = { - isSignal, - processReactiveAttribute(element, key, attrs, set) { - if (!isSignal(attrs)) return attrs; - const l = (attr) => { - if (!element.isConnected) - return removeSignalListener(attrs, l); - set(key, attr); +var st = { + isSignal: U, + processReactiveAttribute(t, e, r, n) { + if (!U(r)) return r; + let o = (c) => { + if (!t.isConnected) + return R(r, o); + n(e, c); }; - addSignalListener(attrs, l); - removeSignalsFromElements(attrs, l, element, key); - return attrs(); + return Q(r, o), ut(r, o, t, e), r(); } }; -function removeSignalsFromElements(s, listener, ...notes) { - const { current } = scope; - if (current.prevent) return; - current.host(function(element) { - if (!element[key_reactive]) { - element[key_reactive] = []; - on.disconnected( - () => ( - /*! - * Clears all Signals listeners added in the current scope/host (`S.el`, `assign`, …?). - * You can investigate the `__dde_reactive` key of the element. - * */ - element[key_reactive].forEach(([[s2, listener2]]) => removeSignalListener(s2, listener2, s2[mark] && s2[mark].host && s2[mark].host() === element)) - ) - )(element); - } - element[key_reactive].push([[s, listener], ...notes]); +function ut(t, e, ...r) { + let { current: n } = x; + n.prevent || n.host(function(o) { + o[D] || (o[D] = [], _.disconnected( + () => ( + /*! + * Clears all Signals listeners added in the current scope/host (`S.el`, `assign`, …?). + * You can investigate the `__dde_reactive` key of the element. + * */ + o[D].forEach(([[c, u]]) => R(c, u, c[l] && c[l].host && c[l].host() === o)) + ) + )(o)), o[D].push([[t, e], ...r]); }); } -function create(is_readonly, value, actions) { - const varS = is_readonly ? () => read(varS) : (...value2) => value2.length ? write(varS, ...value2) : read(varS); - return toSignal(varS, value, actions, is_readonly); +function it(t, e, r) { + let n = t ? () => K(n) : (...o) => o.length ? at(n, ...o) : K(n); + return ft(n, e, r, t); } -var protoSigal = Object.assign(/* @__PURE__ */ Object.create(null), { +var yt = Object.assign(/* @__PURE__ */ Object.create(null), { stopPropagation() { - this.skip = true; + this.skip = !0; } -}); -var SignalDefined = class extends Error { +}), V = class extends Error { constructor() { super(); - const [curr, ...rest] = this.stack.split("\n"); - const curr_file = curr.slice(curr.indexOf("@"), curr.indexOf(".js:") + 4); - this.stack = rest.find((l) => !l.includes(curr_file)); + let [e, ...r] = this.stack.split(` +`), n = e.slice(e.indexOf("@"), e.indexOf(".js:") + 4); + this.stack = r.find((o) => !o.includes(n)); } }; -function toSignal(s, value, actions, readonly = false) { - const onclear = []; - if (typeOf(actions) !== "[object Object]") - actions = {}; - const { onclear: ocs } = signal.symbols; - if (actions[ocs]) { - onclear.push(actions[ocs]); - delete actions[ocs]; - } - const { host } = scope; - Reflect.defineProperty(s, mark, { +function ft(t, e, r, n = !1) { + let o = []; + X(r) !== "[object Object]" && (r = {}); + let { onclear: c } = m.symbols; + r[c] && (o.push(r[c]), delete r[c]); + let { host: u } = x; + return Reflect.defineProperty(t, l, { value: { - value, - actions, - onclear, - host, + value: e, + actions: r, + onclear: o, + host: u, listeners: /* @__PURE__ */ new Set(), - defined: new SignalDefined().stack, - readonly + defined: new V().stack, + readonly: n }, - enumerable: false, - writable: false, - configurable: true - }); - s.toJSON = () => s(); - s.valueOf = () => s[mark] && s[mark].value; - Object.setPrototypeOf(s[mark], protoSigal); - return s; + enumerable: !1, + writable: !1, + configurable: !0 + }), t.toJSON = () => t(), t.valueOf = () => t[l] && t[l].value, Object.setPrototypeOf(t[l], yt), t; } -function currentContext() { - return stack_watch[stack_watch.length - 1]; +function Ct() { + return z[z.length - 1]; } -function read(s) { - if (!s[mark]) return; - const { value, listeners } = s[mark]; - const context = currentContext(); - if (context) listeners.add(context); - if (deps.has(context)) deps.get(context).add(s); - return value; +function K(t) { + if (!t[l]) return; + let { value: e, listeners: r } = t[l], n = Ct(); + return n && r.add(n), g.has(n) && g.get(n).add(t), e; } -function write(s, value, force) { - if (!s[mark]) return; - const M = s[mark]; - if (!force && M.value === value) return; - M.value = value; - M.listeners.forEach((l) => l(value)); - return value; +function at(t, e, r) { + if (!t[l]) return; + let n = t[l]; + if (!(!r && n.value === e)) + return n.value = e, n.listeners.forEach((o) => o(e)), e; } -function addSignalListener(s, listener) { - if (!s[mark]) return; - return s[mark].listeners.add(listener); +function Q(t, e) { + if (t[l]) + return t[l].listeners.add(e); } -function removeSignalListener(s, listener, clear_when_empty) { - const M = s[mark]; - if (!M) return; - const out = M.listeners.delete(listener); - if (clear_when_empty && !M.listeners.size) { - signal.clear(s); - if (!deps.has(M)) return out; - const c = deps.get(M); - if (!deps.has(c)) return out; - deps.get(c).forEach((sig) => removeSignalListener(sig, c, true)); +function R(t, e, r) { + let n = t[l]; + if (!n) return; + let o = n.listeners.delete(e); + if (r && !n.listeners.size) { + if (m.clear(t), !g.has(n)) return o; + let c = g.get(n); + if (!g.has(c)) return o; + g.get(c).forEach((u) => R(u, c, !0)); } - return out; + return o; } // signals.js -registerReactivity(signals_config); +H(st); globalThis.dde= { - S: signal, - assign, - assignAttribute, - chainableAppend, - classListDeclarative, - createElement, - createElementNS, - customElementRender, - customElementWithDDE: lifecyclesToEvents, - dispatchEvent, - el: createElement, - elNS: createElementNS, - elementAttribute, - isSignal, - lifecyclesToEvents, - observedAttributes: observedAttributes2, - on, - queue, - registerReactivity, - scope, - signal, - simulateSlots + S: m, + assign: q, + assignAttribute: nt, + chainableAppend: lt, + classListDeclarative: ht, + createElement: M, + createElementNS: jt, + customElementRender: It, + customElementWithDDE: xt, + dispatchEvent: Gt, + el: M, + elNS: jt, + elementAttribute: bt, + isSignal: U, + lifecyclesToEvents: xt, + observedAttributes: _t, + on: _, + queue: Mt, + registerReactivity: H, + scope: x, + signal: m, + simulateSlots: Pt }; })(); \ No newline at end of file diff --git a/dist/dde.js b/dist/dde.js index 202ef1a..6a2b3e9 100644 --- a/dist/dde.js +++ b/dist/dde.js @@ -1,588 +1,456 @@ //deka-dom-el library is available via global namespace `dde` (()=> { // src/signals-common.js -var signals_global = { - isSignal(attributes) { - return false; +var C = { + isSignal(t) { + return !1; }, - processReactiveAttribute(obj, key, attr, set) { - return attr; + processReactiveAttribute(t, e, r, n) { + return r; } }; -function registerReactivity(def, global = true) { - if (global) return Object.assign(signals_global, def); - Object.setPrototypeOf(def, signals_global); - return def; +function Z(t, e = !0) { + return e ? Object.assign(C, t) : (Object.setPrototypeOf(t, C), t); } -function signals(_this) { - return signals_global.isPrototypeOf(_this) && _this !== signals_global ? _this : signals_global; +function S(t) { + return C.isPrototypeOf(t) && t !== C ? t : C; } // src/helpers.js -function isUndef(value) { - return typeof value === "undefined"; +function m(t) { + return typeof t > "u"; } -function onAbort(signal, listener) { - if (!signal || !(signal instanceof AbortSignal)) - return true; - if (signal.aborted) - return; - signal.addEventListener("abort", listener); - return function cleanUp() { - signal.removeEventListener("abort", listener); - }; +function L(t, e) { + if (!t || !(t instanceof AbortSignal)) + return !0; + if (!t.aborted) + return t.addEventListener("abort", e), function() { + t.removeEventListener("abort", e); + }; } -function observedAttributes(instance, observedAttribute) { - const { observedAttributes: observedAttributes3 = [] } = instance.constructor; - return observedAttributes3.reduce(function(out, name) { - out[kebabToCamel(name)] = observedAttribute(instance, name); - return out; +function q(t, e) { + let { observedAttributes: r = [] } = t.constructor; + return r.reduce(function(n, o) { + return n[G(o)] = e(t, o), n; }, {}); } -function kebabToCamel(name) { - return name.replace(/-./g, (x) => x[1].toUpperCase()); +function G(t) { + return t.replace(/-./g, (e) => e[1].toUpperCase()); } // src/dom-common.js -var enviroment = { - setDeleteAttr, +var a = { + setDeleteAttr: V, ssr: "", D: globalThis.document, F: globalThis.DocumentFragment, H: globalThis.HTMLElement, S: globalThis.SVGElement, M: globalThis.MutationObserver, - q: (p) => p || Promise.resolve() + q: (t) => t || Promise.resolve() }; -function setDeleteAttr(obj, prop, val) { - Reflect.set(obj, prop, val); - if (!isUndef(val)) return; - Reflect.deleteProperty(obj, prop); - if (obj instanceof enviroment.H && obj.getAttribute(prop) === "undefined") - return obj.removeAttribute(prop); - if (Reflect.get(obj, prop) === "undefined") - return Reflect.set(obj, prop, ""); +function V(t, e, r) { + if (Reflect.set(t, e, r), !!m(r)) { + if (Reflect.deleteProperty(t, e), t instanceof a.H && t.getAttribute(e) === "undefined") + return t.removeAttribute(e); + if (Reflect.get(t, e) === "undefined") + return Reflect.set(t, e, ""); + } } -var keyLTE = "__dde_lifecyclesToEvents"; -var evc = "dde:connected"; -var evd = "dde:disconnected"; -var eva = "dde:attributeChanged"; +var x = "__dde_lifecyclesToEvents", v = "dde:connected", w = "dde:disconnected", y = "dde:attributeChanged"; // src/dom.js -function queue(promise) { - return enviroment.q(promise); +function dt(t) { + return a.q(t); } -var scopes = [{ +var g = [{ get scope() { - return enviroment.D.body; + return a.D.body; }, - host: (c) => c ? c(enviroment.D.body) : enviroment.D.body, - prevent: true -}]; -var scope = { + host: (t) => t ? t(a.D.body) : a.D.body, + prevent: !0 +}], O = { get current() { - return scopes[scopes.length - 1]; + return g[g.length - 1]; }, get host() { return this.current.host; }, preventDefault() { - const { current } = this; - current.prevent = true; - return current; + let { current: t } = this; + return t.prevent = !0, t; }, get state() { - return [...scopes]; + return [...g]; }, - push(s = {}) { - return scopes.push(Object.assign({}, this.current, { prevent: false }, s)); + push(t = {}) { + return g.push(Object.assign({}, this.current, { prevent: !1 }, t)); }, pushRoot() { - return scopes.push(scopes[0]); + return g.push(g[0]); }, pop() { - if (scopes.length === 1) return; - return scopes.pop(); + if (g.length !== 1) + return g.pop(); } }; -function append(...els) { - this.appendOriginal(...els); - return this; +function k(...t) { + return this.appendOriginal(...t), this; } -function chainableAppend(el) { - if (el.append === append) return el; - el.appendOriginal = el.append; - el.append = append; - return el; +function J(t) { + return t.append === k || (t.appendOriginal = t.append, t.append = k), t; } -var namespace; -function createElement(tag, attributes, ...addons) { - const s = signals(this); - let scoped = 0; - let el, el_host; - if (Object(attributes) !== attributes || s.isSignal(attributes)) - attributes = { textContent: attributes }; - switch (true) { - case typeof tag === "function": { - scoped = 1; - const host = (...c) => !c.length ? el_host : (scoped === 1 ? addons.unshift(...c) : c.forEach((c2) => c2(el_host)), void 0); - scope.push({ scope: tag, host }); - el = tag(attributes || void 0); - const is_fragment = el instanceof enviroment.F; - if (el.nodeName === "#comment") break; - const el_mark = createElement.mark({ +var T; +function P(t, e, ...r) { + let n = S(this), o = 0, c, d; + switch ((Object(e) !== e || n.isSignal(e)) && (e = { textContent: e }), !0) { + case typeof t == "function": { + o = 1; + let f = (...l) => l.length ? (o === 1 ? r.unshift(...l) : l.forEach((E) => E(d)), void 0) : d; + O.push({ scope: t, host: f }), c = t(e || void 0); + let p = c instanceof a.F; + if (c.nodeName === "#comment") break; + let b = P.mark({ type: "component", - name: tag.name, - host: is_fragment ? "this" : "parentElement" + name: t.name, + host: p ? "this" : "parentElement" }); - el.prepend(el_mark); - if (is_fragment) el_host = el_mark; + c.prepend(b), p && (d = b); break; } - case tag === "#text": - el = assign.call(this, enviroment.D.createTextNode(""), attributes); + case t === "#text": + c = R.call(this, a.D.createTextNode(""), e); break; - case (tag === "<>" || !tag): - el = assign.call(this, enviroment.D.createDocumentFragment(), attributes); + case (t === "<>" || !t): + c = R.call(this, a.D.createDocumentFragment(), e); break; - case Boolean(namespace): - el = assign.call(this, enviroment.D.createElementNS(namespace, tag), attributes); + case !!T: + c = R.call(this, a.D.createElementNS(T, t), e); break; - case !el: - el = assign.call(this, enviroment.D.createElement(tag), attributes); + case !c: + c = R.call(this, a.D.createElement(t), e); } - chainableAppend(el); - if (!el_host) el_host = el; - addons.forEach((c) => c(el_host)); - if (scoped) scope.pop(); - scoped = 2; - return el; + return J(c), d || (d = c), r.forEach((f) => f(d)), o && O.pop(), o = 2, c; } -createElement.mark = function(attrs, is_open = false) { - attrs = Object.entries(attrs).map(([n, v]) => n + `="${v}"`).join(" "); - const end = is_open ? "" : "/"; - const out = enviroment.D.createComment(``); - if (is_open) out.end = enviroment.D.createComment(""); - return out; +P.mark = function(t, e = !1) { + t = Object.entries(t).map(([o, c]) => o + `="${c}"`).join(" "); + let r = e ? "" : "/", n = a.D.createComment(``); + return e && (n.end = a.D.createComment("")), n; }; -function createElementNS(ns) { - const _this = this; - return function createElementNSCurried(...rest) { - namespace = ns; - const el = createElement.call(_this, ...rest); - namespace = void 0; - return el; +function pt(t) { + let e = this; + return function(...n) { + T = t; + let o = P.call(e, ...n); + return T = void 0, o; }; } -function simulateSlots(element, root = element) { - const mark_e = "\xB9\u2070", mark_s = "\u2713"; - const slots = Object.fromEntries( - Array.from(root.querySelectorAll("slot")).filter((s) => !s.name.endsWith(mark_e)).map((s) => [s.name += mark_e, s]) +function lt(t, e = t) { + let r = "\xB9\u2070", n = "\u2713", o = Object.fromEntries( + Array.from(e.querySelectorAll("slot")).filter((c) => !c.name.endsWith(r)).map((c) => [c.name += r, c]) ); - element.append = new Proxy(element.append, { - apply(orig, _, els) { - if (els[0] === root) return orig.apply(element, els); - for (const el of els) { - const name = (el.slot || "") + mark_e; + if (t.append = new Proxy(t.append, { + apply(c, d, f) { + if (f[0] === e) return c.apply(t, f); + for (let p of f) { + let b = (p.slot || "") + r; try { - elementAttribute(el, "remove", "slot"); - } catch (_error) { + Q(p, "remove", "slot"); + } catch { } - const slot = slots[name]; - if (!slot) return; - if (!slot.name.startsWith(mark_s)) { - slot.childNodes.forEach((c) => c.remove()); - slot.name = mark_s + name; - } - slot.append(el); + let l = o[b]; + if (!l) return; + l.name.startsWith(n) || (l.childNodes.forEach((E) => E.remove()), l.name = n + b), l.append(p); } - element.append = orig; - return element; + return t.append = c, t; } - }); - if (element !== root) { - const els = Array.from(element.childNodes); - element.append(...els); + }), t !== e) { + let c = Array.from(t.childNodes); + t.append(...c); } - return root; + return e; } -var assign_context = /* @__PURE__ */ new WeakMap(); -var { setDeleteAttr: setDeleteAttr2 } = enviroment; -function assign(element, ...attributes) { - if (!attributes.length) return element; - assign_context.set(element, assignContext(element, this)); - for (const [key, value] of Object.entries(Object.assign({}, ...attributes))) - assignAttribute.call(this, element, key, value); - assign_context.delete(element); - return element; +var N = /* @__PURE__ */ new WeakMap(), { setDeleteAttr: $ } = a; +function R(t, ...e) { + if (!e.length) return t; + N.set(t, H(t, this)); + for (let [r, n] of Object.entries(Object.assign({}, ...e))) + U.call(this, t, r, n); + return N.delete(t), t; } -function assignAttribute(element, key, value) { - const { setRemoveAttr, s } = assignContext(element, this); - const _this = this; - value = s.processReactiveAttribute( - element, - key, - value, - (key2, value2) => assignAttribute.call(_this, element, key2, value2) +function U(t, e, r) { + let { setRemoveAttr: n, s: o } = H(t, this), c = this; + r = o.processReactiveAttribute( + t, + e, + r, + (f, p) => U.call(c, t, f, p) ); - const [k] = key; - if ("=" === k) return setRemoveAttr(key.slice(1), value); - if ("." === k) return setDelete(element, key.slice(1), value); - if (/(aria|data)([A-Z])/.test(key)) { - key = key.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); - return setRemoveAttr(key, value); - } - if ("className" === key) key = "class"; - switch (key) { + let [d] = e; + if (d === "=") return n(e.slice(1), r); + if (d === ".") return F(t, e.slice(1), r); + if (/(aria|data)([A-Z])/.test(e)) + return e = e.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(), n(e, r); + switch (e === "className" && (e = "class"), e) { case "xlink:href": - return setRemoveAttr(key, value, "http://www.w3.org/1999/xlink"); + return n(e, r, "http://www.w3.org/1999/xlink"); case "textContent": - return setDeleteAttr2(element, key, value); + return $(t, e, r); case "style": - if (typeof value !== "object") break; + if (typeof r != "object") break; /* falls through */ case "dataset": - return forEachEntries(s, key, element, value, setDelete.bind(null, element[key])); + return M(o, e, t, r, F.bind(null, t[e])); case "ariaset": - return forEachEntries(s, key, element, value, (key2, val) => setRemoveAttr("aria-" + key2, val)); + return M(o, e, t, r, (f, p) => n("aria-" + f, p)); case "classList": - return classListDeclarative.call(_this, element, value); + return K.call(c, t, r); } - return isPropSetter(element, key) ? setDeleteAttr2(element, key, value) : setRemoveAttr(key, value); + return X(t, e) ? $(t, e, r) : n(e, r); } -function assignContext(element, _this) { - if (assign_context.has(element)) return assign_context.get(element); - const is_svg = element instanceof enviroment.S; - const setRemoveAttr = (is_svg ? setRemoveNS : setRemove).bind(null, element, "Attribute"); - const s = signals(_this); - return { setRemoveAttr, s }; +function H(t, e) { + if (N.has(t)) return N.get(t); + let n = (t instanceof a.S ? tt : Y).bind(null, t, "Attribute"), o = S(e); + return { setRemoveAttr: n, s: o }; } -function classListDeclarative(element, toggle) { - const s = signals(this); - forEachEntries( - s, +function K(t, e) { + let r = S(this); + return M( + r, "classList", - element, - toggle, - (class_name, val) => element.classList.toggle(class_name, val === -1 ? void 0 : Boolean(val)) - ); - return element; + t, + e, + (n, o) => t.classList.toggle(n, o === -1 ? void 0 : !!o) + ), t; } -function elementAttribute(element, op, key, value) { - if (element instanceof enviroment.H) - return element[op + "Attribute"](key, value); - return element[op + "AttributeNS"](null, key, value); +function Q(t, e, r, n) { + return t instanceof a.H ? t[e + "Attribute"](r, n) : t[e + "AttributeNS"](null, r, n); } -function isPropSetter(el, key) { - if (!(key in el)) return false; - const des = getPropDescriptor(el, key); - return !isUndef(des.set); +function X(t, e) { + if (!(e in t)) return !1; + let r = z(t, e); + return !m(r.set); } -function getPropDescriptor(p, key) { - p = Object.getPrototypeOf(p); - if (!p) return {}; - const des = Object.getOwnPropertyDescriptor(p, key); - if (!des) return getPropDescriptor(p, key); - return des; +function z(t, e) { + if (t = Object.getPrototypeOf(t), !t) return {}; + let r = Object.getOwnPropertyDescriptor(t, e); + return r || z(t, e); } -function forEachEntries(s, target, element, obj, cb) { - const S = String; - if (typeof obj !== "object" || obj === null) return; - return Object.entries(obj).forEach(function process([key, val]) { - if (!key) return; - key = new S(key); - key.target = target; - val = s.processReactiveAttribute(element, key, val, cb); - cb(key, val); - }); +function M(t, e, r, n, o) { + let c = String; + if (!(typeof n != "object" || n === null)) + return Object.entries(n).forEach(function([f, p]) { + f && (f = new c(f), f.target = e, p = t.processReactiveAttribute(r, f, p, o), o(f, p)); + }); } -function setRemove(obj, prop, key, val) { - return obj[(isUndef(val) ? "remove" : "set") + prop](key, val); +function Y(t, e, r, n) { + return t[(m(n) ? "remove" : "set") + e](r, n); } -function setRemoveNS(obj, prop, key, val, ns = null) { - return obj[(isUndef(val) ? "remove" : "set") + prop + "NS"](ns, key, val); +function tt(t, e, r, n, o = null) { + return t[(m(n) ? "remove" : "set") + e + "NS"](o, r, n); } -function setDelete(obj, key, val) { - Reflect.set(obj, key, val); - if (!isUndef(val)) return; - return Reflect.deleteProperty(obj, key); +function F(t, e, r) { + if (Reflect.set(t, e, r), !!m(r)) + return Reflect.deleteProperty(t, e); } // src/events-observer.js -var c_ch_o = enviroment.M ? connectionsChangesObserverConstructor() : new Proxy({}, { +var _ = a.M ? et() : new Proxy({}, { get() { return () => { }; } }); -function connectionsChangesObserverConstructor() { - const store = /* @__PURE__ */ new Map(); - let is_observing = false; - const observerListener = (stop2) => function(mutations) { - for (const mutation of mutations) { - if (mutation.type !== "childList") continue; - if (observerAdded(mutation.addedNodes, true)) { - stop2(); - continue; +function et() { + let t = /* @__PURE__ */ new Map(), e = !1, r = (s) => function(u) { + for (let i of u) + if (i.type === "childList") { + if (l(i.addedNodes, !0)) { + s(); + continue; + } + E(i.removedNodes, !0) && s(); } - if (observerRemoved(mutation.removedNodes, true)) - stop2(); - } - }; - const observer = new enviroment.M(observerListener(stop)); + }, n = new a.M(r(f)); return { - observe(element) { - const o = new enviroment.M(observerListener(() => { + observe(s) { + let u = new a.M(r(() => { })); - o.observe(element, { childList: true, subtree: true }); - return () => o.disconnect(); + return u.observe(s, { childList: !0, subtree: !0 }), () => u.disconnect(); }, - onConnected(element, listener) { - start(); - const listeners = getElementStore(element); - if (listeners.connected.has(listener)) return; - listeners.connected.add(listener); - listeners.length_c += 1; + onConnected(s, u) { + d(); + let i = c(s); + i.connected.has(u) || (i.connected.add(u), i.length_c += 1); }, - offConnected(element, listener) { - if (!store.has(element)) return; - const ls = store.get(element); - if (!ls.connected.has(listener)) return; - ls.connected.delete(listener); - ls.length_c -= 1; - cleanWhenOff(element, ls); + offConnected(s, u) { + if (!t.has(s)) return; + let i = t.get(s); + i.connected.has(u) && (i.connected.delete(u), i.length_c -= 1, o(s, i)); }, - onDisconnected(element, listener) { - start(); - const listeners = getElementStore(element); - if (listeners.disconnected.has(listener)) return; - listeners.disconnected.add(listener); - listeners.length_d += 1; + onDisconnected(s, u) { + d(); + let i = c(s); + i.disconnected.has(u) || (i.disconnected.add(u), i.length_d += 1); }, - offDisconnected(element, listener) { - if (!store.has(element)) return; - const ls = store.get(element); - if (!ls.disconnected.has(listener)) return; - ls.disconnected.delete(listener); - ls.length_d -= 1; - cleanWhenOff(element, ls); + offDisconnected(s, u) { + if (!t.has(s)) return; + let i = t.get(s); + i.disconnected.has(u) && (i.disconnected.delete(u), i.length_d -= 1, o(s, i)); } }; - function cleanWhenOff(element, ls) { - if (ls.length_c || ls.length_d) - return; - store.delete(element); - stop(); + function o(s, u) { + u.length_c || u.length_d || (t.delete(s), f()); } - function getElementStore(element) { - if (store.has(element)) return store.get(element); - const out = { + function c(s) { + if (t.has(s)) return t.get(s); + let u = { connected: /* @__PURE__ */ new WeakSet(), length_c: 0, disconnected: /* @__PURE__ */ new WeakSet(), length_d: 0 }; - store.set(element, out); - return out; + return t.set(s, u), u; } - function start() { - if (is_observing) return; - is_observing = true; - observer.observe(enviroment.D.body, { childList: true, subtree: true }); + function d() { + e || (e = !0, n.observe(a.D.body, { childList: !0, subtree: !0 })); } - function stop() { - if (!is_observing || store.size) return; - is_observing = false; - observer.disconnect(); + function f() { + !e || t.size || (e = !1, n.disconnect()); } - function requestIdle() { - return new Promise(function(resolve) { - (requestIdleCallback || requestAnimationFrame)(resolve); + function p() { + return new Promise(function(s) { + (requestIdleCallback || requestAnimationFrame)(s); }); } - async function collectChildren(element) { - if (store.size > 30) - await requestIdle(); - const out = []; - if (!(element instanceof Node)) return out; - for (const el of store.keys()) { - if (el === element || !(el instanceof Node)) continue; - if (element.contains(el)) - out.push(el); - } - return out; + async function b(s) { + t.size > 30 && await p(); + let u = []; + if (!(s instanceof Node)) return u; + for (let i of t.keys()) + i === s || !(i instanceof Node) || s.contains(i) && u.push(i); + return u; } - function observerAdded(addedNodes, is_root) { - let out = false; - for (const element of addedNodes) { - if (is_root) collectChildren(element).then(observerAdded); - if (!store.has(element)) continue; - const ls = store.get(element); - if (!ls.length_c) continue; - element.dispatchEvent(new Event(evc)); - ls.connected = /* @__PURE__ */ new WeakSet(); - ls.length_c = 0; - if (!ls.length_d) store.delete(element); - out = true; + function l(s, u) { + let i = !1; + for (let h of s) { + if (u && b(h).then(l), !t.has(h)) continue; + let A = t.get(h); + A.length_c && (h.dispatchEvent(new Event(v)), A.connected = /* @__PURE__ */ new WeakSet(), A.length_c = 0, A.length_d || t.delete(h), i = !0); } - return out; + return i; } - function observerRemoved(removedNodes, is_root) { - let out = false; - for (const element of removedNodes) { - if (is_root) collectChildren(element).then(observerRemoved); - if (!store.has(element)) continue; - const ls = store.get(element); - if (!ls.length_d) continue; - (globalThis.queueMicrotask || setTimeout)(dispatchRemove(element)); - out = true; - } - return out; + function E(s, u) { + let i = !1; + for (let h of s) + u && b(h).then(E), !(!t.has(h) || !t.get(h).length_d) && ((globalThis.queueMicrotask || setTimeout)(I(h)), i = !0); + return i; } - function dispatchRemove(element) { + function I(s) { return () => { - if (element.isConnected) return; - element.dispatchEvent(new Event(evd)); - store.delete(element); + s.isConnected || (s.dispatchEvent(new Event(w)), t.delete(s)); }; } } // src/customElement.js -function customElementRender(target, render, props = observedAttributes2) { - const custom_element = target.host || target; - scope.push({ - scope: custom_element, - host: (...c) => c.length ? c.forEach((c2) => c2(custom_element)) : custom_element - }); - if (typeof props === "function") props = props.call(custom_element, custom_element); - const is_lte = custom_element[keyLTE]; - if (!is_lte) lifecyclesToEvents(custom_element); - const out = render.call(custom_element, props); - if (!is_lte) custom_element.dispatchEvent(new Event(evc)); - if (target.nodeType === 11 && typeof target.mode === "string") - custom_element.addEventListener(evd, c_ch_o.observe(target), { once: true }); - scope.pop(); - return target.append(out); +function wt(t, e, r = rt) { + let n = t.host || t; + O.push({ + scope: n, + host: (...d) => d.length ? d.forEach((f) => f(n)) : n + }), typeof r == "function" && (r = r.call(n, n)); + let o = n[x]; + o || nt(n); + let c = e.call(n, r); + return o || n.dispatchEvent(new Event(v)), t.nodeType === 11 && typeof t.mode == "string" && n.addEventListener(w, _.observe(t), { once: !0 }), O.pop(), t.append(c); } -function lifecyclesToEvents(class_declaration) { - wrapMethod(class_declaration.prototype, "connectedCallback", function(target, thisArg, detail) { - target.apply(thisArg, detail); - thisArg.dispatchEvent(new Event(evc)); - }); - wrapMethod(class_declaration.prototype, "disconnectedCallback", function(target, thisArg, detail) { - target.apply(thisArg, detail); - (globalThis.queueMicrotask || setTimeout)( - () => !thisArg.isConnected && thisArg.dispatchEvent(new Event(evd)) +function nt(t) { + return j(t.prototype, "connectedCallback", function(e, r, n) { + e.apply(r, n), r.dispatchEvent(new Event(v)); + }), j(t.prototype, "disconnectedCallback", function(e, r, n) { + e.apply(r, n), (globalThis.queueMicrotask || setTimeout)( + () => !r.isConnected && r.dispatchEvent(new Event(w)) ); - }); - wrapMethod(class_declaration.prototype, "attributeChangedCallback", function(target, thisArg, detail) { - const [attribute, , value] = detail; - thisArg.dispatchEvent(new CustomEvent(eva, { - detail: [attribute, value] - })); - target.apply(thisArg, detail); - }); - class_declaration.prototype[keyLTE] = true; - return class_declaration; + }), j(t.prototype, "attributeChangedCallback", function(e, r, n) { + let [o, , c] = n; + r.dispatchEvent(new CustomEvent(y, { + detail: [o, c] + })), e.apply(r, n); + }), t.prototype[x] = !0, t; } -function wrapMethod(obj, method, apply) { - obj[method] = new Proxy(obj[method] || (() => { - }), { apply }); +function j(t, e, r) { + t[e] = new Proxy(t[e] || (() => { + }), { apply: r }); } -function observedAttributes2(instance) { - return observedAttributes(instance, (i, n) => i.getAttribute(n)); +function rt(t) { + return q(t, (e, r) => e.getAttribute(r)); } // src/events.js -function dispatchEvent(name, options, host) { - if (!options) options = {}; - return function dispatch(element, ...d) { - if (host) { - d.unshift(element); - element = typeof host === "function" ? host() : host; - } - const event = d.length ? new CustomEvent(name, Object.assign({ detail: d[0] }, options)) : new Event(name, options); - return element.dispatchEvent(event); +function yt(t, e, r) { + return e || (e = {}), function(o, ...c) { + r && (c.unshift(o), o = typeof r == "function" ? r() : r); + let d = c.length ? new CustomEvent(t, Object.assign({ detail: c[0] }, e)) : new Event(t, e); + return o.dispatchEvent(d); }; } -function on(event, listener, options) { - return function registerElement(element) { - element.addEventListener(event, listener, options); - return element; +function D(t, e, r) { + return function(o) { + return o.addEventListener(t, e, r), o; }; } -var lifeOptions = (obj) => Object.assign({}, typeof obj === "object" ? obj : null, { once: true }); -on.connected = function(listener, options) { - options = lifeOptions(options); - return function registerElement(element) { - element.addEventListener(evc, listener, options); - if (element[keyLTE]) return element; - if (element.isConnected) return element.dispatchEvent(new Event(evc)), element; - const c = onAbort(options.signal, () => c_ch_o.offConnected(element, listener)); - if (c) c_ch_o.onConnected(element, listener); - return element; +var B = (t) => Object.assign({}, typeof t == "object" ? t : null, { once: !0 }); +D.connected = function(t, e) { + return e = B(e), function(n) { + return n.addEventListener(v, t, e), n[x] ? n : n.isConnected ? (n.dispatchEvent(new Event(v)), n) : (L(e.signal, () => _.offConnected(n, t)) && _.onConnected(n, t), n); }; }; -on.disconnected = function(listener, options) { - options = lifeOptions(options); - return function registerElement(element) { - element.addEventListener(evd, listener, options); - if (element[keyLTE]) return element; - const c = onAbort(options.signal, () => c_ch_o.offDisconnected(element, listener)); - if (c) c_ch_o.onDisconnected(element, listener); - return element; +D.disconnected = function(t, e) { + return e = B(e), function(n) { + return n.addEventListener(w, t, e), n[x] || L(e.signal, () => _.offDisconnected(n, t)) && _.onDisconnected(n, t), n; }; }; -var store_abort = /* @__PURE__ */ new WeakMap(); -on.disconnectedAsAbort = function(host) { - if (store_abort.has(host)) return store_abort.get(host); - const a = new AbortController(); - store_abort.set(host, a); - host(on.disconnected(() => a.abort())); - return a; +var W = /* @__PURE__ */ new WeakMap(); +D.disconnectedAsAbort = function(t) { + if (W.has(t)) return W.get(t); + let e = new AbortController(); + return W.set(t, e), t(D.disconnected(() => e.abort())), e; }; -var els_attribute_store = /* @__PURE__ */ new WeakSet(); -on.attributeChanged = function(listener, options) { - if (typeof options !== "object") - options = {}; - return function registerElement(element) { - element.addEventListener(eva, listener, options); - if (element[keyLTE] || els_attribute_store.has(element)) - return element; - if (!enviroment.M) return element; - const observer = new enviroment.M(function(mutations) { - for (const { attributeName, target } of mutations) - target.dispatchEvent( - new CustomEvent(eva, { detail: [attributeName, target.getAttribute(attributeName)] }) +var ot = /* @__PURE__ */ new WeakSet(); +D.attributeChanged = function(t, e) { + return typeof e != "object" && (e = {}), function(n) { + if (n.addEventListener(y, t, e), n[x] || ot.has(n) || !a.M) return n; + let o = new a.M(function(d) { + for (let { attributeName: f, target: p } of d) + p.dispatchEvent( + new CustomEvent(y, { detail: [f, p.getAttribute(f)] }) ); }); - const c = onAbort(options.signal, () => observer.disconnect()); - if (c) observer.observe(element, { attributes: true }); - return element; + return L(e.signal, () => o.disconnect()) && o.observe(n, { attributes: !0 }), n; }; }; globalThis.dde= { - assign, - assignAttribute, - chainableAppend, - classListDeclarative, - createElement, - createElementNS, - customElementRender, - customElementWithDDE: lifecyclesToEvents, - dispatchEvent, - el: createElement, - elNS: createElementNS, - elementAttribute, - lifecyclesToEvents, - observedAttributes: observedAttributes2, - on, - queue, - registerReactivity, - scope, - simulateSlots + assign: R, + assignAttribute: U, + chainableAppend: J, + classListDeclarative: K, + createElement: P, + createElementNS: pt, + customElementRender: wt, + customElementWithDDE: nt, + dispatchEvent: yt, + el: P, + elNS: pt, + elementAttribute: Q, + lifecyclesToEvents: nt, + observedAttributes: rt, + on: D, + queue: dt, + registerReactivity: Z, + scope: O, + simulateSlots: lt }; })(); \ No newline at end of file diff --git a/dist/esm-with-signals.js b/dist/esm-with-signals.js index 8d4a8b5..ce3b734 100644 --- a/dist/esm-with-signals.js +++ b/dist/esm-with-signals.js @@ -1,865 +1,663 @@ // src/signals-common.js -var signals_global = { - isSignal(attributes) { - return false; +var T = { + isSignal(t) { + return !1; }, - processReactiveAttribute(obj, key, attr, set) { - return attr; + processReactiveAttribute(t, e, r, n) { + return r; } }; -function registerReactivity(def, global = true) { - if (global) return Object.assign(signals_global, def); - Object.setPrototypeOf(def, signals_global); - return def; +function H(t, e = !0) { + return e ? Object.assign(T, t) : (Object.setPrototypeOf(t, T), t); } -function signals(_this) { - return signals_global.isPrototypeOf(_this) && _this !== signals_global ? _this : signals_global; +function j(t) { + return T.isPrototypeOf(t) && t !== T ? t : T; } // src/helpers.js -var hasOwn = (...a) => Object.prototype.hasOwnProperty.call(...a); -function isUndef(value) { - return typeof value === "undefined"; +var I = (...t) => Object.prototype.hasOwnProperty.call(...t); +function S(t) { + return typeof t > "u"; } -function typeOf(v) { - const t = typeof v; - if (t !== "object") return t; - if (v === null) return "null"; - return Object.prototype.toString.call(v); +function X(t) { + let e = typeof t; + return e !== "object" ? e : t === null ? "null" : Object.prototype.toString.call(t); } -function onAbort(signal2, listener) { - if (!signal2 || !(signal2 instanceof AbortSignal)) - return true; - if (signal2.aborted) - return; - signal2.addEventListener("abort", listener); - return function cleanUp() { - signal2.removeEventListener("abort", listener); - }; +function P(t, e) { + if (!t || !(t instanceof AbortSignal)) + return !0; + if (!t.aborted) + return t.addEventListener("abort", e), function() { + t.removeEventListener("abort", e); + }; } -function observedAttributes(instance, observedAttribute2) { - const { observedAttributes: observedAttributes3 = [] } = instance.constructor; - return observedAttributes3.reduce(function(out, name) { - out[kebabToCamel(name)] = observedAttribute2(instance, name); - return out; +function W(t, e) { + let { observedAttributes: r = [] } = t.constructor; + return r.reduce(function(n, o) { + return n[dt(o)] = e(t, o), n; }, {}); } -function kebabToCamel(name) { - return name.replace(/-./g, (x) => x[1].toUpperCase()); +function dt(t) { + return t.replace(/-./g, (e) => e[1].toUpperCase()); } // src/dom-common.js -var enviroment = { - setDeleteAttr, +var d = { + setDeleteAttr: pt, ssr: "", D: globalThis.document, F: globalThis.DocumentFragment, H: globalThis.HTMLElement, S: globalThis.SVGElement, M: globalThis.MutationObserver, - q: (p) => p || Promise.resolve() + q: (t) => t || Promise.resolve() }; -function setDeleteAttr(obj, prop, val) { - Reflect.set(obj, prop, val); - if (!isUndef(val)) return; - Reflect.deleteProperty(obj, prop); - if (obj instanceof enviroment.H && obj.getAttribute(prop) === "undefined") - return obj.removeAttribute(prop); - if (Reflect.get(obj, prop) === "undefined") - return Reflect.set(obj, prop, ""); +function pt(t, e, r) { + if (Reflect.set(t, e, r), !!S(r)) { + if (Reflect.deleteProperty(t, e), t instanceof d.H && t.getAttribute(e) === "undefined") + return t.removeAttribute(e); + if (Reflect.get(t, e) === "undefined") + return Reflect.set(t, e, ""); + } } -var keyLTE = "__dde_lifecyclesToEvents"; -var evc = "dde:connected"; -var evd = "dde:disconnected"; -var eva = "dde:attributeChanged"; +var O = "__dde_lifecyclesToEvents", w = "dde:connected", y = "dde:disconnected", k = "dde:attributeChanged"; // src/dom.js -function queue(promise) { - return enviroment.q(promise); +function Mt(t) { + return d.q(t); } -var scopes = [{ +var A = [{ get scope() { - return enviroment.D.body; + return d.D.body; }, - host: (c) => c ? c(enviroment.D.body) : enviroment.D.body, - prevent: true -}]; -var scope = { + host: (t) => t ? t(d.D.body) : d.D.body, + prevent: !0 +}], x = { get current() { - return scopes[scopes.length - 1]; + return A[A.length - 1]; }, get host() { return this.current.host; }, preventDefault() { - const { current } = this; - current.prevent = true; - return current; + let { current: t } = this; + return t.prevent = !0, t; }, get state() { - return [...scopes]; + return [...A]; }, - push(s = {}) { - return scopes.push(Object.assign({}, this.current, { prevent: false }, s)); + push(t = {}) { + return A.push(Object.assign({}, this.current, { prevent: !1 }, t)); }, pushRoot() { - return scopes.push(scopes[0]); + return A.push(A[0]); }, pop() { - if (scopes.length === 1) return; - return scopes.pop(); + if (A.length !== 1) + return A.pop(); } }; -function append(...els) { - this.appendOriginal(...els); - return this; +function Y(...t) { + return this.appendOriginal(...t), this; } -function chainableAppend(el) { - if (el.append === append) return el; - el.appendOriginal = el.append; - el.append = append; - return el; +function lt(t) { + return t.append === Y || (t.appendOriginal = t.append, t.append = Y), t; } -var namespace; -function createElement(tag, attributes, ...addons) { - const s = signals(this); - let scoped = 0; - let el, el_host; - if (Object(attributes) !== attributes || s.isSignal(attributes)) - attributes = { textContent: attributes }; - switch (true) { - case typeof tag === "function": { - scoped = 1; - const host = (...c) => !c.length ? el_host : (scoped === 1 ? addons.unshift(...c) : c.forEach((c2) => c2(el_host)), void 0); - scope.push({ scope: tag, host }); - el = tag(attributes || void 0); - const is_fragment = el instanceof enviroment.F; - if (el.nodeName === "#comment") break; - const el_mark = createElement.mark({ +var $; +function M(t, e, ...r) { + let n = j(this), o = 0, c, u; + switch ((Object(e) !== e || n.isSignal(e)) && (e = { textContent: e }), !0) { + case typeof t == "function": { + o = 1; + let i = (...h) => h.length ? (o === 1 ? r.unshift(...h) : h.forEach((E) => E(u)), void 0) : u; + x.push({ scope: t, host: i }), c = t(e || void 0); + let p = c instanceof d.F; + if (c.nodeName === "#comment") break; + let v = M.mark({ type: "component", - name: tag.name, - host: is_fragment ? "this" : "parentElement" + name: t.name, + host: p ? "this" : "parentElement" }); - el.prepend(el_mark); - if (is_fragment) el_host = el_mark; + c.prepend(v), p && (u = v); break; } - case tag === "#text": - el = assign.call(this, enviroment.D.createTextNode(""), attributes); + case t === "#text": + c = q.call(this, d.D.createTextNode(""), e); break; - case (tag === "<>" || !tag): - el = assign.call(this, enviroment.D.createDocumentFragment(), attributes); + case (t === "<>" || !t): + c = q.call(this, d.D.createDocumentFragment(), e); break; - case Boolean(namespace): - el = assign.call(this, enviroment.D.createElementNS(namespace, tag), attributes); + case !!$: + c = q.call(this, d.D.createElementNS($, t), e); break; - case !el: - el = assign.call(this, enviroment.D.createElement(tag), attributes); + case !c: + c = q.call(this, d.D.createElement(t), e); } - chainableAppend(el); - if (!el_host) el_host = el; - addons.forEach((c) => c(el_host)); - if (scoped) scope.pop(); - scoped = 2; - return el; + return lt(c), u || (u = c), r.forEach((i) => i(u)), o && x.pop(), o = 2, c; } -createElement.mark = function(attrs, is_open = false) { - attrs = Object.entries(attrs).map(([n, v]) => n + `="${v}"`).join(" "); - const end = is_open ? "" : "/"; - const out = enviroment.D.createComment(``); - if (is_open) out.end = enviroment.D.createComment(""); - return out; +M.mark = function(t, e = !1) { + t = Object.entries(t).map(([o, c]) => o + `="${c}"`).join(" "); + let r = e ? "" : "/", n = d.D.createComment(``); + return e && (n.end = d.D.createComment("")), n; }; -function createElementNS(ns) { - const _this = this; - return function createElementNSCurried(...rest) { - namespace = ns; - const el = createElement.call(_this, ...rest); - namespace = void 0; - return el; +function jt(t) { + let e = this; + return function(...n) { + $ = t; + let o = M.call(e, ...n); + return $ = void 0, o; }; } -function simulateSlots(element, root = element) { - const mark_e = "\xB9\u2070", mark_s = "\u2713"; - const slots = Object.fromEntries( - Array.from(root.querySelectorAll("slot")).filter((s) => !s.name.endsWith(mark_e)).map((s) => [s.name += mark_e, s]) +function Pt(t, e = t) { + let r = "\xB9\u2070", n = "\u2713", o = Object.fromEntries( + Array.from(e.querySelectorAll("slot")).filter((c) => !c.name.endsWith(r)).map((c) => [c.name += r, c]) ); - element.append = new Proxy(element.append, { - apply(orig, _, els) { - if (els[0] === root) return orig.apply(element, els); - for (const el of els) { - const name = (el.slot || "") + mark_e; + if (t.append = new Proxy(t.append, { + apply(c, u, i) { + if (i[0] === e) return c.apply(t, i); + for (let p of i) { + let v = (p.slot || "") + r; try { - elementAttribute(el, "remove", "slot"); - } catch (_error) { + bt(p, "remove", "slot"); + } catch { } - const slot = slots[name]; - if (!slot) return; - if (!slot.name.startsWith(mark_s)) { - slot.childNodes.forEach((c) => c.remove()); - slot.name = mark_s + name; - } - slot.append(el); + let h = o[v]; + if (!h) return; + h.name.startsWith(n) || (h.childNodes.forEach((E) => E.remove()), h.name = n + v), h.append(p); } - element.append = orig; - return element; + return t.append = c, t; } - }); - if (element !== root) { - const els = Array.from(element.childNodes); - element.append(...els); + }), t !== e) { + let c = Array.from(t.childNodes); + t.append(...c); } - return root; + return e; } -var assign_context = /* @__PURE__ */ new WeakMap(); -var { setDeleteAttr: setDeleteAttr2 } = enviroment; -function assign(element, ...attributes) { - if (!attributes.length) return element; - assign_context.set(element, assignContext(element, this)); - for (const [key, value] of Object.entries(Object.assign({}, ...attributes))) - assignAttribute.call(this, element, key, value); - assign_context.delete(element); - return element; +var F = /* @__PURE__ */ new WeakMap(), { setDeleteAttr: tt } = d; +function q(t, ...e) { + if (!e.length) return t; + F.set(t, rt(t, this)); + for (let [r, n] of Object.entries(Object.assign({}, ...e))) + nt.call(this, t, r, n); + return F.delete(t), t; } -function assignAttribute(element, key, value) { - const { setRemoveAttr, s } = assignContext(element, this); - const _this = this; - value = s.processReactiveAttribute( - element, - key, - value, - (key2, value2) => assignAttribute.call(_this, element, key2, value2) +function nt(t, e, r) { + let { setRemoveAttr: n, s: o } = rt(t, this), c = this; + r = o.processReactiveAttribute( + t, + e, + r, + (i, p) => nt.call(c, t, i, p) ); - const [k] = key; - if ("=" === k) return setRemoveAttr(key.slice(1), value); - if ("." === k) return setDelete(element, key.slice(1), value); - if (/(aria|data)([A-Z])/.test(key)) { - key = key.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); - return setRemoveAttr(key, value); - } - if ("className" === key) key = "class"; - switch (key) { + let [u] = e; + if (u === "=") return n(e.slice(1), r); + if (u === ".") return et(t, e.slice(1), r); + if (/(aria|data)([A-Z])/.test(e)) + return e = e.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(), n(e, r); + switch (e === "className" && (e = "class"), e) { case "xlink:href": - return setRemoveAttr(key, value, "http://www.w3.org/1999/xlink"); + return n(e, r, "http://www.w3.org/1999/xlink"); case "textContent": - return setDeleteAttr2(element, key, value); + return tt(t, e, r); case "style": - if (typeof value !== "object") break; + if (typeof r != "object") break; /* falls through */ case "dataset": - return forEachEntries(s, key, element, value, setDelete.bind(null, element[key])); + return B(o, e, t, r, et.bind(null, t[e])); case "ariaset": - return forEachEntries(s, key, element, value, (key2, val) => setRemoveAttr("aria-" + key2, val)); + return B(o, e, t, r, (i, p) => n("aria-" + i, p)); case "classList": - return classListDeclarative.call(_this, element, value); + return ht.call(c, t, r); } - return isPropSetter(element, key) ? setDeleteAttr2(element, key, value) : setRemoveAttr(key, value); + return gt(t, e) ? tt(t, e, r) : n(e, r); } -function assignContext(element, _this) { - if (assign_context.has(element)) return assign_context.get(element); - const is_svg = element instanceof enviroment.S; - const setRemoveAttr = (is_svg ? setRemoveNS : setRemove).bind(null, element, "Attribute"); - const s = signals(_this); - return { setRemoveAttr, s }; +function rt(t, e) { + if (F.has(t)) return F.get(t); + let n = (t instanceof d.S ? mt : vt).bind(null, t, "Attribute"), o = j(e); + return { setRemoveAttr: n, s: o }; } -function classListDeclarative(element, toggle) { - const s = signals(this); - forEachEntries( - s, +function ht(t, e) { + let r = j(this); + return B( + r, "classList", - element, - toggle, - (class_name, val) => element.classList.toggle(class_name, val === -1 ? void 0 : Boolean(val)) - ); - return element; + t, + e, + (n, o) => t.classList.toggle(n, o === -1 ? void 0 : !!o) + ), t; } -function elementAttribute(element, op, key, value) { - if (element instanceof enviroment.H) - return element[op + "Attribute"](key, value); - return element[op + "AttributeNS"](null, key, value); +function bt(t, e, r, n) { + return t instanceof d.H ? t[e + "Attribute"](r, n) : t[e + "AttributeNS"](null, r, n); } -function isPropSetter(el, key) { - if (!(key in el)) return false; - const des = getPropDescriptor(el, key); - return !isUndef(des.set); +function gt(t, e) { + if (!(e in t)) return !1; + let r = ot(t, e); + return !S(r.set); } -function getPropDescriptor(p, key) { - p = Object.getPrototypeOf(p); - if (!p) return {}; - const des = Object.getOwnPropertyDescriptor(p, key); - if (!des) return getPropDescriptor(p, key); - return des; +function ot(t, e) { + if (t = Object.getPrototypeOf(t), !t) return {}; + let r = Object.getOwnPropertyDescriptor(t, e); + return r || ot(t, e); } -function forEachEntries(s, target, element, obj, cb) { - const S = String; - if (typeof obj !== "object" || obj === null) return; - return Object.entries(obj).forEach(function process([key, val]) { - if (!key) return; - key = new S(key); - key.target = target; - val = s.processReactiveAttribute(element, key, val, cb); - cb(key, val); - }); +function B(t, e, r, n, o) { + let c = String; + if (!(typeof n != "object" || n === null)) + return Object.entries(n).forEach(function([i, p]) { + i && (i = new c(i), i.target = e, p = t.processReactiveAttribute(r, i, p, o), o(i, p)); + }); } -function setRemove(obj, prop, key, val) { - return obj[(isUndef(val) ? "remove" : "set") + prop](key, val); +function vt(t, e, r, n) { + return t[(S(n) ? "remove" : "set") + e](r, n); } -function setRemoveNS(obj, prop, key, val, ns = null) { - return obj[(isUndef(val) ? "remove" : "set") + prop + "NS"](ns, key, val); +function mt(t, e, r, n, o = null) { + return t[(S(n) ? "remove" : "set") + e + "NS"](o, r, n); } -function setDelete(obj, key, val) { - Reflect.set(obj, key, val); - if (!isUndef(val)) return; - return Reflect.deleteProperty(obj, key); +function et(t, e, r) { + if (Reflect.set(t, e, r), !!S(r)) + return Reflect.deleteProperty(t, e); } // src/events-observer.js -var c_ch_o = enviroment.M ? connectionsChangesObserverConstructor() : new Proxy({}, { +var C = d.M ? Et() : new Proxy({}, { get() { return () => { }; } }); -function connectionsChangesObserverConstructor() { - const store = /* @__PURE__ */ new Map(); - let is_observing = false; - const observerListener = (stop2) => function(mutations) { - for (const mutation of mutations) { - if (mutation.type !== "childList") continue; - if (observerAdded(mutation.addedNodes, true)) { - stop2(); - continue; +function Et() { + let t = /* @__PURE__ */ new Map(), e = !1, r = (s) => function(f) { + for (let a of f) + if (a.type === "childList") { + if (h(a.addedNodes, !0)) { + s(); + continue; + } + E(a.removedNodes, !0) && s(); } - if (observerRemoved(mutation.removedNodes, true)) - stop2(); - } - }; - const observer = new enviroment.M(observerListener(stop)); + }, n = new d.M(r(i)); return { - observe(element) { - const o = new enviroment.M(observerListener(() => { + observe(s) { + let f = new d.M(r(() => { })); - o.observe(element, { childList: true, subtree: true }); - return () => o.disconnect(); + return f.observe(s, { childList: !0, subtree: !0 }), () => f.disconnect(); }, - onConnected(element, listener) { - start(); - const listeners = getElementStore(element); - if (listeners.connected.has(listener)) return; - listeners.connected.add(listener); - listeners.length_c += 1; + onConnected(s, f) { + u(); + let a = c(s); + a.connected.has(f) || (a.connected.add(f), a.length_c += 1); }, - offConnected(element, listener) { - if (!store.has(element)) return; - const ls = store.get(element); - if (!ls.connected.has(listener)) return; - ls.connected.delete(listener); - ls.length_c -= 1; - cleanWhenOff(element, ls); + offConnected(s, f) { + if (!t.has(s)) return; + let a = t.get(s); + a.connected.has(f) && (a.connected.delete(f), a.length_c -= 1, o(s, a)); }, - onDisconnected(element, listener) { - start(); - const listeners = getElementStore(element); - if (listeners.disconnected.has(listener)) return; - listeners.disconnected.add(listener); - listeners.length_d += 1; + onDisconnected(s, f) { + u(); + let a = c(s); + a.disconnected.has(f) || (a.disconnected.add(f), a.length_d += 1); }, - offDisconnected(element, listener) { - if (!store.has(element)) return; - const ls = store.get(element); - if (!ls.disconnected.has(listener)) return; - ls.disconnected.delete(listener); - ls.length_d -= 1; - cleanWhenOff(element, ls); + offDisconnected(s, f) { + if (!t.has(s)) return; + let a = t.get(s); + a.disconnected.has(f) && (a.disconnected.delete(f), a.length_d -= 1, o(s, a)); } }; - function cleanWhenOff(element, ls) { - if (ls.length_c || ls.length_d) - return; - store.delete(element); - stop(); + function o(s, f) { + f.length_c || f.length_d || (t.delete(s), i()); } - function getElementStore(element) { - if (store.has(element)) return store.get(element); - const out = { + function c(s) { + if (t.has(s)) return t.get(s); + let f = { connected: /* @__PURE__ */ new WeakSet(), length_c: 0, disconnected: /* @__PURE__ */ new WeakSet(), length_d: 0 }; - store.set(element, out); - return out; + return t.set(s, f), f; } - function start() { - if (is_observing) return; - is_observing = true; - observer.observe(enviroment.D.body, { childList: true, subtree: true }); + function u() { + e || (e = !0, n.observe(d.D.body, { childList: !0, subtree: !0 })); } - function stop() { - if (!is_observing || store.size) return; - is_observing = false; - observer.disconnect(); + function i() { + !e || t.size || (e = !1, n.disconnect()); } - function requestIdle() { - return new Promise(function(resolve) { - (requestIdleCallback || requestAnimationFrame)(resolve); + function p() { + return new Promise(function(s) { + (requestIdleCallback || requestAnimationFrame)(s); }); } - async function collectChildren(element) { - if (store.size > 30) - await requestIdle(); - const out = []; - if (!(element instanceof Node)) return out; - for (const el of store.keys()) { - if (el === element || !(el instanceof Node)) continue; - if (element.contains(el)) - out.push(el); - } - return out; + async function v(s) { + t.size > 30 && await p(); + let f = []; + if (!(s instanceof Node)) return f; + for (let a of t.keys()) + a === s || !(a instanceof Node) || s.contains(a) && f.push(a); + return f; } - function observerAdded(addedNodes, is_root) { - let out = false; - for (const element of addedNodes) { - if (is_root) collectChildren(element).then(observerAdded); - if (!store.has(element)) continue; - const ls = store.get(element); - if (!ls.length_c) continue; - element.dispatchEvent(new Event(evc)); - ls.connected = /* @__PURE__ */ new WeakSet(); - ls.length_c = 0; - if (!ls.length_d) store.delete(element); - out = true; + function h(s, f) { + let a = !1; + for (let b of s) { + if (f && v(b).then(h), !t.has(b)) continue; + let N = t.get(b); + N.length_c && (b.dispatchEvent(new Event(w)), N.connected = /* @__PURE__ */ new WeakSet(), N.length_c = 0, N.length_d || t.delete(b), a = !0); } - return out; + return a; } - function observerRemoved(removedNodes, is_root) { - let out = false; - for (const element of removedNodes) { - if (is_root) collectChildren(element).then(observerRemoved); - if (!store.has(element)) continue; - const ls = store.get(element); - if (!ls.length_d) continue; - (globalThis.queueMicrotask || setTimeout)(dispatchRemove(element)); - out = true; - } - return out; + function E(s, f) { + let a = !1; + for (let b of s) + f && v(b).then(E), !(!t.has(b) || !t.get(b).length_d) && ((globalThis.queueMicrotask || setTimeout)(L(b)), a = !0); + return a; } - function dispatchRemove(element) { + function L(s) { return () => { - if (element.isConnected) return; - element.dispatchEvent(new Event(evd)); - store.delete(element); + s.isConnected || (s.dispatchEvent(new Event(y)), t.delete(s)); }; } } // src/customElement.js -function customElementRender(target, render, props = observedAttributes2) { - const custom_element = target.host || target; - scope.push({ - scope: custom_element, - host: (...c) => c.length ? c.forEach((c2) => c2(custom_element)) : custom_element - }); - if (typeof props === "function") props = props.call(custom_element, custom_element); - const is_lte = custom_element[keyLTE]; - if (!is_lte) lifecyclesToEvents(custom_element); - const out = render.call(custom_element, props); - if (!is_lte) custom_element.dispatchEvent(new Event(evc)); - if (target.nodeType === 11 && typeof target.mode === "string") - custom_element.addEventListener(evd, c_ch_o.observe(target), { once: true }); - scope.pop(); - return target.append(out); +function It(t, e, r = _t) { + let n = t.host || t; + x.push({ + scope: n, + host: (...u) => u.length ? u.forEach((i) => i(n)) : n + }), typeof r == "function" && (r = r.call(n, n)); + let o = n[O]; + o || xt(n); + let c = e.call(n, r); + return o || n.dispatchEvent(new Event(w)), t.nodeType === 11 && typeof t.mode == "string" && n.addEventListener(y, C.observe(t), { once: !0 }), x.pop(), t.append(c); } -function lifecyclesToEvents(class_declaration) { - wrapMethod(class_declaration.prototype, "connectedCallback", function(target, thisArg, detail) { - target.apply(thisArg, detail); - thisArg.dispatchEvent(new Event(evc)); - }); - wrapMethod(class_declaration.prototype, "disconnectedCallback", function(target, thisArg, detail) { - target.apply(thisArg, detail); - (globalThis.queueMicrotask || setTimeout)( - () => !thisArg.isConnected && thisArg.dispatchEvent(new Event(evd)) +function xt(t) { + return J(t.prototype, "connectedCallback", function(e, r, n) { + e.apply(r, n), r.dispatchEvent(new Event(w)); + }), J(t.prototype, "disconnectedCallback", function(e, r, n) { + e.apply(r, n), (globalThis.queueMicrotask || setTimeout)( + () => !r.isConnected && r.dispatchEvent(new Event(y)) ); - }); - wrapMethod(class_declaration.prototype, "attributeChangedCallback", function(target, thisArg, detail) { - const [attribute, , value] = detail; - thisArg.dispatchEvent(new CustomEvent(eva, { - detail: [attribute, value] - })); - target.apply(thisArg, detail); - }); - class_declaration.prototype[keyLTE] = true; - return class_declaration; + }), J(t.prototype, "attributeChangedCallback", function(e, r, n) { + let [o, , c] = n; + r.dispatchEvent(new CustomEvent(k, { + detail: [o, c] + })), e.apply(r, n); + }), t.prototype[O] = !0, t; } -function wrapMethod(obj, method, apply) { - obj[method] = new Proxy(obj[method] || (() => { - }), { apply }); +function J(t, e, r) { + t[e] = new Proxy(t[e] || (() => { + }), { apply: r }); } -function observedAttributes2(instance) { - return observedAttributes(instance, (i, n) => i.getAttribute(n)); +function _t(t) { + return W(t, (e, r) => e.getAttribute(r)); } // src/events.js -function dispatchEvent(name, options, host) { - if (!options) options = {}; - return function dispatch(element, ...d) { - if (host) { - d.unshift(element); - element = typeof host === "function" ? host() : host; - } - const event = d.length ? new CustomEvent(name, Object.assign({ detail: d[0] }, options)) : new Event(name, options); - return element.dispatchEvent(event); +function Gt(t, e, r) { + return e || (e = {}), function(o, ...c) { + r && (c.unshift(o), o = typeof r == "function" ? r() : r); + let u = c.length ? new CustomEvent(t, Object.assign({ detail: c[0] }, e)) : new Event(t, e); + return o.dispatchEvent(u); }; } -function on(event, listener, options) { - return function registerElement(element) { - element.addEventListener(event, listener, options); - return element; +function _(t, e, r) { + return function(o) { + return o.addEventListener(t, e, r), o; }; } -var lifeOptions = (obj) => Object.assign({}, typeof obj === "object" ? obj : null, { once: true }); -on.connected = function(listener, options) { - options = lifeOptions(options); - return function registerElement(element) { - element.addEventListener(evc, listener, options); - if (element[keyLTE]) return element; - if (element.isConnected) return element.dispatchEvent(new Event(evc)), element; - const c = onAbort(options.signal, () => c_ch_o.offConnected(element, listener)); - if (c) c_ch_o.onConnected(element, listener); - return element; +var ct = (t) => Object.assign({}, typeof t == "object" ? t : null, { once: !0 }); +_.connected = function(t, e) { + return e = ct(e), function(n) { + return n.addEventListener(w, t, e), n[O] ? n : n.isConnected ? (n.dispatchEvent(new Event(w)), n) : (P(e.signal, () => C.offConnected(n, t)) && C.onConnected(n, t), n); }; }; -on.disconnected = function(listener, options) { - options = lifeOptions(options); - return function registerElement(element) { - element.addEventListener(evd, listener, options); - if (element[keyLTE]) return element; - const c = onAbort(options.signal, () => c_ch_o.offDisconnected(element, listener)); - if (c) c_ch_o.onDisconnected(element, listener); - return element; +_.disconnected = function(t, e) { + return e = ct(e), function(n) { + return n.addEventListener(y, t, e), n[O] || P(e.signal, () => C.offDisconnected(n, t)) && C.onDisconnected(n, t), n; }; }; -var store_abort = /* @__PURE__ */ new WeakMap(); -on.disconnectedAsAbort = function(host) { - if (store_abort.has(host)) return store_abort.get(host); - const a = new AbortController(); - store_abort.set(host, a); - host(on.disconnected(() => a.abort())); - return a; +var Z = /* @__PURE__ */ new WeakMap(); +_.disconnectedAsAbort = function(t) { + if (Z.has(t)) return Z.get(t); + let e = new AbortController(); + return Z.set(t, e), t(_.disconnected(() => e.abort())), e; }; -var els_attribute_store = /* @__PURE__ */ new WeakSet(); -on.attributeChanged = function(listener, options) { - if (typeof options !== "object") - options = {}; - return function registerElement(element) { - element.addEventListener(eva, listener, options); - if (element[keyLTE] || els_attribute_store.has(element)) - return element; - if (!enviroment.M) return element; - const observer = new enviroment.M(function(mutations) { - for (const { attributeName, target } of mutations) - target.dispatchEvent( - new CustomEvent(eva, { detail: [attributeName, target.getAttribute(attributeName)] }) +var wt = /* @__PURE__ */ new WeakSet(); +_.attributeChanged = function(t, e) { + return typeof e != "object" && (e = {}), function(n) { + if (n.addEventListener(k, t, e), n[O] || wt.has(n) || !d.M) return n; + let o = new d.M(function(u) { + for (let { attributeName: i, target: p } of u) + p.dispatchEvent( + new CustomEvent(k, { detail: [i, p.getAttribute(i)] }) ); }); - const c = onAbort(options.signal, () => observer.disconnect()); - if (c) observer.observe(element, { attributes: true }); - return element; + return P(e.signal, () => o.disconnect()) && o.observe(n, { attributes: !0 }), n; }; }; // src/signals-lib.js -var mark = "__dde_signal"; -function isSignal(candidate) { +var l = "__dde_signal"; +function U(t) { try { - return hasOwn(candidate, mark); - } catch (e) { - return false; + return I(t, l); + } catch { + return !1; } } -var stack_watch = []; -var deps = /* @__PURE__ */ new WeakMap(); -function signal(value, actions) { - if (typeof value !== "function") - return create(false, value, actions); - if (isSignal(value)) return value; - const out = create(true); - const contextReWatch = function() { - const [origin, ...deps_old] = deps.get(contextReWatch); - deps.set(contextReWatch, /* @__PURE__ */ new Set([origin])); - stack_watch.push(contextReWatch); - write(out, value()); - stack_watch.pop(); - if (!deps_old.length) return; - const deps_curr = deps.get(contextReWatch); - for (const dep_signal of deps_old) { - if (deps_curr.has(dep_signal)) continue; - removeSignalListener(dep_signal, contextReWatch); - } +var z = [], g = /* @__PURE__ */ new WeakMap(); +function m(t, e) { + if (typeof t != "function") + return it(!1, t, e); + if (U(t)) return t; + let r = it(!0), n = function() { + let [o, ...c] = g.get(n); + if (g.set(n, /* @__PURE__ */ new Set([o])), z.push(n), at(r, t()), z.pop(), !c.length) return; + let u = g.get(n); + for (let i of c) + u.has(i) || R(i, n); }; - deps.set(out[mark], contextReWatch); - deps.set(contextReWatch, /* @__PURE__ */ new Set([out])); - contextReWatch(); - return out; + return g.set(r[l], n), g.set(n, /* @__PURE__ */ new Set([r])), n(), r; } -signal.action = function(s, name, ...a) { - const M = s[mark], { actions } = M; - if (!actions || !(name in actions)) - throw new Error(`'${s}' has no action with name '${name}'!`); - actions[name].apply(M, a); - if (M.skip) return delete M.skip; - M.listeners.forEach((l) => l(M.value)); +m.action = function(t, e, ...r) { + let n = t[l], { actions: o } = n; + if (!o || !(e in o)) + throw new Error(`'${t}' has no action with name '${e}'!`); + if (o[e].apply(n, r), n.skip) return delete n.skip; + n.listeners.forEach((c) => c(n.value)); }; -signal.on = function on2(s, listener, options = {}) { - const { signal: as } = options; - if (as && as.aborted) return; - if (Array.isArray(s)) return s.forEach((s2) => on2(s2, listener, options)); - addSignalListener(s, listener); - if (as) as.addEventListener("abort", () => removeSignalListener(s, listener)); +m.on = function t(e, r, n = {}) { + let { signal: o } = n; + if (!(o && o.aborted)) { + if (Array.isArray(e)) return e.forEach((c) => t(c, r, n)); + Q(e, r), o && o.addEventListener("abort", () => R(e, r)); + } }; -signal.symbols = { +m.symbols = { //signal: mark, onclear: Symbol.for("Signal.onclear") }; -signal.clear = function(...signals2) { - for (const s of signals2) { - const M = s[mark]; - if (!M) continue; - delete s.toJSON; - M.onclear.forEach((f) => f.call(M)); - clearListDeps(s, M); - delete s[mark]; +m.clear = function(...t) { + for (let r of t) { + let n = r[l]; + n && (delete r.toJSON, n.onclear.forEach((o) => o.call(n)), e(r, n), delete r[l]); } - function clearListDeps(s, o) { - o.listeners.forEach((l) => { - o.listeners.delete(l); - if (!deps.has(l)) return; - const ls = deps.get(l); - ls.delete(s); - if (ls.size > 1) return; - s.clear(...ls); - deps.delete(l); + function e(r, n) { + n.listeners.forEach((o) => { + if (n.listeners.delete(o), !g.has(o)) return; + let c = g.get(o); + c.delete(r), !(c.size > 1) && (r.clear(...c), g.delete(o)); }); } }; -var key_reactive = "__dde_reactive"; -signal.el = function(s, map) { - const mark_start = createElement.mark({ type: "reactive" }, true); - const mark_end = mark_start.end; - const out = enviroment.D.createDocumentFragment(); - out.append(mark_start, mark_end); - const { current } = scope; - let cache = {}; - const reRenderReactiveElement = (v) => { - if (!mark_start.parentNode || !mark_end.parentNode) - return removeSignalListener(s, reRenderReactiveElement); - const cache_tmp = cache; - cache = {}; - scope.push(current); - let els = map(v, function useCache(key, fun) { - let value; - if (hasOwn(cache_tmp, key)) { - value = cache_tmp[key]; - delete cache_tmp[key]; - } else - value = fun(); - cache[key] = value; - return value; +var D = "__dde_reactive"; +m.el = function(t, e) { + let r = M.mark({ type: "reactive" }, !0), n = r.end, o = d.D.createDocumentFragment(); + o.append(r, n); + let { current: c } = x, u = {}, i = (p) => { + if (!r.parentNode || !n.parentNode) + return R(t, i); + let v = u; + u = {}, x.push(c); + let h = e(p, function(f, a) { + let b; + return I(v, f) ? (b = v[f], delete v[f]) : b = a(), u[f] = b, b; }); - scope.pop(); - if (!Array.isArray(els)) - els = [els]; - const el_start_rm = document.createComment(""); - els.push(el_start_rm); - mark_start.after(...els); - let el_r; - while ((el_r = el_start_rm.nextSibling) && el_r !== mark_end) - el_r.remove(); - el_start_rm.remove(); - if (mark_start.isConnected) - requestCleanUpReactives(current.host()); + x.pop(), Array.isArray(h) || (h = [h]); + let E = document.createComment(""); + h.push(E), r.after(...h); + let L; + for (; (L = E.nextSibling) && L !== n; ) + L.remove(); + E.remove(), r.isConnected && At(c.host()); }; - addSignalListener(s, reRenderReactiveElement); - removeSignalsFromElements(s, reRenderReactiveElement, mark_start, map); - reRenderReactiveElement(s()); - return out; + return Q(t, i), ut(t, i, r, e), i(t()), o; }; -function requestCleanUpReactives(host) { - if (!host || !host[key_reactive]) return; - (requestIdleCallback || setTimeout)(function() { - host[key_reactive] = host[key_reactive].filter(([s, el]) => el.isConnected ? true : (removeSignalListener(...s), false)); +function At(t) { + !t || !t[D] || (requestIdleCallback || setTimeout)(function() { + t[D] = t[D].filter(([e, r]) => r.isConnected ? !0 : (R(...e), !1)); }); } -var observedAttributeActions = { - _set(value) { - this.value = value; +var St = { + _set(t) { + this.value = t; } }; -function observedAttribute(store) { - return function(instance, name) { - const varS = (...args) => !args.length ? read(varS) : instance.setAttribute(name, ...args); - const out = toSignal(varS, instance.getAttribute(name), observedAttributeActions); - store[name] = out; - return out; +function Ot(t) { + return function(e, r) { + let n = (...c) => c.length ? e.setAttribute(r, ...c) : K(n), o = ft(n, e.getAttribute(r), St); + return t[r] = o, o; }; } -var key_attributes = "__dde_attributes"; -signal.observedAttributes = function(element) { - const store = element[key_attributes] = {}; - const attrs = observedAttributes(element, observedAttribute(store)); - on.attributeChanged(function attributeChangeToSignal({ detail }) { +var G = "__dde_attributes"; +m.observedAttributes = function(t) { + let e = t[G] = {}, r = W(t, Ot(e)); + return _.attributeChanged(function({ detail: o }) { /*! This maps attributes to signals (`S.observedAttributes`). * Investigate `__dde_attributes` key of the element.*/ - const [name, value] = detail; - const curr = this[key_attributes][name]; - if (curr) return signal.action(curr, "_set", value); - })(element); - on.disconnected(function() { + let [c, u] = o, i = this[G][c]; + if (i) return m.action(i, "_set", u); + })(t), _.disconnected(function() { /*! This removes all signals mapped to attributes (`S.observedAttributes`). * Investigate `__dde_attributes` key of the element.*/ - signal.clear(...Object.values(this[key_attributes])); - })(element); - return attrs; + m.clear(...Object.values(this[G])); + })(t), r; }; -var signals_config = { - isSignal, - processReactiveAttribute(element, key, attrs, set) { - if (!isSignal(attrs)) return attrs; - const l = (attr) => { - if (!element.isConnected) - return removeSignalListener(attrs, l); - set(key, attr); +var st = { + isSignal: U, + processReactiveAttribute(t, e, r, n) { + if (!U(r)) return r; + let o = (c) => { + if (!t.isConnected) + return R(r, o); + n(e, c); }; - addSignalListener(attrs, l); - removeSignalsFromElements(attrs, l, element, key); - return attrs(); + return Q(r, o), ut(r, o, t, e), r(); } }; -function removeSignalsFromElements(s, listener, ...notes) { - const { current } = scope; - if (current.prevent) return; - current.host(function(element) { - if (!element[key_reactive]) { - element[key_reactive] = []; - on.disconnected( - () => ( - /*! - * Clears all Signals listeners added in the current scope/host (`S.el`, `assign`, …?). - * You can investigate the `__dde_reactive` key of the element. - * */ - element[key_reactive].forEach(([[s2, listener2]]) => removeSignalListener(s2, listener2, s2[mark] && s2[mark].host && s2[mark].host() === element)) - ) - )(element); - } - element[key_reactive].push([[s, listener], ...notes]); +function ut(t, e, ...r) { + let { current: n } = x; + n.prevent || n.host(function(o) { + o[D] || (o[D] = [], _.disconnected( + () => ( + /*! + * Clears all Signals listeners added in the current scope/host (`S.el`, `assign`, …?). + * You can investigate the `__dde_reactive` key of the element. + * */ + o[D].forEach(([[c, u]]) => R(c, u, c[l] && c[l].host && c[l].host() === o)) + ) + )(o)), o[D].push([[t, e], ...r]); }); } -function create(is_readonly, value, actions) { - const varS = is_readonly ? () => read(varS) : (...value2) => value2.length ? write(varS, ...value2) : read(varS); - return toSignal(varS, value, actions, is_readonly); +function it(t, e, r) { + let n = t ? () => K(n) : (...o) => o.length ? at(n, ...o) : K(n); + return ft(n, e, r, t); } -var protoSigal = Object.assign(/* @__PURE__ */ Object.create(null), { +var yt = Object.assign(/* @__PURE__ */ Object.create(null), { stopPropagation() { - this.skip = true; + this.skip = !0; } -}); -var SignalDefined = class extends Error { +}), V = class extends Error { constructor() { super(); - const [curr, ...rest] = this.stack.split("\n"); - const curr_file = curr.slice(curr.indexOf("@"), curr.indexOf(".js:") + 4); - this.stack = rest.find((l) => !l.includes(curr_file)); + let [e, ...r] = this.stack.split(` +`), n = e.slice(e.indexOf("@"), e.indexOf(".js:") + 4); + this.stack = r.find((o) => !o.includes(n)); } }; -function toSignal(s, value, actions, readonly = false) { - const onclear = []; - if (typeOf(actions) !== "[object Object]") - actions = {}; - const { onclear: ocs } = signal.symbols; - if (actions[ocs]) { - onclear.push(actions[ocs]); - delete actions[ocs]; - } - const { host } = scope; - Reflect.defineProperty(s, mark, { +function ft(t, e, r, n = !1) { + let o = []; + X(r) !== "[object Object]" && (r = {}); + let { onclear: c } = m.symbols; + r[c] && (o.push(r[c]), delete r[c]); + let { host: u } = x; + return Reflect.defineProperty(t, l, { value: { - value, - actions, - onclear, - host, + value: e, + actions: r, + onclear: o, + host: u, listeners: /* @__PURE__ */ new Set(), - defined: new SignalDefined().stack, - readonly + defined: new V().stack, + readonly: n }, - enumerable: false, - writable: false, - configurable: true - }); - s.toJSON = () => s(); - s.valueOf = () => s[mark] && s[mark].value; - Object.setPrototypeOf(s[mark], protoSigal); - return s; + enumerable: !1, + writable: !1, + configurable: !0 + }), t.toJSON = () => t(), t.valueOf = () => t[l] && t[l].value, Object.setPrototypeOf(t[l], yt), t; } -function currentContext() { - return stack_watch[stack_watch.length - 1]; +function Ct() { + return z[z.length - 1]; } -function read(s) { - if (!s[mark]) return; - const { value, listeners } = s[mark]; - const context = currentContext(); - if (context) listeners.add(context); - if (deps.has(context)) deps.get(context).add(s); - return value; +function K(t) { + if (!t[l]) return; + let { value: e, listeners: r } = t[l], n = Ct(); + return n && r.add(n), g.has(n) && g.get(n).add(t), e; } -function write(s, value, force) { - if (!s[mark]) return; - const M = s[mark]; - if (!force && M.value === value) return; - M.value = value; - M.listeners.forEach((l) => l(value)); - return value; +function at(t, e, r) { + if (!t[l]) return; + let n = t[l]; + if (!(!r && n.value === e)) + return n.value = e, n.listeners.forEach((o) => o(e)), e; } -function addSignalListener(s, listener) { - if (!s[mark]) return; - return s[mark].listeners.add(listener); +function Q(t, e) { + if (t[l]) + return t[l].listeners.add(e); } -function removeSignalListener(s, listener, clear_when_empty) { - const M = s[mark]; - if (!M) return; - const out = M.listeners.delete(listener); - if (clear_when_empty && !M.listeners.size) { - signal.clear(s); - if (!deps.has(M)) return out; - const c = deps.get(M); - if (!deps.has(c)) return out; - deps.get(c).forEach((sig) => removeSignalListener(sig, c, true)); +function R(t, e, r) { + let n = t[l]; + if (!n) return; + let o = n.listeners.delete(e); + if (r && !n.listeners.size) { + if (m.clear(t), !g.has(n)) return o; + let c = g.get(n); + if (!g.has(c)) return o; + g.get(c).forEach((u) => R(u, c, !0)); } - return out; + return o; } // signals.js -registerReactivity(signals_config); +H(st); export { - signal as S, - assign, - assignAttribute, - chainableAppend, - classListDeclarative, - createElement, - createElementNS, - customElementRender, - lifecyclesToEvents as customElementWithDDE, - dispatchEvent, - createElement as el, - createElementNS as elNS, - elementAttribute, - isSignal, - lifecyclesToEvents, - observedAttributes2 as observedAttributes, - on, - queue, - registerReactivity, - scope, - signal, - simulateSlots + m as S, + q as assign, + nt as assignAttribute, + lt as chainableAppend, + ht as classListDeclarative, + M as createElement, + jt as createElementNS, + It as customElementRender, + xt as customElementWithDDE, + Gt as dispatchEvent, + M as el, + jt as elNS, + bt as elementAttribute, + U as isSignal, + xt as lifecyclesToEvents, + _t as observedAttributes, + _ as on, + Mt as queue, + H as registerReactivity, + x as scope, + m as signal, + Pt as simulateSlots }; diff --git a/dist/esm.js b/dist/esm.js index dbbb6fa..025a507 100644 --- a/dist/esm.js +++ b/dist/esm.js @@ -1,583 +1,451 @@ // src/signals-common.js -var signals_global = { - isSignal(attributes) { - return false; +var C = { + isSignal(t) { + return !1; }, - processReactiveAttribute(obj, key, attr, set) { - return attr; + processReactiveAttribute(t, e, r, n) { + return r; } }; -function registerReactivity(def, global = true) { - if (global) return Object.assign(signals_global, def); - Object.setPrototypeOf(def, signals_global); - return def; +function Z(t, e = !0) { + return e ? Object.assign(C, t) : (Object.setPrototypeOf(t, C), t); } -function signals(_this) { - return signals_global.isPrototypeOf(_this) && _this !== signals_global ? _this : signals_global; +function S(t) { + return C.isPrototypeOf(t) && t !== C ? t : C; } // src/helpers.js -function isUndef(value) { - return typeof value === "undefined"; +function m(t) { + return typeof t > "u"; } -function onAbort(signal, listener) { - if (!signal || !(signal instanceof AbortSignal)) - return true; - if (signal.aborted) - return; - signal.addEventListener("abort", listener); - return function cleanUp() { - signal.removeEventListener("abort", listener); - }; +function L(t, e) { + if (!t || !(t instanceof AbortSignal)) + return !0; + if (!t.aborted) + return t.addEventListener("abort", e), function() { + t.removeEventListener("abort", e); + }; } -function observedAttributes(instance, observedAttribute) { - const { observedAttributes: observedAttributes3 = [] } = instance.constructor; - return observedAttributes3.reduce(function(out, name) { - out[kebabToCamel(name)] = observedAttribute(instance, name); - return out; +function q(t, e) { + let { observedAttributes: r = [] } = t.constructor; + return r.reduce(function(n, o) { + return n[G(o)] = e(t, o), n; }, {}); } -function kebabToCamel(name) { - return name.replace(/-./g, (x) => x[1].toUpperCase()); +function G(t) { + return t.replace(/-./g, (e) => e[1].toUpperCase()); } // src/dom-common.js -var enviroment = { - setDeleteAttr, +var a = { + setDeleteAttr: V, ssr: "", D: globalThis.document, F: globalThis.DocumentFragment, H: globalThis.HTMLElement, S: globalThis.SVGElement, M: globalThis.MutationObserver, - q: (p) => p || Promise.resolve() + q: (t) => t || Promise.resolve() }; -function setDeleteAttr(obj, prop, val) { - Reflect.set(obj, prop, val); - if (!isUndef(val)) return; - Reflect.deleteProperty(obj, prop); - if (obj instanceof enviroment.H && obj.getAttribute(prop) === "undefined") - return obj.removeAttribute(prop); - if (Reflect.get(obj, prop) === "undefined") - return Reflect.set(obj, prop, ""); +function V(t, e, r) { + if (Reflect.set(t, e, r), !!m(r)) { + if (Reflect.deleteProperty(t, e), t instanceof a.H && t.getAttribute(e) === "undefined") + return t.removeAttribute(e); + if (Reflect.get(t, e) === "undefined") + return Reflect.set(t, e, ""); + } } -var keyLTE = "__dde_lifecyclesToEvents"; -var evc = "dde:connected"; -var evd = "dde:disconnected"; -var eva = "dde:attributeChanged"; +var x = "__dde_lifecyclesToEvents", v = "dde:connected", w = "dde:disconnected", y = "dde:attributeChanged"; // src/dom.js -function queue(promise) { - return enviroment.q(promise); +function dt(t) { + return a.q(t); } -var scopes = [{ +var g = [{ get scope() { - return enviroment.D.body; + return a.D.body; }, - host: (c) => c ? c(enviroment.D.body) : enviroment.D.body, - prevent: true -}]; -var scope = { + host: (t) => t ? t(a.D.body) : a.D.body, + prevent: !0 +}], O = { get current() { - return scopes[scopes.length - 1]; + return g[g.length - 1]; }, get host() { return this.current.host; }, preventDefault() { - const { current } = this; - current.prevent = true; - return current; + let { current: t } = this; + return t.prevent = !0, t; }, get state() { - return [...scopes]; + return [...g]; }, - push(s = {}) { - return scopes.push(Object.assign({}, this.current, { prevent: false }, s)); + push(t = {}) { + return g.push(Object.assign({}, this.current, { prevent: !1 }, t)); }, pushRoot() { - return scopes.push(scopes[0]); + return g.push(g[0]); }, pop() { - if (scopes.length === 1) return; - return scopes.pop(); + if (g.length !== 1) + return g.pop(); } }; -function append(...els) { - this.appendOriginal(...els); - return this; +function k(...t) { + return this.appendOriginal(...t), this; } -function chainableAppend(el) { - if (el.append === append) return el; - el.appendOriginal = el.append; - el.append = append; - return el; +function J(t) { + return t.append === k || (t.appendOriginal = t.append, t.append = k), t; } -var namespace; -function createElement(tag, attributes, ...addons) { - const s = signals(this); - let scoped = 0; - let el, el_host; - if (Object(attributes) !== attributes || s.isSignal(attributes)) - attributes = { textContent: attributes }; - switch (true) { - case typeof tag === "function": { - scoped = 1; - const host = (...c) => !c.length ? el_host : (scoped === 1 ? addons.unshift(...c) : c.forEach((c2) => c2(el_host)), void 0); - scope.push({ scope: tag, host }); - el = tag(attributes || void 0); - const is_fragment = el instanceof enviroment.F; - if (el.nodeName === "#comment") break; - const el_mark = createElement.mark({ +var T; +function P(t, e, ...r) { + let n = S(this), o = 0, c, d; + switch ((Object(e) !== e || n.isSignal(e)) && (e = { textContent: e }), !0) { + case typeof t == "function": { + o = 1; + let f = (...l) => l.length ? (o === 1 ? r.unshift(...l) : l.forEach((E) => E(d)), void 0) : d; + O.push({ scope: t, host: f }), c = t(e || void 0); + let p = c instanceof a.F; + if (c.nodeName === "#comment") break; + let b = P.mark({ type: "component", - name: tag.name, - host: is_fragment ? "this" : "parentElement" + name: t.name, + host: p ? "this" : "parentElement" }); - el.prepend(el_mark); - if (is_fragment) el_host = el_mark; + c.prepend(b), p && (d = b); break; } - case tag === "#text": - el = assign.call(this, enviroment.D.createTextNode(""), attributes); + case t === "#text": + c = R.call(this, a.D.createTextNode(""), e); break; - case (tag === "<>" || !tag): - el = assign.call(this, enviroment.D.createDocumentFragment(), attributes); + case (t === "<>" || !t): + c = R.call(this, a.D.createDocumentFragment(), e); break; - case Boolean(namespace): - el = assign.call(this, enviroment.D.createElementNS(namespace, tag), attributes); + case !!T: + c = R.call(this, a.D.createElementNS(T, t), e); break; - case !el: - el = assign.call(this, enviroment.D.createElement(tag), attributes); + case !c: + c = R.call(this, a.D.createElement(t), e); } - chainableAppend(el); - if (!el_host) el_host = el; - addons.forEach((c) => c(el_host)); - if (scoped) scope.pop(); - scoped = 2; - return el; + return J(c), d || (d = c), r.forEach((f) => f(d)), o && O.pop(), o = 2, c; } -createElement.mark = function(attrs, is_open = false) { - attrs = Object.entries(attrs).map(([n, v]) => n + `="${v}"`).join(" "); - const end = is_open ? "" : "/"; - const out = enviroment.D.createComment(``); - if (is_open) out.end = enviroment.D.createComment(""); - return out; +P.mark = function(t, e = !1) { + t = Object.entries(t).map(([o, c]) => o + `="${c}"`).join(" "); + let r = e ? "" : "/", n = a.D.createComment(``); + return e && (n.end = a.D.createComment("")), n; }; -function createElementNS(ns) { - const _this = this; - return function createElementNSCurried(...rest) { - namespace = ns; - const el = createElement.call(_this, ...rest); - namespace = void 0; - return el; +function pt(t) { + let e = this; + return function(...n) { + T = t; + let o = P.call(e, ...n); + return T = void 0, o; }; } -function simulateSlots(element, root = element) { - const mark_e = "\xB9\u2070", mark_s = "\u2713"; - const slots = Object.fromEntries( - Array.from(root.querySelectorAll("slot")).filter((s) => !s.name.endsWith(mark_e)).map((s) => [s.name += mark_e, s]) +function lt(t, e = t) { + let r = "\xB9\u2070", n = "\u2713", o = Object.fromEntries( + Array.from(e.querySelectorAll("slot")).filter((c) => !c.name.endsWith(r)).map((c) => [c.name += r, c]) ); - element.append = new Proxy(element.append, { - apply(orig, _, els) { - if (els[0] === root) return orig.apply(element, els); - for (const el of els) { - const name = (el.slot || "") + mark_e; + if (t.append = new Proxy(t.append, { + apply(c, d, f) { + if (f[0] === e) return c.apply(t, f); + for (let p of f) { + let b = (p.slot || "") + r; try { - elementAttribute(el, "remove", "slot"); - } catch (_error) { + Q(p, "remove", "slot"); + } catch { } - const slot = slots[name]; - if (!slot) return; - if (!slot.name.startsWith(mark_s)) { - slot.childNodes.forEach((c) => c.remove()); - slot.name = mark_s + name; - } - slot.append(el); + let l = o[b]; + if (!l) return; + l.name.startsWith(n) || (l.childNodes.forEach((E) => E.remove()), l.name = n + b), l.append(p); } - element.append = orig; - return element; + return t.append = c, t; } - }); - if (element !== root) { - const els = Array.from(element.childNodes); - element.append(...els); + }), t !== e) { + let c = Array.from(t.childNodes); + t.append(...c); } - return root; + return e; } -var assign_context = /* @__PURE__ */ new WeakMap(); -var { setDeleteAttr: setDeleteAttr2 } = enviroment; -function assign(element, ...attributes) { - if (!attributes.length) return element; - assign_context.set(element, assignContext(element, this)); - for (const [key, value] of Object.entries(Object.assign({}, ...attributes))) - assignAttribute.call(this, element, key, value); - assign_context.delete(element); - return element; +var N = /* @__PURE__ */ new WeakMap(), { setDeleteAttr: $ } = a; +function R(t, ...e) { + if (!e.length) return t; + N.set(t, H(t, this)); + for (let [r, n] of Object.entries(Object.assign({}, ...e))) + U.call(this, t, r, n); + return N.delete(t), t; } -function assignAttribute(element, key, value) { - const { setRemoveAttr, s } = assignContext(element, this); - const _this = this; - value = s.processReactiveAttribute( - element, - key, - value, - (key2, value2) => assignAttribute.call(_this, element, key2, value2) +function U(t, e, r) { + let { setRemoveAttr: n, s: o } = H(t, this), c = this; + r = o.processReactiveAttribute( + t, + e, + r, + (f, p) => U.call(c, t, f, p) ); - const [k] = key; - if ("=" === k) return setRemoveAttr(key.slice(1), value); - if ("." === k) return setDelete(element, key.slice(1), value); - if (/(aria|data)([A-Z])/.test(key)) { - key = key.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); - return setRemoveAttr(key, value); - } - if ("className" === key) key = "class"; - switch (key) { + let [d] = e; + if (d === "=") return n(e.slice(1), r); + if (d === ".") return F(t, e.slice(1), r); + if (/(aria|data)([A-Z])/.test(e)) + return e = e.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(), n(e, r); + switch (e === "className" && (e = "class"), e) { case "xlink:href": - return setRemoveAttr(key, value, "http://www.w3.org/1999/xlink"); + return n(e, r, "http://www.w3.org/1999/xlink"); case "textContent": - return setDeleteAttr2(element, key, value); + return $(t, e, r); case "style": - if (typeof value !== "object") break; + if (typeof r != "object") break; /* falls through */ case "dataset": - return forEachEntries(s, key, element, value, setDelete.bind(null, element[key])); + return M(o, e, t, r, F.bind(null, t[e])); case "ariaset": - return forEachEntries(s, key, element, value, (key2, val) => setRemoveAttr("aria-" + key2, val)); + return M(o, e, t, r, (f, p) => n("aria-" + f, p)); case "classList": - return classListDeclarative.call(_this, element, value); + return K.call(c, t, r); } - return isPropSetter(element, key) ? setDeleteAttr2(element, key, value) : setRemoveAttr(key, value); + return X(t, e) ? $(t, e, r) : n(e, r); } -function assignContext(element, _this) { - if (assign_context.has(element)) return assign_context.get(element); - const is_svg = element instanceof enviroment.S; - const setRemoveAttr = (is_svg ? setRemoveNS : setRemove).bind(null, element, "Attribute"); - const s = signals(_this); - return { setRemoveAttr, s }; +function H(t, e) { + if (N.has(t)) return N.get(t); + let n = (t instanceof a.S ? tt : Y).bind(null, t, "Attribute"), o = S(e); + return { setRemoveAttr: n, s: o }; } -function classListDeclarative(element, toggle) { - const s = signals(this); - forEachEntries( - s, +function K(t, e) { + let r = S(this); + return M( + r, "classList", - element, - toggle, - (class_name, val) => element.classList.toggle(class_name, val === -1 ? void 0 : Boolean(val)) - ); - return element; + t, + e, + (n, o) => t.classList.toggle(n, o === -1 ? void 0 : !!o) + ), t; } -function elementAttribute(element, op, key, value) { - if (element instanceof enviroment.H) - return element[op + "Attribute"](key, value); - return element[op + "AttributeNS"](null, key, value); +function Q(t, e, r, n) { + return t instanceof a.H ? t[e + "Attribute"](r, n) : t[e + "AttributeNS"](null, r, n); } -function isPropSetter(el, key) { - if (!(key in el)) return false; - const des = getPropDescriptor(el, key); - return !isUndef(des.set); +function X(t, e) { + if (!(e in t)) return !1; + let r = z(t, e); + return !m(r.set); } -function getPropDescriptor(p, key) { - p = Object.getPrototypeOf(p); - if (!p) return {}; - const des = Object.getOwnPropertyDescriptor(p, key); - if (!des) return getPropDescriptor(p, key); - return des; +function z(t, e) { + if (t = Object.getPrototypeOf(t), !t) return {}; + let r = Object.getOwnPropertyDescriptor(t, e); + return r || z(t, e); } -function forEachEntries(s, target, element, obj, cb) { - const S = String; - if (typeof obj !== "object" || obj === null) return; - return Object.entries(obj).forEach(function process([key, val]) { - if (!key) return; - key = new S(key); - key.target = target; - val = s.processReactiveAttribute(element, key, val, cb); - cb(key, val); - }); +function M(t, e, r, n, o) { + let c = String; + if (!(typeof n != "object" || n === null)) + return Object.entries(n).forEach(function([f, p]) { + f && (f = new c(f), f.target = e, p = t.processReactiveAttribute(r, f, p, o), o(f, p)); + }); } -function setRemove(obj, prop, key, val) { - return obj[(isUndef(val) ? "remove" : "set") + prop](key, val); +function Y(t, e, r, n) { + return t[(m(n) ? "remove" : "set") + e](r, n); } -function setRemoveNS(obj, prop, key, val, ns = null) { - return obj[(isUndef(val) ? "remove" : "set") + prop + "NS"](ns, key, val); +function tt(t, e, r, n, o = null) { + return t[(m(n) ? "remove" : "set") + e + "NS"](o, r, n); } -function setDelete(obj, key, val) { - Reflect.set(obj, key, val); - if (!isUndef(val)) return; - return Reflect.deleteProperty(obj, key); +function F(t, e, r) { + if (Reflect.set(t, e, r), !!m(r)) + return Reflect.deleteProperty(t, e); } // src/events-observer.js -var c_ch_o = enviroment.M ? connectionsChangesObserverConstructor() : new Proxy({}, { +var _ = a.M ? et() : new Proxy({}, { get() { return () => { }; } }); -function connectionsChangesObserverConstructor() { - const store = /* @__PURE__ */ new Map(); - let is_observing = false; - const observerListener = (stop2) => function(mutations) { - for (const mutation of mutations) { - if (mutation.type !== "childList") continue; - if (observerAdded(mutation.addedNodes, true)) { - stop2(); - continue; +function et() { + let t = /* @__PURE__ */ new Map(), e = !1, r = (s) => function(u) { + for (let i of u) + if (i.type === "childList") { + if (l(i.addedNodes, !0)) { + s(); + continue; + } + E(i.removedNodes, !0) && s(); } - if (observerRemoved(mutation.removedNodes, true)) - stop2(); - } - }; - const observer = new enviroment.M(observerListener(stop)); + }, n = new a.M(r(f)); return { - observe(element) { - const o = new enviroment.M(observerListener(() => { + observe(s) { + let u = new a.M(r(() => { })); - o.observe(element, { childList: true, subtree: true }); - return () => o.disconnect(); + return u.observe(s, { childList: !0, subtree: !0 }), () => u.disconnect(); }, - onConnected(element, listener) { - start(); - const listeners = getElementStore(element); - if (listeners.connected.has(listener)) return; - listeners.connected.add(listener); - listeners.length_c += 1; + onConnected(s, u) { + d(); + let i = c(s); + i.connected.has(u) || (i.connected.add(u), i.length_c += 1); }, - offConnected(element, listener) { - if (!store.has(element)) return; - const ls = store.get(element); - if (!ls.connected.has(listener)) return; - ls.connected.delete(listener); - ls.length_c -= 1; - cleanWhenOff(element, ls); + offConnected(s, u) { + if (!t.has(s)) return; + let i = t.get(s); + i.connected.has(u) && (i.connected.delete(u), i.length_c -= 1, o(s, i)); }, - onDisconnected(element, listener) { - start(); - const listeners = getElementStore(element); - if (listeners.disconnected.has(listener)) return; - listeners.disconnected.add(listener); - listeners.length_d += 1; + onDisconnected(s, u) { + d(); + let i = c(s); + i.disconnected.has(u) || (i.disconnected.add(u), i.length_d += 1); }, - offDisconnected(element, listener) { - if (!store.has(element)) return; - const ls = store.get(element); - if (!ls.disconnected.has(listener)) return; - ls.disconnected.delete(listener); - ls.length_d -= 1; - cleanWhenOff(element, ls); + offDisconnected(s, u) { + if (!t.has(s)) return; + let i = t.get(s); + i.disconnected.has(u) && (i.disconnected.delete(u), i.length_d -= 1, o(s, i)); } }; - function cleanWhenOff(element, ls) { - if (ls.length_c || ls.length_d) - return; - store.delete(element); - stop(); + function o(s, u) { + u.length_c || u.length_d || (t.delete(s), f()); } - function getElementStore(element) { - if (store.has(element)) return store.get(element); - const out = { + function c(s) { + if (t.has(s)) return t.get(s); + let u = { connected: /* @__PURE__ */ new WeakSet(), length_c: 0, disconnected: /* @__PURE__ */ new WeakSet(), length_d: 0 }; - store.set(element, out); - return out; + return t.set(s, u), u; } - function start() { - if (is_observing) return; - is_observing = true; - observer.observe(enviroment.D.body, { childList: true, subtree: true }); + function d() { + e || (e = !0, n.observe(a.D.body, { childList: !0, subtree: !0 })); } - function stop() { - if (!is_observing || store.size) return; - is_observing = false; - observer.disconnect(); + function f() { + !e || t.size || (e = !1, n.disconnect()); } - function requestIdle() { - return new Promise(function(resolve) { - (requestIdleCallback || requestAnimationFrame)(resolve); + function p() { + return new Promise(function(s) { + (requestIdleCallback || requestAnimationFrame)(s); }); } - async function collectChildren(element) { - if (store.size > 30) - await requestIdle(); - const out = []; - if (!(element instanceof Node)) return out; - for (const el of store.keys()) { - if (el === element || !(el instanceof Node)) continue; - if (element.contains(el)) - out.push(el); - } - return out; + async function b(s) { + t.size > 30 && await p(); + let u = []; + if (!(s instanceof Node)) return u; + for (let i of t.keys()) + i === s || !(i instanceof Node) || s.contains(i) && u.push(i); + return u; } - function observerAdded(addedNodes, is_root) { - let out = false; - for (const element of addedNodes) { - if (is_root) collectChildren(element).then(observerAdded); - if (!store.has(element)) continue; - const ls = store.get(element); - if (!ls.length_c) continue; - element.dispatchEvent(new Event(evc)); - ls.connected = /* @__PURE__ */ new WeakSet(); - ls.length_c = 0; - if (!ls.length_d) store.delete(element); - out = true; + function l(s, u) { + let i = !1; + for (let h of s) { + if (u && b(h).then(l), !t.has(h)) continue; + let A = t.get(h); + A.length_c && (h.dispatchEvent(new Event(v)), A.connected = /* @__PURE__ */ new WeakSet(), A.length_c = 0, A.length_d || t.delete(h), i = !0); } - return out; + return i; } - function observerRemoved(removedNodes, is_root) { - let out = false; - for (const element of removedNodes) { - if (is_root) collectChildren(element).then(observerRemoved); - if (!store.has(element)) continue; - const ls = store.get(element); - if (!ls.length_d) continue; - (globalThis.queueMicrotask || setTimeout)(dispatchRemove(element)); - out = true; - } - return out; + function E(s, u) { + let i = !1; + for (let h of s) + u && b(h).then(E), !(!t.has(h) || !t.get(h).length_d) && ((globalThis.queueMicrotask || setTimeout)(I(h)), i = !0); + return i; } - function dispatchRemove(element) { + function I(s) { return () => { - if (element.isConnected) return; - element.dispatchEvent(new Event(evd)); - store.delete(element); + s.isConnected || (s.dispatchEvent(new Event(w)), t.delete(s)); }; } } // src/customElement.js -function customElementRender(target, render, props = observedAttributes2) { - const custom_element = target.host || target; - scope.push({ - scope: custom_element, - host: (...c) => c.length ? c.forEach((c2) => c2(custom_element)) : custom_element - }); - if (typeof props === "function") props = props.call(custom_element, custom_element); - const is_lte = custom_element[keyLTE]; - if (!is_lte) lifecyclesToEvents(custom_element); - const out = render.call(custom_element, props); - if (!is_lte) custom_element.dispatchEvent(new Event(evc)); - if (target.nodeType === 11 && typeof target.mode === "string") - custom_element.addEventListener(evd, c_ch_o.observe(target), { once: true }); - scope.pop(); - return target.append(out); +function wt(t, e, r = rt) { + let n = t.host || t; + O.push({ + scope: n, + host: (...d) => d.length ? d.forEach((f) => f(n)) : n + }), typeof r == "function" && (r = r.call(n, n)); + let o = n[x]; + o || nt(n); + let c = e.call(n, r); + return o || n.dispatchEvent(new Event(v)), t.nodeType === 11 && typeof t.mode == "string" && n.addEventListener(w, _.observe(t), { once: !0 }), O.pop(), t.append(c); } -function lifecyclesToEvents(class_declaration) { - wrapMethod(class_declaration.prototype, "connectedCallback", function(target, thisArg, detail) { - target.apply(thisArg, detail); - thisArg.dispatchEvent(new Event(evc)); - }); - wrapMethod(class_declaration.prototype, "disconnectedCallback", function(target, thisArg, detail) { - target.apply(thisArg, detail); - (globalThis.queueMicrotask || setTimeout)( - () => !thisArg.isConnected && thisArg.dispatchEvent(new Event(evd)) +function nt(t) { + return j(t.prototype, "connectedCallback", function(e, r, n) { + e.apply(r, n), r.dispatchEvent(new Event(v)); + }), j(t.prototype, "disconnectedCallback", function(e, r, n) { + e.apply(r, n), (globalThis.queueMicrotask || setTimeout)( + () => !r.isConnected && r.dispatchEvent(new Event(w)) ); - }); - wrapMethod(class_declaration.prototype, "attributeChangedCallback", function(target, thisArg, detail) { - const [attribute, , value] = detail; - thisArg.dispatchEvent(new CustomEvent(eva, { - detail: [attribute, value] - })); - target.apply(thisArg, detail); - }); - class_declaration.prototype[keyLTE] = true; - return class_declaration; + }), j(t.prototype, "attributeChangedCallback", function(e, r, n) { + let [o, , c] = n; + r.dispatchEvent(new CustomEvent(y, { + detail: [o, c] + })), e.apply(r, n); + }), t.prototype[x] = !0, t; } -function wrapMethod(obj, method, apply) { - obj[method] = new Proxy(obj[method] || (() => { - }), { apply }); +function j(t, e, r) { + t[e] = new Proxy(t[e] || (() => { + }), { apply: r }); } -function observedAttributes2(instance) { - return observedAttributes(instance, (i, n) => i.getAttribute(n)); +function rt(t) { + return q(t, (e, r) => e.getAttribute(r)); } // src/events.js -function dispatchEvent(name, options, host) { - if (!options) options = {}; - return function dispatch(element, ...d) { - if (host) { - d.unshift(element); - element = typeof host === "function" ? host() : host; - } - const event = d.length ? new CustomEvent(name, Object.assign({ detail: d[0] }, options)) : new Event(name, options); - return element.dispatchEvent(event); +function yt(t, e, r) { + return e || (e = {}), function(o, ...c) { + r && (c.unshift(o), o = typeof r == "function" ? r() : r); + let d = c.length ? new CustomEvent(t, Object.assign({ detail: c[0] }, e)) : new Event(t, e); + return o.dispatchEvent(d); }; } -function on(event, listener, options) { - return function registerElement(element) { - element.addEventListener(event, listener, options); - return element; +function D(t, e, r) { + return function(o) { + return o.addEventListener(t, e, r), o; }; } -var lifeOptions = (obj) => Object.assign({}, typeof obj === "object" ? obj : null, { once: true }); -on.connected = function(listener, options) { - options = lifeOptions(options); - return function registerElement(element) { - element.addEventListener(evc, listener, options); - if (element[keyLTE]) return element; - if (element.isConnected) return element.dispatchEvent(new Event(evc)), element; - const c = onAbort(options.signal, () => c_ch_o.offConnected(element, listener)); - if (c) c_ch_o.onConnected(element, listener); - return element; +var B = (t) => Object.assign({}, typeof t == "object" ? t : null, { once: !0 }); +D.connected = function(t, e) { + return e = B(e), function(n) { + return n.addEventListener(v, t, e), n[x] ? n : n.isConnected ? (n.dispatchEvent(new Event(v)), n) : (L(e.signal, () => _.offConnected(n, t)) && _.onConnected(n, t), n); }; }; -on.disconnected = function(listener, options) { - options = lifeOptions(options); - return function registerElement(element) { - element.addEventListener(evd, listener, options); - if (element[keyLTE]) return element; - const c = onAbort(options.signal, () => c_ch_o.offDisconnected(element, listener)); - if (c) c_ch_o.onDisconnected(element, listener); - return element; +D.disconnected = function(t, e) { + return e = B(e), function(n) { + return n.addEventListener(w, t, e), n[x] || L(e.signal, () => _.offDisconnected(n, t)) && _.onDisconnected(n, t), n; }; }; -var store_abort = /* @__PURE__ */ new WeakMap(); -on.disconnectedAsAbort = function(host) { - if (store_abort.has(host)) return store_abort.get(host); - const a = new AbortController(); - store_abort.set(host, a); - host(on.disconnected(() => a.abort())); - return a; +var W = /* @__PURE__ */ new WeakMap(); +D.disconnectedAsAbort = function(t) { + if (W.has(t)) return W.get(t); + let e = new AbortController(); + return W.set(t, e), t(D.disconnected(() => e.abort())), e; }; -var els_attribute_store = /* @__PURE__ */ new WeakSet(); -on.attributeChanged = function(listener, options) { - if (typeof options !== "object") - options = {}; - return function registerElement(element) { - element.addEventListener(eva, listener, options); - if (element[keyLTE] || els_attribute_store.has(element)) - return element; - if (!enviroment.M) return element; - const observer = new enviroment.M(function(mutations) { - for (const { attributeName, target } of mutations) - target.dispatchEvent( - new CustomEvent(eva, { detail: [attributeName, target.getAttribute(attributeName)] }) +var ot = /* @__PURE__ */ new WeakSet(); +D.attributeChanged = function(t, e) { + return typeof e != "object" && (e = {}), function(n) { + if (n.addEventListener(y, t, e), n[x] || ot.has(n) || !a.M) return n; + let o = new a.M(function(d) { + for (let { attributeName: f, target: p } of d) + p.dispatchEvent( + new CustomEvent(y, { detail: [f, p.getAttribute(f)] }) ); }); - const c = onAbort(options.signal, () => observer.disconnect()); - if (c) observer.observe(element, { attributes: true }); - return element; + return L(e.signal, () => o.disconnect()) && o.observe(n, { attributes: !0 }), n; }; }; export { - assign, - assignAttribute, - chainableAppend, - classListDeclarative, - createElement, - createElementNS, - customElementRender, - lifecyclesToEvents as customElementWithDDE, - dispatchEvent, - createElement as el, - createElementNS as elNS, - elementAttribute, - lifecyclesToEvents, - observedAttributes2 as observedAttributes, - on, - queue, - registerReactivity, - scope, - simulateSlots + R as assign, + U as assignAttribute, + J as chainableAppend, + K as classListDeclarative, + P as createElement, + pt as createElementNS, + wt as customElementRender, + nt as customElementWithDDE, + yt as dispatchEvent, + P as el, + pt as elNS, + Q as elementAttribute, + nt as lifecyclesToEvents, + rt as observedAttributes, + D as on, + dt as queue, + Z as registerReactivity, + O as scope, + lt as simulateSlots };