nuclo 0.1.82 → 0.1.84

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Element.d.ts","sourceRoot":"","sources":["../../src/polyfill/Element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAwBnC,qBAAa,YAAa,SAAQ,SAAS;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAM;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,MAAM,CAAM;IACzB,OAAO,CAAC,UAAU,CAAc;IAChC,UAAU,EAAE,OAAO,CAAQ;IAC3B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAM;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,UAAU,CAAkC;IAEpD,IAAI,SAAS,IAAI,MAAM,CAGtB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAE1B;IAED,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,gBAAgB;gBAsCZ,OAAO,EAAE,MAAM;IA+I3B,WAAW,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAYxC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS/C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAInC,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC;IAqBvE,WAAW,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAWxC,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;IAc5D,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAO7D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAOhE,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAkBpC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAe/C,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,kBAAkB;IAmB1B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAiBvD,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,qBAAqB;CAa9B"}
1
+ {"version":3,"file":"Element.d.ts","sourceRoot":"","sources":["../../src/polyfill/Element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAwBnC,qBAAa,YAAa,SAAQ,SAAS;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAM;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,MAAM,CAAM;IACzB,OAAO,CAAC,UAAU,CAAc;IAChC,UAAU,EAAE,OAAO,CAAQ;IAC3B,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAM;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,UAAU,CAAkC;IAEpD,IAAI,SAAS,IAAI,MAAM,CAGtB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAE1B;IAED,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,gBAAgB;gBAsCZ,OAAO,EAAE,MAAM;IA6D3B,WAAW,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAYxC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS/C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAInC,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC;IAqBvE,WAAW,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAWxC,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;IAc5D,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAO7D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAOhE,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAkBpC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAe/C,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,kBAAkB;IAmB1B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAiBvD,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,qBAAqB;CAa9B"}
@@ -9,10 +9,10 @@ export declare class NucloEvent implements Event {
9
9
  isTrusted: boolean;
10
10
  target: EventTarget | null;
11
11
  timeStamp: number;
12
- readonly AT_TARGET: 2;
13
- readonly BUBBLING_PHASE: 3;
14
- readonly CAPTURING_PHASE: 1;
15
- readonly NONE: 0;
12
+ readonly AT_TARGET = 2;
13
+ readonly BUBBLING_PHASE = 3;
14
+ readonly CAPTURING_PHASE = 1;
15
+ readonly NONE = 0;
16
16
  returnValue: boolean;
17
17
  srcElement: EventTarget | null;
18
18
  cancelBubble: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/polyfill/Event.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,YAAW,KAAK;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,WAAW,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,OAAO,CAAS;IAClC,UAAU,EAAE,MAAM,CAAK;IACvB,SAAS,EAAE,OAAO,CAAS;IAC3B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAQ;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAK;IAC1B,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAK;IAC/B,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAK;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAK;IACrB,WAAW,EAAE,OAAO,CAAQ;IAC5B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAQ;IACtC,YAAY,EAAE,OAAO,CAAS;gBAElB,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,SAAS;IAQnD,YAAY,IAAI,WAAW,EAAE;IAI7B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI;IAIzE,cAAc,IAAI,IAAI;IAMtB,wBAAwB,IAAI,IAAI;IAIhC,eAAe,IAAI,IAAI;CAGxB;AAED,qBAAa,gBAAgB,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAW,YAAW,WAAW,CAAC,CAAC,CAAC;IACjF,MAAM,EAAE,CAAC,CAAC;gBAEE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IAK5D,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI;CAG7F;AAGD,eAAO,MAAM,KAAK;;;;;;;CAAiC,CAAC;AACpD,eAAO,MAAM,WAAW;;;CAA6C,CAAC"}
1
+ {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/polyfill/Event.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,YAAW,KAAK;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,WAAW,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,OAAO,CAAS;IAClC,UAAU,EAAE,MAAM,CAAK;IACvB,SAAS,EAAE,OAAO,CAAS;IAC3B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAQ;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,SAAS,KAAK;IACvB,QAAQ,CAAC,cAAc,KAAK;IAC5B,QAAQ,CAAC,eAAe,KAAK;IAC7B,QAAQ,CAAC,IAAI,KAAK;IAClB,WAAW,EAAE,OAAO,CAAQ;IAC5B,UAAU,EAAE,WAAW,GAAG,IAAI,CAAQ;IACtC,YAAY,EAAE,OAAO,CAAS;gBAElB,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,SAAS;IAQnD,YAAY,IAAI,WAAW,EAAE;IAI7B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI;IAIzE,cAAc,IAAI,IAAI;IAMtB,wBAAwB,IAAI,IAAI;IAIhC,eAAe,IAAI,IAAI;CAGxB;AAED,qBAAa,gBAAgB,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAW,YAAW,WAAW,CAAC,CAAC,CAAC;IACjF,MAAM,EAAE,CAAC,CAAC;gBAEE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IAK5D,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI;CAG7F;AAGD,eAAO,MAAM,KAAK;;;;;;;CAAiC,CAAC;AACpD,eAAO,MAAM,WAAW;;;CAA6C,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";function t(t){const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};return t.replace(/[&<>"']/g,t=>e[t]||t)}function e(e,n){if(null==n||!1===n)return"";if(!0===n)return" "+e;if("style"===e&&"object"==typeof n){const e=Object.entries(n).map(([t,e])=>`${function(t){let e="";for(let n=0;t.length>n;n++){const r=t.charCodeAt(n);65>r||r>90?e+=t[n]:(n>0&&(e+="-"),e+=String.fromCharCode(r+32))}return e}(t)}:${e}`).join(";");return e?` style="${t(e)}"`:""}return` ${e}="${t(n+"")}"`}const n=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function r(t){if("childNodes"in t){const e=t.childNodes;if(e&&(Array.isArray(e)||void 0!==e.length))return e}if("children"in t){const e=t.children;if(e&&Array.isArray(e))return e}return[]}function i(o){if(3===o.nodeType)return t(o.textContent||"");if(8===o.nodeType)return`\x3c!--${o.textContent||""}--\x3e`;if(1===o.nodeType){const t=o,s=t.tagName.toLowerCase(),a=function(t){let n="";if("attributes"in t&&t.attributes instanceof Map){const r=t;r.id&&!t.attributes.has("id")&&(n+=e("id",r.id)),r.className&&!t.attributes.has("class")&&(n+=e("class",r.className));for(const[r,i]of t.attributes)n+=e(r,i);return n}if(t.attributes&&t.attributes.length)for(let r=0;t.attributes.length>r;r++){const i=t.attributes[r];i&&i.name&&(n+=e(i.name,i.value))}return n}(t);if(n.has(s))return`<${s}${a} />`;let c="";const u=r(t);if(u&&u.length>0)for(let t=0;u.length>t;t++){const e=u[t];e&&(c+=i(e))}return`<${s}${a}>${c}</${s}>`}if(11===o.nodeType){let t="";const e=r(o);if(e&&e.length>0)for(let n=0;e.length>n;n++){const r=e[n];r&&(t+=i(r))}return t}return""}function o(t){if(!t)return"";if("function"==typeof t)try{const e=globalThis.document?.createElement("div");if(!e)throw Error("Document is not available. Make sure polyfills are loaded.");const n=t(e,0);return n&&"object"==typeof n&&"nodeType"in n?i(n):""}catch(t){return""}return"nodeType"in t?i(t):""}exports.renderManyToString=function(t){return t.map(t=>o(t))},exports.renderToString=o,exports.renderToStringWithContainer=function(t,n="div",r={}){const i=o(t);return`<${n}${Object.entries(r).map(([t,n])=>e(t,n)).join("")}>${i}</${n}>`};
1
+ "use strict";function t(t){const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};return t.replace(/[&<>"']/g,t=>e[t])}function e(e,n){if(null==n||!1===n)return"";if(!0===n)return" "+e;if("style"===e&&"object"==typeof n){const e=Object.entries(n).map(([t,e])=>`${function(t){let e="";for(let n=0;t.length>n;n++){const r=t.charCodeAt(n);65>r||r>90?e+=t[n]:(n>0&&(e+="-"),e+=String.fromCharCode(r+32))}return e}(t)}:${e}`).join(";");return e?` style="${t(e)}"`:""}return` ${e}="${t(n+"")}"`}const n=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function r(t){if("childNodes"in t){const e=t.childNodes;if(e&&(Array.isArray(e)||void 0!==e.length))return e}if("children"in t){const e=t.children;if(e&&Array.isArray(e))return e}return[]}function i(o){if(3===o.nodeType)return t(o.textContent||"");if(8===o.nodeType)return`\x3c!--${o.textContent||""}--\x3e`;if(1===o.nodeType){const t=o,s=t.tagName.toLowerCase(),a=function(t){let n="";if("attributes"in t&&t.attributes instanceof Map){const r=t;r.id&&!t.attributes.has("id")&&(n+=e("id",r.id)),r.className&&!t.attributes.has("class")&&(n+=e("class",r.className));for(const[r,i]of t.attributes)n+=e(r,i);return n}if(t.attributes&&t.attributes.length)for(let r=0;t.attributes.length>r;r++){const i=t.attributes[r];i&&i.name&&(n+=e(i.name,i.value))}return n}(t);if(n.has(s))return`<${s}${a} />`;let c="";const u=r(t);if(u&&u.length>0)for(let t=0;u.length>t;t++){const e=u[t];e&&(c+=i(e))}return`<${s}${a}>${c}</${s}>`}if(11===o.nodeType){let t="";const e=r(o);if(e&&e.length>0)for(let n=0;e.length>n;n++){const r=e[n];r&&(t+=i(r))}return t}return""}function o(t){if(!t)return"";if("function"==typeof t)try{const e=globalThis.document?.createElement("div");if(!e)throw Error("Document is not available. Make sure polyfills are loaded.");const n=t(e,0);return n&&"object"==typeof n&&"nodeType"in n?i(n):""}catch(t){return""}return"nodeType"in t?i(t):""}exports.renderManyToString=function(t){return t.map(t=>o(t))},exports.renderToString=o,exports.renderToStringWithContainer=function(t,n="div",r={}){const i=o(t);return`<${n}${Object.entries(r).map(([t,n])=>e(t,n)).join("")}>${i}</${n}>`};
2
2
  //# sourceMappingURL=nuclo.ssr.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"nuclo.ssr.cjs","sources":["../../src/utility/stringUtils.ts","../../src/ssr/renderToString.ts"],"sourcesContent":["/**\n * String utility functions\n */\n\n/**\n * Converts camelCase to kebab-case (optimized for performance)\n * Uses direct character code manipulation for maximum speed\n * @example camelToKebab('backgroundColor') => 'background-color'\n */\nexport function camelToKebab(str: string): string {\n let result = '';\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n // A-Z is 65-90, a-z is 97-122 (difference of 32)\n if (code >= 65 && code <= 90) {\n if (i > 0) result += '-';\n result += String.fromCharCode(code + 32);\n } else {\n result += str[i];\n }\n }\n return result;\n}\n\n/**\n * Escapes HTML special characters to prevent XSS\n */\nexport function escapeHtml(text: string): string {\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#039;'\n };\n return text.replace(/[&<>\"']/g, char => map[char] || char);\n}\n","/**\n * Server-Side Rendering (SSR) utilities for Nuclo\n * Renders Nuclo components to HTML strings in Node.js environment\n */\n\nimport { escapeHtml, camelToKebab } from '../utility/stringUtils';\n\ntype RenderableInput =\n | NodeModFn<ElementTagName>\n | Element\n | Node\n | null\n | undefined;\n\n/**\n * Serializes a DOM attribute value\n */\nfunction serializeAttribute(name: string, value: unknown): string {\n if (value === null || value === undefined || value === false) {\n return '';\n }\n\n if (value === true) {\n return ` ${name}`;\n }\n\n if (name === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(([key, val]) => {\n const cssKey = camelToKebab(key);\n return `${cssKey}:${val}`;\n })\n .join(';');\n return styleStr ? ` style=\"${escapeHtml(styleStr)}\"` : '';\n }\n\n return ` ${name}=\"${escapeHtml(String(value))}\"`;\n}\n\n/**\n * Serializes DOM element attributes to HTML string\n */\nfunction serializeAttributes(element: Element): string {\n let result = '';\n\n // Handle polyfill elements with Map-based attributes\n if ('attributes' in element && element.attributes instanceof Map) {\n // First, handle special properties that might not be in the attributes Map\n const el = element as any;\n\n // Add id if it exists and is not already in attributes\n if (el.id && !element.attributes.has('id')) {\n result += serializeAttribute('id', el.id);\n }\n\n // Add class if it exists and is not already in attributes\n if (el.className && !element.attributes.has('class')) {\n result += serializeAttribute('class', el.className);\n }\n\n // Then add all attributes from the Map\n for (const [name, value] of element.attributes) {\n result += serializeAttribute(name, value);\n }\n return result;\n }\n\n // Handle browser elements with NamedNodeMap attributes\n if (element.attributes && element.attributes.length) {\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n if (attr && attr.name) {\n result += serializeAttribute(attr.name, attr.value);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Self-closing HTML tags that don't have closing tags\n */\nconst VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n]);\n\n/**\n * Get child nodes from an element (handles both browser and polyfill elements)\n */\nfunction getChildNodes(node: Node): ArrayLike<Node> {\n // Check for childNodes first (document fragments and browser elements)\n if ('childNodes' in node) {\n const childNodes = (node as any).childNodes;\n if (childNodes && (Array.isArray(childNodes) || childNodes.length !== undefined)) {\n return childNodes;\n }\n }\n // Polyfill elements have children array\n if ('children' in node) {\n const children = (node as any).children;\n if (children && Array.isArray(children)) {\n return children as ArrayLike<Node>;\n }\n }\n return [] as ArrayLike<Node>;\n}\n\n/**\n * Serializes a DOM node to HTML string\n */\nfunction serializeNode(node: Node): string {\n // Text node\n if (node.nodeType === 3) { // Node.TEXT_NODE\n return escapeHtml(node.textContent || '');\n }\n\n // Comment node\n if (node.nodeType === 8) { // Node.COMMENT_NODE\n return `<!--${node.textContent || ''}-->`;\n }\n\n // Element node\n if (node.nodeType === 1) { // Node.ELEMENT_NODE\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n const attributes = serializeAttributes(element);\n\n // Self-closing tags\n if (VOID_ELEMENTS.has(tagName)) {\n return `<${tagName}${attributes} />`;\n }\n\n // Regular elements with children\n let childrenHtml = '';\n const childNodes = getChildNodes(element);\n if (childNodes && childNodes.length > 0) {\n for (let i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child) {\n childrenHtml += serializeNode(child);\n }\n }\n }\n\n return `<${tagName}${attributes}>${childrenHtml}</${tagName}>`;\n }\n\n // Document fragment\n if (node.nodeType === 11) { // Node.DOCUMENT_FRAGMENT_NODE\n let result = '';\n const childNodes = getChildNodes(node);\n if (childNodes && childNodes.length > 0) {\n for (let i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child) {\n result += serializeNode(child);\n }\n }\n }\n return result;\n }\n\n return '';\n}\n\n/**\n * Renders a Nuclo component to an HTML string for server-side rendering\n *\n * @param input - A Nuclo component function, DOM element, or node\n * @returns HTML string representation of the component\n *\n * @example\n * ```ts\n * import { renderToString } from 'nuclo/ssr';\n * import { div } from 'nuclo';\n *\n * const html = renderToString(\n * div(\"Hello, World!\")\n * );\n * // Returns: '<div>Hello, World!</div>'\n * ```\n */\nexport function renderToString(input: RenderableInput): string {\n if (!input) {\n return '';\n }\n\n // If it's a function (NodeModFn), call it to create the element\n if (typeof input === 'function') {\n try {\n // Create a temporary container to render into\n const container = globalThis.document?.createElement('div');\n if (!container) {\n throw new Error('Document is not available. Make sure polyfills are loaded.');\n }\n\n const element = input(container as ExpandedElement<ElementTagName>, 0);\n return element && typeof element === 'object' && 'nodeType' in element ? serializeNode(element as Node) : '';\n } catch (error) {\n console.error('Error rendering component to string:', error);\n return '';\n }\n }\n\n // If it's already a Node, serialize it directly\n if ('nodeType' in input) {\n return serializeNode(input as Node);\n }\n\n return '';\n}\n\n/**\n * Renders multiple Nuclo components to HTML strings\n *\n * @param inputs - Array of Nuclo components\n * @returns Array of HTML strings\n */\nexport function renderManyToString(inputs: RenderableInput[]): string[] {\n return inputs.map(input => renderToString(input));\n}\n\n/**\n * Renders a Nuclo component and wraps it in a container element\n *\n * @param input - A Nuclo component\n * @param containerTag - The tag name for the container (default: 'div')\n * @param containerAttrs - Attributes for the container element\n * @returns HTML string with container wrapper\n */\nexport function renderToStringWithContainer(\n input: RenderableInput,\n containerTag: string = 'div',\n containerAttrs: Record<string, string> = {}\n): string {\n const content = renderToString(input);\n const attrs = Object.entries(containerAttrs)\n .map(([key, value]) => serializeAttribute(key, value))\n .join('');\n\n return `<${containerTag}${attrs}>${content}</${containerTag}>`;\n}\n"],"names":["escapeHtml","text","map","replace","char","serializeAttribute","name","value","styleStr","Object","entries","key","val","str","result","i","length","code","charCodeAt","String","fromCharCode","camelToKebab","join","VOID_ELEMENTS","Set","getChildNodes","node","childNodes","Array","isArray","undefined","children","serializeNode","nodeType","textContent","element","tagName","toLowerCase","attributes","Map","el","id","has","className","attr","serializeAttributes","childrenHtml","child","renderToString","input","container","globalThis","document","createElement","Error","error","inputs","containerTag","containerAttrs","content"],"mappings":"aA2BM,SAAUA,EAAWC,GACzB,MAAMC,EAA8B,CAClC,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,UAEP,OAAOD,EAAKE,QAAQ,WAAYC,GAAQF,EAAIE,IAASA,EACvD,CCnBA,SAASC,EAAmBC,EAAcC,GACxC,GAAIA,UAAmD,IAAVA,EAC3C,MAAO,GAGT,IAAc,IAAVA,EACF,MAAO,IAAID,EAGb,GAAa,UAATA,GAAqC,iBAAVC,EAAoB,CACjD,MAAMC,EAAWC,OAAOC,QAAQH,GAC7BL,IAAI,EAAES,EAAKC,KAEH,GDrBT,SAAuBC,GAC3B,IAAIC,EAAS,GACb,IAAK,IAAIC,EAAI,EAAOF,EAAIG,OAARD,EAAgBA,IAAK,CACnC,MAAME,EAAOJ,EAAIK,WAAWH,GAEhB,GAARE,GAAcA,EAAQ,GAIxBH,GAAUD,EAAIE,IAHVA,EAAI,IAAGD,GAAU,KACrBA,GAAUK,OAAOC,aAAaH,EAAO,IAIzC,CACA,OAAOH,CACT,CCOuBO,CAAaV,MACRC,KAErBU,KAAK,KACR,OAAOd,EAAW,WAAWR,EAAWQ,MAAe,EACzD,CAEA,MAAO,IAAIF,MAASN,EAAkBO,EAAPY,MACjC,CA8CA,MAAMI,EAAgB,IAAIC,IAAI,CAC5B,OAAQ,OAAQ,KAAM,MAAO,QAAS,KAAM,MAAO,QACnD,OAAQ,OAAQ,QAAS,SAAU,QAAS,QAM9C,SAASC,EAAcC,GAErB,GAAI,eAAgBA,EAAM,CACxB,MAAMC,EAAcD,EAAaC,WACjC,GAAIA,IAAeC,MAAMC,QAAQF,SAAqCG,IAAtBH,EAAWX,QACzD,OAAOW,CAEX,CAEA,GAAI,aAAcD,EAAM,CACtB,MAAMK,EAAYL,EAAaK,SAC/B,GAAIA,GAAYH,MAAMC,QAAQE,GAC5B,OAAOA,CAEX,CACA,MAAO,EACT,CAKA,SAASC,EAAcN,GAErB,GAAsB,IAAlBA,EAAKO,SACP,OAAOjC,EAAW0B,EAAKQ,aAAe,IAIxC,GAAsB,IAAlBR,EAAKO,SACP,MAAO,UAAOP,EAAKQ,aAAe,WAIpC,GAAsB,IAAlBR,EAAKO,SAAgB,CACvB,MAAME,EAAUT,EACVU,EAAUD,EAAQC,QAAQC,cAC1BC,EArFV,SAA6BH,GAC3B,IAAIrB,EAAS,GAGb,GAAI,eAAgBqB,GAAWA,EAAQG,sBAAsBC,IAAK,CAEhE,MAAMC,EAAKL,EAGPK,EAAGC,KAAON,EAAQG,WAAWI,IAAI,QACnC5B,GAAUT,EAAmB,KAAMmC,EAAGC,KAIpCD,EAAGG,YAAcR,EAAQG,WAAWI,IAAI,WAC1C5B,GAAUT,EAAmB,QAASmC,EAAGG,YAI3C,IAAK,MAAOrC,EAAMC,KAAU4B,EAAQG,WAClCxB,GAAUT,EAAmBC,EAAMC,GAErC,OAAOO,CACT,CAGA,GAAIqB,EAAQG,YAAcH,EAAQG,WAAWtB,OAC3C,IAAK,IAAID,EAAI,EAAOoB,EAAQG,WAAWtB,OAAvBD,EAA+BA,IAAK,CAClD,MAAM6B,EAAOT,EAAQG,WAAWvB,GAC5B6B,GAAQA,EAAKtC,OACfQ,GAAUT,EAAmBuC,EAAKtC,KAAMsC,EAAKrC,OAEjD,CAGF,OAAOO,CACT,CAiDuB+B,CAAoBV,GAGvC,GAAIZ,EAAcmB,IAAIN,GACpB,MAAO,IAAIA,IAAUE,OAIvB,IAAIQ,EAAe,GACnB,MAAMnB,EAAaF,EAAcU,GACjC,GAAIR,GAAcA,EAAWX,OAAS,EACpC,IAAK,IAAID,EAAI,EAAOY,EAAWX,OAAfD,EAAuBA,IAAK,CAC1C,MAAMgC,EAAQpB,EAAWZ,GACrBgC,IACFD,GAAgBd,EAAce,GAElC,CAGF,MAAO,IAAIX,IAAUE,KAAcQ,MAAiBV,IACtD,CAGA,GAAsB,KAAlBV,EAAKO,SAAiB,CACxB,IAAInB,EAAS,GACb,MAAMa,EAAaF,EAAcC,GACjC,GAAIC,GAAcA,EAAWX,OAAS,EACpC,IAAK,IAAID,EAAI,EAAOY,EAAWX,OAAfD,EAAuBA,IAAK,CAC1C,MAAMgC,EAAQpB,EAAWZ,GACrBgC,IACFjC,GAAUkB,EAAce,GAE5B,CAEF,OAAOjC,CACT,CAEA,MAAO,EACT,CAmBM,SAAUkC,EAAeC,GAC7B,IAAKA,EACH,MAAO,GAIT,GAAqB,mBAAVA,EACT,IAEE,MAAMC,EAAYC,WAAWC,UAAUC,cAAc,OACrD,IAAKH,EACH,MAAUI,MAAM,8DAGlB,MAAMnB,EAAUc,EAAMC,EAA8C,GACpE,OAAOf,GAA8B,iBAAZA,GAAwB,aAAcA,EAAUH,EAAcG,GAAmB,EAC5G,CAAE,MAAOoB,GAEP,MAAO,EACT,CAIF,MAAI,aAAcN,EACTjB,EAAciB,GAGhB,EACT,4BAQM,SAA6BO,GACjC,OAAOA,EAAOtD,IAAI+C,GAASD,EAAeC,GAC5C,+DAUM,SACJA,EACAQ,EAAuB,MACvBC,EAAyC,CAAA,GAEzC,MAAMC,EAAUX,EAAeC,GAK/B,MAAO,IAAIQ,IAJGhD,OAAOC,QAAQgD,GAC1BxD,IAAI,EAAES,EAAKJ,KAAWF,EAAmBM,EAAKJ,IAC9Ce,KAAK,OAE2BqC,MAAYF,IACjD"}
1
+ {"version":3,"file":"nuclo.ssr.cjs","sources":["../../src/utility/stringUtils.ts","../../src/ssr/renderToString.ts"],"sourcesContent":["/**\n * String utility functions\n */\n\n/**\n * Converts camelCase to kebab-case (optimized for performance)\n * Uses direct character code manipulation for maximum speed\n * @example camelToKebab('backgroundColor') => 'background-color'\n */\nexport function camelToKebab(str: string): string {\n let result = '';\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n // A-Z is 65-90, a-z is 97-122 (difference of 32)\n if (code >= 65 && code <= 90) {\n if (i > 0) result += '-';\n result += String.fromCharCode(code + 32);\n } else {\n result += str[i];\n }\n }\n return result;\n}\n\n/**\n * Escapes HTML special characters to prevent XSS\n */\nexport function escapeHtml(text: string): string {\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#039;'\n };\n return text.replace(/[&<>\"']/g, (char) => map[char]);\n}\n","/**\n * Server-Side Rendering (SSR) utilities for Nuclo\n * Renders Nuclo components to HTML strings in Node.js environment\n */\n\nimport { escapeHtml, camelToKebab } from '../utility/stringUtils';\n\ntype RenderableInput =\n | NodeModFn<ElementTagName>\n | Element\n | Node\n | null\n | undefined;\n\n/**\n * Serializes a DOM attribute value\n */\nfunction serializeAttribute(name: string, value: unknown): string {\n if (value === null || value === undefined || value === false) {\n return '';\n }\n\n if (value === true) {\n return ` ${name}`;\n }\n\n if (name === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(([key, val]) => {\n const cssKey = camelToKebab(key);\n return `${cssKey}:${val}`;\n })\n .join(';');\n return styleStr ? ` style=\"${escapeHtml(styleStr)}\"` : '';\n }\n\n return ` ${name}=\"${escapeHtml(String(value))}\"`;\n}\n\n/**\n * Serializes DOM element attributes to HTML string\n */\nfunction serializeAttributes(element: Element): string {\n let result = '';\n\n // Handle polyfill elements with Map-based attributes\n if ('attributes' in element && element.attributes instanceof Map) {\n // First, handle special properties that might not be in the attributes Map\n const el = element as any;\n\n // Add id if it exists and is not already in attributes\n if (el.id && !element.attributes.has('id')) {\n result += serializeAttribute('id', el.id);\n }\n\n // Add class if it exists and is not already in attributes\n if (el.className && !element.attributes.has('class')) {\n result += serializeAttribute('class', el.className);\n }\n\n // Then add all attributes from the Map\n for (const [name, value] of element.attributes) {\n result += serializeAttribute(name, value);\n }\n return result;\n }\n\n // Handle browser elements with NamedNodeMap attributes\n if (element.attributes && element.attributes.length) {\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n if (attr && attr.name) {\n result += serializeAttribute(attr.name, attr.value);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Self-closing HTML tags that don't have closing tags\n */\nconst VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n]);\n\n/**\n * Get child nodes from an element (handles both browser and polyfill elements)\n */\nfunction getChildNodes(node: Node): ArrayLike<Node> {\n // Check for childNodes first (document fragments and browser elements)\n if ('childNodes' in node) {\n const childNodes = (node as any).childNodes;\n if (childNodes && (Array.isArray(childNodes) || childNodes.length !== undefined)) {\n return childNodes;\n }\n }\n // Polyfill elements have children array\n if ('children' in node) {\n const children = (node as any).children;\n if (children && Array.isArray(children)) {\n return children as ArrayLike<Node>;\n }\n }\n return [] as ArrayLike<Node>;\n}\n\n/**\n * Serializes a DOM node to HTML string\n */\nfunction serializeNode(node: Node): string {\n // Text node\n if (node.nodeType === 3) { // Node.TEXT_NODE\n return escapeHtml(node.textContent || '');\n }\n\n // Comment node\n if (node.nodeType === 8) { // Node.COMMENT_NODE\n return `<!--${node.textContent || ''}-->`;\n }\n\n // Element node\n if (node.nodeType === 1) { // Node.ELEMENT_NODE\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n const attributes = serializeAttributes(element);\n\n // Self-closing tags\n if (VOID_ELEMENTS.has(tagName)) {\n return `<${tagName}${attributes} />`;\n }\n\n // Regular elements with children\n let childrenHtml = '';\n const childNodes = getChildNodes(element);\n if (childNodes && childNodes.length > 0) {\n for (let i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child) {\n childrenHtml += serializeNode(child);\n }\n }\n }\n\n return `<${tagName}${attributes}>${childrenHtml}</${tagName}>`;\n }\n\n // Document fragment\n if (node.nodeType === 11) { // Node.DOCUMENT_FRAGMENT_NODE\n let result = '';\n const childNodes = getChildNodes(node);\n if (childNodes && childNodes.length > 0) {\n for (let i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child) {\n result += serializeNode(child);\n }\n }\n }\n return result;\n }\n\n return '';\n}\n\n/**\n * Renders a Nuclo component to an HTML string for server-side rendering\n *\n * @param input - A Nuclo component function, DOM element, or node\n * @returns HTML string representation of the component\n *\n * @example\n * ```ts\n * import { renderToString } from 'nuclo/ssr';\n * import { div } from 'nuclo';\n *\n * const html = renderToString(\n * div(\"Hello, World!\")\n * );\n * // Returns: '<div>Hello, World!</div>'\n * ```\n */\nexport function renderToString(input: RenderableInput): string {\n if (!input) {\n return '';\n }\n\n // If it's a function (NodeModFn), call it to create the element\n if (typeof input === 'function') {\n try {\n // Create a temporary container to render into\n const container = globalThis.document?.createElement('div');\n if (!container) {\n throw new Error('Document is not available. Make sure polyfills are loaded.');\n }\n\n const element = input(container as ExpandedElement<ElementTagName>, 0);\n return element && typeof element === 'object' && 'nodeType' in element ? serializeNode(element as Node) : '';\n } catch (error) {\n console.error('Error rendering component to string:', error);\n return '';\n }\n }\n\n // If it's already a Node, serialize it directly\n if ('nodeType' in input) {\n return serializeNode(input as Node);\n }\n\n return '';\n}\n\n/**\n * Renders multiple Nuclo components to HTML strings\n *\n * @param inputs - Array of Nuclo components\n * @returns Array of HTML strings\n */\nexport function renderManyToString(inputs: RenderableInput[]): string[] {\n return inputs.map(input => renderToString(input));\n}\n\n/**\n * Renders a Nuclo component and wraps it in a container element\n *\n * @param input - A Nuclo component\n * @param containerTag - The tag name for the container (default: 'div')\n * @param containerAttrs - Attributes for the container element\n * @returns HTML string with container wrapper\n */\nexport function renderToStringWithContainer(\n input: RenderableInput,\n containerTag: string = 'div',\n containerAttrs: Record<string, string> = {}\n): string {\n const content = renderToString(input);\n const attrs = Object.entries(containerAttrs)\n .map(([key, value]) => serializeAttribute(key, value))\n .join('');\n\n return `<${containerTag}${attrs}>${content}</${containerTag}>`;\n}\n"],"names":["escapeHtml","text","map","replace","char","serializeAttribute","name","value","styleStr","Object","entries","key","val","str","result","i","length","code","charCodeAt","String","fromCharCode","camelToKebab","join","VOID_ELEMENTS","Set","getChildNodes","node","childNodes","Array","isArray","undefined","children","serializeNode","nodeType","textContent","element","tagName","toLowerCase","attributes","Map","el","id","has","className","attr","serializeAttributes","childrenHtml","child","renderToString","input","container","globalThis","document","createElement","Error","error","inputs","containerTag","containerAttrs","content"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- function t(t){const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};return t.replace(/[&<>"']/g,t=>e[t]||t)}function e(e,n){if(null==n||!1===n)return"";if(!0===n)return" "+e;if("style"===e&&"object"==typeof n){const e=Object.entries(n).map(([t,e])=>`${function(t){let e="";for(let n=0;t.length>n;n++){const r=t.charCodeAt(n);65>r||r>90?e+=t[n]:(n>0&&(e+="-"),e+=String.fromCharCode(r+32))}return e}(t)}:${e}`).join(";");return e?` style="${t(e)}"`:""}return` ${e}="${t(n+"")}"`}const n=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function r(t){if("childNodes"in t){const e=t.childNodes;if(e&&(Array.isArray(e)||void 0!==e.length))return e}if("children"in t){const e=t.children;if(e&&Array.isArray(e))return e}return[]}function i(o){if(3===o.nodeType)return t(o.textContent||"");if(8===o.nodeType)return`\x3c!--${o.textContent||""}--\x3e`;if(1===o.nodeType){const t=o,a=t.tagName.toLowerCase(),s=function(t){let n="";if("attributes"in t&&t.attributes instanceof Map){const r=t;r.id&&!t.attributes.has("id")&&(n+=e("id",r.id)),r.className&&!t.attributes.has("class")&&(n+=e("class",r.className));for(const[r,i]of t.attributes)n+=e(r,i);return n}if(t.attributes&&t.attributes.length)for(let r=0;t.attributes.length>r;r++){const i=t.attributes[r];i&&i.name&&(n+=e(i.name,i.value))}return n}(t);if(n.has(a))return`<${a}${s} />`;let c="";const u=r(t);if(u&&u.length>0)for(let t=0;u.length>t;t++){const e=u[t];e&&(c+=i(e))}return`<${a}${s}>${c}</${a}>`}if(11===o.nodeType){let t="";const e=r(o);if(e&&e.length>0)for(let n=0;e.length>n;n++){const r=e[n];r&&(t+=i(r))}return t}return""}function o(t){if(!t)return"";if("function"==typeof t)try{const e=globalThis.document?.createElement("div");if(!e)throw Error("Document is not available. Make sure polyfills are loaded.");const n=t(e,0);return n&&"object"==typeof n&&"nodeType"in n?i(n):""}catch(t){return""}return"nodeType"in t?i(t):""}function a(t){return t.map(t=>o(t))}function s(t,n="div",r={}){const i=o(t);return`<${n}${Object.entries(r).map(([t,n])=>e(t,n)).join("")}>${i}</${n}>`}export{a as renderManyToString,o as renderToString,s as renderToStringWithContainer};
1
+ function t(t){const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};return t.replace(/[&<>"']/g,t=>e[t])}function e(e,n){if(null==n||!1===n)return"";if(!0===n)return" "+e;if("style"===e&&"object"==typeof n){const e=Object.entries(n).map(([t,e])=>`${function(t){let e="";for(let n=0;t.length>n;n++){const r=t.charCodeAt(n);65>r||r>90?e+=t[n]:(n>0&&(e+="-"),e+=String.fromCharCode(r+32))}return e}(t)}:${e}`).join(";");return e?` style="${t(e)}"`:""}return` ${e}="${t(n+"")}"`}const n=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function r(t){if("childNodes"in t){const e=t.childNodes;if(e&&(Array.isArray(e)||void 0!==e.length))return e}if("children"in t){const e=t.children;if(e&&Array.isArray(e))return e}return[]}function i(o){if(3===o.nodeType)return t(o.textContent||"");if(8===o.nodeType)return`\x3c!--${o.textContent||""}--\x3e`;if(1===o.nodeType){const t=o,a=t.tagName.toLowerCase(),s=function(t){let n="";if("attributes"in t&&t.attributes instanceof Map){const r=t;r.id&&!t.attributes.has("id")&&(n+=e("id",r.id)),r.className&&!t.attributes.has("class")&&(n+=e("class",r.className));for(const[r,i]of t.attributes)n+=e(r,i);return n}if(t.attributes&&t.attributes.length)for(let r=0;t.attributes.length>r;r++){const i=t.attributes[r];i&&i.name&&(n+=e(i.name,i.value))}return n}(t);if(n.has(a))return`<${a}${s} />`;let c="";const u=r(t);if(u&&u.length>0)for(let t=0;u.length>t;t++){const e=u[t];e&&(c+=i(e))}return`<${a}${s}>${c}</${a}>`}if(11===o.nodeType){let t="";const e=r(o);if(e&&e.length>0)for(let n=0;e.length>n;n++){const r=e[n];r&&(t+=i(r))}return t}return""}function o(t){if(!t)return"";if("function"==typeof t)try{const e=globalThis.document?.createElement("div");if(!e)throw Error("Document is not available. Make sure polyfills are loaded.");const n=t(e,0);return n&&"object"==typeof n&&"nodeType"in n?i(n):""}catch(t){return""}return"nodeType"in t?i(t):""}function a(t){return t.map(t=>o(t))}function s(t,n="div",r={}){const i=o(t);return`<${n}${Object.entries(r).map(([t,n])=>e(t,n)).join("")}>${i}</${n}>`}export{a as renderManyToString,o as renderToString,s as renderToStringWithContainer};
2
2
  //# sourceMappingURL=nuclo.ssr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nuclo.ssr.js","sources":["../../src/utility/stringUtils.ts","../../src/ssr/renderToString.ts"],"sourcesContent":["/**\n * String utility functions\n */\n\n/**\n * Converts camelCase to kebab-case (optimized for performance)\n * Uses direct character code manipulation for maximum speed\n * @example camelToKebab('backgroundColor') => 'background-color'\n */\nexport function camelToKebab(str: string): string {\n let result = '';\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n // A-Z is 65-90, a-z is 97-122 (difference of 32)\n if (code >= 65 && code <= 90) {\n if (i > 0) result += '-';\n result += String.fromCharCode(code + 32);\n } else {\n result += str[i];\n }\n }\n return result;\n}\n\n/**\n * Escapes HTML special characters to prevent XSS\n */\nexport function escapeHtml(text: string): string {\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#039;'\n };\n return text.replace(/[&<>\"']/g, char => map[char] || char);\n}\n","/**\n * Server-Side Rendering (SSR) utilities for Nuclo\n * Renders Nuclo components to HTML strings in Node.js environment\n */\n\nimport { escapeHtml, camelToKebab } from '../utility/stringUtils';\n\ntype RenderableInput =\n | NodeModFn<ElementTagName>\n | Element\n | Node\n | null\n | undefined;\n\n/**\n * Serializes a DOM attribute value\n */\nfunction serializeAttribute(name: string, value: unknown): string {\n if (value === null || value === undefined || value === false) {\n return '';\n }\n\n if (value === true) {\n return ` ${name}`;\n }\n\n if (name === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(([key, val]) => {\n const cssKey = camelToKebab(key);\n return `${cssKey}:${val}`;\n })\n .join(';');\n return styleStr ? ` style=\"${escapeHtml(styleStr)}\"` : '';\n }\n\n return ` ${name}=\"${escapeHtml(String(value))}\"`;\n}\n\n/**\n * Serializes DOM element attributes to HTML string\n */\nfunction serializeAttributes(element: Element): string {\n let result = '';\n\n // Handle polyfill elements with Map-based attributes\n if ('attributes' in element && element.attributes instanceof Map) {\n // First, handle special properties that might not be in the attributes Map\n const el = element as any;\n\n // Add id if it exists and is not already in attributes\n if (el.id && !element.attributes.has('id')) {\n result += serializeAttribute('id', el.id);\n }\n\n // Add class if it exists and is not already in attributes\n if (el.className && !element.attributes.has('class')) {\n result += serializeAttribute('class', el.className);\n }\n\n // Then add all attributes from the Map\n for (const [name, value] of element.attributes) {\n result += serializeAttribute(name, value);\n }\n return result;\n }\n\n // Handle browser elements with NamedNodeMap attributes\n if (element.attributes && element.attributes.length) {\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n if (attr && attr.name) {\n result += serializeAttribute(attr.name, attr.value);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Self-closing HTML tags that don't have closing tags\n */\nconst VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n]);\n\n/**\n * Get child nodes from an element (handles both browser and polyfill elements)\n */\nfunction getChildNodes(node: Node): ArrayLike<Node> {\n // Check for childNodes first (document fragments and browser elements)\n if ('childNodes' in node) {\n const childNodes = (node as any).childNodes;\n if (childNodes && (Array.isArray(childNodes) || childNodes.length !== undefined)) {\n return childNodes;\n }\n }\n // Polyfill elements have children array\n if ('children' in node) {\n const children = (node as any).children;\n if (children && Array.isArray(children)) {\n return children as ArrayLike<Node>;\n }\n }\n return [] as ArrayLike<Node>;\n}\n\n/**\n * Serializes a DOM node to HTML string\n */\nfunction serializeNode(node: Node): string {\n // Text node\n if (node.nodeType === 3) { // Node.TEXT_NODE\n return escapeHtml(node.textContent || '');\n }\n\n // Comment node\n if (node.nodeType === 8) { // Node.COMMENT_NODE\n return `<!--${node.textContent || ''}-->`;\n }\n\n // Element node\n if (node.nodeType === 1) { // Node.ELEMENT_NODE\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n const attributes = serializeAttributes(element);\n\n // Self-closing tags\n if (VOID_ELEMENTS.has(tagName)) {\n return `<${tagName}${attributes} />`;\n }\n\n // Regular elements with children\n let childrenHtml = '';\n const childNodes = getChildNodes(element);\n if (childNodes && childNodes.length > 0) {\n for (let i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child) {\n childrenHtml += serializeNode(child);\n }\n }\n }\n\n return `<${tagName}${attributes}>${childrenHtml}</${tagName}>`;\n }\n\n // Document fragment\n if (node.nodeType === 11) { // Node.DOCUMENT_FRAGMENT_NODE\n let result = '';\n const childNodes = getChildNodes(node);\n if (childNodes && childNodes.length > 0) {\n for (let i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child) {\n result += serializeNode(child);\n }\n }\n }\n return result;\n }\n\n return '';\n}\n\n/**\n * Renders a Nuclo component to an HTML string for server-side rendering\n *\n * @param input - A Nuclo component function, DOM element, or node\n * @returns HTML string representation of the component\n *\n * @example\n * ```ts\n * import { renderToString } from 'nuclo/ssr';\n * import { div } from 'nuclo';\n *\n * const html = renderToString(\n * div(\"Hello, World!\")\n * );\n * // Returns: '<div>Hello, World!</div>'\n * ```\n */\nexport function renderToString(input: RenderableInput): string {\n if (!input) {\n return '';\n }\n\n // If it's a function (NodeModFn), call it to create the element\n if (typeof input === 'function') {\n try {\n // Create a temporary container to render into\n const container = globalThis.document?.createElement('div');\n if (!container) {\n throw new Error('Document is not available. Make sure polyfills are loaded.');\n }\n\n const element = input(container as ExpandedElement<ElementTagName>, 0);\n return element && typeof element === 'object' && 'nodeType' in element ? serializeNode(element as Node) : '';\n } catch (error) {\n console.error('Error rendering component to string:', error);\n return '';\n }\n }\n\n // If it's already a Node, serialize it directly\n if ('nodeType' in input) {\n return serializeNode(input as Node);\n }\n\n return '';\n}\n\n/**\n * Renders multiple Nuclo components to HTML strings\n *\n * @param inputs - Array of Nuclo components\n * @returns Array of HTML strings\n */\nexport function renderManyToString(inputs: RenderableInput[]): string[] {\n return inputs.map(input => renderToString(input));\n}\n\n/**\n * Renders a Nuclo component and wraps it in a container element\n *\n * @param input - A Nuclo component\n * @param containerTag - The tag name for the container (default: 'div')\n * @param containerAttrs - Attributes for the container element\n * @returns HTML string with container wrapper\n */\nexport function renderToStringWithContainer(\n input: RenderableInput,\n containerTag: string = 'div',\n containerAttrs: Record<string, string> = {}\n): string {\n const content = renderToString(input);\n const attrs = Object.entries(containerAttrs)\n .map(([key, value]) => serializeAttribute(key, value))\n .join('');\n\n return `<${containerTag}${attrs}>${content}</${containerTag}>`;\n}\n"],"names":["escapeHtml","text","map","replace","char","serializeAttribute","name","value","styleStr","Object","entries","key","val","str","result","i","length","code","charCodeAt","String","fromCharCode","camelToKebab","join","VOID_ELEMENTS","Set","getChildNodes","node","childNodes","Array","isArray","undefined","children","serializeNode","nodeType","textContent","element","tagName","toLowerCase","attributes","Map","el","id","has","className","attr","serializeAttributes","childrenHtml","child","renderToString","input","container","globalThis","document","createElement","Error","error","renderManyToString","inputs","renderToStringWithContainer","containerTag","containerAttrs","content"],"mappings":"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"}
1
+ {"version":3,"file":"nuclo.ssr.js","sources":["../../src/utility/stringUtils.ts","../../src/ssr/renderToString.ts"],"sourcesContent":["/**\n * String utility functions\n */\n\n/**\n * Converts camelCase to kebab-case (optimized for performance)\n * Uses direct character code manipulation for maximum speed\n * @example camelToKebab('backgroundColor') => 'background-color'\n */\nexport function camelToKebab(str: string): string {\n let result = '';\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n // A-Z is 65-90, a-z is 97-122 (difference of 32)\n if (code >= 65 && code <= 90) {\n if (i > 0) result += '-';\n result += String.fromCharCode(code + 32);\n } else {\n result += str[i];\n }\n }\n return result;\n}\n\n/**\n * Escapes HTML special characters to prevent XSS\n */\nexport function escapeHtml(text: string): string {\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#039;'\n };\n return text.replace(/[&<>\"']/g, (char) => map[char]);\n}\n","/**\n * Server-Side Rendering (SSR) utilities for Nuclo\n * Renders Nuclo components to HTML strings in Node.js environment\n */\n\nimport { escapeHtml, camelToKebab } from '../utility/stringUtils';\n\ntype RenderableInput =\n | NodeModFn<ElementTagName>\n | Element\n | Node\n | null\n | undefined;\n\n/**\n * Serializes a DOM attribute value\n */\nfunction serializeAttribute(name: string, value: unknown): string {\n if (value === null || value === undefined || value === false) {\n return '';\n }\n\n if (value === true) {\n return ` ${name}`;\n }\n\n if (name === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(([key, val]) => {\n const cssKey = camelToKebab(key);\n return `${cssKey}:${val}`;\n })\n .join(';');\n return styleStr ? ` style=\"${escapeHtml(styleStr)}\"` : '';\n }\n\n return ` ${name}=\"${escapeHtml(String(value))}\"`;\n}\n\n/**\n * Serializes DOM element attributes to HTML string\n */\nfunction serializeAttributes(element: Element): string {\n let result = '';\n\n // Handle polyfill elements with Map-based attributes\n if ('attributes' in element && element.attributes instanceof Map) {\n // First, handle special properties that might not be in the attributes Map\n const el = element as any;\n\n // Add id if it exists and is not already in attributes\n if (el.id && !element.attributes.has('id')) {\n result += serializeAttribute('id', el.id);\n }\n\n // Add class if it exists and is not already in attributes\n if (el.className && !element.attributes.has('class')) {\n result += serializeAttribute('class', el.className);\n }\n\n // Then add all attributes from the Map\n for (const [name, value] of element.attributes) {\n result += serializeAttribute(name, value);\n }\n return result;\n }\n\n // Handle browser elements with NamedNodeMap attributes\n if (element.attributes && element.attributes.length) {\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n if (attr && attr.name) {\n result += serializeAttribute(attr.name, attr.value);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Self-closing HTML tags that don't have closing tags\n */\nconst VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n]);\n\n/**\n * Get child nodes from an element (handles both browser and polyfill elements)\n */\nfunction getChildNodes(node: Node): ArrayLike<Node> {\n // Check for childNodes first (document fragments and browser elements)\n if ('childNodes' in node) {\n const childNodes = (node as any).childNodes;\n if (childNodes && (Array.isArray(childNodes) || childNodes.length !== undefined)) {\n return childNodes;\n }\n }\n // Polyfill elements have children array\n if ('children' in node) {\n const children = (node as any).children;\n if (children && Array.isArray(children)) {\n return children as ArrayLike<Node>;\n }\n }\n return [] as ArrayLike<Node>;\n}\n\n/**\n * Serializes a DOM node to HTML string\n */\nfunction serializeNode(node: Node): string {\n // Text node\n if (node.nodeType === 3) { // Node.TEXT_NODE\n return escapeHtml(node.textContent || '');\n }\n\n // Comment node\n if (node.nodeType === 8) { // Node.COMMENT_NODE\n return `<!--${node.textContent || ''}-->`;\n }\n\n // Element node\n if (node.nodeType === 1) { // Node.ELEMENT_NODE\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n const attributes = serializeAttributes(element);\n\n // Self-closing tags\n if (VOID_ELEMENTS.has(tagName)) {\n return `<${tagName}${attributes} />`;\n }\n\n // Regular elements with children\n let childrenHtml = '';\n const childNodes = getChildNodes(element);\n if (childNodes && childNodes.length > 0) {\n for (let i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child) {\n childrenHtml += serializeNode(child);\n }\n }\n }\n\n return `<${tagName}${attributes}>${childrenHtml}</${tagName}>`;\n }\n\n // Document fragment\n if (node.nodeType === 11) { // Node.DOCUMENT_FRAGMENT_NODE\n let result = '';\n const childNodes = getChildNodes(node);\n if (childNodes && childNodes.length > 0) {\n for (let i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child) {\n result += serializeNode(child);\n }\n }\n }\n return result;\n }\n\n return '';\n}\n\n/**\n * Renders a Nuclo component to an HTML string for server-side rendering\n *\n * @param input - A Nuclo component function, DOM element, or node\n * @returns HTML string representation of the component\n *\n * @example\n * ```ts\n * import { renderToString } from 'nuclo/ssr';\n * import { div } from 'nuclo';\n *\n * const html = renderToString(\n * div(\"Hello, World!\")\n * );\n * // Returns: '<div>Hello, World!</div>'\n * ```\n */\nexport function renderToString(input: RenderableInput): string {\n if (!input) {\n return '';\n }\n\n // If it's a function (NodeModFn), call it to create the element\n if (typeof input === 'function') {\n try {\n // Create a temporary container to render into\n const container = globalThis.document?.createElement('div');\n if (!container) {\n throw new Error('Document is not available. Make sure polyfills are loaded.');\n }\n\n const element = input(container as ExpandedElement<ElementTagName>, 0);\n return element && typeof element === 'object' && 'nodeType' in element ? serializeNode(element as Node) : '';\n } catch (error) {\n console.error('Error rendering component to string:', error);\n return '';\n }\n }\n\n // If it's already a Node, serialize it directly\n if ('nodeType' in input) {\n return serializeNode(input as Node);\n }\n\n return '';\n}\n\n/**\n * Renders multiple Nuclo components to HTML strings\n *\n * @param inputs - Array of Nuclo components\n * @returns Array of HTML strings\n */\nexport function renderManyToString(inputs: RenderableInput[]): string[] {\n return inputs.map(input => renderToString(input));\n}\n\n/**\n * Renders a Nuclo component and wraps it in a container element\n *\n * @param input - A Nuclo component\n * @param containerTag - The tag name for the container (default: 'div')\n * @param containerAttrs - Attributes for the container element\n * @returns HTML string with container wrapper\n */\nexport function renderToStringWithContainer(\n input: RenderableInput,\n containerTag: string = 'div',\n containerAttrs: Record<string, string> = {}\n): string {\n const content = renderToString(input);\n const attrs = Object.entries(containerAttrs)\n .map(([key, value]) => serializeAttribute(key, value))\n .join('');\n\n return `<${containerTag}${attrs}>${content}</${containerTag}>`;\n}\n"],"names":["escapeHtml","text","map","replace","char","serializeAttribute","name","value","styleStr","Object","entries","key","val","str","result","i","length","code","charCodeAt","String","fromCharCode","camelToKebab","join","VOID_ELEMENTS","Set","getChildNodes","node","childNodes","Array","isArray","undefined","children","serializeNode","nodeType","textContent","element","tagName","toLowerCase","attributes","Map","el","id","has","className","attr","serializeAttributes","childrenHtml","child","renderToString","input","container","globalThis","document","createElement","Error","error","renderManyToString","inputs","renderToStringWithContainer","containerTag","containerAttrs","content"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"styleQueries.d.ts","sourceRoot":"","sources":["../../src/style/styleQueries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,MAAM,MAAM,cAAc,GACvB,OAAO,GACP,QAAQ,GACR,OAAO,GACP,eAAe,GACf,cAAc,GACd,SAAS,GACT,MAAM,GACN,QAAQ,GACR,MAAM,GACN,OAAO,GACP,SAAS,GACT,UAAU,GACV,SAAS,GACT,eAAe,GACf,SAAS,GACT,UAAU,GACV,UAAU,GACV,OAAO,GACP,SAAS,GACT,UAAU,GACV,cAAc,GACd,mBAAmB,GACnB,UAAU,GACV,WAAW,GACX,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,cAAc,GACd,cAAc,GACd,WAAW,GACX,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,MAAM,GACN,KAAK,GACL,KAAK,GACL,IAAI,GACJ,OAAO,GACP,KAAK,GACL,UAAU,GACV,YAAY,GACZ,OAAO,GACP,SAAS,GACT,MAAM,GACN,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,eAAe,GACf,WAAW,GACX,SAAS,GACT,oBAAoB,GACpB,YAAY,GACZ,OAAO,GACP,cAAc,GACd,cAAc,GACd,YAAY,CAAC;AAmEhB,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;AA2DvF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAClD,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAC7C;IACF,CAAC,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACpG,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE,CAkJA;AAGD,eAAO,MAAM,iBAAiB,2BAAqB,CAAC"}
1
+ {"version":3,"file":"styleQueries.d.ts","sourceRoot":"","sources":["../../src/style/styleQueries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,MAAM,MAAM,cAAc,GACvB,OAAO,GACP,QAAQ,GACR,OAAO,GACP,eAAe,GACf,cAAc,GACd,SAAS,GACT,MAAM,GACN,QAAQ,GACR,MAAM,GACN,OAAO,GACP,SAAS,GACT,UAAU,GACV,SAAS,GACT,eAAe,GACf,SAAS,GACT,UAAU,GACV,UAAU,GACV,OAAO,GACP,SAAS,GACT,UAAU,GACV,cAAc,GACd,mBAAmB,GACnB,UAAU,GACV,WAAW,GACX,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,cAAc,GACd,cAAc,GACd,WAAW,GACX,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,MAAM,GACN,KAAK,GACL,KAAK,GACL,IAAI,GACJ,OAAO,GACP,KAAK,GACL,UAAU,GACV,YAAY,GACZ,OAAO,GACP,SAAS,GACT,MAAM,GACN,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,eAAe,GACf,WAAW,GACX,SAAS,GACT,oBAAoB,GACpB,YAAY,GACZ,OAAO,GACP,cAAc,GACd,cAAc,GACd,YAAY,CAAC;AAmEhB,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;AA2DvF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAClD,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAC7C;IACF,CAAC,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACpG,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE,CA8IC;AAGF,eAAO,MAAM,iBAAiB,2BAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utility/dom.ts"],"names":[],"mappings":"AAcA,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CASpD;AAiCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAE1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAiB,GAAG,OAAO,GAAG,IAAI,CASnG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAS3D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CASjF;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAOlF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,CAK1E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,GAAG,QAAQ,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAC7D,OAAO,GAAG,IAAI,CAuBhB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAetE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CASvE"}
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utility/dom.ts"],"names":[],"mappings":"AAaA,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CASpD;AAgCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAE1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAiB,GAAG,OAAO,GAAG,IAAI,CASnG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAS3D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,CASjF;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAOlF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,CAK1E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,GAAG,QAAQ,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAC7D,OAAO,GAAG,IAAI,CAuBhB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAetE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CASvE"}
@@ -24,8 +24,4 @@ export declare function on<K extends keyof HTMLElementEventMap, TTagName extends
24
24
  * on<"my-event", CustomEvent<MyDetail>>("my-event", e => { ... })
25
25
  */
26
26
  export declare function on<K extends string, E extends Event = Event, TTagName extends ElementTagName = ElementTagName>(type: K, listener: (ev: E) => unknown, options?: boolean | AddEventListenerOptions): NodeModFn<TTagName>;
27
- /**
28
- * (Optional) Helper to detect an on()-produced modifier (placeholder for future use).
29
- */
30
- export declare function isOnModifier(fn: unknown): boolean;
31
27
  //# sourceMappingURL=on.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"on.d.ts","sourceRoot":"","sources":["../../src/utility/on.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;GAEG;AACH,wBAAgB,EAAE,CAChB,CAAC,SAAS,MAAM,mBAAmB,EACnC,QAAQ,SAAS,cAAc,GAAG,cAAc,EAEhD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,OAAO,EACjD,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,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,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,EAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,SAAS,CAAC,QAAQ,CAAC,CAAC;AA0BvB;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAEjD"}
1
+ {"version":3,"file":"on.d.ts","sourceRoot":"","sources":["../../src/utility/on.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;GAEG;AACH,wBAAgB,EAAE,CAChB,CAAC,SAAS,MAAM,mBAAmB,EACnC,QAAQ,SAAS,cAAc,GAAG,cAAc,EAEhD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,OAAO,EACjD,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,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,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,EAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,SAAS,CAAC,QAAQ,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuclo",
3
3
  "private": false,
4
- "version": "0.1.82",
4
+ "version": "0.1.84",
5
5
  "type": "module",
6
6
  "main": "./dist/nuclo.cjs",
7
7
  "module": "./dist/nuclo.js",
@@ -62,6 +62,7 @@
62
62
  "clean": "rm -rf dist *.tsbuildinfo",
63
63
  "test": "vitest run --coverage",
64
64
  "test:watch": "vitest --watch --coverage",
65
- "lint": "eslint . --ext .ts,.js,.json,.jsonc,.json5,.md,.css"
65
+ "lint": "eslint . --ext .ts,.js,.json,.jsonc,.json5,.md,.css",
66
+ "lint:fix": "eslint . --ext .ts,.js,.json,.jsonc,.json5,.md,.css --fix"
66
67
  }
67
68
  }