nuclo 0.2.32 → 0.2.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/{Element-DXd2npjS.cjs → Element-BUdteOsZ.cjs} +2 -2
- package/dist/{Element-C3mU75-a.mjs.map → Element-BUdteOsZ.cjs.map} +1 -1
- package/dist/{Element-C3mU75-a.mjs → Element-Djosl17E.mjs} +2 -2
- package/dist/{Element-DXd2npjS.cjs.map → Element-Djosl17E.mjs.map} +1 -1
- package/dist/bootstrap.d.ts +5 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/element/attributes.d.ts +6 -0
- package/dist/element/attributes.d.ts.map +1 -0
- package/dist/element/class-name.d.ts +6 -0
- package/dist/element/class-name.d.ts.map +1 -0
- package/dist/element/event-attributes.d.ts +5 -0
- package/dist/element/event-attributes.d.ts.map +1 -0
- package/dist/element/events.d.ts +46 -0
- package/dist/element/events.d.ts.map +1 -0
- package/dist/element/factory-meta.d.ts +25 -0
- package/dist/element/factory-meta.d.ts.map +1 -0
- package/dist/element/factory.d.ts +32 -0
- package/dist/element/factory.d.ts.map +1 -0
- package/dist/element/inline-style.d.ts +9 -0
- package/dist/element/inline-style.d.ts.map +1 -0
- package/dist/element/lifecycle.d.ts +106 -0
- package/dist/element/lifecycle.d.ts.map +1 -0
- package/dist/element/modifiers.d.ts +11 -0
- package/dist/element/modifiers.d.ts.map +1 -0
- package/dist/element/tags.d.ts +5 -0
- package/dist/element/tags.d.ts.map +1 -0
- package/dist/hydration.d.ts +73 -0
- package/dist/hydration.d.ts.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/list/index.d.ts +7 -0
- package/dist/list/index.d.ts.map +1 -0
- package/dist/list/runtime.d.ts +6 -0
- package/dist/list/runtime.d.ts.map +1 -0
- package/dist/list/template.d.ts +113 -0
- package/dist/list/template.d.ts.map +1 -0
- package/dist/list/types.d.ts +57 -0
- package/dist/list/types.d.ts.map +1 -0
- package/dist/nuclo.cjs +1 -1
- package/dist/nuclo.cjs.map +1 -1
- package/dist/nuclo.mjs +1 -1
- package/dist/nuclo.mjs.map +1 -1
- package/dist/nuclo.umd.js +1 -1
- package/dist/nuclo.umd.js.map +1 -1
- package/dist/polyfill/Document.d.ts +19 -0
- package/dist/polyfill/Document.d.ts.map +1 -0
- package/dist/polyfill/Element.d.ts +48 -0
- package/dist/polyfill/Element.d.ts.map +1 -0
- package/dist/polyfill/Event.d.ts +43 -0
- package/dist/polyfill/Event.d.ts.map +1 -0
- package/dist/polyfill/Node.d.ts +13 -0
- package/dist/polyfill/Node.d.ts.map +1 -0
- package/dist/polyfill/Text.d.ts +11 -0
- package/dist/polyfill/Text.d.ts.map +1 -0
- package/dist/polyfill/index.d.ts +24 -0
- package/dist/polyfill/index.d.ts.map +1 -0
- package/dist/polyfill/nuclo.polyfill.cjs +1 -1
- package/dist/polyfill/nuclo.polyfill.cjs.map +1 -1
- package/dist/polyfill/nuclo.polyfill.mjs +1 -1
- package/dist/polyfill/nuclo.polyfill.mjs.map +1 -1
- package/dist/render.d.ts +33 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/shared/conditions.d.ts +4 -0
- package/dist/shared/conditions.d.ts.map +1 -0
- package/dist/shared/dom.d.ts +80 -0
- package/dist/shared/dom.d.ts.map +1 -0
- package/dist/shared/environment.d.ts +5 -0
- package/dist/shared/environment.d.ts.map +1 -0
- package/dist/shared/errors.d.ts +2 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/renderables.d.ts +4 -0
- package/dist/shared/renderables.d.ts.map +1 -0
- package/dist/shared/strings.d.ts +19 -0
- package/dist/shared/strings.d.ts.map +1 -0
- package/dist/shared/type-guards.d.ts +16 -0
- package/dist/shared/type-guards.d.ts.map +1 -0
- package/dist/ssr/index.d.ts +19 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/nuclo.ssr.cjs +1 -1
- package/dist/ssr/nuclo.ssr.cjs.map +1 -1
- package/dist/ssr/nuclo.ssr.mjs +1 -1
- package/dist/ssr/nuclo.ssr.mjs.map +1 -1
- package/dist/ssr/render-to-string.d.ts +41 -0
- package/dist/ssr/render-to-string.d.ts.map +1 -0
- package/dist/style/css.d.ts +26 -0
- package/dist/style/css.d.ts.map +1 -0
- package/dist/style/engine.d.ts +94 -0
- package/dist/style/engine.d.ts.map +1 -0
- package/dist/style/index.d.ts +3 -0
- package/dist/style/index.d.ts.map +1 -0
- package/dist/update/conditional.d.ts +3 -0
- package/dist/update/conditional.d.ts.map +1 -0
- package/dist/update/reactive-attributes.d.ts +45 -0
- package/dist/update/reactive-attributes.d.ts.map +1 -0
- package/dist/update/reactive-text.d.ts +38 -0
- package/dist/update/reactive-text.d.ts.map +1 -0
- package/dist/update/registry.d.ts +116 -0
- package/dist/update/registry.d.ts.map +1 -0
- package/dist/update/scope.d.ts +7 -0
- package/dist/update/scope.d.ts.map +1 -0
- package/dist/update/update.d.ts +4 -0
- package/dist/update/update.d.ts.map +1 -0
- package/dist/when/builder.d.ts +16 -0
- package/dist/when/builder.d.ts.map +1 -0
- package/dist/when/index.d.ts +44 -0
- package/dist/when/index.d.ts.map +1 -0
- package/dist/when/runtime.d.ts +59 -0
- package/dist/when/runtime.d.ts.map +1 -0
- package/package.json +11 -11
- package/types/core/base.d.ts +12 -0
- package/types/core/lifecycle.d.ts +28 -0
- package/types/features/on.d.ts +27 -2
- package/types/index.d.ts +8 -0
package/README.md
CHANGED
|
@@ -466,6 +466,26 @@ button('Click me',
|
|
|
466
466
|
|
|
467
467
|
Standard names are inferred from the common HTML, media, video, and body event maps. Custom events can provide their event type explicitly with `on<"app:ready", CustomEvent<Detail>>(...)`.
|
|
468
468
|
|
|
469
|
+
#### Lifecycle (`onMount` / `onDestroy`)
|
|
470
|
+
|
|
471
|
+
Run code once an element is created and connected to the document, and once it's removed — as an `onMount`/`onDestroy` attribute pair (same object-literal style as events) or via `on("mount", ...)`/`on("destroy", ...)`:
|
|
472
|
+
|
|
473
|
+
```ts
|
|
474
|
+
div({
|
|
475
|
+
onMount(el) {
|
|
476
|
+
const id = setInterval(() => tick(el), 1000);
|
|
477
|
+
return () => clearInterval(id); // ran on destroy, like onDestroy
|
|
478
|
+
},
|
|
479
|
+
onDestroy(el) {
|
|
480
|
+
analytics.track('closed', el.id);
|
|
481
|
+
},
|
|
482
|
+
})
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
`onMount` may return a cleanup function (no arguments) — it's called on destroy exactly like a separate `onDestroy` would be, so a subscription started in `onMount` can be released right next to where it's opened.
|
|
486
|
+
|
|
487
|
+
Because nuclo builds a tree off-document before attaching it in one shot, `onMount` can't fire the instant the element is built — it's queued and fires once `render()`/`hydrate()`/`update()` finishes inserting that element, with it already connected. `onDestroy` fires eagerly wherever nuclo removes the element itself (`list()`/`when()` diffing); an element removed by code outside nuclo (e.g. a raw `node.remove()`) is only noticed the next time `render()`/`hydrate()`/`update()` runs afterward — same "noticed lazily" contract `list()`/`when()` already have for disconnected DOM. Either way, nothing is retained once the element itself becomes unreachable — no manual cleanup registry to manage.
|
|
488
|
+
|
|
469
489
|
#### `scope(...ids)`
|
|
470
490
|
|
|
471
491
|
Registers an element as a named update root, so `update("id")` re-runs only the dynamic bindings contained within it instead of the whole page:
|
|
@@ -537,6 +557,8 @@ const el = div(card, 'Hello');
|
|
|
537
557
|
|
|
538
558
|
`css()` returns an object with a `className` key that can be passed directly to any tag builder. Global styles and keyframe animations use `globalStyle()` and `keyframes()`.
|
|
539
559
|
|
|
560
|
+
Every distinct declaration block `css()` ever compiles mints a class that lives for the life of the process (only a manual test reset clears it) — this is what lets identical styles dedupe globally, but it means `css()` is for a bounded design-token vocabulary, not per-instance dynamic values. For data that varies per element instance (a user's chosen color, a computed position), use the `style` prop instead of routing it through `css({ raw: {...} })`.
|
|
561
|
+
|
|
540
562
|
#### Composing with `cx()`
|
|
541
563
|
|
|
542
564
|
`cx()` composes styles with exact, last-wins conflict resolution. When two generated classes target the same selector context, their declaration blocks are merged and the later value wins per property. It accepts results, raw class strings, falsy values, and nested arrays:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=typeof window<`u`&&typeof document<`u`;var t=class{nodeType=1;nodeName=``;nodeValue=null;parentNode=null;_childNodes=null;textContent=``;get childNodes(){let e=this._childNodes??[];return{...e,length:e.length,item:t=>e[t]||null,[Symbol.iterator]:function*(){for(let t of e)yield t},forEach:t=>{for(let n=0;n<e.length;n++)t(e[n],n,this.childNodes)},entries:function*(){for(let t=0;t<e.length;t++)yield[t,e[t]]},keys:function*(){for(let t=0;t<e.length;t++)yield t},values:function*(){for(let t of e)yield t}}}},n=class{get cssText(){let e=Object.entries(this);return e.length===0?``:e.map(([e,t])=>`${e}: ${t}`).join(`; `)}setProperty(e,t){this[e]=t}getPropertyValue(e){return this[e]||``}},r=class{_el;constructor(e){this._el=e}add(...e){let t=this._el.className?this._el.className.split(` `).filter(Boolean):[];for(let n of e)n&&!t.includes(n)&&t.push(n);this._el.className=t.join(` `)}remove(...e){this._el.className&&(this._el.className=this._el.className.split(` `).filter(t=>t&&!e.includes(t)).join(` `))}contains(e){return!!this._el.className&&this._el.className.split(` `).includes(e)}toggle(e,t){let n=this.contains(e);return t===void 0?n?(this.remove(e),!1):(this.add(e),!0):t?(this.add(e),!0):(this.remove(e),!1)}replace(e,t){return this.contains(e)?(this.remove(e),this.add(t),!0):!1}item(e){return this._el.className.split(` `).filter(Boolean)[e]??null}get length(){return this._el.className?this._el.className.split(` `).filter(Boolean).length:0}get value(){return this._el.className}set value(e){this._el.className=e}toString(){return this._el.className}supports(e){return!1}forEach(e){let t=this._el.className.split(` `).filter(Boolean);for(let n=0;n<t.length;n++)e(t[n],n,this)}[Symbol.iterator](){let e=this._el.className.split(` `).filter(Boolean),t=0;return{next(){return t<e.length?{value:e[t++],done:!1}:{value:``,done:!0}}}}entries(){let e=this._el.className.split(` `).filter(Boolean),t=0;return{next(){return t<e.length?{value:[t,e[t++]],done:!1}:{value:[0,``],done:!0}}}}keys(){let e=this.length,t=0;return{next(){return t<e?{value:t++,done:!1}:{value:0,done:!0}}}}values(){return this[Symbol.iterator]()}};function i(e){return typeof e==`object`&&!!e&&`tagName`in e}function a(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===3}function o(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===8}var s=class extends t{tagName;children;className=``;textContent=``;_innerHTML=``;parentNode=null;rawMods;mods;id=``;namespaceURI;sheet;_listeners;_style;_classList;_attributes;get attributes(){return this._attributes
|
|
2
|
-
//# sourceMappingURL=Element-
|
|
1
|
+
const e=typeof window<`u`&&typeof document<`u`;var t=class{nodeType=1;nodeName=``;nodeValue=null;parentNode=null;_childNodes=null;textContent=``;get childNodes(){let e=this._childNodes??[];return{...e,length:e.length,item:t=>e[t]||null,[Symbol.iterator]:function*(){for(let t of e)yield t},forEach:t=>{for(let n=0;n<e.length;n++)t(e[n],n,this.childNodes)},entries:function*(){for(let t=0;t<e.length;t++)yield[t,e[t]]},keys:function*(){for(let t=0;t<e.length;t++)yield t},values:function*(){for(let t of e)yield t}}}},n=class{get cssText(){let e=Object.entries(this);return e.length===0?``:e.map(([e,t])=>`${e}: ${t}`).join(`; `)}setProperty(e,t){this[e]=t}getPropertyValue(e){return this[e]||``}},r=class{_el;constructor(e){this._el=e}add(...e){let t=this._el.className?this._el.className.split(` `).filter(Boolean):[];for(let n of e)n&&!t.includes(n)&&t.push(n);this._el.className=t.join(` `)}remove(...e){this._el.className&&(this._el.className=this._el.className.split(` `).filter(t=>t&&!e.includes(t)).join(` `))}contains(e){return!!this._el.className&&this._el.className.split(` `).includes(e)}toggle(e,t){let n=this.contains(e);return t===void 0?n?(this.remove(e),!1):(this.add(e),!0):t?(this.add(e),!0):(this.remove(e),!1)}replace(e,t){return this.contains(e)?(this.remove(e),this.add(t),!0):!1}item(e){return this._el.className.split(` `).filter(Boolean)[e]??null}get length(){return this._el.className?this._el.className.split(` `).filter(Boolean).length:0}get value(){return this._el.className}set value(e){this._el.className=e}toString(){return this._el.className}supports(e){return!1}forEach(e){let t=this._el.className.split(` `).filter(Boolean);for(let n=0;n<t.length;n++)e(t[n],n,this)}[Symbol.iterator](){let e=this._el.className.split(` `).filter(Boolean),t=0;return{next(){return t<e.length?{value:e[t++],done:!1}:{value:``,done:!0}}}}entries(){let e=this._el.className.split(` `).filter(Boolean),t=0;return{next(){return t<e.length?{value:[t,e[t++]],done:!1}:{value:[0,``],done:!0}}}}keys(){let e=this.length,t=0;return{next(){return t<e?{value:t++,done:!1}:{value:0,done:!0}}}}values(){return this[Symbol.iterator]()}};function i(e){return typeof e==`object`&&!!e&&`tagName`in e}function a(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===3}function o(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===8}var s=class extends t{tagName;children;className=``;textContent=``;_innerHTML=``;parentNode=null;rawMods;mods;id=``;namespaceURI;sheet;_listeners;_style;_classList;_attributes;get attributes(){return this._attributes??=/* @__PURE__ */ new Map}set attributes(e){this._attributes=e}get style(){return this._style??=new n}set style(e){this._style=e}get classList(){return this._classList??=new r(this)}set classList(e){this._classList=e}get innerHTML(){return this.serializeChildren()}set innerHTML(e){this._innerHTML=e}serializeChildren(){let e=``;for(let t of this.children)i(t)?e+=this.serializeElement(t):a(t)?e+=t.textContent||``:o(t)&&(e+=`<!--${t.data||``}-->`);return e}serializeElement(e){let t=e.tagName.toLowerCase(),n=`<${t}`;if(e.id&&(n+=` id="${e.id}"`),e.className&&(n+=` class="${e.className}"`),e._attributes)for(let[t,r]of e._attributes)t!==`id`&&t!==`class`&&(n+=` ${t}="${r}"`);if(n+=`>`,e.children&&e.children.length>0)for(let t of e.children)i(t)?n+=this.serializeElement(t):a(t)?n+=t.textContent||``:o(t)&&(n+=`<!--${t.data||``}-->`);return n+=`</${t}>`,n}constructor(t){if(super(),this.tagName=t.toLowerCase(),this.nodeType=1,this.nodeName=t.toUpperCase(),this.children=[],!e)this._listeners=null;else{this._listeners=/* @__PURE__ */ new Map;let e={};if(this.style=new Proxy({},{get:(t,n)=>n===`setProperty`?(t,n)=>{e[t]=n}:n===`getPropertyValue`?t=>e[t]||``:n===`cssText`?Object.entries(e).map(([e,t])=>`${e}: ${t}`).join(`; `):e[n],set:(t,n,r)=>(e[n]=r,!0)}),this.tagName===`style`){let e=[];this.sheet={cssRules:e,insertRule:(t,n)=>{let r=n??e.length,i;if(t.trim().startsWith(`@`)){let e=[],n=t.replace(/^@\w+\s+/,``).replace(/\s*\{[\s\S]*\}$/,``).trim();i={cssText:t,conditionText:n,media:{mediaText:n},cssRules:e,insertRule:(t,n)=>{let r=n??e.length;return e.splice(r,0,{cssText:t,selectorText:t.split(`{`)[0].trim(),style:{},type:1}),r},deleteRule:t=>{e.splice(t,1)},type:4}}else i={cssText:t,selectorText:t.split(`{`)[0].trim(),style:{},type:1};return e.splice(r,0,i),r},deleteRule:t=>{e.splice(t,1)}}}this.classList=c(this)}}appendChild(t){if(t?.nodeType===11){let e=t.childNodes;t.childNodes=[],t.children&&=[];for(let t=0;t<e.length;t++)this.appendChild(e[t]);return t}return this.children.push(t),e&&this._childNodes&&this._childNodes.push(t),typeof t==`object`&&t&&`parentNode`in t&&(t.parentNode=this),t}setAttribute(e,t){(this._attributes??=/* @__PURE__ */ new Map).set(e,t),e===`class`?this.className=t:e===`id`&&(this.id=t)}getAttribute(e){return this._attributes?.get(e)??null}removeAttribute(e){this._attributes?.delete(e),e===`class`&&(this.className=``)}hasAttribute(e){return this._attributes?.has(e)??!1}insertBefore(t,n){if(n===null)return this.appendChild(t);if(t?.nodeType===11){let e=t.childNodes;t.childNodes=[],t.children&&=[];for(let t=0;t<e.length;t++)this.insertBefore(e[t],n);return t}let r=this.children.indexOf(n);if(r!==-1){if(this.children.splice(r,0,t),e&&this._childNodes){let e=this._childNodes.indexOf(n);e!==-1&&this._childNodes.splice(e,0,t)}typeof t==`object`&&t&&`parentNode`in t&&(t.parentNode=this)}return t}removeChild(t){let n=this.children.indexOf(t);if(n!==-1){if(this.children.splice(n,1),e&&this._childNodes){let e=this._childNodes.indexOf(t);e!==-1&&this._childNodes.splice(e,1)}typeof t==`object`&&t&&`parentNode`in t&&(t.parentNode=null)}return t}replaceChild(t,n){let r=this.children.indexOf(n);if(r!==-1){if(this.children[r]=t,e&&this._childNodes){let e=this._childNodes.indexOf(n);e!==-1&&(this._childNodes[e]=t)}typeof t==`object`&&t&&`parentNode`in t&&(t.parentNode=this),typeof n==`object`&&n&&`parentNode`in n&&(n.parentNode=null)}return n}addEventListener(e,t){this._listeners&&(this._listeners.has(e)||this._listeners.set(e,/* @__PURE__ */ new Set),this._listeners.get(e).add(t))}removeEventListener(e,t){let n=this._listeners?.get(e);n&&n.delete(t)}dispatchEvent(e){let t=this._listeners?.get(e.type);if(t)for(let n of t)try{n(e)}catch(e){console.error(`Error in event listener:`,e)}return e.bubbles&&this.parentNode&&typeof this.parentNode==`object`&&`dispatchEvent`in this.parentNode&&typeof this.parentNode.dispatchEvent==`function`&&this.parentNode.dispatchEvent(e),!0}querySelector(e){if(e.startsWith(`#`)){let t=e.slice(1);return this.querySelectorById(t)}if(e.startsWith(`.`)){let t=e.slice(1);return this.querySelectorByClass(t)}return this.querySelectorByTag(e)}querySelectorById(e){if(this.id===e)return this;for(let t of this.children)if(i(t)){if(t.id===e)return t;let n=t.querySelector(`#${e}`);if(n)return n}return null}querySelectorByClass(e){if(this.classList.contains(e))return this;for(let t of this.children)if(i(t)){if(t.classList?.contains(e))return t;let n=t.querySelector(`.${e}`);if(n)return n}return null}querySelectorByTag(e){let t=e.toLowerCase();if(this.tagName.toLowerCase()===t)return this;for(let n of this.children)if(i(n)){if(n.tagName.toLowerCase()===t)return n;let r=n.querySelector(e);if(r)return r}return null}querySelectorAll(e){let t=[];if(e.startsWith(`#`)){let n=this.querySelector(e);n&&t.push(n)}else if(e.startsWith(`.`)){let n=e.slice(1);this.querySelectorAllByClass(n,t)}else{let n=e.toLowerCase();this.querySelectorAllByTag(n,t)}return t}querySelectorAllByClass(e,t){this.classList.contains(e)&&t.push(this);for(let n of this.children)i(n)&&n.querySelectorAllByClass(e,t)}querySelectorAllByTag(e,t){this.tagName.toLowerCase()===e&&t.push(this);for(let n of this.children)i(n)&&n.querySelectorAllByTag(e,t)}};function c(e){let t=()=>e.className.split(` `).filter(e=>e),n=t=>{e.className=t.join(` `)},r={add:(...e)=>{let r=t();for(let t of e)t&&!r.includes(t)&&r.push(t);n(r)},remove:(...e)=>{e.length!==0&&n(t().filter(t=>!e.includes(t)))},toggle:(e,t)=>{let n=r.contains(e);return t===void 0?n?(r.remove(e),!1):(r.add(e),!0):t?(r.add(e),!0):(r.remove(e),!1)},contains:e=>t().includes(e),replace:(e,r)=>{let i=t(),a=i.indexOf(e);return a!==-1&&(i[a]=r,n(i),!0)},item:e=>t()[e]||null,get length(){return t().length},toString:()=>e.className,[Symbol.iterator]:function*(){yield*t()},forEach:e=>{let n=t();for(let t=0;t<n.length;t++)e(n[t],t,r)},entries:function*(){let e=t();for(let t=0;t<e.length;t++)yield[t,e[t]]},keys:function*(){let e=t();for(let t=0;t<e.length;t++)yield t},values:function*(){yield*t()},get value(){return e.className},set value(t){e.className=t},supports:e=>!1};return r}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
|
|
2
|
+
//# sourceMappingURL=Element-BUdteOsZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Element-C3mU75-a.mjs","names":[],"sources":["../src/shared/environment.ts","../src/polyfill/Node.ts","../src/polyfill/Element.ts"],"sourcesContent":["/**\n * Simplified environment detection - minimal overhead for smaller bundle size\n */\n\n// Basic environment detection - no complex caching or edge cases\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n","/**\n * Base Node class for instanceof checks in Node.js polyfill\n */\nexport class NucloNode {\n nodeType: number = 1; // ELEMENT_NODE\n nodeName: string = '';\n nodeValue: string | null = null;\n parentNode: unknown = null;\n _childNodes: Node[] | null = null;\n textContent: string = '';\n\n get childNodes(): NodeListOf<ChildNode> {\n const nodes = this._childNodes ?? [];\n return {\n ...nodes,\n length: nodes.length,\n item: (index: number) => (nodes[index] as ChildNode) || null,\n [Symbol.iterator]: function* () {\n for (const node of nodes) {\n yield node as ChildNode;\n }\n },\n forEach: (callback: (value: ChildNode, key: number, parent: NodeListOf<ChildNode>) => void) => {\n for (let i = 0; i < nodes.length; i++) {\n callback(nodes[i] as ChildNode, i, this.childNodes);\n }\n },\n entries: function* () {\n for (let i = 0; i < nodes.length; i++) {\n yield [i, nodes[i] as ChildNode] as [number, ChildNode];\n }\n },\n keys: function* () {\n for (let i = 0; i < nodes.length; i++) {\n yield i;\n }\n },\n values: function* () {\n for (const node of nodes) {\n yield node as ChildNode;\n }\n }\n } as unknown as NodeListOf<ChildNode>;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NucloNode } from './Node';\nimport { isBrowser } from '../shared/environment';\n\n/**\n * Lightweight style object for SSR — prototype methods instead of Object.defineProperty per element.\n * Stores CSS properties as own properties and provides cssText/setProperty/getPropertyValue via prototype.\n */\nclass SSRStyle {\n [key: string]: unknown;\n\n get cssText(): string {\n const entries = Object.entries(this);\n if (entries.length === 0) return '';\n return entries.map(([k, v]) => `${k}: ${v}`).join('; ');\n }\n\n setProperty(name: string, value: string): void {\n (this as Record<string, unknown>)[name] = value;\n }\n\n getPropertyValue(name: string): string {\n return ((this as Record<string, unknown>)[name] as string) || '';\n }\n}\n\n// Lightweight classList for SSR — prototype methods instead of per-element closures\nclass SSRClassList {\n private _el: NucloElement;\n constructor(el: NucloElement) { this._el = el; }\n\n add(...tokens: string[]): void {\n const classes = this._el.className ? this._el.className.split(' ').filter(Boolean) : [];\n for (const t of tokens) if (t && !classes.includes(t)) classes.push(t);\n this._el.className = classes.join(' ');\n }\n remove(...tokens: string[]): void {\n if (!this._el.className) return;\n this._el.className = this._el.className.split(' ').filter(c => c && !tokens.includes(c)).join(' ');\n }\n contains(token: string): boolean {\n return !!this._el.className && this._el.className.split(' ').includes(token);\n }\n toggle(token: string, force?: boolean): boolean {\n const has = this.contains(token);\n if (force === undefined) { if (has) { this.remove(token); return false; } this.add(token); return true; }\n if (force) { this.add(token); return true; }\n this.remove(token); return false;\n }\n replace(oldToken: string, newToken: string): boolean {\n if (!this.contains(oldToken)) return false;\n this.remove(oldToken); this.add(newToken); return true;\n }\n item(index: number): string | null { return (this._el.className.split(' ').filter(Boolean)[index]) ?? null; }\n get length(): number { return this._el.className ? this._el.className.split(' ').filter(Boolean).length : 0; }\n get value(): string { return this._el.className; }\n set value(v: string) { this._el.className = v; }\n toString(): string { return this._el.className; }\n supports(_token: string): boolean { return false; }\n forEach(cb: (value: string, key: number, parent: DOMTokenList) => void): void {\n const classes = this._el.className.split(' ').filter(Boolean);\n for (let i = 0; i < classes.length; i++) cb(classes[i], i, this as unknown as DOMTokenList);\n }\n [Symbol.iterator](): Iterator<string> {\n const classes = this._el.className.split(' ').filter(Boolean);\n let i = 0;\n return { next(): IteratorResult<string> { return i < classes.length ? { value: classes[i++], done: false } : { value: '', done: true }; } };\n }\n entries(): Iterator<[number, string]> {\n const classes = this._el.className.split(' ').filter(Boolean);\n let i = 0;\n return { next(): IteratorResult<[number, string]> { return i < classes.length ? { value: [i, classes[i++]], done: false } : { value: [0, ''], done: true }; } };\n }\n keys(): Iterator<number> {\n const len = this.length; let i = 0;\n return { next(): IteratorResult<number> { return i < len ? { value: i++, done: false } : { value: 0, done: true }; } };\n }\n values(): Iterator<string> { return this[Symbol.iterator](); }\n}\n\ninterface TextNode {\n nodeType: 3;\n textContent: string;\n}\n\ninterface CommentNode {\n nodeType: 8;\n data: string;\n}\n\nfunction isElementNode(node: unknown): node is NucloElement {\n return typeof node === 'object' && node !== null && 'tagName' in node;\n}\n\nfunction isTextNode(node: unknown): node is TextNode {\n return typeof node === 'object' && node !== null && 'nodeType' in node && (node as { nodeType: number }).nodeType === 3;\n}\n\nfunction isCommentNode(node: unknown): node is CommentNode {\n return typeof node === 'object' && node !== null && 'nodeType' in node && (node as { nodeType: number }).nodeType === 8;\n}\n\nexport class NucloElement extends NucloNode {\n tagName: string;\n children: unknown[];\n className: string = '';\n textContent: string = '';\n private _innerHTML: string = '';\n parentNode: unknown = null;\n rawMods?: unknown[];\n mods?: unknown[];\n id: string = '';\n namespaceURI?: string;\n sheet?: CSSStyleSheet | null;\n private _listeners: Map<string, Set<EventListener>> | null;\n\n // style/classList are allocated lazily: the vast majority of SSR elements\n // never touch either (className is stored on the .className string, and the\n // serializer reads the backing field directly), so eagerly constructing an\n // SSRStyle + SSRClassList per element was pure allocation churn. The browser\n // path assigns these in the constructor, so its getter never lazy-allocates.\n private _style?: CSSStyleDeclaration;\n private _classList?: DOMTokenList;\n\n // attributes is allocated lazily too — most elements carry their identity on\n // .className/.id (separate string fields) and never call setAttribute. Reads\n // short-circuit on the undefined backing map without allocating; the\n // serializer reads _attributes directly. The public getter still lazily\n // materializes a Map for any external `el.attributes` consumer.\n private _attributes?: Map<string, string>;\n\n get attributes(): Map<string, string> {\n return (this._attributes ??= new Map<string, string>());\n }\n set attributes(value: Map<string, string>) {\n this._attributes = value;\n }\n\n get style(): CSSStyleDeclaration {\n return (this._style ??= new SSRStyle() as unknown as CSSStyleDeclaration);\n }\n set style(value: CSSStyleDeclaration) {\n this._style = value;\n }\n\n get classList(): DOMTokenList {\n return (this._classList ??= new SSRClassList(this) as unknown as DOMTokenList);\n }\n set classList(value: DOMTokenList) {\n this._classList = value;\n }\n\n get innerHTML(): string {\n return this.serializeChildren();\n }\n\n set innerHTML(value: string) {\n this._innerHTML = value;\n }\n \n private serializeChildren(): string {\n let html = '';\n for (const child of this.children) {\n if (isElementNode(child)) {\n html += this.serializeElement(child);\n } else if (isTextNode(child)) {\n html += child.textContent || '';\n } else if (isCommentNode(child)) {\n html += `<!--${child.data || ''}-->`;\n }\n }\n return html;\n }\n \n private serializeElement(element: NucloElement): string {\n const tag = element.tagName.toLowerCase();\n let html = `<${tag}`;\n \n // Add attributes\n if (element.id) {\n html += ` id=\"${element.id}\"`;\n }\n if (element.className) {\n html += ` class=\"${element.className}\"`;\n }\n if (element._attributes) {\n for (const [name, value] of element._attributes) {\n if (name !== 'id' && name !== 'class') {\n html += ` ${name}=\"${value}\"`;\n }\n }\n }\n \n html += '>';\n \n // Add children\n if (element.children && element.children.length > 0) {\n for (const child of element.children) {\n if (isElementNode(child)) {\n html += this.serializeElement(child);\n } else if (isTextNode(child)) {\n html += child.textContent || '';\n } else if (isCommentNode(child)) {\n html += `<!--${child.data || ''}-->`;\n }\n }\n }\n \n html += `</${tag}>`;\n return html;\n }\n \n constructor(tagName: string) {\n super();\n this.tagName = tagName.toLowerCase();\n this.nodeType = 1; // ELEMENT_NODE\n this.nodeName = tagName.toUpperCase();\n this.children = [];\n\n if (!isBrowser) {\n // ── SSR path: minimal allocations, no Proxy, no event listeners ──\n // style and classList stay unallocated until first access (see getters).\n this._listeners = null;\n } else {\n // ── Browser path: full-featured Proxy style + DOMTokenList ──\n this._listeners = new Map();\n\n const styleProps: Record<string, string> = {};\n this.style = new Proxy({} as CSSStyleDeclaration, {\n get: (_target, prop: string) => {\n if (prop === 'setProperty') return (name: string, value: string) => { styleProps[name] = value; };\n if (prop === 'getPropertyValue') return (name: string) => styleProps[name] || '';\n if (prop === 'cssText') return Object.entries(styleProps).map(([k, v]) => `${k}: ${v}`).join('; ');\n return styleProps[prop];\n },\n set: (_target, prop: string, value: string) => { styleProps[prop] = value; return true; },\n });\n\n // CSSStyleSheet mock for style elements (browser only)\n if (this.tagName === 'style') {\n const cssRules: CSSRule[] = [];\n this.sheet = {\n cssRules: cssRules as unknown as CSSRuleList,\n insertRule: (rule: string, index?: number) => {\n const idx = index ?? cssRules.length;\n let mockRule: CSSRule;\n if (rule.trim().startsWith('@')) {\n const innerRules: CSSRule[] = [];\n const conditionText = rule.replace(/^@\\w+\\s+/, '').replace(/\\s*\\{[\\s\\S]*\\}$/, '').trim();\n mockRule = {\n cssText: rule, conditionText,\n media: { mediaText: conditionText } as MediaList,\n cssRules: innerRules as unknown as CSSRuleList,\n insertRule: (innerRule: string, innerIndex?: number) => {\n const innerIdx = innerIndex ?? innerRules.length;\n innerRules.splice(innerIdx, 0, { cssText: innerRule, selectorText: innerRule.split('{')[0].trim(), style: {} as CSSStyleDeclaration, type: 1 } as unknown as CSSRule);\n return innerIdx;\n },\n deleteRule: (i: number) => { innerRules.splice(i, 1); },\n type: 4,\n } as unknown as CSSRule;\n } else {\n mockRule = { cssText: rule, selectorText: rule.split('{')[0].trim(), style: {} as CSSStyleDeclaration, type: 1 } as unknown as CSSRule;\n }\n cssRules.splice(idx, 0, mockRule);\n return idx;\n },\n deleteRule: (index: number) => { cssRules.splice(index, 1); },\n } as unknown as CSSStyleSheet;\n }\n\n this.classList = createClassList(this);\n }\n }\n \n appendChild<T extends Node>(child: T): T {\n // Spec behaviour: appending a DocumentFragment moves its children into this\n // node and leaves the fragment empty. The list runtime relies on this to\n // batch row insertions.\n if ((child as any)?.nodeType === 11) {\n // Detach the fragment's backing array before iterating (instead of\n // slicing it) — the fragment is emptied either way, and reassigning\n // first means the loop never has to allocate a copy just to guard\n // against the array it's about to discard.\n const kids = (child as any).childNodes as Node[];\n (child as any).childNodes = [];\n if ((child as any).children) (child as any).children = [];\n for (let i = 0; i < kids.length; i++) this.appendChild(kids[i]);\n return child;\n }\n this.children.push(child);\n if (isBrowser && (this as any)['_childNodes']) {\n (this as any)['_childNodes'].push(child);\n }\n if (typeof child === 'object' && child !== null && 'parentNode' in child) {\n (child as { parentNode: unknown }).parentNode = this;\n }\n return child;\n }\n \n setAttribute(name: string, value: string): void {\n (this._attributes ??= new Map<string, string>()).set(name, value);\n if (name === 'class') {\n this.className = value;\n } else if (name === 'id') {\n this.id = value;\n }\n }\n\n getAttribute(name: string): string | null {\n return this._attributes?.get(name) ?? null;\n }\n\n removeAttribute(name: string): void {\n this._attributes?.delete(name);\n if (name === 'class') {\n this.className = '';\n }\n }\n\n hasAttribute(name: string): boolean {\n return this._attributes?.has(name) ?? false;\n }\n \n insertBefore<T extends Node>(newNode: T, referenceNode: Node | null): T {\n if (referenceNode === null) {\n return this.appendChild(newNode);\n }\n // Spec behaviour: inserting a DocumentFragment moves its children (in order)\n // before the reference node and empties the fragment.\n if ((newNode as any)?.nodeType === 11) {\n const kids = (newNode as any).childNodes as Node[];\n (newNode as any).childNodes = [];\n if ((newNode as any).children) (newNode as any).children = [];\n for (let i = 0; i < kids.length; i++) this.insertBefore(kids[i], referenceNode);\n return newNode;\n }\n const index = this.children.indexOf(referenceNode);\n if (index !== -1) {\n this.children.splice(index, 0, newNode);\n if (isBrowser && (this as any)['_childNodes']) {\n const childNodesIndex = (this as any)['_childNodes'].indexOf(referenceNode);\n if (childNodesIndex !== -1) {\n (this as any)['_childNodes'].splice(childNodesIndex, 0, newNode);\n }\n }\n if (typeof newNode === 'object' && newNode !== null && 'parentNode' in newNode) {\n (newNode as { parentNode: unknown }).parentNode = this;\n }\n }\n return newNode;\n }\n \n removeChild<T extends Node>(child: T): T {\n const index = this.children.indexOf(child);\n if (index !== -1) {\n this.children.splice(index, 1);\n if (isBrowser && (this as any)['_childNodes']) {\n const cnIndex = (this as any)['_childNodes'].indexOf(child);\n if (cnIndex !== -1) {\n (this as any)['_childNodes'].splice(cnIndex, 1);\n }\n }\n if (typeof child === 'object' && child !== null && 'parentNode' in child) {\n (child as { parentNode: unknown }).parentNode = null;\n }\n }\n return child;\n }\n\n replaceChild<T extends Node>(newChild: Node, oldChild: T): T {\n const index = this.children.indexOf(oldChild);\n if (index !== -1) {\n this.children[index] = newChild;\n if (isBrowser && (this as any)['_childNodes']) {\n const cnIndex = (this as any)['_childNodes'].indexOf(oldChild);\n if (cnIndex !== -1) {\n (this as any)['_childNodes'][cnIndex] = newChild;\n }\n }\n if (typeof newChild === 'object' && newChild !== null && 'parentNode' in newChild) {\n (newChild as { parentNode: unknown }).parentNode = this;\n }\n if (typeof oldChild === 'object' && oldChild !== null && 'parentNode' in oldChild) {\n (oldChild as { parentNode: unknown }).parentNode = null;\n }\n }\n return oldChild;\n }\n \n addEventListener(type: string, listener: EventListener): void {\n if (!this._listeners) return;\n if (!this._listeners.has(type)) {\n this._listeners.set(type, new Set());\n }\n this._listeners.get(type)!.add(listener);\n }\n\n removeEventListener(type: string, listener: EventListener): void {\n const listeners = this._listeners?.get(type);\n if (listeners) {\n listeners.delete(listener);\n }\n }\n\n dispatchEvent(event: Event): boolean {\n const listeners = this._listeners?.get(event.type);\n if (listeners) {\n for (const listener of listeners) {\n try {\n listener(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in event listener:', error);\n }\n }\n }\n if (event.bubbles && this.parentNode && typeof this.parentNode === 'object' && 'dispatchEvent' in this.parentNode && typeof this.parentNode.dispatchEvent === 'function') {\n this.parentNode.dispatchEvent(event);\n }\n return true;\n }\n \n querySelector(selector: string): Element | null {\n // Simple implementation - supports basic selectors\n // #id, .class, tagName\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return this.querySelectorById(id);\n } else if (selector.startsWith('.')) {\n const className = selector.slice(1);\n return this.querySelectorByClass(className);\n } else {\n // Tag name selector\n return this.querySelectorByTag(selector);\n }\n }\n \n private querySelectorById(id: string): Element | null {\n // Check self\n if (this.id === id) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.id === id) {\n return child as unknown as Element;\n }\n const found = child.querySelector(`#${id}`);\n if (found) return found;\n }\n }\n return null;\n }\n \n private querySelectorByClass(className: string): Element | null {\n // Check self\n if (this.classList.contains(className)) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.classList?.contains(className)) {\n return child as unknown as Element;\n }\n const found = child.querySelector(`.${className}`);\n if (found) return found;\n }\n }\n return null;\n }\n \n private querySelectorByTag(tagName: string): Element | null {\n const lowerTag = tagName.toLowerCase();\n // Check self\n if (this.tagName.toLowerCase() === lowerTag) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.tagName.toLowerCase() === lowerTag) {\n return child as unknown as Element;\n }\n const found = child.querySelector(tagName);\n if (found) return found;\n }\n }\n return null;\n }\n \n querySelectorAll(selector: string): NodeListOf<Element> {\n const results: Element[] = [];\n \n if (selector.startsWith('#')) {\n const found = this.querySelector(selector);\n if (found) results.push(found);\n } else if (selector.startsWith('.')) {\n const className = selector.slice(1);\n this.querySelectorAllByClass(className, results);\n } else {\n const tagName = selector.toLowerCase();\n this.querySelectorAllByTag(tagName, results);\n }\n \n return results as unknown as NodeListOf<Element>;\n }\n \n private querySelectorAllByClass(className: string, results: Element[]): void {\n if (this.classList.contains(className)) {\n results.push(this as unknown as Element);\n }\n // Recursion alone collects matching descendants — checking the child here\n // as well would push direct children twice.\n for (const child of this.children) {\n if (isElementNode(child)) {\n child.querySelectorAllByClass(className, results);\n }\n }\n }\n\n private querySelectorAllByTag(tagName: string, results: Element[]): void {\n if (this.tagName.toLowerCase() === tagName) {\n results.push(this as unknown as Element);\n }\n for (const child of this.children) {\n if (isElementNode(child)) {\n child.querySelectorAllByTag(tagName, results);\n }\n }\n }\n}\n\nfunction createClassList(owner: NucloElement): DOMTokenList {\n const getClasses = () => owner.className.split(' ').filter((c) => c);\n const setClasses = (classes: string[]) => {\n owner.className = classes.join(' ');\n };\n\n const classList = {\n add: (...tokens: string[]) => {\n const classes = getClasses();\n for (const token of tokens) {\n if (token && !classes.includes(token)) {\n classes.push(token);\n }\n }\n setClasses(classes);\n },\n remove: (...tokens: string[]) => {\n if (tokens.length === 0) return;\n setClasses(getClasses().filter((c) => !tokens.includes(c)));\n },\n toggle: (token: string, force?: boolean) => {\n const hasClass = classList.contains(token);\n if (force === undefined) {\n if (hasClass) {\n classList.remove(token);\n return false;\n }\n classList.add(token);\n return true;\n }\n if (force) {\n classList.add(token);\n return true;\n }\n classList.remove(token);\n return false;\n },\n contains: (token: string) => getClasses().includes(token),\n replace: (oldToken: string, newToken: string) => {\n const classes = getClasses();\n const index = classes.indexOf(oldToken);\n if (index === -1) return false;\n classes[index] = newToken;\n setClasses(classes);\n return true;\n },\n item: (index: number) => getClasses()[index] || null,\n get length() {\n return getClasses().length;\n },\n toString: () => owner.className,\n [Symbol.iterator]: function* () {\n yield* getClasses();\n },\n forEach: (callback: (value: string, key: number, parent: DOMTokenList) => void) => {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n callback(classes[i], i, classList as unknown as DOMTokenList);\n }\n },\n entries: function* () {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n yield [i, classes[i]] as [number, string];\n }\n },\n keys: function* () {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n yield i;\n }\n },\n values: function* () {\n yield* getClasses();\n },\n get value() {\n return owner.className;\n },\n set value(value: string) {\n owner.className = value;\n },\n supports: (_token: string) => false\n };\n\n return classList as unknown as DOMTokenList;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Element-BUdteOsZ.cjs","names":[],"sources":["../src/shared/environment.ts","../src/polyfill/Node.ts","../src/polyfill/Element.ts"],"sourcesContent":["/**\n * Simplified environment detection - minimal overhead for smaller bundle size\n */\n\n// Basic environment detection - no complex caching or edge cases\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n","/**\n * Base Node class for instanceof checks in Node.js polyfill\n */\nexport class NucloNode {\n nodeType: number = 1; // ELEMENT_NODE\n nodeName: string = '';\n nodeValue: string | null = null;\n parentNode: unknown = null;\n _childNodes: Node[] | null = null;\n textContent: string = '';\n\n get childNodes(): NodeListOf<ChildNode> {\n const nodes = this._childNodes ?? [];\n return {\n ...nodes,\n length: nodes.length,\n item: (index: number) => (nodes[index] as ChildNode) || null,\n [Symbol.iterator]: function* () {\n for (const node of nodes) {\n yield node as ChildNode;\n }\n },\n forEach: (callback: (value: ChildNode, key: number, parent: NodeListOf<ChildNode>) => void) => {\n for (let i = 0; i < nodes.length; i++) {\n callback(nodes[i] as ChildNode, i, this.childNodes);\n }\n },\n entries: function* () {\n for (let i = 0; i < nodes.length; i++) {\n yield [i, nodes[i] as ChildNode] as [number, ChildNode];\n }\n },\n keys: function* () {\n for (let i = 0; i < nodes.length; i++) {\n yield i;\n }\n },\n values: function* () {\n for (const node of nodes) {\n yield node as ChildNode;\n }\n }\n } as unknown as NodeListOf<ChildNode>;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NucloNode } from './Node';\nimport { isBrowser } from '../shared/environment';\n\n/**\n * Lightweight style object for SSR — prototype methods instead of Object.defineProperty per element.\n * Stores CSS properties as own properties and provides cssText/setProperty/getPropertyValue via prototype.\n */\nclass SSRStyle {\n [key: string]: unknown;\n\n get cssText(): string {\n const entries = Object.entries(this);\n if (entries.length === 0) return '';\n return entries.map(([k, v]) => `${k}: ${v}`).join('; ');\n }\n\n setProperty(name: string, value: string): void {\n (this as Record<string, unknown>)[name] = value;\n }\n\n getPropertyValue(name: string): string {\n return ((this as Record<string, unknown>)[name] as string) || '';\n }\n}\n\n// Lightweight classList for SSR — prototype methods instead of per-element closures\nclass SSRClassList {\n private _el: NucloElement;\n constructor(el: NucloElement) { this._el = el; }\n\n add(...tokens: string[]): void {\n const classes = this._el.className ? this._el.className.split(' ').filter(Boolean) : [];\n for (const t of tokens) if (t && !classes.includes(t)) classes.push(t);\n this._el.className = classes.join(' ');\n }\n remove(...tokens: string[]): void {\n if (!this._el.className) return;\n this._el.className = this._el.className.split(' ').filter(c => c && !tokens.includes(c)).join(' ');\n }\n contains(token: string): boolean {\n return !!this._el.className && this._el.className.split(' ').includes(token);\n }\n toggle(token: string, force?: boolean): boolean {\n const has = this.contains(token);\n if (force === undefined) { if (has) { this.remove(token); return false; } this.add(token); return true; }\n if (force) { this.add(token); return true; }\n this.remove(token); return false;\n }\n replace(oldToken: string, newToken: string): boolean {\n if (!this.contains(oldToken)) return false;\n this.remove(oldToken); this.add(newToken); return true;\n }\n item(index: number): string | null { return (this._el.className.split(' ').filter(Boolean)[index]) ?? null; }\n get length(): number { return this._el.className ? this._el.className.split(' ').filter(Boolean).length : 0; }\n get value(): string { return this._el.className; }\n set value(v: string) { this._el.className = v; }\n toString(): string { return this._el.className; }\n supports(_token: string): boolean { return false; }\n forEach(cb: (value: string, key: number, parent: DOMTokenList) => void): void {\n const classes = this._el.className.split(' ').filter(Boolean);\n for (let i = 0; i < classes.length; i++) cb(classes[i], i, this as unknown as DOMTokenList);\n }\n [Symbol.iterator](): Iterator<string> {\n const classes = this._el.className.split(' ').filter(Boolean);\n let i = 0;\n return { next(): IteratorResult<string> { return i < classes.length ? { value: classes[i++], done: false } : { value: '', done: true }; } };\n }\n entries(): Iterator<[number, string]> {\n const classes = this._el.className.split(' ').filter(Boolean);\n let i = 0;\n return { next(): IteratorResult<[number, string]> { return i < classes.length ? { value: [i, classes[i++]], done: false } : { value: [0, ''], done: true }; } };\n }\n keys(): Iterator<number> {\n const len = this.length; let i = 0;\n return { next(): IteratorResult<number> { return i < len ? { value: i++, done: false } : { value: 0, done: true }; } };\n }\n values(): Iterator<string> { return this[Symbol.iterator](); }\n}\n\ninterface TextNode {\n nodeType: 3;\n textContent: string;\n}\n\ninterface CommentNode {\n nodeType: 8;\n data: string;\n}\n\nfunction isElementNode(node: unknown): node is NucloElement {\n return typeof node === 'object' && node !== null && 'tagName' in node;\n}\n\nfunction isTextNode(node: unknown): node is TextNode {\n return typeof node === 'object' && node !== null && 'nodeType' in node && (node as { nodeType: number }).nodeType === 3;\n}\n\nfunction isCommentNode(node: unknown): node is CommentNode {\n return typeof node === 'object' && node !== null && 'nodeType' in node && (node as { nodeType: number }).nodeType === 8;\n}\n\nexport class NucloElement extends NucloNode {\n tagName: string;\n children: unknown[];\n className: string = '';\n textContent: string = '';\n private _innerHTML: string = '';\n parentNode: unknown = null;\n rawMods?: unknown[];\n mods?: unknown[];\n id: string = '';\n namespaceURI?: string;\n sheet?: CSSStyleSheet | null;\n private _listeners: Map<string, Set<EventListener>> | null;\n\n // style/classList are allocated lazily: the vast majority of SSR elements\n // never touch either (className is stored on the .className string, and the\n // serializer reads the backing field directly), so eagerly constructing an\n // SSRStyle + SSRClassList per element was pure allocation churn. The browser\n // path assigns these in the constructor, so its getter never lazy-allocates.\n private _style?: CSSStyleDeclaration;\n private _classList?: DOMTokenList;\n\n // attributes is allocated lazily too — most elements carry their identity on\n // .className/.id (separate string fields) and never call setAttribute. Reads\n // short-circuit on the undefined backing map without allocating; the\n // serializer reads _attributes directly. The public getter still lazily\n // materializes a Map for any external `el.attributes` consumer.\n private _attributes?: Map<string, string>;\n\n get attributes(): Map<string, string> {\n return (this._attributes ??= new Map<string, string>());\n }\n set attributes(value: Map<string, string>) {\n this._attributes = value;\n }\n\n get style(): CSSStyleDeclaration {\n return (this._style ??= new SSRStyle() as unknown as CSSStyleDeclaration);\n }\n set style(value: CSSStyleDeclaration) {\n this._style = value;\n }\n\n get classList(): DOMTokenList {\n return (this._classList ??= new SSRClassList(this) as unknown as DOMTokenList);\n }\n set classList(value: DOMTokenList) {\n this._classList = value;\n }\n\n get innerHTML(): string {\n return this.serializeChildren();\n }\n\n set innerHTML(value: string) {\n this._innerHTML = value;\n }\n \n private serializeChildren(): string {\n let html = '';\n for (const child of this.children) {\n if (isElementNode(child)) {\n html += this.serializeElement(child);\n } else if (isTextNode(child)) {\n html += child.textContent || '';\n } else if (isCommentNode(child)) {\n html += `<!--${child.data || ''}-->`;\n }\n }\n return html;\n }\n \n private serializeElement(element: NucloElement): string {\n const tag = element.tagName.toLowerCase();\n let html = `<${tag}`;\n \n // Add attributes\n if (element.id) {\n html += ` id=\"${element.id}\"`;\n }\n if (element.className) {\n html += ` class=\"${element.className}\"`;\n }\n if (element._attributes) {\n for (const [name, value] of element._attributes) {\n if (name !== 'id' && name !== 'class') {\n html += ` ${name}=\"${value}\"`;\n }\n }\n }\n \n html += '>';\n \n // Add children\n if (element.children && element.children.length > 0) {\n for (const child of element.children) {\n if (isElementNode(child)) {\n html += this.serializeElement(child);\n } else if (isTextNode(child)) {\n html += child.textContent || '';\n } else if (isCommentNode(child)) {\n html += `<!--${child.data || ''}-->`;\n }\n }\n }\n \n html += `</${tag}>`;\n return html;\n }\n \n constructor(tagName: string) {\n super();\n this.tagName = tagName.toLowerCase();\n this.nodeType = 1; // ELEMENT_NODE\n this.nodeName = tagName.toUpperCase();\n this.children = [];\n\n if (!isBrowser) {\n // ── SSR path: minimal allocations, no Proxy, no event listeners ──\n // style and classList stay unallocated until first access (see getters).\n this._listeners = null;\n } else {\n // ── Browser path: full-featured Proxy style + DOMTokenList ──\n this._listeners = new Map();\n\n const styleProps: Record<string, string> = {};\n this.style = new Proxy({} as CSSStyleDeclaration, {\n get: (_target, prop: string) => {\n if (prop === 'setProperty') return (name: string, value: string) => { styleProps[name] = value; };\n if (prop === 'getPropertyValue') return (name: string) => styleProps[name] || '';\n if (prop === 'cssText') return Object.entries(styleProps).map(([k, v]) => `${k}: ${v}`).join('; ');\n return styleProps[prop];\n },\n set: (_target, prop: string, value: string) => { styleProps[prop] = value; return true; },\n });\n\n // CSSStyleSheet mock for style elements (browser only)\n if (this.tagName === 'style') {\n const cssRules: CSSRule[] = [];\n this.sheet = {\n cssRules: cssRules as unknown as CSSRuleList,\n insertRule: (rule: string, index?: number) => {\n const idx = index ?? cssRules.length;\n let mockRule: CSSRule;\n if (rule.trim().startsWith('@')) {\n const innerRules: CSSRule[] = [];\n const conditionText = rule.replace(/^@\\w+\\s+/, '').replace(/\\s*\\{[\\s\\S]*\\}$/, '').trim();\n mockRule = {\n cssText: rule, conditionText,\n media: { mediaText: conditionText } as MediaList,\n cssRules: innerRules as unknown as CSSRuleList,\n insertRule: (innerRule: string, innerIndex?: number) => {\n const innerIdx = innerIndex ?? innerRules.length;\n innerRules.splice(innerIdx, 0, { cssText: innerRule, selectorText: innerRule.split('{')[0].trim(), style: {} as CSSStyleDeclaration, type: 1 } as unknown as CSSRule);\n return innerIdx;\n },\n deleteRule: (i: number) => { innerRules.splice(i, 1); },\n type: 4,\n } as unknown as CSSRule;\n } else {\n mockRule = { cssText: rule, selectorText: rule.split('{')[0].trim(), style: {} as CSSStyleDeclaration, type: 1 } as unknown as CSSRule;\n }\n cssRules.splice(idx, 0, mockRule);\n return idx;\n },\n deleteRule: (index: number) => { cssRules.splice(index, 1); },\n } as unknown as CSSStyleSheet;\n }\n\n this.classList = createClassList(this);\n }\n }\n \n appendChild<T extends Node>(child: T): T {\n // Spec behaviour: appending a DocumentFragment moves its children into this\n // node and leaves the fragment empty. The list runtime relies on this to\n // batch row insertions.\n if ((child as any)?.nodeType === 11) {\n // Detach the fragment's backing array before iterating (instead of\n // slicing it) — the fragment is emptied either way, and reassigning\n // first means the loop never has to allocate a copy just to guard\n // against the array it's about to discard.\n const kids = (child as any).childNodes as Node[];\n (child as any).childNodes = [];\n if ((child as any).children) (child as any).children = [];\n for (let i = 0; i < kids.length; i++) this.appendChild(kids[i]);\n return child;\n }\n this.children.push(child);\n if (isBrowser && (this as any)['_childNodes']) {\n (this as any)['_childNodes'].push(child);\n }\n if (typeof child === 'object' && child !== null && 'parentNode' in child) {\n (child as { parentNode: unknown }).parentNode = this;\n }\n return child;\n }\n \n setAttribute(name: string, value: string): void {\n (this._attributes ??= new Map<string, string>()).set(name, value);\n if (name === 'class') {\n this.className = value;\n } else if (name === 'id') {\n this.id = value;\n }\n }\n\n getAttribute(name: string): string | null {\n return this._attributes?.get(name) ?? null;\n }\n\n removeAttribute(name: string): void {\n this._attributes?.delete(name);\n if (name === 'class') {\n this.className = '';\n }\n }\n\n hasAttribute(name: string): boolean {\n return this._attributes?.has(name) ?? false;\n }\n \n insertBefore<T extends Node>(newNode: T, referenceNode: Node | null): T {\n if (referenceNode === null) {\n return this.appendChild(newNode);\n }\n // Spec behaviour: inserting a DocumentFragment moves its children (in order)\n // before the reference node and empties the fragment.\n if ((newNode as any)?.nodeType === 11) {\n const kids = (newNode as any).childNodes as Node[];\n (newNode as any).childNodes = [];\n if ((newNode as any).children) (newNode as any).children = [];\n for (let i = 0; i < kids.length; i++) this.insertBefore(kids[i], referenceNode);\n return newNode;\n }\n const index = this.children.indexOf(referenceNode);\n if (index !== -1) {\n this.children.splice(index, 0, newNode);\n if (isBrowser && (this as any)['_childNodes']) {\n const childNodesIndex = (this as any)['_childNodes'].indexOf(referenceNode);\n if (childNodesIndex !== -1) {\n (this as any)['_childNodes'].splice(childNodesIndex, 0, newNode);\n }\n }\n if (typeof newNode === 'object' && newNode !== null && 'parentNode' in newNode) {\n (newNode as { parentNode: unknown }).parentNode = this;\n }\n }\n return newNode;\n }\n \n removeChild<T extends Node>(child: T): T {\n const index = this.children.indexOf(child);\n if (index !== -1) {\n this.children.splice(index, 1);\n if (isBrowser && (this as any)['_childNodes']) {\n const cnIndex = (this as any)['_childNodes'].indexOf(child);\n if (cnIndex !== -1) {\n (this as any)['_childNodes'].splice(cnIndex, 1);\n }\n }\n if (typeof child === 'object' && child !== null && 'parentNode' in child) {\n (child as { parentNode: unknown }).parentNode = null;\n }\n }\n return child;\n }\n\n replaceChild<T extends Node>(newChild: Node, oldChild: T): T {\n const index = this.children.indexOf(oldChild);\n if (index !== -1) {\n this.children[index] = newChild;\n if (isBrowser && (this as any)['_childNodes']) {\n const cnIndex = (this as any)['_childNodes'].indexOf(oldChild);\n if (cnIndex !== -1) {\n (this as any)['_childNodes'][cnIndex] = newChild;\n }\n }\n if (typeof newChild === 'object' && newChild !== null && 'parentNode' in newChild) {\n (newChild as { parentNode: unknown }).parentNode = this;\n }\n if (typeof oldChild === 'object' && oldChild !== null && 'parentNode' in oldChild) {\n (oldChild as { parentNode: unknown }).parentNode = null;\n }\n }\n return oldChild;\n }\n \n addEventListener(type: string, listener: EventListener): void {\n if (!this._listeners) return;\n if (!this._listeners.has(type)) {\n this._listeners.set(type, new Set());\n }\n this._listeners.get(type)!.add(listener);\n }\n\n removeEventListener(type: string, listener: EventListener): void {\n const listeners = this._listeners?.get(type);\n if (listeners) {\n listeners.delete(listener);\n }\n }\n\n dispatchEvent(event: Event): boolean {\n const listeners = this._listeners?.get(event.type);\n if (listeners) {\n for (const listener of listeners) {\n try {\n listener(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in event listener:', error);\n }\n }\n }\n if (event.bubbles && this.parentNode && typeof this.parentNode === 'object' && 'dispatchEvent' in this.parentNode && typeof this.parentNode.dispatchEvent === 'function') {\n this.parentNode.dispatchEvent(event);\n }\n return true;\n }\n \n querySelector(selector: string): Element | null {\n // Simple implementation - supports basic selectors\n // #id, .class, tagName\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return this.querySelectorById(id);\n } else if (selector.startsWith('.')) {\n const className = selector.slice(1);\n return this.querySelectorByClass(className);\n } else {\n // Tag name selector\n return this.querySelectorByTag(selector);\n }\n }\n \n private querySelectorById(id: string): Element | null {\n // Check self\n if (this.id === id) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.id === id) {\n return child as unknown as Element;\n }\n const found = child.querySelector(`#${id}`);\n if (found) return found;\n }\n }\n return null;\n }\n \n private querySelectorByClass(className: string): Element | null {\n // Check self\n if (this.classList.contains(className)) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.classList?.contains(className)) {\n return child as unknown as Element;\n }\n const found = child.querySelector(`.${className}`);\n if (found) return found;\n }\n }\n return null;\n }\n \n private querySelectorByTag(tagName: string): Element | null {\n const lowerTag = tagName.toLowerCase();\n // Check self\n if (this.tagName.toLowerCase() === lowerTag) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.tagName.toLowerCase() === lowerTag) {\n return child as unknown as Element;\n }\n const found = child.querySelector(tagName);\n if (found) return found;\n }\n }\n return null;\n }\n \n querySelectorAll(selector: string): NodeListOf<Element> {\n const results: Element[] = [];\n \n if (selector.startsWith('#')) {\n const found = this.querySelector(selector);\n if (found) results.push(found);\n } else if (selector.startsWith('.')) {\n const className = selector.slice(1);\n this.querySelectorAllByClass(className, results);\n } else {\n const tagName = selector.toLowerCase();\n this.querySelectorAllByTag(tagName, results);\n }\n \n return results as unknown as NodeListOf<Element>;\n }\n \n private querySelectorAllByClass(className: string, results: Element[]): void {\n if (this.classList.contains(className)) {\n results.push(this as unknown as Element);\n }\n // Recursion alone collects matching descendants — checking the child here\n // as well would push direct children twice.\n for (const child of this.children) {\n if (isElementNode(child)) {\n child.querySelectorAllByClass(className, results);\n }\n }\n }\n\n private querySelectorAllByTag(tagName: string, results: Element[]): void {\n if (this.tagName.toLowerCase() === tagName) {\n results.push(this as unknown as Element);\n }\n for (const child of this.children) {\n if (isElementNode(child)) {\n child.querySelectorAllByTag(tagName, results);\n }\n }\n }\n}\n\nfunction createClassList(owner: NucloElement): DOMTokenList {\n const getClasses = () => owner.className.split(' ').filter((c) => c);\n const setClasses = (classes: string[]) => {\n owner.className = classes.join(' ');\n };\n\n const classList = {\n add: (...tokens: string[]) => {\n const classes = getClasses();\n for (const token of tokens) {\n if (token && !classes.includes(token)) {\n classes.push(token);\n }\n }\n setClasses(classes);\n },\n remove: (...tokens: string[]) => {\n if (tokens.length === 0) return;\n setClasses(getClasses().filter((c) => !tokens.includes(c)));\n },\n toggle: (token: string, force?: boolean) => {\n const hasClass = classList.contains(token);\n if (force === undefined) {\n if (hasClass) {\n classList.remove(token);\n return false;\n }\n classList.add(token);\n return true;\n }\n if (force) {\n classList.add(token);\n return true;\n }\n classList.remove(token);\n return false;\n },\n contains: (token: string) => getClasses().includes(token),\n replace: (oldToken: string, newToken: string) => {\n const classes = getClasses();\n const index = classes.indexOf(oldToken);\n if (index === -1) return false;\n classes[index] = newToken;\n setClasses(classes);\n return true;\n },\n item: (index: number) => getClasses()[index] || null,\n get length() {\n return getClasses().length;\n },\n toString: () => owner.className,\n [Symbol.iterator]: function* () {\n yield* getClasses();\n },\n forEach: (callback: (value: string, key: number, parent: DOMTokenList) => void) => {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n callback(classes[i], i, classList as unknown as DOMTokenList);\n }\n },\n entries: function* () {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n yield [i, classes[i]] as [number, string];\n }\n },\n keys: function* () {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n yield i;\n }\n },\n values: function* () {\n yield* getClasses();\n },\n get value() {\n return owner.className;\n },\n set value(value: string) {\n owner.className = value;\n },\n supports: (_token: string) => false\n };\n\n return classList as unknown as DOMTokenList;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=typeof window<`u`&&typeof document<`u`;var t=class{nodeType=1;nodeName=``;nodeValue=null;parentNode=null;_childNodes=null;textContent=``;get childNodes(){let e=this._childNodes??[];return{...e,length:e.length,item:t=>e[t]||null,[Symbol.iterator]:function*(){for(let t of e)yield t},forEach:t=>{for(let n=0;n<e.length;n++)t(e[n],n,this.childNodes)},entries:function*(){for(let t=0;t<e.length;t++)yield[t,e[t]]},keys:function*(){for(let t=0;t<e.length;t++)yield t},values:function*(){for(let t of e)yield t}}}},n=class{get cssText(){let e=Object.entries(this);return e.length===0?``:e.map(([e,t])=>`${e}: ${t}`).join(`; `)}setProperty(e,t){this[e]=t}getPropertyValue(e){return this[e]||``}},r=class{_el;constructor(e){this._el=e}add(...e){let t=this._el.className?this._el.className.split(` `).filter(Boolean):[];for(let n of e)n&&!t.includes(n)&&t.push(n);this._el.className=t.join(` `)}remove(...e){this._el.className&&(this._el.className=this._el.className.split(` `).filter(t=>t&&!e.includes(t)).join(` `))}contains(e){return!!this._el.className&&this._el.className.split(` `).includes(e)}toggle(e,t){let n=this.contains(e);return t===void 0?n?(this.remove(e),!1):(this.add(e),!0):t?(this.add(e),!0):(this.remove(e),!1)}replace(e,t){return this.contains(e)?(this.remove(e),this.add(t),!0):!1}item(e){return this._el.className.split(` `).filter(Boolean)[e]??null}get length(){return this._el.className?this._el.className.split(` `).filter(Boolean).length:0}get value(){return this._el.className}set value(e){this._el.className=e}toString(){return this._el.className}supports(e){return!1}forEach(e){let t=this._el.className.split(` `).filter(Boolean);for(let n=0;n<t.length;n++)e(t[n],n,this)}[Symbol.iterator](){let e=this._el.className.split(` `).filter(Boolean),t=0;return{next(){return t<e.length?{value:e[t++],done:!1}:{value:``,done:!0}}}}entries(){let e=this._el.className.split(` `).filter(Boolean),t=0;return{next(){return t<e.length?{value:[t,e[t++]],done:!1}:{value:[0,``],done:!0}}}}keys(){let e=this.length,t=0;return{next(){return t<e?{value:t++,done:!1}:{value:0,done:!0}}}}values(){return this[Symbol.iterator]()}};function i(e){return typeof e==`object`&&!!e&&`tagName`in e}function a(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===3}function o(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===8}var s=class extends t{tagName;children;className=``;textContent=``;_innerHTML=``;parentNode=null;rawMods;mods;id=``;namespaceURI;sheet;_listeners;_style;_classList;_attributes;get attributes(){return this._attributes
|
|
2
|
-
//# sourceMappingURL=Element-
|
|
1
|
+
const e=typeof window<`u`&&typeof document<`u`;var t=class{nodeType=1;nodeName=``;nodeValue=null;parentNode=null;_childNodes=null;textContent=``;get childNodes(){let e=this._childNodes??[];return{...e,length:e.length,item:t=>e[t]||null,[Symbol.iterator]:function*(){for(let t of e)yield t},forEach:t=>{for(let n=0;n<e.length;n++)t(e[n],n,this.childNodes)},entries:function*(){for(let t=0;t<e.length;t++)yield[t,e[t]]},keys:function*(){for(let t=0;t<e.length;t++)yield t},values:function*(){for(let t of e)yield t}}}},n=class{get cssText(){let e=Object.entries(this);return e.length===0?``:e.map(([e,t])=>`${e}: ${t}`).join(`; `)}setProperty(e,t){this[e]=t}getPropertyValue(e){return this[e]||``}},r=class{_el;constructor(e){this._el=e}add(...e){let t=this._el.className?this._el.className.split(` `).filter(Boolean):[];for(let n of e)n&&!t.includes(n)&&t.push(n);this._el.className=t.join(` `)}remove(...e){this._el.className&&(this._el.className=this._el.className.split(` `).filter(t=>t&&!e.includes(t)).join(` `))}contains(e){return!!this._el.className&&this._el.className.split(` `).includes(e)}toggle(e,t){let n=this.contains(e);return t===void 0?n?(this.remove(e),!1):(this.add(e),!0):t?(this.add(e),!0):(this.remove(e),!1)}replace(e,t){return this.contains(e)?(this.remove(e),this.add(t),!0):!1}item(e){return this._el.className.split(` `).filter(Boolean)[e]??null}get length(){return this._el.className?this._el.className.split(` `).filter(Boolean).length:0}get value(){return this._el.className}set value(e){this._el.className=e}toString(){return this._el.className}supports(e){return!1}forEach(e){let t=this._el.className.split(` `).filter(Boolean);for(let n=0;n<t.length;n++)e(t[n],n,this)}[Symbol.iterator](){let e=this._el.className.split(` `).filter(Boolean),t=0;return{next(){return t<e.length?{value:e[t++],done:!1}:{value:``,done:!0}}}}entries(){let e=this._el.className.split(` `).filter(Boolean),t=0;return{next(){return t<e.length?{value:[t,e[t++]],done:!1}:{value:[0,``],done:!0}}}}keys(){let e=this.length,t=0;return{next(){return t<e?{value:t++,done:!1}:{value:0,done:!0}}}}values(){return this[Symbol.iterator]()}};function i(e){return typeof e==`object`&&!!e&&`tagName`in e}function a(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===3}function o(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===8}var s=class extends t{tagName;children;className=``;textContent=``;_innerHTML=``;parentNode=null;rawMods;mods;id=``;namespaceURI;sheet;_listeners;_style;_classList;_attributes;get attributes(){return this._attributes??=/* @__PURE__ */ new Map}set attributes(e){this._attributes=e}get style(){return this._style??=new n}set style(e){this._style=e}get classList(){return this._classList??=new r(this)}set classList(e){this._classList=e}get innerHTML(){return this.serializeChildren()}set innerHTML(e){this._innerHTML=e}serializeChildren(){let e=``;for(let t of this.children)i(t)?e+=this.serializeElement(t):a(t)?e+=t.textContent||``:o(t)&&(e+=`<!--${t.data||``}-->`);return e}serializeElement(e){let t=e.tagName.toLowerCase(),n=`<${t}`;if(e.id&&(n+=` id="${e.id}"`),e.className&&(n+=` class="${e.className}"`),e._attributes)for(let[t,r]of e._attributes)t!==`id`&&t!==`class`&&(n+=` ${t}="${r}"`);if(n+=`>`,e.children&&e.children.length>0)for(let t of e.children)i(t)?n+=this.serializeElement(t):a(t)?n+=t.textContent||``:o(t)&&(n+=`<!--${t.data||``}-->`);return n+=`</${t}>`,n}constructor(t){if(super(),this.tagName=t.toLowerCase(),this.nodeType=1,this.nodeName=t.toUpperCase(),this.children=[],!e)this._listeners=null;else{this._listeners=/* @__PURE__ */ new Map;let e={};if(this.style=new Proxy({},{get:(t,n)=>n===`setProperty`?(t,n)=>{e[t]=n}:n===`getPropertyValue`?t=>e[t]||``:n===`cssText`?Object.entries(e).map(([e,t])=>`${e}: ${t}`).join(`; `):e[n],set:(t,n,r)=>(e[n]=r,!0)}),this.tagName===`style`){let e=[];this.sheet={cssRules:e,insertRule:(t,n)=>{let r=n??e.length,i;if(t.trim().startsWith(`@`)){let e=[],n=t.replace(/^@\w+\s+/,``).replace(/\s*\{[\s\S]*\}$/,``).trim();i={cssText:t,conditionText:n,media:{mediaText:n},cssRules:e,insertRule:(t,n)=>{let r=n??e.length;return e.splice(r,0,{cssText:t,selectorText:t.split(`{`)[0].trim(),style:{},type:1}),r},deleteRule:t=>{e.splice(t,1)},type:4}}else i={cssText:t,selectorText:t.split(`{`)[0].trim(),style:{},type:1};return e.splice(r,0,i),r},deleteRule:t=>{e.splice(t,1)}}}this.classList=c(this)}}appendChild(t){if(t?.nodeType===11){let e=t.childNodes;t.childNodes=[],t.children&&=[];for(let t=0;t<e.length;t++)this.appendChild(e[t]);return t}return this.children.push(t),e&&this._childNodes&&this._childNodes.push(t),typeof t==`object`&&t&&`parentNode`in t&&(t.parentNode=this),t}setAttribute(e,t){(this._attributes??=/* @__PURE__ */ new Map).set(e,t),e===`class`?this.className=t:e===`id`&&(this.id=t)}getAttribute(e){return this._attributes?.get(e)??null}removeAttribute(e){this._attributes?.delete(e),e===`class`&&(this.className=``)}hasAttribute(e){return this._attributes?.has(e)??!1}insertBefore(t,n){if(n===null)return this.appendChild(t);if(t?.nodeType===11){let e=t.childNodes;t.childNodes=[],t.children&&=[];for(let t=0;t<e.length;t++)this.insertBefore(e[t],n);return t}let r=this.children.indexOf(n);if(r!==-1){if(this.children.splice(r,0,t),e&&this._childNodes){let e=this._childNodes.indexOf(n);e!==-1&&this._childNodes.splice(e,0,t)}typeof t==`object`&&t&&`parentNode`in t&&(t.parentNode=this)}return t}removeChild(t){let n=this.children.indexOf(t);if(n!==-1){if(this.children.splice(n,1),e&&this._childNodes){let e=this._childNodes.indexOf(t);e!==-1&&this._childNodes.splice(e,1)}typeof t==`object`&&t&&`parentNode`in t&&(t.parentNode=null)}return t}replaceChild(t,n){let r=this.children.indexOf(n);if(r!==-1){if(this.children[r]=t,e&&this._childNodes){let e=this._childNodes.indexOf(n);e!==-1&&(this._childNodes[e]=t)}typeof t==`object`&&t&&`parentNode`in t&&(t.parentNode=this),typeof n==`object`&&n&&`parentNode`in n&&(n.parentNode=null)}return n}addEventListener(e,t){this._listeners&&(this._listeners.has(e)||this._listeners.set(e,/* @__PURE__ */ new Set),this._listeners.get(e).add(t))}removeEventListener(e,t){let n=this._listeners?.get(e);n&&n.delete(t)}dispatchEvent(e){let t=this._listeners?.get(e.type);if(t)for(let n of t)try{n(e)}catch(e){console.error(`Error in event listener:`,e)}return e.bubbles&&this.parentNode&&typeof this.parentNode==`object`&&`dispatchEvent`in this.parentNode&&typeof this.parentNode.dispatchEvent==`function`&&this.parentNode.dispatchEvent(e),!0}querySelector(e){if(e.startsWith(`#`)){let t=e.slice(1);return this.querySelectorById(t)}if(e.startsWith(`.`)){let t=e.slice(1);return this.querySelectorByClass(t)}return this.querySelectorByTag(e)}querySelectorById(e){if(this.id===e)return this;for(let t of this.children)if(i(t)){if(t.id===e)return t;let n=t.querySelector(`#${e}`);if(n)return n}return null}querySelectorByClass(e){if(this.classList.contains(e))return this;for(let t of this.children)if(i(t)){if(t.classList?.contains(e))return t;let n=t.querySelector(`.${e}`);if(n)return n}return null}querySelectorByTag(e){let t=e.toLowerCase();if(this.tagName.toLowerCase()===t)return this;for(let n of this.children)if(i(n)){if(n.tagName.toLowerCase()===t)return n;let r=n.querySelector(e);if(r)return r}return null}querySelectorAll(e){let t=[];if(e.startsWith(`#`)){let n=this.querySelector(e);n&&t.push(n)}else if(e.startsWith(`.`)){let n=e.slice(1);this.querySelectorAllByClass(n,t)}else{let n=e.toLowerCase();this.querySelectorAllByTag(n,t)}return t}querySelectorAllByClass(e,t){this.classList.contains(e)&&t.push(this);for(let n of this.children)i(n)&&n.querySelectorAllByClass(e,t)}querySelectorAllByTag(e,t){this.tagName.toLowerCase()===e&&t.push(this);for(let n of this.children)i(n)&&n.querySelectorAllByTag(e,t)}};function c(e){let t=()=>e.className.split(` `).filter(e=>e),n=t=>{e.className=t.join(` `)},r={add:(...e)=>{let r=t();for(let t of e)t&&!r.includes(t)&&r.push(t);n(r)},remove:(...e)=>{e.length!==0&&n(t().filter(t=>!e.includes(t)))},toggle:(e,t)=>{let n=r.contains(e);return t===void 0?n?(r.remove(e),!1):(r.add(e),!0):t?(r.add(e),!0):(r.remove(e),!1)},contains:e=>t().includes(e),replace:(e,r)=>{let i=t(),a=i.indexOf(e);return a!==-1&&(i[a]=r,n(i),!0)},item:e=>t()[e]||null,get length(){return t().length},toString:()=>e.className,[Symbol.iterator]:function*(){yield*t()},forEach:e=>{let n=t();for(let t=0;t<n.length;t++)e(n[t],t,r)},entries:function*(){let e=t();for(let t=0;t<e.length;t++)yield[t,e[t]]},keys:function*(){let e=t();for(let t=0;t<e.length;t++)yield t},values:function*(){yield*t()},get value(){return e.className},set value(t){e.className=t},supports:e=>!1};return r}export{t as n,s as t};
|
|
2
|
+
//# sourceMappingURL=Element-Djosl17E.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Element-DXd2npjS.cjs","names":[],"sources":["../src/shared/environment.ts","../src/polyfill/Node.ts","../src/polyfill/Element.ts"],"sourcesContent":["/**\n * Simplified environment detection - minimal overhead for smaller bundle size\n */\n\n// Basic environment detection - no complex caching or edge cases\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n","/**\n * Base Node class for instanceof checks in Node.js polyfill\n */\nexport class NucloNode {\n nodeType: number = 1; // ELEMENT_NODE\n nodeName: string = '';\n nodeValue: string | null = null;\n parentNode: unknown = null;\n _childNodes: Node[] | null = null;\n textContent: string = '';\n\n get childNodes(): NodeListOf<ChildNode> {\n const nodes = this._childNodes ?? [];\n return {\n ...nodes,\n length: nodes.length,\n item: (index: number) => (nodes[index] as ChildNode) || null,\n [Symbol.iterator]: function* () {\n for (const node of nodes) {\n yield node as ChildNode;\n }\n },\n forEach: (callback: (value: ChildNode, key: number, parent: NodeListOf<ChildNode>) => void) => {\n for (let i = 0; i < nodes.length; i++) {\n callback(nodes[i] as ChildNode, i, this.childNodes);\n }\n },\n entries: function* () {\n for (let i = 0; i < nodes.length; i++) {\n yield [i, nodes[i] as ChildNode] as [number, ChildNode];\n }\n },\n keys: function* () {\n for (let i = 0; i < nodes.length; i++) {\n yield i;\n }\n },\n values: function* () {\n for (const node of nodes) {\n yield node as ChildNode;\n }\n }\n } as unknown as NodeListOf<ChildNode>;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NucloNode } from './Node';\nimport { isBrowser } from '../shared/environment';\n\n/**\n * Lightweight style object for SSR — prototype methods instead of Object.defineProperty per element.\n * Stores CSS properties as own properties and provides cssText/setProperty/getPropertyValue via prototype.\n */\nclass SSRStyle {\n [key: string]: unknown;\n\n get cssText(): string {\n const entries = Object.entries(this);\n if (entries.length === 0) return '';\n return entries.map(([k, v]) => `${k}: ${v}`).join('; ');\n }\n\n setProperty(name: string, value: string): void {\n (this as Record<string, unknown>)[name] = value;\n }\n\n getPropertyValue(name: string): string {\n return ((this as Record<string, unknown>)[name] as string) || '';\n }\n}\n\n// Lightweight classList for SSR — prototype methods instead of per-element closures\nclass SSRClassList {\n private _el: NucloElement;\n constructor(el: NucloElement) { this._el = el; }\n\n add(...tokens: string[]): void {\n const classes = this._el.className ? this._el.className.split(' ').filter(Boolean) : [];\n for (const t of tokens) if (t && !classes.includes(t)) classes.push(t);\n this._el.className = classes.join(' ');\n }\n remove(...tokens: string[]): void {\n if (!this._el.className) return;\n this._el.className = this._el.className.split(' ').filter(c => c && !tokens.includes(c)).join(' ');\n }\n contains(token: string): boolean {\n return !!this._el.className && this._el.className.split(' ').includes(token);\n }\n toggle(token: string, force?: boolean): boolean {\n const has = this.contains(token);\n if (force === undefined) { if (has) { this.remove(token); return false; } this.add(token); return true; }\n if (force) { this.add(token); return true; }\n this.remove(token); return false;\n }\n replace(oldToken: string, newToken: string): boolean {\n if (!this.contains(oldToken)) return false;\n this.remove(oldToken); this.add(newToken); return true;\n }\n item(index: number): string | null { return (this._el.className.split(' ').filter(Boolean)[index]) ?? null; }\n get length(): number { return this._el.className ? this._el.className.split(' ').filter(Boolean).length : 0; }\n get value(): string { return this._el.className; }\n set value(v: string) { this._el.className = v; }\n toString(): string { return this._el.className; }\n supports(_token: string): boolean { return false; }\n forEach(cb: (value: string, key: number, parent: DOMTokenList) => void): void {\n const classes = this._el.className.split(' ').filter(Boolean);\n for (let i = 0; i < classes.length; i++) cb(classes[i], i, this as unknown as DOMTokenList);\n }\n [Symbol.iterator](): Iterator<string> {\n const classes = this._el.className.split(' ').filter(Boolean);\n let i = 0;\n return { next(): IteratorResult<string> { return i < classes.length ? { value: classes[i++], done: false } : { value: '', done: true }; } };\n }\n entries(): Iterator<[number, string]> {\n const classes = this._el.className.split(' ').filter(Boolean);\n let i = 0;\n return { next(): IteratorResult<[number, string]> { return i < classes.length ? { value: [i, classes[i++]], done: false } : { value: [0, ''], done: true }; } };\n }\n keys(): Iterator<number> {\n const len = this.length; let i = 0;\n return { next(): IteratorResult<number> { return i < len ? { value: i++, done: false } : { value: 0, done: true }; } };\n }\n values(): Iterator<string> { return this[Symbol.iterator](); }\n}\n\ninterface TextNode {\n nodeType: 3;\n textContent: string;\n}\n\ninterface CommentNode {\n nodeType: 8;\n data: string;\n}\n\nfunction isElementNode(node: unknown): node is NucloElement {\n return typeof node === 'object' && node !== null && 'tagName' in node;\n}\n\nfunction isTextNode(node: unknown): node is TextNode {\n return typeof node === 'object' && node !== null && 'nodeType' in node && (node as { nodeType: number }).nodeType === 3;\n}\n\nfunction isCommentNode(node: unknown): node is CommentNode {\n return typeof node === 'object' && node !== null && 'nodeType' in node && (node as { nodeType: number }).nodeType === 8;\n}\n\nexport class NucloElement extends NucloNode {\n tagName: string;\n children: unknown[];\n className: string = '';\n textContent: string = '';\n private _innerHTML: string = '';\n parentNode: unknown = null;\n rawMods?: unknown[];\n mods?: unknown[];\n id: string = '';\n namespaceURI?: string;\n sheet?: CSSStyleSheet | null;\n private _listeners: Map<string, Set<EventListener>> | null;\n\n // style/classList are allocated lazily: the vast majority of SSR elements\n // never touch either (className is stored on the .className string, and the\n // serializer reads the backing field directly), so eagerly constructing an\n // SSRStyle + SSRClassList per element was pure allocation churn. The browser\n // path assigns these in the constructor, so its getter never lazy-allocates.\n private _style?: CSSStyleDeclaration;\n private _classList?: DOMTokenList;\n\n // attributes is allocated lazily too — most elements carry their identity on\n // .className/.id (separate string fields) and never call setAttribute. Reads\n // short-circuit on the undefined backing map without allocating; the\n // serializer reads _attributes directly. The public getter still lazily\n // materializes a Map for any external `el.attributes` consumer.\n private _attributes?: Map<string, string>;\n\n get attributes(): Map<string, string> {\n return (this._attributes ??= new Map<string, string>());\n }\n set attributes(value: Map<string, string>) {\n this._attributes = value;\n }\n\n get style(): CSSStyleDeclaration {\n return (this._style ??= new SSRStyle() as unknown as CSSStyleDeclaration);\n }\n set style(value: CSSStyleDeclaration) {\n this._style = value;\n }\n\n get classList(): DOMTokenList {\n return (this._classList ??= new SSRClassList(this) as unknown as DOMTokenList);\n }\n set classList(value: DOMTokenList) {\n this._classList = value;\n }\n\n get innerHTML(): string {\n return this.serializeChildren();\n }\n\n set innerHTML(value: string) {\n this._innerHTML = value;\n }\n \n private serializeChildren(): string {\n let html = '';\n for (const child of this.children) {\n if (isElementNode(child)) {\n html += this.serializeElement(child);\n } else if (isTextNode(child)) {\n html += child.textContent || '';\n } else if (isCommentNode(child)) {\n html += `<!--${child.data || ''}-->`;\n }\n }\n return html;\n }\n \n private serializeElement(element: NucloElement): string {\n const tag = element.tagName.toLowerCase();\n let html = `<${tag}`;\n \n // Add attributes\n if (element.id) {\n html += ` id=\"${element.id}\"`;\n }\n if (element.className) {\n html += ` class=\"${element.className}\"`;\n }\n if (element._attributes) {\n for (const [name, value] of element._attributes) {\n if (name !== 'id' && name !== 'class') {\n html += ` ${name}=\"${value}\"`;\n }\n }\n }\n \n html += '>';\n \n // Add children\n if (element.children && element.children.length > 0) {\n for (const child of element.children) {\n if (isElementNode(child)) {\n html += this.serializeElement(child);\n } else if (isTextNode(child)) {\n html += child.textContent || '';\n } else if (isCommentNode(child)) {\n html += `<!--${child.data || ''}-->`;\n }\n }\n }\n \n html += `</${tag}>`;\n return html;\n }\n \n constructor(tagName: string) {\n super();\n this.tagName = tagName.toLowerCase();\n this.nodeType = 1; // ELEMENT_NODE\n this.nodeName = tagName.toUpperCase();\n this.children = [];\n\n if (!isBrowser) {\n // ── SSR path: minimal allocations, no Proxy, no event listeners ──\n // style and classList stay unallocated until first access (see getters).\n this._listeners = null;\n } else {\n // ── Browser path: full-featured Proxy style + DOMTokenList ──\n this._listeners = new Map();\n\n const styleProps: Record<string, string> = {};\n this.style = new Proxy({} as CSSStyleDeclaration, {\n get: (_target, prop: string) => {\n if (prop === 'setProperty') return (name: string, value: string) => { styleProps[name] = value; };\n if (prop === 'getPropertyValue') return (name: string) => styleProps[name] || '';\n if (prop === 'cssText') return Object.entries(styleProps).map(([k, v]) => `${k}: ${v}`).join('; ');\n return styleProps[prop];\n },\n set: (_target, prop: string, value: string) => { styleProps[prop] = value; return true; },\n });\n\n // CSSStyleSheet mock for style elements (browser only)\n if (this.tagName === 'style') {\n const cssRules: CSSRule[] = [];\n this.sheet = {\n cssRules: cssRules as unknown as CSSRuleList,\n insertRule: (rule: string, index?: number) => {\n const idx = index ?? cssRules.length;\n let mockRule: CSSRule;\n if (rule.trim().startsWith('@')) {\n const innerRules: CSSRule[] = [];\n const conditionText = rule.replace(/^@\\w+\\s+/, '').replace(/\\s*\\{[\\s\\S]*\\}$/, '').trim();\n mockRule = {\n cssText: rule, conditionText,\n media: { mediaText: conditionText } as MediaList,\n cssRules: innerRules as unknown as CSSRuleList,\n insertRule: (innerRule: string, innerIndex?: number) => {\n const innerIdx = innerIndex ?? innerRules.length;\n innerRules.splice(innerIdx, 0, { cssText: innerRule, selectorText: innerRule.split('{')[0].trim(), style: {} as CSSStyleDeclaration, type: 1 } as unknown as CSSRule);\n return innerIdx;\n },\n deleteRule: (i: number) => { innerRules.splice(i, 1); },\n type: 4,\n } as unknown as CSSRule;\n } else {\n mockRule = { cssText: rule, selectorText: rule.split('{')[0].trim(), style: {} as CSSStyleDeclaration, type: 1 } as unknown as CSSRule;\n }\n cssRules.splice(idx, 0, mockRule);\n return idx;\n },\n deleteRule: (index: number) => { cssRules.splice(index, 1); },\n } as unknown as CSSStyleSheet;\n }\n\n this.classList = createClassList(this);\n }\n }\n \n appendChild<T extends Node>(child: T): T {\n // Spec behaviour: appending a DocumentFragment moves its children into this\n // node and leaves the fragment empty. The list runtime relies on this to\n // batch row insertions.\n if ((child as any)?.nodeType === 11) {\n // Detach the fragment's backing array before iterating (instead of\n // slicing it) — the fragment is emptied either way, and reassigning\n // first means the loop never has to allocate a copy just to guard\n // against the array it's about to discard.\n const kids = (child as any).childNodes as Node[];\n (child as any).childNodes = [];\n if ((child as any).children) (child as any).children = [];\n for (let i = 0; i < kids.length; i++) this.appendChild(kids[i]);\n return child;\n }\n this.children.push(child);\n if (isBrowser && (this as any)['_childNodes']) {\n (this as any)['_childNodes'].push(child);\n }\n if (typeof child === 'object' && child !== null && 'parentNode' in child) {\n (child as { parentNode: unknown }).parentNode = this;\n }\n return child;\n }\n \n setAttribute(name: string, value: string): void {\n (this._attributes ??= new Map<string, string>()).set(name, value);\n if (name === 'class') {\n this.className = value;\n } else if (name === 'id') {\n this.id = value;\n }\n }\n\n getAttribute(name: string): string | null {\n return this._attributes?.get(name) ?? null;\n }\n\n removeAttribute(name: string): void {\n this._attributes?.delete(name);\n if (name === 'class') {\n this.className = '';\n }\n }\n\n hasAttribute(name: string): boolean {\n return this._attributes?.has(name) ?? false;\n }\n \n insertBefore<T extends Node>(newNode: T, referenceNode: Node | null): T {\n if (referenceNode === null) {\n return this.appendChild(newNode);\n }\n // Spec behaviour: inserting a DocumentFragment moves its children (in order)\n // before the reference node and empties the fragment.\n if ((newNode as any)?.nodeType === 11) {\n const kids = (newNode as any).childNodes as Node[];\n (newNode as any).childNodes = [];\n if ((newNode as any).children) (newNode as any).children = [];\n for (let i = 0; i < kids.length; i++) this.insertBefore(kids[i], referenceNode);\n return newNode;\n }\n const index = this.children.indexOf(referenceNode);\n if (index !== -1) {\n this.children.splice(index, 0, newNode);\n if (isBrowser && (this as any)['_childNodes']) {\n const childNodesIndex = (this as any)['_childNodes'].indexOf(referenceNode);\n if (childNodesIndex !== -1) {\n (this as any)['_childNodes'].splice(childNodesIndex, 0, newNode);\n }\n }\n if (typeof newNode === 'object' && newNode !== null && 'parentNode' in newNode) {\n (newNode as { parentNode: unknown }).parentNode = this;\n }\n }\n return newNode;\n }\n \n removeChild<T extends Node>(child: T): T {\n const index = this.children.indexOf(child);\n if (index !== -1) {\n this.children.splice(index, 1);\n if (isBrowser && (this as any)['_childNodes']) {\n const cnIndex = (this as any)['_childNodes'].indexOf(child);\n if (cnIndex !== -1) {\n (this as any)['_childNodes'].splice(cnIndex, 1);\n }\n }\n if (typeof child === 'object' && child !== null && 'parentNode' in child) {\n (child as { parentNode: unknown }).parentNode = null;\n }\n }\n return child;\n }\n\n replaceChild<T extends Node>(newChild: Node, oldChild: T): T {\n const index = this.children.indexOf(oldChild);\n if (index !== -1) {\n this.children[index] = newChild;\n if (isBrowser && (this as any)['_childNodes']) {\n const cnIndex = (this as any)['_childNodes'].indexOf(oldChild);\n if (cnIndex !== -1) {\n (this as any)['_childNodes'][cnIndex] = newChild;\n }\n }\n if (typeof newChild === 'object' && newChild !== null && 'parentNode' in newChild) {\n (newChild as { parentNode: unknown }).parentNode = this;\n }\n if (typeof oldChild === 'object' && oldChild !== null && 'parentNode' in oldChild) {\n (oldChild as { parentNode: unknown }).parentNode = null;\n }\n }\n return oldChild;\n }\n \n addEventListener(type: string, listener: EventListener): void {\n if (!this._listeners) return;\n if (!this._listeners.has(type)) {\n this._listeners.set(type, new Set());\n }\n this._listeners.get(type)!.add(listener);\n }\n\n removeEventListener(type: string, listener: EventListener): void {\n const listeners = this._listeners?.get(type);\n if (listeners) {\n listeners.delete(listener);\n }\n }\n\n dispatchEvent(event: Event): boolean {\n const listeners = this._listeners?.get(event.type);\n if (listeners) {\n for (const listener of listeners) {\n try {\n listener(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in event listener:', error);\n }\n }\n }\n if (event.bubbles && this.parentNode && typeof this.parentNode === 'object' && 'dispatchEvent' in this.parentNode && typeof this.parentNode.dispatchEvent === 'function') {\n this.parentNode.dispatchEvent(event);\n }\n return true;\n }\n \n querySelector(selector: string): Element | null {\n // Simple implementation - supports basic selectors\n // #id, .class, tagName\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return this.querySelectorById(id);\n } else if (selector.startsWith('.')) {\n const className = selector.slice(1);\n return this.querySelectorByClass(className);\n } else {\n // Tag name selector\n return this.querySelectorByTag(selector);\n }\n }\n \n private querySelectorById(id: string): Element | null {\n // Check self\n if (this.id === id) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.id === id) {\n return child as unknown as Element;\n }\n const found = child.querySelector(`#${id}`);\n if (found) return found;\n }\n }\n return null;\n }\n \n private querySelectorByClass(className: string): Element | null {\n // Check self\n if (this.classList.contains(className)) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.classList?.contains(className)) {\n return child as unknown as Element;\n }\n const found = child.querySelector(`.${className}`);\n if (found) return found;\n }\n }\n return null;\n }\n \n private querySelectorByTag(tagName: string): Element | null {\n const lowerTag = tagName.toLowerCase();\n // Check self\n if (this.tagName.toLowerCase() === lowerTag) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.tagName.toLowerCase() === lowerTag) {\n return child as unknown as Element;\n }\n const found = child.querySelector(tagName);\n if (found) return found;\n }\n }\n return null;\n }\n \n querySelectorAll(selector: string): NodeListOf<Element> {\n const results: Element[] = [];\n \n if (selector.startsWith('#')) {\n const found = this.querySelector(selector);\n if (found) results.push(found);\n } else if (selector.startsWith('.')) {\n const className = selector.slice(1);\n this.querySelectorAllByClass(className, results);\n } else {\n const tagName = selector.toLowerCase();\n this.querySelectorAllByTag(tagName, results);\n }\n \n return results as unknown as NodeListOf<Element>;\n }\n \n private querySelectorAllByClass(className: string, results: Element[]): void {\n if (this.classList.contains(className)) {\n results.push(this as unknown as Element);\n }\n // Recursion alone collects matching descendants — checking the child here\n // as well would push direct children twice.\n for (const child of this.children) {\n if (isElementNode(child)) {\n child.querySelectorAllByClass(className, results);\n }\n }\n }\n\n private querySelectorAllByTag(tagName: string, results: Element[]): void {\n if (this.tagName.toLowerCase() === tagName) {\n results.push(this as unknown as Element);\n }\n for (const child of this.children) {\n if (isElementNode(child)) {\n child.querySelectorAllByTag(tagName, results);\n }\n }\n }\n}\n\nfunction createClassList(owner: NucloElement): DOMTokenList {\n const getClasses = () => owner.className.split(' ').filter((c) => c);\n const setClasses = (classes: string[]) => {\n owner.className = classes.join(' ');\n };\n\n const classList = {\n add: (...tokens: string[]) => {\n const classes = getClasses();\n for (const token of tokens) {\n if (token && !classes.includes(token)) {\n classes.push(token);\n }\n }\n setClasses(classes);\n },\n remove: (...tokens: string[]) => {\n if (tokens.length === 0) return;\n setClasses(getClasses().filter((c) => !tokens.includes(c)));\n },\n toggle: (token: string, force?: boolean) => {\n const hasClass = classList.contains(token);\n if (force === undefined) {\n if (hasClass) {\n classList.remove(token);\n return false;\n }\n classList.add(token);\n return true;\n }\n if (force) {\n classList.add(token);\n return true;\n }\n classList.remove(token);\n return false;\n },\n contains: (token: string) => getClasses().includes(token),\n replace: (oldToken: string, newToken: string) => {\n const classes = getClasses();\n const index = classes.indexOf(oldToken);\n if (index === -1) return false;\n classes[index] = newToken;\n setClasses(classes);\n return true;\n },\n item: (index: number) => getClasses()[index] || null,\n get length() {\n return getClasses().length;\n },\n toString: () => owner.className,\n [Symbol.iterator]: function* () {\n yield* getClasses();\n },\n forEach: (callback: (value: string, key: number, parent: DOMTokenList) => void) => {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n callback(classes[i], i, classList as unknown as DOMTokenList);\n }\n },\n entries: function* () {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n yield [i, classes[i]] as [number, string];\n }\n },\n keys: function* () {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n yield i;\n }\n },\n values: function* () {\n yield* getClasses();\n },\n get value() {\n return owner.className;\n },\n set value(value: string) {\n owner.className = value;\n },\n supports: (_token: string) => false\n };\n\n return classList as unknown as DOMTokenList;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Element-Djosl17E.mjs","names":[],"sources":["../src/shared/environment.ts","../src/polyfill/Node.ts","../src/polyfill/Element.ts"],"sourcesContent":["/**\n * Simplified environment detection - minimal overhead for smaller bundle size\n */\n\n// Basic environment detection - no complex caching or edge cases\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n","/**\n * Base Node class for instanceof checks in Node.js polyfill\n */\nexport class NucloNode {\n nodeType: number = 1; // ELEMENT_NODE\n nodeName: string = '';\n nodeValue: string | null = null;\n parentNode: unknown = null;\n _childNodes: Node[] | null = null;\n textContent: string = '';\n\n get childNodes(): NodeListOf<ChildNode> {\n const nodes = this._childNodes ?? [];\n return {\n ...nodes,\n length: nodes.length,\n item: (index: number) => (nodes[index] as ChildNode) || null,\n [Symbol.iterator]: function* () {\n for (const node of nodes) {\n yield node as ChildNode;\n }\n },\n forEach: (callback: (value: ChildNode, key: number, parent: NodeListOf<ChildNode>) => void) => {\n for (let i = 0; i < nodes.length; i++) {\n callback(nodes[i] as ChildNode, i, this.childNodes);\n }\n },\n entries: function* () {\n for (let i = 0; i < nodes.length; i++) {\n yield [i, nodes[i] as ChildNode] as [number, ChildNode];\n }\n },\n keys: function* () {\n for (let i = 0; i < nodes.length; i++) {\n yield i;\n }\n },\n values: function* () {\n for (const node of nodes) {\n yield node as ChildNode;\n }\n }\n } as unknown as NodeListOf<ChildNode>;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NucloNode } from './Node';\nimport { isBrowser } from '../shared/environment';\n\n/**\n * Lightweight style object for SSR — prototype methods instead of Object.defineProperty per element.\n * Stores CSS properties as own properties and provides cssText/setProperty/getPropertyValue via prototype.\n */\nclass SSRStyle {\n [key: string]: unknown;\n\n get cssText(): string {\n const entries = Object.entries(this);\n if (entries.length === 0) return '';\n return entries.map(([k, v]) => `${k}: ${v}`).join('; ');\n }\n\n setProperty(name: string, value: string): void {\n (this as Record<string, unknown>)[name] = value;\n }\n\n getPropertyValue(name: string): string {\n return ((this as Record<string, unknown>)[name] as string) || '';\n }\n}\n\n// Lightweight classList for SSR — prototype methods instead of per-element closures\nclass SSRClassList {\n private _el: NucloElement;\n constructor(el: NucloElement) { this._el = el; }\n\n add(...tokens: string[]): void {\n const classes = this._el.className ? this._el.className.split(' ').filter(Boolean) : [];\n for (const t of tokens) if (t && !classes.includes(t)) classes.push(t);\n this._el.className = classes.join(' ');\n }\n remove(...tokens: string[]): void {\n if (!this._el.className) return;\n this._el.className = this._el.className.split(' ').filter(c => c && !tokens.includes(c)).join(' ');\n }\n contains(token: string): boolean {\n return !!this._el.className && this._el.className.split(' ').includes(token);\n }\n toggle(token: string, force?: boolean): boolean {\n const has = this.contains(token);\n if (force === undefined) { if (has) { this.remove(token); return false; } this.add(token); return true; }\n if (force) { this.add(token); return true; }\n this.remove(token); return false;\n }\n replace(oldToken: string, newToken: string): boolean {\n if (!this.contains(oldToken)) return false;\n this.remove(oldToken); this.add(newToken); return true;\n }\n item(index: number): string | null { return (this._el.className.split(' ').filter(Boolean)[index]) ?? null; }\n get length(): number { return this._el.className ? this._el.className.split(' ').filter(Boolean).length : 0; }\n get value(): string { return this._el.className; }\n set value(v: string) { this._el.className = v; }\n toString(): string { return this._el.className; }\n supports(_token: string): boolean { return false; }\n forEach(cb: (value: string, key: number, parent: DOMTokenList) => void): void {\n const classes = this._el.className.split(' ').filter(Boolean);\n for (let i = 0; i < classes.length; i++) cb(classes[i], i, this as unknown as DOMTokenList);\n }\n [Symbol.iterator](): Iterator<string> {\n const classes = this._el.className.split(' ').filter(Boolean);\n let i = 0;\n return { next(): IteratorResult<string> { return i < classes.length ? { value: classes[i++], done: false } : { value: '', done: true }; } };\n }\n entries(): Iterator<[number, string]> {\n const classes = this._el.className.split(' ').filter(Boolean);\n let i = 0;\n return { next(): IteratorResult<[number, string]> { return i < classes.length ? { value: [i, classes[i++]], done: false } : { value: [0, ''], done: true }; } };\n }\n keys(): Iterator<number> {\n const len = this.length; let i = 0;\n return { next(): IteratorResult<number> { return i < len ? { value: i++, done: false } : { value: 0, done: true }; } };\n }\n values(): Iterator<string> { return this[Symbol.iterator](); }\n}\n\ninterface TextNode {\n nodeType: 3;\n textContent: string;\n}\n\ninterface CommentNode {\n nodeType: 8;\n data: string;\n}\n\nfunction isElementNode(node: unknown): node is NucloElement {\n return typeof node === 'object' && node !== null && 'tagName' in node;\n}\n\nfunction isTextNode(node: unknown): node is TextNode {\n return typeof node === 'object' && node !== null && 'nodeType' in node && (node as { nodeType: number }).nodeType === 3;\n}\n\nfunction isCommentNode(node: unknown): node is CommentNode {\n return typeof node === 'object' && node !== null && 'nodeType' in node && (node as { nodeType: number }).nodeType === 8;\n}\n\nexport class NucloElement extends NucloNode {\n tagName: string;\n children: unknown[];\n className: string = '';\n textContent: string = '';\n private _innerHTML: string = '';\n parentNode: unknown = null;\n rawMods?: unknown[];\n mods?: unknown[];\n id: string = '';\n namespaceURI?: string;\n sheet?: CSSStyleSheet | null;\n private _listeners: Map<string, Set<EventListener>> | null;\n\n // style/classList are allocated lazily: the vast majority of SSR elements\n // never touch either (className is stored on the .className string, and the\n // serializer reads the backing field directly), so eagerly constructing an\n // SSRStyle + SSRClassList per element was pure allocation churn. The browser\n // path assigns these in the constructor, so its getter never lazy-allocates.\n private _style?: CSSStyleDeclaration;\n private _classList?: DOMTokenList;\n\n // attributes is allocated lazily too — most elements carry their identity on\n // .className/.id (separate string fields) and never call setAttribute. Reads\n // short-circuit on the undefined backing map without allocating; the\n // serializer reads _attributes directly. The public getter still lazily\n // materializes a Map for any external `el.attributes` consumer.\n private _attributes?: Map<string, string>;\n\n get attributes(): Map<string, string> {\n return (this._attributes ??= new Map<string, string>());\n }\n set attributes(value: Map<string, string>) {\n this._attributes = value;\n }\n\n get style(): CSSStyleDeclaration {\n return (this._style ??= new SSRStyle() as unknown as CSSStyleDeclaration);\n }\n set style(value: CSSStyleDeclaration) {\n this._style = value;\n }\n\n get classList(): DOMTokenList {\n return (this._classList ??= new SSRClassList(this) as unknown as DOMTokenList);\n }\n set classList(value: DOMTokenList) {\n this._classList = value;\n }\n\n get innerHTML(): string {\n return this.serializeChildren();\n }\n\n set innerHTML(value: string) {\n this._innerHTML = value;\n }\n \n private serializeChildren(): string {\n let html = '';\n for (const child of this.children) {\n if (isElementNode(child)) {\n html += this.serializeElement(child);\n } else if (isTextNode(child)) {\n html += child.textContent || '';\n } else if (isCommentNode(child)) {\n html += `<!--${child.data || ''}-->`;\n }\n }\n return html;\n }\n \n private serializeElement(element: NucloElement): string {\n const tag = element.tagName.toLowerCase();\n let html = `<${tag}`;\n \n // Add attributes\n if (element.id) {\n html += ` id=\"${element.id}\"`;\n }\n if (element.className) {\n html += ` class=\"${element.className}\"`;\n }\n if (element._attributes) {\n for (const [name, value] of element._attributes) {\n if (name !== 'id' && name !== 'class') {\n html += ` ${name}=\"${value}\"`;\n }\n }\n }\n \n html += '>';\n \n // Add children\n if (element.children && element.children.length > 0) {\n for (const child of element.children) {\n if (isElementNode(child)) {\n html += this.serializeElement(child);\n } else if (isTextNode(child)) {\n html += child.textContent || '';\n } else if (isCommentNode(child)) {\n html += `<!--${child.data || ''}-->`;\n }\n }\n }\n \n html += `</${tag}>`;\n return html;\n }\n \n constructor(tagName: string) {\n super();\n this.tagName = tagName.toLowerCase();\n this.nodeType = 1; // ELEMENT_NODE\n this.nodeName = tagName.toUpperCase();\n this.children = [];\n\n if (!isBrowser) {\n // ── SSR path: minimal allocations, no Proxy, no event listeners ──\n // style and classList stay unallocated until first access (see getters).\n this._listeners = null;\n } else {\n // ── Browser path: full-featured Proxy style + DOMTokenList ──\n this._listeners = new Map();\n\n const styleProps: Record<string, string> = {};\n this.style = new Proxy({} as CSSStyleDeclaration, {\n get: (_target, prop: string) => {\n if (prop === 'setProperty') return (name: string, value: string) => { styleProps[name] = value; };\n if (prop === 'getPropertyValue') return (name: string) => styleProps[name] || '';\n if (prop === 'cssText') return Object.entries(styleProps).map(([k, v]) => `${k}: ${v}`).join('; ');\n return styleProps[prop];\n },\n set: (_target, prop: string, value: string) => { styleProps[prop] = value; return true; },\n });\n\n // CSSStyleSheet mock for style elements (browser only)\n if (this.tagName === 'style') {\n const cssRules: CSSRule[] = [];\n this.sheet = {\n cssRules: cssRules as unknown as CSSRuleList,\n insertRule: (rule: string, index?: number) => {\n const idx = index ?? cssRules.length;\n let mockRule: CSSRule;\n if (rule.trim().startsWith('@')) {\n const innerRules: CSSRule[] = [];\n const conditionText = rule.replace(/^@\\w+\\s+/, '').replace(/\\s*\\{[\\s\\S]*\\}$/, '').trim();\n mockRule = {\n cssText: rule, conditionText,\n media: { mediaText: conditionText } as MediaList,\n cssRules: innerRules as unknown as CSSRuleList,\n insertRule: (innerRule: string, innerIndex?: number) => {\n const innerIdx = innerIndex ?? innerRules.length;\n innerRules.splice(innerIdx, 0, { cssText: innerRule, selectorText: innerRule.split('{')[0].trim(), style: {} as CSSStyleDeclaration, type: 1 } as unknown as CSSRule);\n return innerIdx;\n },\n deleteRule: (i: number) => { innerRules.splice(i, 1); },\n type: 4,\n } as unknown as CSSRule;\n } else {\n mockRule = { cssText: rule, selectorText: rule.split('{')[0].trim(), style: {} as CSSStyleDeclaration, type: 1 } as unknown as CSSRule;\n }\n cssRules.splice(idx, 0, mockRule);\n return idx;\n },\n deleteRule: (index: number) => { cssRules.splice(index, 1); },\n } as unknown as CSSStyleSheet;\n }\n\n this.classList = createClassList(this);\n }\n }\n \n appendChild<T extends Node>(child: T): T {\n // Spec behaviour: appending a DocumentFragment moves its children into this\n // node and leaves the fragment empty. The list runtime relies on this to\n // batch row insertions.\n if ((child as any)?.nodeType === 11) {\n // Detach the fragment's backing array before iterating (instead of\n // slicing it) — the fragment is emptied either way, and reassigning\n // first means the loop never has to allocate a copy just to guard\n // against the array it's about to discard.\n const kids = (child as any).childNodes as Node[];\n (child as any).childNodes = [];\n if ((child as any).children) (child as any).children = [];\n for (let i = 0; i < kids.length; i++) this.appendChild(kids[i]);\n return child;\n }\n this.children.push(child);\n if (isBrowser && (this as any)['_childNodes']) {\n (this as any)['_childNodes'].push(child);\n }\n if (typeof child === 'object' && child !== null && 'parentNode' in child) {\n (child as { parentNode: unknown }).parentNode = this;\n }\n return child;\n }\n \n setAttribute(name: string, value: string): void {\n (this._attributes ??= new Map<string, string>()).set(name, value);\n if (name === 'class') {\n this.className = value;\n } else if (name === 'id') {\n this.id = value;\n }\n }\n\n getAttribute(name: string): string | null {\n return this._attributes?.get(name) ?? null;\n }\n\n removeAttribute(name: string): void {\n this._attributes?.delete(name);\n if (name === 'class') {\n this.className = '';\n }\n }\n\n hasAttribute(name: string): boolean {\n return this._attributes?.has(name) ?? false;\n }\n \n insertBefore<T extends Node>(newNode: T, referenceNode: Node | null): T {\n if (referenceNode === null) {\n return this.appendChild(newNode);\n }\n // Spec behaviour: inserting a DocumentFragment moves its children (in order)\n // before the reference node and empties the fragment.\n if ((newNode as any)?.nodeType === 11) {\n const kids = (newNode as any).childNodes as Node[];\n (newNode as any).childNodes = [];\n if ((newNode as any).children) (newNode as any).children = [];\n for (let i = 0; i < kids.length; i++) this.insertBefore(kids[i], referenceNode);\n return newNode;\n }\n const index = this.children.indexOf(referenceNode);\n if (index !== -1) {\n this.children.splice(index, 0, newNode);\n if (isBrowser && (this as any)['_childNodes']) {\n const childNodesIndex = (this as any)['_childNodes'].indexOf(referenceNode);\n if (childNodesIndex !== -1) {\n (this as any)['_childNodes'].splice(childNodesIndex, 0, newNode);\n }\n }\n if (typeof newNode === 'object' && newNode !== null && 'parentNode' in newNode) {\n (newNode as { parentNode: unknown }).parentNode = this;\n }\n }\n return newNode;\n }\n \n removeChild<T extends Node>(child: T): T {\n const index = this.children.indexOf(child);\n if (index !== -1) {\n this.children.splice(index, 1);\n if (isBrowser && (this as any)['_childNodes']) {\n const cnIndex = (this as any)['_childNodes'].indexOf(child);\n if (cnIndex !== -1) {\n (this as any)['_childNodes'].splice(cnIndex, 1);\n }\n }\n if (typeof child === 'object' && child !== null && 'parentNode' in child) {\n (child as { parentNode: unknown }).parentNode = null;\n }\n }\n return child;\n }\n\n replaceChild<T extends Node>(newChild: Node, oldChild: T): T {\n const index = this.children.indexOf(oldChild);\n if (index !== -1) {\n this.children[index] = newChild;\n if (isBrowser && (this as any)['_childNodes']) {\n const cnIndex = (this as any)['_childNodes'].indexOf(oldChild);\n if (cnIndex !== -1) {\n (this as any)['_childNodes'][cnIndex] = newChild;\n }\n }\n if (typeof newChild === 'object' && newChild !== null && 'parentNode' in newChild) {\n (newChild as { parentNode: unknown }).parentNode = this;\n }\n if (typeof oldChild === 'object' && oldChild !== null && 'parentNode' in oldChild) {\n (oldChild as { parentNode: unknown }).parentNode = null;\n }\n }\n return oldChild;\n }\n \n addEventListener(type: string, listener: EventListener): void {\n if (!this._listeners) return;\n if (!this._listeners.has(type)) {\n this._listeners.set(type, new Set());\n }\n this._listeners.get(type)!.add(listener);\n }\n\n removeEventListener(type: string, listener: EventListener): void {\n const listeners = this._listeners?.get(type);\n if (listeners) {\n listeners.delete(listener);\n }\n }\n\n dispatchEvent(event: Event): boolean {\n const listeners = this._listeners?.get(event.type);\n if (listeners) {\n for (const listener of listeners) {\n try {\n listener(event);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error in event listener:', error);\n }\n }\n }\n if (event.bubbles && this.parentNode && typeof this.parentNode === 'object' && 'dispatchEvent' in this.parentNode && typeof this.parentNode.dispatchEvent === 'function') {\n this.parentNode.dispatchEvent(event);\n }\n return true;\n }\n \n querySelector(selector: string): Element | null {\n // Simple implementation - supports basic selectors\n // #id, .class, tagName\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return this.querySelectorById(id);\n } else if (selector.startsWith('.')) {\n const className = selector.slice(1);\n return this.querySelectorByClass(className);\n } else {\n // Tag name selector\n return this.querySelectorByTag(selector);\n }\n }\n \n private querySelectorById(id: string): Element | null {\n // Check self\n if (this.id === id) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.id === id) {\n return child as unknown as Element;\n }\n const found = child.querySelector(`#${id}`);\n if (found) return found;\n }\n }\n return null;\n }\n \n private querySelectorByClass(className: string): Element | null {\n // Check self\n if (this.classList.contains(className)) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.classList?.contains(className)) {\n return child as unknown as Element;\n }\n const found = child.querySelector(`.${className}`);\n if (found) return found;\n }\n }\n return null;\n }\n \n private querySelectorByTag(tagName: string): Element | null {\n const lowerTag = tagName.toLowerCase();\n // Check self\n if (this.tagName.toLowerCase() === lowerTag) {\n return this as unknown as Element;\n }\n // Check children recursively\n for (const child of this.children) {\n if (isElementNode(child)) {\n if (child.tagName.toLowerCase() === lowerTag) {\n return child as unknown as Element;\n }\n const found = child.querySelector(tagName);\n if (found) return found;\n }\n }\n return null;\n }\n \n querySelectorAll(selector: string): NodeListOf<Element> {\n const results: Element[] = [];\n \n if (selector.startsWith('#')) {\n const found = this.querySelector(selector);\n if (found) results.push(found);\n } else if (selector.startsWith('.')) {\n const className = selector.slice(1);\n this.querySelectorAllByClass(className, results);\n } else {\n const tagName = selector.toLowerCase();\n this.querySelectorAllByTag(tagName, results);\n }\n \n return results as unknown as NodeListOf<Element>;\n }\n \n private querySelectorAllByClass(className: string, results: Element[]): void {\n if (this.classList.contains(className)) {\n results.push(this as unknown as Element);\n }\n // Recursion alone collects matching descendants — checking the child here\n // as well would push direct children twice.\n for (const child of this.children) {\n if (isElementNode(child)) {\n child.querySelectorAllByClass(className, results);\n }\n }\n }\n\n private querySelectorAllByTag(tagName: string, results: Element[]): void {\n if (this.tagName.toLowerCase() === tagName) {\n results.push(this as unknown as Element);\n }\n for (const child of this.children) {\n if (isElementNode(child)) {\n child.querySelectorAllByTag(tagName, results);\n }\n }\n }\n}\n\nfunction createClassList(owner: NucloElement): DOMTokenList {\n const getClasses = () => owner.className.split(' ').filter((c) => c);\n const setClasses = (classes: string[]) => {\n owner.className = classes.join(' ');\n };\n\n const classList = {\n add: (...tokens: string[]) => {\n const classes = getClasses();\n for (const token of tokens) {\n if (token && !classes.includes(token)) {\n classes.push(token);\n }\n }\n setClasses(classes);\n },\n remove: (...tokens: string[]) => {\n if (tokens.length === 0) return;\n setClasses(getClasses().filter((c) => !tokens.includes(c)));\n },\n toggle: (token: string, force?: boolean) => {\n const hasClass = classList.contains(token);\n if (force === undefined) {\n if (hasClass) {\n classList.remove(token);\n return false;\n }\n classList.add(token);\n return true;\n }\n if (force) {\n classList.add(token);\n return true;\n }\n classList.remove(token);\n return false;\n },\n contains: (token: string) => getClasses().includes(token),\n replace: (oldToken: string, newToken: string) => {\n const classes = getClasses();\n const index = classes.indexOf(oldToken);\n if (index === -1) return false;\n classes[index] = newToken;\n setClasses(classes);\n return true;\n },\n item: (index: number) => getClasses()[index] || null,\n get length() {\n return getClasses().length;\n },\n toString: () => owner.className,\n [Symbol.iterator]: function* () {\n yield* getClasses();\n },\n forEach: (callback: (value: string, key: number, parent: DOMTokenList) => void) => {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n callback(classes[i], i, classList as unknown as DOMTokenList);\n }\n },\n entries: function* () {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n yield [i, classes[i]] as [number, string];\n }\n },\n keys: function* () {\n const classes = getClasses();\n for (let i = 0; i < classes.length; i++) {\n yield i;\n }\n },\n values: function* () {\n yield* getClasses();\n },\n get value() {\n return owner.className;\n },\n set value(value: string) {\n owner.className = value;\n },\n supports: (_token: string) => false\n };\n\n return classList as unknown as DOMTokenList;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AASA;;GAEG;AAEH,wBAAgB,iBAAiB,IAAI,IAAI,CAoBxC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
type AttributeKey<TTagName extends ElementTagName> = keyof ExpandedElementAttributes<TTagName>;
|
|
2
|
+
type AttributeCandidate<TTagName extends ElementTagName> = ExpandedElementAttributes<TTagName>[AttributeKey<TTagName>];
|
|
3
|
+
export declare function applySingleAttribute<TTagName extends ElementTagName>(el: ExpandedElement<TTagName>, key: AttributeKey<TTagName>, raw: AttributeCandidate<TTagName> | undefined, shouldMergeClassName?: boolean): void;
|
|
4
|
+
export declare function applyAttributes<TTagName extends ElementTagName>(element: ExpandedElement<TTagName>, attributes: ExpandedElementAttributes<TTagName>, mergeClassName?: boolean): void;
|
|
5
|
+
export { createReactiveTextNode } from "../update/reactive-text";
|
|
6
|
+
//# sourceMappingURL=attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/element/attributes.ts"],"names":[],"mappings":"AAcA,KAAK,YAAY,CAAC,QAAQ,SAAS,cAAc,IAAI,MAAM,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AAC/F,KAAK,kBAAkB,CAAC,QAAQ,SAAS,cAAc,IACrD,yBAAyB,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AA0C9D,wBAAgB,oBAAoB,CAAC,QAAQ,SAAS,cAAc,EAClE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,EAC7B,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC3B,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,SAAS,EAC7C,oBAAoB,UAAQ,GAC3B,IAAI,CAmFN;AAED,wBAAgB,eAAe,CAAC,QAAQ,SAAS,cAAc,EAC7D,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,EAClC,UAAU,EAAE,yBAAyB,CAAC,QAAQ,CAAC,EAC/C,cAAc,UAAO,GACpB,IAAI,CAYN;AAED,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function initReactiveClassName(el: HTMLElement): void;
|
|
2
|
+
export declare function hasReactiveClassName(el: HTMLElement): boolean;
|
|
3
|
+
export declare function addStaticClasses(el: HTMLElement, className: string): void;
|
|
4
|
+
export declare function mergeReactiveClassName(el: HTMLElement, reactiveClassName: string): void;
|
|
5
|
+
export declare function mergeStaticClassName(el: HTMLElement, newClassName: string): void;
|
|
6
|
+
//# sourceMappingURL=class-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-name.d.ts","sourceRoot":"","sources":["../../src/element/class-name.ts"],"names":[],"mappings":"AAoCA,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAO3D;AAGD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAE7D;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAQzE;AAGD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CA+BvF;AAGD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAWhF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Converts a public camel-cased event attribute to its native IDL property. */
|
|
2
|
+
export declare function eventAttributeToProperty(attribute: string): string | null;
|
|
3
|
+
/** Assigns an event attribute, falling back when the IDL property is absent. */
|
|
4
|
+
export declare function setEventAttribute(element: HTMLElement, property: string, listener: EventListener): void;
|
|
5
|
+
//# sourceMappingURL=event-attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-attributes.d.ts","sourceRoot":"","sources":["../../src/element/event-attributes.ts"],"names":[],"mappings":"AAkBA,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBzE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,GACtB,IAAI,CA2BN"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed event listener helper.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* button(
|
|
6
|
+
* "Click",
|
|
7
|
+
* on("click", (e) => {
|
|
8
|
+
* // e and currentTarget are inferred from the native event map
|
|
9
|
+
* })
|
|
10
|
+
* )
|
|
11
|
+
*
|
|
12
|
+
* Design notes:
|
|
13
|
+
* - Returns a NodeModFn so it can be used like any other modifier.
|
|
14
|
+
* - Produces no child node (returns void in the modifier body).
|
|
15
|
+
* - Provides strong typing of the event object based on the DOM event name.
|
|
16
|
+
* - Stores listener references in a WeakMap to prevent memory leaks.
|
|
17
|
+
* - Listeners are automatically cleaned up when elements are garbage collected.
|
|
18
|
+
*/
|
|
19
|
+
type EventListenerOptions = boolean | AddEventListenerOptions;
|
|
20
|
+
/**
|
|
21
|
+
* Remove all listeners of a specific type from an element.
|
|
22
|
+
*/
|
|
23
|
+
export declare function removeAllListeners(element: HTMLElement, type?: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Overload for standard HTMLElement events (strongly typed via lib.dom.d.ts)
|
|
26
|
+
*/
|
|
27
|
+
export declare function on<K extends NucloHTMLElementEventName, TTagName extends NucloHTMLElementTagNameForEvent<K> = NucloHTMLElementTagNameForEvent<K>>(type: K, listener: TypedEventListener<HTMLElementTagNameMap[TTagName], NucloHTMLElementEventForName<K>>, options?: EventListenerOptions): NodeModFn<TTagName>;
|
|
28
|
+
/**
|
|
29
|
+
* Fires once, after the element has been created and connected to the live
|
|
30
|
+
* document. Equivalent to `{ onMount: ... }`. May return a cleanup function —
|
|
31
|
+
* equivalent to also registering it with on("destroy", ...).
|
|
32
|
+
*
|
|
33
|
+
* Listed before the generic string overload below on purpose: "mount" is a
|
|
34
|
+
* string too, so a less specific overload earlier would shadow this one.
|
|
35
|
+
*/
|
|
36
|
+
export declare function on<TTagName extends ElementTagName = ElementTagName>(type: "mount", listener: MountCallback<HTMLElementTagNameMap[TTagName]>): NodeModFn<TTagName>;
|
|
37
|
+
/** Fires once the element has been removed. Equivalent to `{ onDestroy: ... }`. */
|
|
38
|
+
export declare function on<TTagName extends ElementTagName = ElementTagName>(type: "destroy", listener: DestroyCallback<HTMLElementTagNameMap[TTagName]>): NodeModFn<TTagName>;
|
|
39
|
+
/**
|
|
40
|
+
* Fallback / custom event overload (arbitrary event names or custom event types).
|
|
41
|
+
* Specify a custom event type with the E generic if needed:
|
|
42
|
+
* on<"my-event", CustomEvent<MyDetail>>("my-event", e => { ... })
|
|
43
|
+
*/
|
|
44
|
+
export declare function on<K extends string, E extends Event = Event, TTagName extends ElementTagName = ElementTagName>(type: K, listener: TypedEventListener<HTMLElementTagNameMap[TTagName], E>, options?: EventListenerOptions): NodeModFn<TTagName>;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/element/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,KAAK,oBAAoB,GAAG,OAAO,GAAG,uBAAuB,CAAC;AAiD9D;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CAyCN;AA+CD;;GAEG;AACH,wBAAgB,EAAE,CAChB,CAAC,SAAS,yBAAyB,EACnC,QAAQ,SAAS,+BAA+B,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC,CAAC,EAExF,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,kBAAkB,CAC1B,qBAAqB,CAAC,QAAQ,CAAC,EAC/B,4BAA4B,CAAC,CAAC,CAAC,CAChC,EACD,OAAO,CAAC,EAAE,oBAAoB,GAC7B,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEvB;;;;;;;GAOG;AACH,wBAAgB,EAAE,CAAC,QAAQ,SAAS,cAAc,GAAG,cAAc,EACjE,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,GACvD,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEvB,mFAAmF;AACnF,wBAAgB,EAAE,CAAC,QAAQ,SAAS,cAAc,GAAG,cAAc,EACjE,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,eAAe,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,GACzD,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEvB;;;;GAIG;AACH,wBAAgB,EAAE,CAChB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,KAAK,GAAG,KAAK,EACvB,QAAQ,SAAS,cAAc,GAAG,cAAc,EAEhD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAChE,OAAO,CAAC,EAAE,oBAAoB,GAC7B,SAAS,CAAC,QAAQ,CAAC,CAAC"}
|