ladrillosjs 2.0.0-beta.5 → 2.0.0-beta.6

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 CHANGED
@@ -406,6 +406,14 @@ await registerComponents([
406
406
  | `lazyOnMedia` | Mobile/desktop specific components |
407
407
  | `lazyOnDelay` | Chat widgets, notifications |
408
408
 
409
+ ### Eager Override
410
+
411
+ Force a lazy component to load immediately by adding the `eager` attribute:
412
+
413
+ ```html
414
+ <lazy-footer eager></lazy-footer>
415
+ ```
416
+
409
417
  ---
410
418
 
411
419
  ## 📋 API Reference
package/dist/core.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { ComponentConfig, RegisterComponentsResult } from './core/ladrillos';
2
+ import { $registerComponent, $registerComponents, $use } from './core/helpers/frameworkHelpers';
3
+ export type { ComponentConfig, RegisterComponentsResult };
4
+ export declare const registerComponent: (name: string, path: string, useShadowDOM?: boolean) => Promise<void>;
5
+ export declare const registerComponents: (configs: ComponentConfig[] | Record<string, string | Omit<ComponentConfig, "name">>) => Promise<RegisterComponentsResult>;
6
+ export { $registerComponent, $registerComponents, $use };
7
+ declare const _default: {
8
+ registerComponent: (name: string, path: string, useShadowDOM?: boolean) => Promise<void>;
9
+ registerComponents: (configs: ComponentConfig[] | Record<string, string | Omit<ComponentConfig, "name">>) => Promise<RegisterComponentsResult>;
10
+ $registerComponent: (name: string, path: string, useShadowDOM?: boolean) => Promise<void>;
11
+ $registerComponents: (configs: ComponentConfig[] | Record<string, string | Omit<ComponentConfig, "name">>) => Promise<RegisterComponentsResult>;
12
+ $use: (path: string, useShadowDOM?: boolean) => Promise<void>;
13
+ };
14
+ export default _default;
package/dist/core.js ADDED
@@ -0,0 +1 @@
1
+ import{l as e,$ as s,f as o,g as r}from"./shared-Dru_qCE_.js";const t=(s,o,r)=>e.registerComponent(s,o,r,!1),n=s=>e.registerComponents(s),m={registerComponent:t,registerComponents:n,$registerComponent:r,$registerComponents:o,$use:s};export{r as $registerComponent,o as $registerComponents,s as $use,m as default,t as registerComponent,n as registerComponents};
@@ -0,0 +1,20 @@
1
+ /**
2
+ * LadrillosJS Events Module
3
+ *
4
+ * Provides the event bus for cross-component communication.
5
+ * Import this module only if you need $emit/$listen.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { $emit, $listen } from 'ladrillosjs/events';
10
+ *
11
+ * // Emit an event
12
+ * $emit('user-login', { userId: 123 });
13
+ *
14
+ * // Listen for events
15
+ * const unsubscribe = $listen('user-login', (data) => {
16
+ * console.log('User logged in:', data.userId);
17
+ * });
18
+ * ```
19
+ */
20
+ export { $emit, $listen, type EventCallback, type Unsubscribe, } from './core/events/eventBus';
package/dist/events.js ADDED
@@ -0,0 +1 @@
1
+ import{a as s,$ as e}from"./shared-DGGk2qBc.js";export{s as $emit,e as $listen};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- const t=new DOMParser;async function e(e,n,r){const o=function(e){return t.parseFromString(e,"text/html")}(e),s=Array.from(o.querySelectorAll("script")),i=s.filter(t=>!t.src).map(t=>({content:(t.textContent??"").trim(),type:t.getAttribute("type")})).filter(t=>t.content.length>0),a=s.filter(t=>(t.getAttribute("src")||"").includes("html-proxy")&&"module"===t.getAttribute("type")),c=[...i,...(await Promise.all(a.map(async t=>{const e=t.getAttribute("src")||"";try{const t=await fetch(e);if(t.ok)return{content:(await t.text()).trim(),type:"module"}}catch(n){}return null}))).filter(t=>null!==t&&t.content.length>0)],l=s.filter(t=>{if(!t.src)return!1;const e=t.getAttribute("src")||"";return!e.includes("@vite/client")&&!e.includes("html-proxy")}).map(t=>{const e=t.getAttribute("type");let n=t.src;if(r)try{n=new URL(t.getAttribute("src")??t.src,r).toString()}catch{}return{src:n,type:e,external:t.hasAttribute("external")}}).filter(t=>t.src.length>0);s.forEach(t=>t.remove());const u=Array.from(o.querySelectorAll('link[rel="stylesheet"]')),f=u.map(t=>{let e=t.getAttribute("href")||"";const n=t.getAttribute("rel")||"stylesheet";if(r&&e&&!e.startsWith("http"))try{e=new URL(e,r).toString()}catch{}return{href:e,rel:n}}).filter(t=>t.href.length>0);u.forEach(t=>t.remove());const p=Array.from(o.querySelectorAll("style")),h=p.map(t=>t.textContent??"").join("\n").trim();p.forEach(t=>t.remove());const m=o.querySelector("template");let d;if(m){const t=document.createElement("div");t.appendChild(m.content.cloneNode(!0)),d=t.innerHTML.trim()}else d=o.body.innerHTML.trim();return{tagName:n,template:d,scripts:c,externalScripts:l,externalStyles:f,styles:h,sourcePath:r,lazy:!1}}const n=/* @__PURE__ */new Map,r=(t,e)=>{if(n.has(t))n.delete(t);else if(n.size>=25){const t=n.keys().next().value;t&&n.delete(t)}n.set(t,e)};async function o(t){if(!t)throw new Error("Path cannot be null or empty");const e=(t=>{const e=n.get(t);return e&&(n.delete(t),n.set(t,e)),e})(t);if(e)return e;try{const e=await async function(t){if(t.endsWith(".html")){const e=await fetch(t);return e.ok?{path:t,response:e}:null}const e=t.endsWith("/")?t.slice(0,-1):t;try{const t=await fetch(e);if(t.ok&&(t.headers.get("content-type")||"").includes("text/html"))return{path:e,response:t}}catch{}const n=`${e}/index.html`;try{const t=await fetch(n);if(t.ok)return{path:n,response:t}}catch{}return null}(t);if(!e)throw new Error(`Failed to fetch component from ${t}: Could not resolve path. Tried: ${t}${t.endsWith(".html")?"":` and ${t}/index.html`}`);const n=await e.response.text();return r(t,n),e.path!==t&&r(e.path,n),n}catch(o){return}}const s=/{([^}]+)}/g;function i(t){const e=t.trim(),n=function(t){const e=function(t){let e=0,n=0,r=0,o=!1,s=!1,i=!1,a=!1;for(let c=0;c<t.length;c++){const l=t[c];if(a)a=!1;else if("\\"!==l)if(s||i||"'"!==l)if(o||i||'"'!==l)if(o||s||"`"!==l){if(!(o||s||i)&&("("===l?e++:")"===l?e=Math.max(0,e-1):"["===l?n++:"]"===l?n=Math.max(0,n-1):"{"===l?r++:"}"===l&&(r=Math.max(0,r-1)),"("===l&&0===e&&0===n&&0===r))return c}else i=!i;else s=!s;else o=!o;else a=!0}return-1}(t);if(e<0)return null;const n=function(t,e){let n=0,r=!1,o=!1,s=!1,i=!1;for(let a=e;a<t.length;a++){const e=t[a];if(i)i=!1;else if("\\"!==e)if(o||s||"'"!==e)if(r||s||'"'!==e)if(r||o||"`"!==e){if(!(r||o||s))if("("===e)n++;else if(")"===e){if(n--,0===n)return a;if(n<0)return-1}}else s=!s;else o=!o;else r=!r;else i=!0}return-1}(t,e);if(n<0)return null;if(0!==t.slice(n+1).trim().length)return null;const r=a(t.slice(0,e).trim());if(!r)return null;const o=function(t){const e=[];let n="",r=0,o=0,s=0,i=!1,a=!1,c=!1,l=!1;for(let f=0;f<t.length;f++){const u=t[f];if(l)n+=u,l=!1;else if("\\"!==u)if(a||c||"'"!==u)if(i||c||'"'!==u)if(i||a||"`"!==u){if(!i&&!a&&!c&&("("===u?r++:")"===u?r=Math.max(0,r-1):"["===u?o++:"]"===u?o=Math.max(0,o-1):"{"===u?s++:"}"===u&&(s=Math.max(0,s-1)),","===u&&0===r&&0===o&&0===s)){const t=n.trim();t.length>0&&e.push(t),n="";continue}n+=u}else c=!c,n+=u;else a=!a,n+=u;else i=!i,n+=u;else n+=u,l=!0}const u=n.trim();return u.length>0&&e.push(u),e}(t.slice(e+1,n));return{calleePath:r,args:o}}(e);if(n)return{raw:e,path:n.calleePath,isFunction:!0,isExpression:!0,functionArgs:n.args};const r=a(e);return r?{raw:e,path:r,isFunction:!1,isExpression:!1}:{raw:e,path:[],isExpression:!0}}function a(t){return/^[$A-Z_][0-9A-Z_$]*(?:\s*\.\s*[$A-Z_][0-9A-Z_$]*)*$/i.test(t)?t.split(".").map(t=>t.trim()).filter(t=>t.length>0):null}function c(t){let e=t.parentElement;for(;e;){if(e.hasAttribute&&e.hasAttribute("$for"))return!0;e=e.parentElement}return!1}function l(t){let e=t.parentElement;for(;e;){if(e.hasAttribute&&e.hasAttribute("$no:bind"))return!0;e=e.parentElement}return!1}const u=["onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmousemove","onmouseenter","onmouseleave","onkeydown","onkeyup","onkeypress","onfocus","onblur","onchange","oninput","onsubmit","onreset","onscroll","onload","onerror","ontouchstart","ontouchmove","ontouchend","ontouchcancel","ondragstart","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondrop"],f=Object.freeze(["alert","confirm","prompt","console","JSON","Math","Date","Array","Object","String","Number","Boolean","Map","Set","WeakMap","WeakSet","Symbol","BigInt","Promise","Proxy","Reflect","parseInt","parseFloat","isNaN","isFinite","Infinity","NaN","encodeURIComponent","decodeURIComponent","encodeURI","decodeURI","setTimeout","clearTimeout","setInterval","clearInterval","requestAnimationFrame","cancelAnimationFrame","requestIdleCallback","cancelIdleCallback","queueMicrotask","fetch","AbortController","AbortSignal","Headers","Request","Response","URL","URLSearchParams","navigator","location","history","localStorage","sessionStorage","crypto","document","window","globalThis","Element","HTMLElement","Event","CustomEvent","EventTarget","TextEncoder","TextDecoder","Blob","File","FileReader","FormData","Error","TypeError","RangeError","SyntaxError","ReferenceError","atob","btoa","structuredClone"]),p=Object.freeze([]),h=/* @__PURE__ */new Set(["with","eval","arguments","constructor","prototype","break","case","catch","continue","debugger","default","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","class","const","enum","export","extends","import","super","implements","interface","let","package","private","protected","public","static","yield","null","true","false"]),m="[LadrillosJS]",d=function(){try{if(void 0!==import.meta)return!1}catch{}try{if("undefined"!=typeof globalThis&&globalThis.process?.env?.NODE_ENV)return"production"!==globalThis.process.env.NODE_ENV}catch{}return!0}(),g=()=>"undefined"!=typeof window&&"undefined"!=typeof console&&"function"==typeof console.log;let _=null;function y(){return _}function b(t,e){const n=`{${e}}`,r=t.indexOf(n);if(-1!==r)return{start:r,end:r+n.length};const o=t.indexOf(e);return-1!==o?{start:o,end:o+e.length}:null}function $(t){const e=void 0!==t?t:_;if(!e)return"";const n=[];if(e.tagName&&n.push(`<${e.tagName}>`),e.sourcePath){const t=e.sourcePath.split("/").pop()||e.sourcePath;n.push(`(${t})`)}return n.length>0?` in ${n.join(" ")}`:""}function E(t,e){return`${t}${$(e)}`}var w=/* @__PURE__ */(t=>(t[t.EXPRESSION_EVAL_FAILED=101]="EXPRESSION_EVAL_FAILED",t[t.EXPRESSION_SYNTAX_ERROR=102]="EXPRESSION_SYNTAX_ERROR",t[t.EXPRESSION_UNDEFINED_VAR=103]="EXPRESSION_UNDEFINED_VAR",t[t.EXPRESSION_NULL_ACCESS=104]="EXPRESSION_NULL_ACCESS",t[t.SCRIPT_EXTRACT_FAILED=201]="SCRIPT_EXTRACT_FAILED",t[t.SCRIPT_EXECUTION_FAILED=202]="SCRIPT_EXECUTION_FAILED",t[t.EVENT_HANDLER_FAILED=301]="EVENT_HANDLER_FAILED",t[t.DIRECTIVE_ERROR=401]="DIRECTIVE_ERROR",t[t.LOOP_ERROR=402]="LOOP_ERROR",t[t.CONDITIONAL_ERROR=403]="CONDITIONAL_ERROR",t[t.COMPONENT_LOAD_FAILED=501]="COMPONENT_LOAD_FAILED",t[t.COMPONENT_NOT_FOUND=502]="COMPONENT_NOT_FOUND",t[t.MODULE_LOAD_FAILED=601]="MODULE_LOAD_FAILED",t[t.MODULE_EXECUTION_FAILED=602]="MODULE_EXECUTION_FAILED",t))(w||{});function v(t,e){d&&(E(t,e),g())}function A(t,e){E(t,e),g()}function S(t,e,n={}){const r=n.context||_,o=n.errorCode||((i=e)instanceof SyntaxError?102:i instanceof ReferenceError?103:i instanceof TypeError&&(i.message.includes("Cannot read properties of null")||i.message.includes("Cannot read properties of undefined"))?104:101),s=function(t){if(t instanceof SyntaxError)return"Invalid expression syntax";if(t instanceof ReferenceError){const e=t.message.match(/(\w+) is not defined/);return e?`Undefined variable: "${e[1]}"`:"Undefined variable"}return t instanceof TypeError?t.message.includes("Cannot read properties of null")?"Cannot access property of null":t.message.includes("Cannot read properties of undefined")?"Cannot access property of undefined":"Type error":"Expression evaluation failed"}(e);var i;if(!d)return;const a=$(r);if(g())n.template&&b(n.template,t);else{const i=[`${m} ${s}${a}`,` Expression: ${t}`];if(r?.tagName&&i.push(` Component: <${r.tagName}>`),r?.sourcePath&&i.push(` File: ${r.sourcePath}`),n.template){const e=b(n.template,t);e&&(i.push(" Location:"),i.push(function(t,e=0,n=t.length){const r=t.split("\n");let o=0;const s=[];for(let i=0;i<r.length;i++){const t=r[i].length+1;if(o+t>=e){for(let a=Math.max(0,i-2);a<=Math.min(r.length-1,i+2);a++){const c=a+1,l=r[a],u=`${c}`.padStart(4)+" │ ";if(s.push(`${u}${l}`),a===i){const r=e-(o-t),i=Math.min(n>o?n-e:t-r,l.length-r);s.push(` │ ${"".padStart(Math.max(0,r))}${"^".repeat(Math.max(1,i))}`)}}break}o+=t}return s.join("\n")}(n.template,e.start,e.end).split("\n").map(t=>` ${t}`).join("\n")))}i.push(` Error: ${e.message}`),i.push(` Docs: ${function(t){return`https://ladrillosjs.dev/errors/${t}`}(o)}`)}}const R=/* @__PURE__ */Symbol("reactive-array"),C=["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"];function x(t,e){return t[R]?t:new Proxy(t,{get(t,n){if(n===R)return!0;const r=t[n];return"string"==typeof n&&C.includes(n)&&"function"==typeof r?(...n)=>{const o=n.map(t=>Array.isArray(t)?x(t,e):t),s=r.apply(t,o);return e(),s}:Array.isArray(r)?x(r,e):r},set(t,n,r){const o="string"==typeof n?parseInt(n,10):NaN,s=!isNaN(o),i="length"===n,a=Array.isArray(r)?x(r,e):r;return t[n]===a||(t[n]=a,(s||i)&&e()),!0},deleteProperty(t,n){const r=delete t[n];return r&&e(),r}})}function N(t,e){for(const n of Object.keys(t)){const r=t[n];Array.isArray(r)?t[n]=x(r,e):r&&"object"==typeof r&&!Array.isArray(r)&&N(r,e)}return t}function L(t,e,n,r){const o=function(t,e){const n=/* @__PURE__ */new Map;for(const r of e)n.set(r,/* @__PURE__ */new Set);for(const r of t)for(const t of r.bindings)for(const o of e)I(t.raw,o)&&n.get(o).add(r);return n}(e,Object.keys(t));N(t,()=>{r&&r()});const s=new Proxy(t,{get:(t,e)=>t[e],set(t,s,i){const a=!(s in t);if(!a&&t[s]===i)return!0;const c=Array.isArray(i)?x(i,()=>{r&&r()}):i;return t[s]=c,a&&function(t,e,n){n.set(t,/* @__PURE__ */new Set);for(const r of e)for(const e of r.bindings)I(e.raw,t)&&n.get(t).add(r)}(s,e,o),((t,e)=>{const s=o.get(t);if(s)for(const r of s)n(r,e);r&&r()})(s,t),!0}});return s}function I(t,e){var n;return new RegExp(`\\b${n=e,n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\b`).test(t)}function T(t,e){return t.startsWith("http://")||t.startsWith("https://")||t.startsWith("/")?t.startsWith("/")?new URL(t,window.location.origin).href:t:new URL(t,e).href}function O(t){return{$registerComponent:function(e,n,r=!1){const o=T(n,t);return ie.registerComponent(e,o,r)},$registerComponents:function(e){const n=Array.isArray(e)?e.map(e=>({...e,path:T(e.path,t)})):Object.entries(e).map(([e,n])=>"string"==typeof n?{name:e,path:T(n,t)}:{name:e,...n,path:T(n.path,t)});return ie.registerComponents(n)},$use:function(e,n=!1){const r=function(t){return(t.split("/").pop()?.replace(/\.[^.]+$/,"")||t).replace(/([a-z])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1-$2").toLowerCase()}(e),o=T(e,t);return ie.registerComponent(r,o,n)}}}const k=["$registerComponent","$registerComponents","$use"],M=O(window.location.href),P=M.$registerComponent,D=M.$registerComponents,U=M.$use;function j(){return globalThis.__ladrillosEventBus||(globalThis.__ladrillosEventBus={listeners:/* @__PURE__ */new Map,componentListeners:/* @__PURE__ */new Map}),globalThis.__ladrillosEventBus}function F(){return j().listeners}function z(){return j().componentListeners}function W(t,e){const n=F().get(t);if(n&&0!==n.size)for(const o of n)try{o.callback(e)}catch(r){}}function H(t,e,n){const r=F(),o=z();let s=r.get(t);s||(s=/* @__PURE__ */new Set,r.set(t,s));const i={callback:e,componentId:n};if(s.add(i),n){let e=o.get(n);e||(e=/* @__PURE__ */new Set,o.set(n,e)),e.add({event:t,registration:i})}return()=>{const e=F(),r=z();if(s?.delete(i),0===s?.size&&e.delete(t),n){const t=r.get(n);if(t){for(const e of t)if(e.registration===i){t.delete(e);break}0===t.size&&r.delete(n)}}}}function B(t){return{$emit:function(t,e){W(t,e)},$listen:function(e,n){return H(e,n,t)}}}const Z=["$emit","$listen"],q=t=>t instanceof ShadowRoot?t.host:t;function V(t,e,n,r){const o=Array.from(t.querySelectorAll("*"));for(const s of o)if(!X(s))for(const t of u){const o=s.getAttribute(t);if(o){s.removeAttribute(t);const i=t.slice(2),a=G(o,e,n,r);a&&s.addEventListener(i,a)}}}function X(t){if(t.hasAttribute("$for"))return!0;let e=t.parentElement;for(;e;){if(e.hasAttribute("$for"))return!0;e=e.parentElement}return!1}function G(t,e,n,r){try{const o=r?.__componentUrl,s=r?.__componentId,i=rt(o,s),a=nt(),c=["event","state","$refs",...a,...i.keys],l=Object.keys(e),u=l.filter(t=>"function"==typeof e[t]),f=l.filter(t=>"function"!=typeof e[t]),p=!0===e.__hasModuleScripts,h=p?f.length>0?`const { ${f.join(", ")} } = state;`:"":f.length>0?`let { ${f.join(", ")} } = state;`:"",m=p&&u.length>0?`const { ${u.join(", ")} } = state;`:"",d=J(n,p?u:[]),g=p?"":f.map(t=>`state.${t} = ${t};`).join(" "),_=/\bawait\b/.test(t)||/\bawait\b/.test(d)||/\basync\b/.test(d),b=o||"ladrillos-event-handler",$=_?`"use strict"; ${h} ${m} ${d} try { await (async () => { ${t} })(); } finally { ${g} }\n//# sourceURL=${b}`:`"use strict"; ${h} ${m} ${d} ${t}; ${g}\n//# sourceURL=${b}`,E=Object.getPrototypeOf(async function(){}).constructor,v=_?new E(...c,$):new Function(...c,$);return n=>{try{const o=r&&r.__refs||/* @__PURE__ */new Map,s=[n,e,o,...a.map(()=>{}),...i.values],c=v(...s);c&&"function"==typeof c.catch&&c.catch(n=>{const o={tagName:r?.tagName?.toLowerCase(),sourcePath:e.__componentUrl,instanceId:e.__componentId};S(t,n,{context:o.tagName?o:y(),errorCode:w.EVENT_HANDLER_FAILED})})}catch(o){const n={tagName:r?.tagName?.toLowerCase(),sourcePath:e.__componentUrl,instanceId:e.__componentId};S(t,o,{context:n.tagName?n:y(),errorCode:w.EVENT_HANDLER_FAILED})}}}catch(o){const n=r?.tagName?{tagName:r.tagName.toLowerCase(),sourcePath:e.__componentUrl}:null;return v(`Failed to create event handler: ${t}`,n),null}}function J(t,e=[]){const n=[],r=/(?:async\s+)?function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\([^)]*\)\s*\{/g;let o;for(;null!==(o=r.exec(t));){const r=o[1];if(e.includes(r))continue;const s=Y(t,o.index);s&&n.push(s)}const s=/(?:const|let)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=\s*(?:async\s*)?\([^)]*\)\s*=>\s*\{/g;for(;null!==(o=s.exec(t));){const r=o[1];if(e.includes(r))continue;const s=o.index,i=t.indexOf("{",s+o[0].length-1),a=Y(t,s,i);a&&n.push(a)}return n.map(t=>t.trim()).join(";\n")+(n.length>0?";":"")}function Y(t,e,n){let r=0,o=e,s=!1,i="",a=!1;for(let c=n??e;c<t.length;c++){const e=t[c],n=c>0?t[c-1]:"";if('"'!==e&&"'"!==e&&"`"!==e||"\\"===n||(s?e===i&&(s=!1):(s=!0,i=e)),!s&&("{"===e&&(r++,a=!0),"}"===e&&r--,a&&0===r&&"}"===e)){o=c+1;break}}return 0!==r?null:t.slice(e,o)}function K(t){const e=/* @__PURE__ */new Map;try{const n=tt(t),r=function(t){const e=[],n=/(?:async\s+)?function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/g;let r;for(;null!==(r=n.exec(t));)e.push(r[1]);return e}(t),o=[...n,...r];if(0===o.length)return e;const s=`\n "use strict";\n ${t}\n return { ${o.join(", ")} };\n `,i=()=>()=>{},a=()=>{},c=["console","Math","JSON","Date","Array","Object","String","Number","Boolean"],l=c.map(t=>globalThis[t]),u=[...c,"$listen","$emit"],f=[...l,i,a],p=new Function(...u,s)(...f);for(const[t,h]of Object.entries(p))e.set(t,h)}catch(n){}return e}function Q(t,e,n,r,o,s){try{const i=`\n "use strict";\n ${function(t,e){if(0===e.length)return t;const n=[];let r=t.replace(/(["'`])(?:(?!\1)[^\\]|\\.)*\1/g,t=>(n.push(t),`__STRING_PLACEHOLDER_${n.length-1}__`));for(const s of e){const t=new RegExp(`\\b(let|const|var)\\s+(${et(s)})\\s*=`,"g");r=r.replace(t,`__state__.${s} ??=`)}for(const s of e){const t=new RegExp(`(?<![^.]\\.)(?<!__state__\\.)\\b${et(s)}\\b(?!\\s*[:(])`,"g");r=r.replace(t,`__state__.${s}`)}let o=r;for(let s=0;s<n.length;s++)o=o.replace(`__STRING_PLACEHOLDER_${s}__`,n[s]);return o}(t,tt(t))}\n//# sourceURL=${n||"ladrillos-component"}\n `,a=rt(n,r),c=nt(),l=["__state__","$host","$refs",...c,...a.keys],u=[e,o,s,...c.map(()=>{}),...a.values];new Function(...l,i)(...u)}catch(i){!function(t,e){const n=_;if(!d)return;const r=$(n);if(g());else{const t=[`${m} Script Error${r}`," Message: Error executing script with reactive state"];n?.tagName&&t.push(` Component: <${n.tagName}>`),n?.sourcePath&&t.push(` File: ${n.sourcePath}`),t.push(` Error: ${e.message}`)}}(0,i)}}function tt(t){const e=[],n=/(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/g;let r;for(;null!==(r=n.exec(t));)e.push(r[1]);return e}function et(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function nt(){return p.filter(t=>!h.has(t))}function rt(t,e){const n=[],r=[];for(const i of f)i in globalThis&&(n.push(i),r.push(globalThis[i]));const o=O(t||window.location.href);n.push(...k),r.push(o.$registerComponent,o.$registerComponents,o.$use);const s=B(e||"anonymous");return n.push(...Z),r.push(s.$emit,s.$listen),{keys:n,values:r}}function ot(t,e){try{const n=Object.keys(e),r=Object.values(e),o=nt(),s=[...o,...n],i=[...o.map(()=>{}),...r];return new Function(...s,`"use strict"; return ${t};`)(...i)}catch(n){return S(t,n,{context:y()}),`{${t}}`}}function st(t,e){let n=t.original;for(const r of t.bindings){const t=ot(r.raw,e),o=String(t??"");n=n.replace(`{${r.raw}}`,o)}if(t.isAttribute&&t.attributeName){const e=t.element??t.node.parentElement;e&&e.setAttribute(t.attributeName,n)}else t.node.textContent=n}function it(t,e){for(const n of t)st(n,e)}const at=/* @__PURE__ */new Map,ct=/* @__PURE__ */new Map,lt=/(?:import|export)\s+(?:[\s\S]*?\s+from\s+)?['"]([^'"]+)['"]/g,ut=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,ft=[".ts",".tsx",".mts"];function pt(t){return t.startsWith("./")||t.startsWith("../")}function ht(t){return ft.some(e=>t.endsWith(e))}function mt(t){return!(t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("data:")||t.startsWith("blob:"))}const dt=/^(?:export\s+)?(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/gm;async function gt(t,e,n){if(t.external)return document.querySelector(`script[src="${t.src}"]`)?Promise.resolve(void 0):new Promise((e,n)=>{const r=document.createElement("script");r.src=t.src,t.type&&(r.type=t.type),r.onload=()=>e(void 0),r.onerror=e=>n(new Error(`Failed to load external script: ${t.src}`)),document.head.appendChild(r)});if("module"!==t.type)return document.querySelector(`script[src="${t.src}"]`)?Promise.resolve(void 0):new Promise((e,n)=>{const r=document.createElement("script");r.src=t.src,t.type&&(r.type=t.type),r.onload=()=>e(void 0),r.onerror=e=>n(new Error(`Failed to load script: ${t.src}`)),document.head.appendChild(r)});try{const r=await fetch(t.src);if(!r.ok)throw new Error(`Failed to fetch module: ${t.src}`);const o=function(t,e){let n=t;const r=[],o=[];return n=n.replace(lt,(t,n)=>{if(pt(n)){const r=new URL(n,e).href;return ht(n)&&o.push(n),t.replace(n,r)}return mt(n)&&r.push(n),t}),n=n.replace(ut,(t,n)=>{if(pt(n)){const t=new URL(n,e).href;return ht(n)&&o.push(n),`import("${t}")`}return mt(n)&&r.push(n),t}),o.length,r.length,n}(await r.text(),t.src),s=function(t){const e=function(t){const e=[];let n;for(dt.lastIndex=0;null!==(n=dt.exec(t));)e.push(n[1]);const r=/^(?:export\s+)?function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/gm;for(;null!==(n=r.exec(t));)e.includes(n[1])||e.push(n[1]);return e}(t),n=/* @__PURE__ */new Set,r=/export\s+(?:let|const|var|function)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;let o;for(;null!==(o=r.exec(t));)n.add(o[1]);const s=/export\s*\{([^}]+)\}/g;for(;null!==(o=s.exec(t));)o[1].split(",").map(t=>t.trim().split(/\s+as\s+/)[0].trim()).forEach(t=>n.add(t));const i=e.filter(t=>!n.has(t));return 0===i.length?t:`${t}\nexport { ${i.join(", ")} };`}(function(t){const e=[];let n=t;if(n=n.replace(/import\s*\{([^}]+)\}\s*from\s*(['"][^'"]+['"])\s*;?/g,(t,n,r)=>{const o=n.split(",").map(t=>t.trim()),s=[];for(const i of o){if(!i)continue;const t=i.match(/^(\w+)\s+as\s+(\w+)$/);if(t){const[,n,r]=t,o=`__raw_${r}`;s.push(`${n} as ${o}`),e.push(`const ${r} = __wrapReactiveArray(${o}, __ladrillos_componentId);`)}else{const t=`__raw_${i}`;s.push(`${i} as ${t}`),e.push(`const ${i} = __wrapReactiveArray(${t}, __ladrillos_componentId);`)}}return`import { ${s.join(", ")} } from ${r};`}),e.length>0){const t=n.split("\n");let r=-1;for(let e=0;e<t.length;e++){const n=t[e].trim();(n.startsWith("import ")||n.startsWith("import{"))&&(r=e)}r>=0&&(t.splice(r+1,0,"","// === Reactive Import Wrappers ===",...e,"// === End Reactive Import Wrappers ===",""),n=t.join("\n"))}return n}(o)),i=function(t,e){return`\n// === LadrillosJS Framework Helpers (auto-injected) ===\nconst __ladrillos_componentId = "${t||"anonymous"}";\nconst __ladrillos_componentUrl = "${e||"unknown"}";\n\n// Global event bus (shared across all components)\nif (!globalThis.__ladrillosEventBus) {\n globalThis.__ladrillosEventBus = {\n listeners: new Map(),\n componentListeners: new Map()\n };\n}\n\n// Global state change callbacks (for reactive array updates)\nif (!globalThis.__ladrillosStateCallbacks) {\n globalThis.__ladrillosStateCallbacks = new Map();\n}\n\n// Reactive array symbol\nconst __REACTIVE_ARRAY = Symbol.for("ladrillos-reactive-array");\n\n// Array mutation methods to intercept\nconst __ARRAY_METHODS = ["push", "pop", "shift", "unshift", "splice", "sort", "reverse", "fill", "copyWithin"];\n\n// Wrap an array in a reactive proxy\nconst __wrapReactiveArray = (arr, componentId) => {\n if (!Array.isArray(arr) || arr[__REACTIVE_ARRAY]) return arr;\n \n const onMutate = () => {\n const callback = globalThis.__ladrillosStateCallbacks?.get(componentId);\n if (callback) callback();\n };\n \n return new Proxy(arr, {\n get(target, key) {\n if (key === __REACTIVE_ARRAY) return true;\n const value = target[key];\n if (typeof key === "string" && __ARRAY_METHODS.includes(key) && typeof value === "function") {\n return (...args) => {\n const result = value.apply(target, args);\n onMutate();\n return result;\n };\n }\n if (Array.isArray(value)) return __wrapReactiveArray(value, componentId);\n return value;\n },\n set(target, key, value) {\n const index = parseInt(key, 10);\n const isIndex = !isNaN(index);\n const isLength = key === "length";\n target[key] = Array.isArray(value) ? __wrapReactiveArray(value, componentId) : value;\n if (isIndex || isLength) onMutate();\n return true;\n }\n });\n};\n\nconst $emit = (eventName, data) => {\n const listeners = globalThis.__ladrillosEventBus.listeners.get(eventName);\n if (!listeners || listeners.size === 0) return;\n for (const registration of listeners) {\n try {\n registration.callback(data);\n } catch (error) {\n console.error(\`[LadrillosJS] Error in event listener for "\${eventName}":\`, error);\n }\n }\n};\n\nconst $listen = (eventName, callback) => {\n const bus = globalThis.__ladrillosEventBus;\n let listeners = bus.listeners.get(eventName);\n if (!listeners) {\n listeners = new Set();\n bus.listeners.set(eventName, listeners);\n }\n const registration = { callback, componentId: __ladrillos_componentId };\n listeners.add(registration);\n\n // Track by component ID for cleanup\n let componentRegs = bus.componentListeners.get(__ladrillos_componentId);\n if (!componentRegs) {\n componentRegs = new Set();\n bus.componentListeners.set(__ladrillos_componentId, componentRegs);\n }\n componentRegs.add({ event: eventName, registration });\n\n // Return unsubscribe function\n return () => {\n listeners?.delete(registration);\n if (listeners?.size === 0) bus.listeners.delete(eventName);\n const compRegs = bus.componentListeners.get(__ladrillos_componentId);\n if (compRegs) {\n for (const reg of compRegs) {\n if (reg.registration === registration) {\n compRegs.delete(reg);\n break;\n }\n }\n if (compRegs.size === 0) bus.componentListeners.delete(__ladrillos_componentId);\n }\n };\n};\n\n// Global refs registry (shared across all components)\n// Each component gets its own Map, keyed by component ID\nif (!globalThis.__ladrillosRefs) {\n globalThis.__ladrillosRefs = new Map();\n}\n\n// Helper to wrap refs Map in Proxy for cleaner dot notation access\nconst __createRefsProxy = (map) => new Proxy(map, {\n get(target, prop, receiver) {\n if (prop in target) {\n const value = Reflect.get(target, prop, receiver);\n return typeof value === "function" ? value.bind(target) : value;\n }\n if (typeof prop === "string") return target.get(prop);\n return undefined;\n },\n set(target, prop, value) {\n if (typeof prop === "string") { target.set(prop, value); return true; }\n return false;\n },\n has(target, prop) {\n return typeof prop === "string" ? target.has(prop) || prop in target : prop in target;\n }\n});\n\n// Get or create refs Map for this component (wrapped in Proxy)\nif (!globalThis.__ladrillosRefs.has(__ladrillos_componentId)) {\n globalThis.__ladrillosRefs.set(__ladrillos_componentId, __createRefsProxy(new Map()));\n}\n\n// $refs for this component - supports both $refs.inputEl and $refs.get("inputEl")\nconst $refs = globalThis.__ladrillosRefs.get(__ladrillos_componentId);\n\n// Helper to resolve relative paths against component URL\nconst __resolvePath = (path) => {\n if (path.startsWith("http://") || path.startsWith("https://") || path.startsWith("/")) {\n return path.startsWith("/") ? new URL(path, window.location.origin).href : path;\n }\n return new URL(path, __ladrillos_componentUrl).href;\n};\n\n// Helper to convert filename to tag name\nconst __filenameToTagName = (path) => {\n const filename = path.split("/").pop()?.replace(/\\.[^.]+$/, "") || path;\n return filename.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[_\\s]+/g, "-").toLowerCase();\n};\n\n// $registerComponent - Register a child component\nconst $registerComponent = async (name, path, useShadowDOM = false) => {\n const resolvedPath = __resolvePath(path);\n return globalThis.ladrillosjs.registerComponent({ name, path: resolvedPath, useShadowDOM });\n};\n\n// $registerComponents - Register multiple components at once\nconst $registerComponents = async (configs) => {\n const resolvedConfigs = configs.map(config => ({\n ...config,\n path: __resolvePath(config.path)\n }));\n return globalThis.ladrillosjs.registerComponents(resolvedConfigs);\n};\n\n// $use - Shorthand for $registerComponent with auto-derived tag name\nconst $use = async (path, useShadowDOM = false) => {\n const tagName = __filenameToTagName(path);\n return $registerComponent(tagName, path, useShadowDOM);\n};\n\n// === End Framework Helpers ===\n\n`}(e,n||t.src),a=new Blob([i+s],{type:"text/javascript"}),c=URL.createObjectURL(a);try{return await(0,eval)(`import("${c}")`)}finally{URL.revokeObjectURL(c)}}catch(r){throw r}}const _t=/* @__PURE__ */new Map;async function yt(t){if(ct.has(t))return ct.get(t);const e=(async()=>{try{return await(0,eval)(`import("${t}")`)}catch(e){throw e}})();return ct.set(t,e),e}function bt(t,e){return e&&Array.isArray(t)?x(t,e):t}async function $t(t,e,n,r,o,s){if("module"!==t.type)throw new Error('executeModuleScriptWithReactivity only handles type="module" scripts');const i=t.content,a=await async function(t,e,n){const r=function(t){const e=[],n=/import\s+(?:(\{[^}]+\})|(\*\s+as\s+\w+)|(\w+)(?:\s*,\s*(\{[^}]+\}))?)?\s*(?:from\s+)?['"]([^'"]+)['"]/g;let r;for(;null!==(r=n.exec(t));){const[t,n,o,s,i,a]=r,c={statement:t,specifier:a,imports:[],isDefault:!1,isNamespace:!1,isSideEffect:!1};if(n||o||s||(c.isSideEffect=!0),s&&(c.isDefault=!0,c.imports.push({imported:"default",local:s})),o){c.isNamespace=!0;const t=o.replace(/\*\s+as\s+/,"").trim();c.imports.push({imported:"*",local:t})}const l=n||i;if(l){const t=l.slice(1,-1).split(",").map(t=>t.trim()).filter(Boolean);for(const e of t){const t=e.match(/(\w+)\s+as\s+(\w+)/);t?c.imports.push({imported:t[1],local:t[2]}):c.imports.push({imported:e,local:e})}}e.push(c)}return e}(t),o={};for(const i of r){if(i.isSideEffect){const t=pt(i.specifier)?new URL(i.specifier,e).href:i.specifier;await yt(t);continue}const t=pt(i.specifier)?new URL(i.specifier,e).href:i.specifier;try{const e=await yt(t);for(const t of i.imports){let r;r="*"===t.imported?e:"default"===t.imported?e.default:e[t.imported],o[t.local]=bt(r,n)}}catch(s){}}return o}(i,e,s),c=function(t){return t.replace(/import\s+(?:(?:\{[^}]+\}|\*\s+as\s+\w+|\w+)(?:\s*,\s*\{[^}]+\})?\s+from\s+)?['"][^'"]+['"]\s*;?/g,"").trim()}(i),{variables:l,functions:u}=function(t){const e=[],n=[],r=t.replace(/`[^`]*`/g,t=>" ".repeat(t.length)).replace(/"(?:[^"\\]|\\.)*"/g,t=>" ".repeat(t.length)).replace(/'(?:[^'\\]|\\.)*'/g,t=>" ".repeat(t.length)).replace(/\/\*[\s\S]*?\*\//g,t=>" ".repeat(t.length)).replace(/\/\/[^\n]*/g,t=>" ".repeat(t.length));let o=0,s=0;for(;s<r.length;){const t=r[s];if("{"!==t)if("}"!==t){if(0===o){const t=r.slice(s).match(/^(?:async\s+)?function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/);if(t){n.push(t[1]),s+=t[0].length;continue}const o=r.slice(s).match(/^(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/);if(o){e.push(o[1]),s+=o[0].length;continue}}s++}else o--,s++;else o++,s++}return{variables:e,functions:n}}(c),f=function(t,e){if(0===e.length)return t;const n=[];let r=t.replace(/(["'`])(?:(?!\1)[^\\]|\\.)*\1/g,t=>(n.push(t),`__STRING_PLACEHOLDER_${n.length-1}__`));for(const s of e){const t=new RegExp(`\\b(let|const|var)\\s+(${Et(s)})\\s*=`,"g");r=r.replace(t,`__state__.${s} =`)}for(const s of e){const t=new RegExp(`(?<![^.]\\.)(?<!__state__\\.)\\b${Et(s)}\\b(?!\\s*[:(])`,"g");r=r.replace(t,`__state__.${s}`)}let o=r;for(let s=0;s<n.length;s++)o=o.replace(`__STRING_PLACEHOLDER_${s}__`,n[s]);return o}(c,l),p=Object.keys(a),h=Object.values(a),m=`\n "use strict";\n ${f}\n ${u.length>0?`return { ${u.join(", ")} };`:"return {};"}\n `;try{const t=["console","alert","Math","JSON","Date","Array","Object","String","Number","Boolean","Promise","setTimeout","setInterval","clearTimeout","clearInterval"],s=t.map(t=>globalThis[t]),i=["$refs","__state__"],a=[r||/* @__PURE__ */new Map,o||{}],c=O(e),l=[c.$registerComponent,c.$registerComponents,c.$use],u=B(n||"anonymous"),f=[u.$emit,u.$listen],d=[...p,...t,...k,...Z,...i],g=[...h,...s,...l,...f,...a],_=new Function(...d,m)(...g);return{...o||{},..._||{}}}catch(d){throw d}}function Et(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const wt="$for",vt="$if",At="$else",St="$else-if",Rt="$show",Ct="$bind",xt="$ref",Nt=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]+)$/,Lt=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,It=/^\(|\)$/g;function Tt(t){return t.replace(/\$/g,"\\$")}function Ot(t){const e=t.trim();return e.startsWith("{")&&e.endsWith("}")?e.slice(1,-1).trim():e}function kt(t){const e=t.match(Nt);if(!e)return null;let n,[,r,o]=e;r=r.trim(),o=o.trim();const s=o.match(/\s+track\s+by\s+(.+)$/i);s&&(n=s[1].trim(),o=o.slice(0,s.index).trim());const i=r.replace(It,"").trim(),a=i.match(Lt);let c,l,u;return a?(c=i.replace(Lt,"").trim(),l=a[1]?.trim(),u=a[2]?.trim()):c=i,{item:c,index:l||u,key:n,array:o}}function Mt(t,e,n,r,o,s){return t.removeAttribute(vt),t.removeAttribute(St),t.removeAttribute(At),{element:t,condition:e,type:n,placeholder:r,group:[],originalParent:o,nextSibling:s}}function Pt(t,e){let n=t.parentElement;for(;n;){if(n.hasAttribute(wt))return!0;n=n.parentElement}return!1}function Dt(t,e,n){for(const a of t.renderedElements)a.remove();t.renderedElements=[];const r=n(t.arrayName,e);if(!r||null==(o=r)||!Array.isArray(o)&&"function"!=typeof o[Symbol.iterator]&&"object"!=typeof o)return;var o;const s=Array.from(r),i=document.createDocumentFragment();s.forEach((r,o)=>{const s=t.template.cloneNode(!0),a=e.__scriptContent,c={...e,[t.itemName]:r,__reactiveState__:e,__scriptContent__:a||"",__componentUrl__:e.__componentUrl||""};t.indexName&&(c[t.indexName]=o),Ut(s,c,n),i.appendChild(s),t.renderedElements.push(s)}),t.placeholder.parentNode?.insertBefore(i,t.placeholder.nextSibling)}function Ut(t,e,n){for(const i of Array.from(t.attributes))if(i.value.includes("{")){const t=i.value.replace(/\{([^}]+)\}/g,(t,r)=>{const o=n(r.trim(),e);return String(o??"")});i.value=t}!function(t,e){for(const n of u){const r=t.getAttribute(n);if(r){t.removeAttribute(n);const o=n.slice(2),s=jt(r,e);s&&t.addEventListener(o,s)}}}(t,e);const r=document.createTreeWalker(t,NodeFilter.SHOW_TEXT),o=[];let s;for(;s=r.nextNode();)s.textContent?.includes("{")&&o.push(s);for(const i of o)i.textContent=i.textContent.replace(/\{([^}]+)\}/g,(t,r)=>{const o=n(r.trim(),e);return String(o??"")});for(const i of Array.from(t.children))Ut(i,e,n)}function jt(t,e){try{const n=e.__reactiveState__,r=e.__scriptContent__||"",o=Object.keys(e).filter(t=>!t.startsWith("__")),s=n?Object.keys(n).filter(t=>!t.startsWith("__")&&"function"!=typeof n[t]):[],i=o.filter(t=>!s.includes(t)&&"function"!=typeof e[t]),a=r.trim().length>0,c=o.filter(t=>"function"==typeof e[t]),l=n&&!0===n.__hasModuleScripts;let u="",f="";l?f=c.length>0?`const { ${c.join(", ")} } = context;`:"":a?u=J(r,[]):f=c.length>0?`const { ${c.join(", ")} } = context;`:"";const p=i.length>0?`const { ${i.join(", ")} } = context;`:"",h=n&&s.length>0?"reactiveState":"context",m=s.length>0?`let { ${s.join(", ")} } = ${h};`:"",d=!l&&n&&s.length>0?s.map(t=>`reactiveState.${t} = ${t};`).join(" "):"",g=B(e.__componentId__||n?.__componentId||"anonymous"),_=new Function("event","context","reactiveState","$emit","$listen",`"use strict";\n ${p}\n ${m}\n ${f}\n ${u}\n ${t};\n ${d}`);return t=>{try{_(t,e,n,g.$emit,g.$listen)}catch(r){}}}catch(n){return null}}function Ft(t,e,n){for(const r of t)r.element.parentNode&&r.element.remove();for(const r of t){let t=!1;if("else"===r.type)t=!0;else{const o=n(r.condition,e);t=Boolean(o)}if(t){r.placeholder.parentNode?.insertBefore(r.element,r.placeholder.nextSibling);break}}}function zt(t,e,n,r){const o=t.element,{raw:s,path:i,isContentEditable:a}=t,c=n(s,e);Wt(o,c,a);const l=i[0];r.has(l)||r.set(l,[]),r.get(l).push({element:o,path:i,isContentEditable:a}),s===l||r.has(s)||r.set(s,[]),s!==l&&r.get(s).push({element:o,path:i,isContentEditable:a});const u=function(t){if(t instanceof HTMLSelectElement)return"change";if(t instanceof HTMLInputElement){const e=t.type.toLowerCase();if("checkbox"===e||"radio"===e)return"change"}return"input"}(o);let f=!1;o.__isUpdatingFromState=()=>f,o.__setUpdatingFromState=t=>{f=t},o.addEventListener(u,()=>{if(f)return;const t=function(t,e){if(e)return t.textContent||"";if(t instanceof HTMLInputElement){const e=t.type.toLowerCase();return"checkbox"===e?t.checked:"number"===e||"range"===e?t.valueAsNumber:t.value}return t instanceof HTMLSelectElement?t.multiple?Array.from(t.selectedOptions).map(t=>t.value):t.value:t instanceof HTMLTextAreaElement?t.value:t.value??""}(o,a);!function(t,e,n){let r=t;for(let o=0;o<e.length-1;o++){const t=e[o];t in r&&"object"==typeof r[t]||(r[t]={}),r=r[t]}r[e[e.length-1]]=n}(e,i,t)})}function Wt(t,e,n){if(n)t.textContent=String(e??"");else{if(t instanceof HTMLInputElement)return void("checkbox"===t.type.toLowerCase()?t.checked=Boolean(e):t.value=String(e??""));t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement?t.value=String(e??""):t.value=e}}function Ht(t,e){const{tagName:n,template:r,scripts:o,externalScripts:a,externalStyles:u,styles:f,sourcePath:p}=t,h=tt(o.map(t=>t.content).join("\n"));class m extends HTMLElement{static get observedAttributes(){return h}state={};_root=null;_initialized=!1;_componentId=`${n}-${Math.random().toString(36).slice(2)}`;_directives=null;_evaluator=null;_updateBoundInputs=null;constructor(){super()}async connectedCallback(){if(this._initialized)return;var t;this._initialized=!0,t={tagName:n,sourcePath:p,instanceId:this._componentId},_=t,this._root=e?this.attachShadow({mode:"open"}):this;const{bindings:h}=((t,e)=>{t.innerHTML=e;const n=function(t){const e=[],n=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,null);let r;for(;r=n.nextNode();){if(c(r)||l(r))continue;const t=[...r.textContent.matchAll(s)];if(t.length>0){const n=r.textContent,o=t.map(t=>i(t[1].trim()));e.push({node:r,bindings:o,original:n})}}const o=function(t){const e=[],n=["$if","$else","$else-if","$for","$show","$bind","$ref","$no:bind"],r=Array.from(t.querySelectorAll("*"));for(const o of r)if(!(o.hasAttribute("$for")||c(o)||o.hasAttribute("$no:bind")||l(o)))for(const t of Array.from(o.attributes)){if(n.includes(t.name))continue;const r=[...t.value.matchAll(s)];if(r.length>0){const n=document.createTextNode(t.value),s=r.map(t=>i(t[1].trim()));e.push({node:n,bindings:s,original:t.value,isAttribute:!0,attributeName:t.name,element:o})}}return e}(t);return e.push(...o),e}(t);return{bindings:n,twoWayBindings:[],conditionals:[],loops:[]}})(this._root,r);((t,e,n)=>{if(!e)return;const r=document.createElement("style");r.textContent=e,n?t.appendChild(r):document.head.appendChild(r)})(this._root,f,e);const m=this._getAttributeOverrides(),d=o.filter(t=>"module"!==t.type),g=o.some(t=>"module"===t.type),y=new Proxy(/* @__PURE__ */new Map,{get(t,e,n){if(e in t){const r=Reflect.get(t,e,n);return"function"==typeof r?r.bind(t):r}if("string"==typeof e)return t.get(e)},set:(t,e,n)=>"string"==typeof e&&(t.set(e,n),!0),has:(t,e)=>"string"==typeof e&&t.has(e)||e in t});if(function(t,e){const n=Array.from(t.querySelectorAll(`[${Tt(xt)}]`));for(const r of n){const t=r.getAttribute(xt);t&&e.set(t,r)}}(this._root,y),u&&u.length>0&&await async function(t,e,n){for(const o of t)if(n&&e)try{let t=_t.get(o.href);if(!t){const e=await fetch(o.href);if(!e.ok)continue;t=await e.text(),_t.set(o.href,t)}const n=document.createElement("style");n.textContent=t,n.setAttribute("data-external-href",o.href),e.insertBefore(n,e.firstChild)}catch(r){}else{if(document.querySelector(`link[href="${o.href}"]`))continue;await new Promise(t=>{const e=document.createElement("link");e.rel=o.rel||"stylesheet",e.href=o.href,e.onload=()=>t(),e.onerror=()=>{t()},document.head.appendChild(e)})}}(u,this._root,e),a.length>0&&await async function(t){const e=t.filter(t=>t.external);for(const r of e)try{await gt(r)}catch(n){}}(a),this.state=await async function(t,e,n,r={},o,s=!1,i,a,c){const l=q(t),u={},f=e.map(t=>t.content).join("\n");for(const h of e){const t=K(h.content);for(const[e,n]of t)u[e]=n}for(const[h,m]of Object.entries(r))u[h]=m;u.__scriptContent=f,u.__componentUrl=i,u.__componentId=a;const p=L(u,n,(t,e)=>st(t,e),o);for(const h of e)Q(h.content,p,i,a,l,c);return l.__state=p,l.__scriptContent=f,l.__componentUrl=i,l.__componentId=a,s||(V(t,p,f,l),it(n,p)),p}(this._root,d,h,m,()=>this._updateDirectives(),g,p,this._componentId,y),"undefined"!=typeof globalThis&&(globalThis.__ladrillosStateCallbacks||(globalThis.__ladrillosStateCallbacks=/* @__PURE__ */new Map),globalThis.__ladrillosStateCallbacks.set(this._componentId,()=>this._updateDirectives())),p){const t=await async function(t,e,n,r,o,s,i){const a={},c=t.filter(t=>"module"===t.type),l=e.filter(t=>"module"===t.type),u=e.filter(t=>"module"!==t.type);for(const p of u)try{await gt(p,r,n)}catch(f){}for(const p of l)try{const t=await gt(p,r,n);if(t&&"object"==typeof t)for(const[e,n]of Object.entries(t))"default"!==e&&(a[e]=n,s&&(s[e]=n))}catch(f){}for(const p of c)try{const t=await $t(p,n,r,o,s,i);Object.assign(a,t)}catch(f){}return a}(o,a,p,this._componentId,y,this.state,()=>this._updateDirectives());(g||a.length>0)&&(this.state.__hasModuleScripts=!0);for(const[e,n]of Object.entries(t))"function"==typeof n&&(this.state[e]=n)}if(g&&function(t,e,n){const r=q(t);V(t,n,r.__scriptContent||"",r),it(e,n)}(this._root,h,this.state),this._evaluator=ot,this._directives=function(t,e){const n={loops:[],conditionals:[],twoWayBindings:[],refs:e,showElements:[]};return function(t,e){const n=Array.from(t.querySelectorAll(`[${Tt(xt)}]`));for(const r of n){const t=r.getAttribute(xt);t&&(e.refs.set(t,r),r.removeAttribute(xt))}}(t,n),function(t,e){const n=Array.from(t.querySelectorAll(`[${Tt(wt)}]`));for(const r of n){const n=r.getAttribute(wt);if(!n)continue;const o=kt(n);if(!o)continue;const s=document.createComment(` $for: ${n} `),i=r.parentElement||t;i.insertBefore(s,r),r.remove(),r.removeAttribute(wt);const a={template:r,expression:n,itemName:o.item,indexName:o.index,arrayName:o.array,keyAttribute:o.key,placeholder:s,renderedElements:[],originalParent:i};e.loops.push(a)}}(t,n),function(t,e){const n=Array.from(t.querySelectorAll(`[${Tt(vt)}]`));for(const r of n){if(Pt(r))continue;const n=[],o=Ot(r.getAttribute(vt)),s=document.createComment(` $if: ${o} `),i=r.parentElement||t,a=r.nextSibling;i.insertBefore(s,r),n.push(Mt(r,o,"if",s,i,a));let c=r.nextElementSibling;for(;c;){if(!c.hasAttribute(St)){if(c.hasAttribute(At)){n.push(Mt(c,"","else",s,i,c.nextSibling)),c.remove();break}break}{const t=Ot(c.getAttribute(St)),e=c.nextElementSibling;n.push(Mt(c,t,"else-if",s,i,c.nextSibling)),c.remove(),c=e}}r.remove();for(const t of n)t.group=n;e.conditionals.push(n)}}(t,n),function(t,e){const n=Array.from(t.querySelectorAll(`[${Tt(Rt)}]`));for(const r of n){const t=r.getAttribute(Rt);if(!t)continue;const n=Ot(t);if(Pt(r))continue;const o=r;e.showElements.push({element:o,expression:n,originalDisplay:o.style.display||""}),r.removeAttribute(Rt)}}(t,n),function(t,e){const n=Array.from(t.querySelectorAll(`[${Tt(Ct)}]`));for(const r of n){const t=r.getAttribute(Ct);if(!t)continue;if(Pt(r))continue;const n=t.split("."),o=r.hasAttribute("contenteditable"),s={element:r,path:n,raw:t,isContentEditable:o};e.twoWayBindings.push(s),r.removeAttribute(Ct)}}(t,n),n}(this._root,y),"undefined"!=typeof globalThis){globalThis.__ladrillosRefs||(globalThis.__ladrillosRefs=/* @__PURE__ */new Map);let t=globalThis.__ladrillosRefs.get(this._componentId);t||(t=/* @__PURE__ */new Map,globalThis.__ladrillosRefs.set(this._componentId,t));for(const[e,n]of this._directives.refs)t.set(e,n)}this.refs=this._directives.refs,this.__refs=this._directives.refs,this._updateDirectives(),this._directives.twoWayBindings.length>0&&(this._updateBoundInputs=function(t,e,n){const r=/* @__PURE__ */new Map;for(const o of t)zt(o,e,n,r);return t=>{!function(t,e,n,r){const o=r?[r]:Array.from(t.keys());for(const s of o){const r=t.get(s);if(r)for(const t of r){const{element:r,path:o,isContentEditable:s}=t,i=n(o.join("."),e),a=r.__setUpdatingFromState;a&&a(!0),Wt(r,i,s),a&&queueMicrotask(()=>a(!1))}}}(r,e,n,t)}}(this._directives.twoWayBindings,this.state,this._evaluator)),this.dispatchEvent(new CustomEvent("ladrillos:ready",{bubbles:!0,composed:!0,detail:{state:this.state,refs:this._directives.refs}}))}disconnectedCallback(){!function(t){const e=at.get(t);if(e){for(const t of e)URL.revokeObjectURL(t);at.delete(t)}}(this._componentId),function(t){const e=F(),n=z(),r=n.get(t);if(r){for(const{event:t,registration:n}of r){const r=e.get(t);r&&(r.delete(n),0===r.size&&e.delete(t))}n.delete(t)}}(this._componentId),"undefined"!=typeof globalThis&&globalThis.__ladrillosStateCallbacks?.delete(this._componentId),this._initialized=!1}attributeChangedCallback(t,e,n){if(e===n)return;if(!this._initialized)return;const r=this._parseAttributeValue(n);this.state[t]=r}adoptedCallback(){}_updateDirectives(){this._directives&&this._evaluator&&(this._directives.loops.length>0&&function(t,e,n){for(const r of t)Dt(r,e,n)}(this._directives.loops,this.state,this._evaluator),this._directives.conditionals.length>0&&function(t,e,n){for(const r of t)Ft(r,e,n)}(this._directives.conditionals,this.state,this._evaluator),this._directives.showElements.length>0&&function(t,e,n){for(const r of t){const t=n(r.expression,e),o=Boolean(t);r.element.style.display=o?r.originalDisplay:"none"}}(this._directives.showElements,this.state,this._evaluator),this._updateBoundInputs&&this._updateBoundInputs())}_getAttributeOverrides(){const t={};for(const e of Array.from(this.attributes))this._isReservedAttribute(e.name)||(t[e.name]=this._parseAttributeValue(e.value));return t}_isReservedAttribute(t){return["id","class","style","slot","part","is","tabindex","title","lang","dir","hidden","draggable","contenteditable"].includes(t.toLowerCase())||t.startsWith("data-")}_parseAttributeValue(t){if(null===t)return null;if(""===t)return!0;if("true"===t)return!0;if("false"===t)return!1;const e=Number(t);if(!isNaN(e)&&""!==t.trim())return e;try{return JSON.parse(t)}catch{return t}}get root(){return this._root}}return m}function Bt(t,e){const{tagName:n}=t;if(!customElements.get(n)){const r=Ht(t,e);customElements.define(n,r)}}const Zt=globalThis.requestIdleCallback||(t=>setTimeout(t,1)),qt=globalThis.cancelIdleCallback||(t=>clearTimeout(t)),Vt=(t=1e4)=>e=>{const n=Zt(e,{timeout:t});return()=>qt(n)},Xt=t=>(e,n)=>{if(function(t){const{top:e,left:n,bottom:r,right:o}=t.getBoundingClientRect(),{innerHeight:s,innerWidth:i}=window;return(e>0&&e<s||r>0&&r<s)&&(n>0&&n<i||o>0&&o<i)}(n))return void e();const r=new IntersectionObserver(t=>{for(const n of t)if(n.isIntersecting){r.disconnect(),e();break}},t);return r.observe(n),()=>r.disconnect()},Gt=t=>e=>{if(!t)return void e();const n=matchMedia(t);if(!n.matches){const t=()=>e();return n.addEventListener("change",t,{once:!0}),()=>n.removeEventListener("change",t)}e()},Jt=(t=["click","focusin"])=>{const e="string"==typeof t?[t]:t;return(t,n)=>{let r=!1;const o=e=>{r||(r=!0,s(),t(),queueMicrotask(()=>{e.target&&e.target instanceof Element&&e.target.dispatchEvent(new e.constructor(e.type,e))}))},s=()=>{for(const t of e)n.removeEventListener(t,o)};for(const i of e)n.addEventListener(i,o,{once:!0,passive:!0});return s}},Yt=(t=0)=>e=>{const n=setTimeout(e,t);return()=>clearTimeout(n)},Kt=Xt({rootMargin:"100px"}),Qt=/* @__PURE__ */new Map;let te;const ee=/* @__PURE__ */new Map,ne=/* @__PURE__ */new Set,re=/* @__PURE__ */new Map;function oe(t,e,n,r){var o;re.set(t,{name:t,absolutePath:e,useShadowDOM:n,strategy:r}),customElements.get(t)||customElements.define(t,(o=t,class extends HTMLElement{teardown;isLoading=!1;isUpgraded=!1;connectedCallback(){if(this.hasAttribute("eager"))return void this.triggerLoad();const t=re.get(o);t?this.teardown=t.strategy(()=>this.triggerLoad(),this):this.triggerLoad()}disconnectedCallback(){this.teardown?.(),this.teardown=void 0}async triggerLoad(){if(!this.isLoading&&!this.isUpgraded){this.isLoading=!0,this.teardown?.(),this.teardown=void 0;try{const t=await se(o);this.isUpgraded=!0,this.upgradeToRealComponent(t)}catch(t){A(`Failed to load lazy component "<${o}>"`,{tagName:o}),this.isLoading=!1}}}upgradeToRealComponent(t){const e=document.createElement(t);for(const n of Array.from(this.attributes))"eager"!==n.name&&"tabindex"!==n.name&&e.setAttribute(n.name,n.value);this.parentNode?this.parentNode.replaceChild(e,this):A("No parent node for placeholder - cannot upgrade lazy component",{tagName:o})}}))}async function se(t){const n=function(t){return`${t}--loaded`}(t);if(ne.has(t))return n;if(Qt.has(t))return await Qt.get(t),n;const r=re.get(t);if(!r)throw new Error(`Lazy component "${t}" not registered`);const s=(async()=>{const s=await o(r.absolutePath);if(!s)throw new Error(`Failed to fetch component source for "${t}"`);const i=await e(s,t,r.absolutePath);te[t]=i;const a=Ht(i,r.useShadowDOM);return customElements.get(n)||customElements.define(n,a),ne.add(t),ee.set(t,{component:i,useShadowDOM:r.useShadowDOM}),i})();Qt.set(t,s);try{return await s,n}finally{Qt.delete(t)}}const ie=new class{components;constructor(){var t;this.components={},t=this.components,te=t}async registerComponent(t,n,r=!0,s=!1){if(this.components[t])return void v(`Component with name "<${t}>" is already registered.`);const i=new URL(n,window.location.href).href;if(s)oe(t,i,r,!0===s?Kt:s);else try{const n=await o(i),s=await e(n||"",t,i);this.components[t]=s,Bt(s,r)}catch(a){A(`Error registering component "<${t}>"`,{tagName:t,sourcePath:n})}}async registerComponents(t){const n=Array.isArray(t)?t:Object.entries(t).map(([t,e])=>"string"==typeof e?{name:t,path:e}:{name:t,...e}),r={success:[],failed:[],skipped:[]},s=[],i=[];for(const e of n){if(this.components[e.name]){r.skipped.push(e.name);continue}const t=new URL(e.path,window.location.href).href,n={...e,absolutePath:t};e.lazy?s.push(n):i.push(n)}for(const e of s)try{const t=!0===e.lazy?Kt:e.lazy,n=e.useShadowDOM??!0;oe(e.name,e.absolutePath,n,t),r.success.push(e.name)}catch(l){r.failed.push({name:e.name,error:l instanceof Error?l:new Error(String(l))})}if(0===i.length)return r;const a=await Promise.allSettled(i.map(async t=>({config:t,source:await o(t.absolutePath)}))),c=await Promise.allSettled(a.map(async(t,n)=>{if("rejected"===t.status)throw t.reason;const{config:r,source:o}=t.value;if(!o)throw new Error(`Failed to fetch component source from ${r.absolutePath}`);return{config:r,component:await e(o,r.name,r.absolutePath)}}));for(let e=0;e<c.length;e++){const t=c[e],n=i[e];if("rejected"===t.status){r.failed.push({name:n.name,error:t.reason instanceof Error?t.reason:new Error(String(t.reason))});continue}const{component:o}=t.value,s=n.useShadowDOM??!0;this.components[n.name]=o;try{Bt(o,s),r.success.push(n.name)}catch(l){r.failed.push({name:n.name,error:l instanceof Error?l:new Error(String(l))}),delete this.components[n.name]}}return r}async loadLazyComponent(t){return async function(t){return re.has(t)&&await se(t),te[t]}(t)}},ae=(t,e,n,r)=>ie.registerComponent(t,e,n,r),ce=t=>ie.registerComponents(t),le=t=>ie.loadLazyComponent(t),ue={registerComponent:ae,registerComponents:ce,loadLazyComponent:le,$registerComponent:P,$registerComponents:D,$use:U,$emit:W,$listen:H,lazyOnIdle:Vt,lazyOnVisible:Xt,lazyOnMedia:Gt,lazyOnInteraction:Jt,lazyOnDelay:Yt};export{W as $emit,H as $listen,P as $registerComponent,D as $registerComponents,U as $use,ue as default,Yt as lazyOnDelay,Vt as lazyOnIdle,Jt as lazyOnInteraction,Gt as lazyOnMedia,Xt as lazyOnVisible,le as loadLazyComponent,ae as registerComponent,ce as registerComponents};
1
+ import{l as e,a,b as s,c as n,d as o,e as t,$ as r,f as i,g as l}from"./shared-Dru_qCE_.js";import{$ as m,a as p}from"./shared-DGGk2qBc.js";const d=(a,s,n,o)=>e.registerComponent(a,s,n,o),y=a=>e.registerComponents(a),C=a=>e.loadLazyComponent(a),g={registerComponent:d,registerComponents:y,loadLazyComponent:C,$registerComponent:l,$registerComponents:i,$use:r,$emit:p,$listen:m,lazyOnIdle:t,lazyOnVisible:o,lazyOnMedia:n,lazyOnInteraction:s,lazyOnDelay:a};export{p as $emit,m as $listen,l as $registerComponent,i as $registerComponents,r as $use,g as default,a as lazyOnDelay,t as lazyOnIdle,s as lazyOnInteraction,n as lazyOnMedia,o as lazyOnVisible,C as loadLazyComponent,d as registerComponent,y as registerComponents};
package/dist/lazy.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * LadrillosJS Lazy Loading Module
3
+ *
4
+ * Provides lazy loading strategies for components.
5
+ * Import this module only if you need lazy loading.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { lazyOnVisible, lazyOnIdle } from 'ladrillosjs/lazy';
10
+ *
11
+ * $registerComponent('heavy-widget', '/components/heavy.html', {
12
+ * lazy: lazyOnVisible({ rootMargin: '100px' })
13
+ * });
14
+ * ```
15
+ */
16
+ export { type LazyStrategy, type LazyStrategyFactory, lazyOnIdle, lazyOnVisible, lazyOnMedia, lazyOnInteraction, lazyOnDelay, defaultLazyStrategy, } from './core/lazy';
17
+ export { forceLoadLazyComponent, isLazyComponent } from './core/lazy';
package/dist/lazy.js ADDED
@@ -0,0 +1 @@
1
+ import{h as a,i as e,j as s,a as n,e as o,b as y,c as l,d as t}from"./shared-Dru_qCE_.js";export{a as defaultLazyStrategy,e as forceLoadLazyComponent,s as isLazyComponent,n as lazyOnDelay,o as lazyOnIdle,y as lazyOnInteraction,l as lazyOnMedia,t as lazyOnVisible};
@@ -0,0 +1 @@
1
+ function e(){return globalThis.__ladrillosEventBus||(globalThis.__ladrillosEventBus={listeners:/* @__PURE__ */new Map,componentListeners:/* @__PURE__ */new Map}),globalThis.__ladrillosEventBus}function t(){return e().listeners}function n(){return e().componentListeners}function s(e,n){const s=t().get(e);if(s&&0!==s.size)for(const t of s)try{t.callback(n)}catch(o){}}function o(e,s,o){const i=t(),l=n();let r=i.get(e);r||(r=/* @__PURE__ */new Set,i.set(e,r));const c={callback:s,componentId:o};if(r.add(c),o){let t=l.get(o);t||(t=/* @__PURE__ */new Set,l.set(o,t)),t.add({event:e,registration:c})}return()=>{const s=t(),i=n();if(r?.delete(c),0===r?.size&&s.delete(e),o){const e=i.get(o);if(e){for(const t of e)if(t.registration===c){e.delete(t);break}0===e.size&&i.delete(o)}}}}function i(e){const s=t(),o=n(),i=o.get(e);if(i){for(const{event:e,registration:t}of i){const n=s.get(e);n&&(n.delete(t),0===n.size&&s.delete(e))}o.delete(e)}}function l(e){return{$emit:function(e,t){s(e,t)},$listen:function(t,n){return o(t,n,e)}}}const r=["$emit","$listen"];export{o as $,s as a,i as b,l as c,r as e};
@@ -0,0 +1 @@
1
+ import{e,c as t,b as n}from"./shared-DGGk2qBc.js";const r=/{([^}]+)}/g,o=new DOMParser;async function s(e,t,n){const s=function(e){return o.parseFromString(e,"text/html")}(e),i=Array.from(s.querySelectorAll("script")),a=i.filter(e=>!e.src).map(e=>({content:(e.textContent??"").trim(),type:e.getAttribute("type")})).filter(e=>e.content.length>0),c=i.filter(e=>(e.getAttribute("src")||"").includes("html-proxy")&&"module"===e.getAttribute("type")),l=[...a,...(await Promise.all(c.map(async e=>{const t=e.getAttribute("src")||"";try{const e=await fetch(t);if(e.ok)return{content:(await e.text()).trim(),type:"module"}}catch(n){}return null}))).filter(e=>null!==e&&e.content.length>0)],u=i.filter(e=>{if(!e.src)return!1;const t=e.getAttribute("src")||"";return!t.includes("@vite/client")&&!t.includes("html-proxy")}).map(e=>{const t=e.getAttribute("type");let r=e.src;if(n)try{r=new URL(e.getAttribute("src")??e.src,n).toString()}catch{}return{src:r,type:t,external:e.hasAttribute("external")}}).filter(e=>e.src.length>0);i.forEach(e=>e.remove());const f=Array.from(s.querySelectorAll('link[rel="stylesheet"]')),p=f.map(e=>{let t=e.getAttribute("href")||"";const r=e.getAttribute("rel")||"stylesheet";if(n&&t&&!t.startsWith("http"))try{t=new URL(t,n).toString()}catch{}return{href:t,rel:r}}).filter(e=>e.href.length>0);f.forEach(e=>e.remove());const h=Array.from(s.querySelectorAll("style")),d=h.map(e=>e.textContent??"").join("\n").trim();h.forEach(e=>e.remove());const m=s.querySelector("template");let g;if(m){const e=document.createElement("div");e.appendChild(m.content.cloneNode(!0)),g=e.innerHTML.trim()}else g=s.body.innerHTML.trim();const _=function(e){const t=/* @__PURE__ */new Set,n=function(e){const t=/* @__PURE__ */new Set,n=/\$for\s*=\s*["']([^"']+)["']/g;let r;for(;null!==(r=n.exec(e));){const e=r[1].trim(),n=e.match(/^\(\s*([a-zA-Z_$][a-zA-Z0-9_$]*)\s*,\s*([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\)\s+in\s+/);if(n){t.add(n[1]),t.add(n[2]);continue}const o=e.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)\s+in\s+/);o&&t.add(o[1])}return t}(e),o=e.matchAll(r);for(const r of o){const e=r[1].trim().match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)/);if(e){const r=e[1];["true","false","null","undefined","new","this","typeof","instanceof","void","delete","in","of","if","else","for","while","do","switch","case","break","continue","return","throw","try","catch","finally","function","class","const","let","var","Math","Date","JSON","Array","Object","String","Number","Boolean","console","window","document"].includes(r)||n.has(r)||t.add(r)}}return Array.from(t)}(g);return{tagName:t,template:g,scripts:l,externalScripts:u,externalStyles:p,styles:d,sourcePath:n,lazy:!1,templateBindings:_}}const i=/* @__PURE__ */new Map,a=(e,t)=>{if(i.has(e))i.delete(e);else if(i.size>=25){const e=i.keys().next().value;e&&i.delete(e)}i.set(e,t)};async function c(e){if(!e)throw new Error("Path cannot be null or empty");const t=(e=>{const t=i.get(e);return t&&(i.delete(e),i.set(e,t)),t})(e);if(t)return{source:t,resolvedPath:e};try{const t=await async function(e){if(e.endsWith(".html")){const t=await fetch(e);return t.ok?{path:e,response:t}:null}const t=e.endsWith("/")?e.slice(0,-1):e,n=`${t}/index.html`;try{const e=await fetch(n);if(e.ok)return{path:n,response:e}}catch{}try{const e=await fetch(t);if(e.ok&&(e.headers.get("content-type")||"").includes("text/html"))return{path:t,response:e}}catch{}return null}(e);if(!t)throw new Error(`Failed to fetch component from ${e}: Could not resolve path. Tried: ${e}${e.endsWith(".html")?"":` and ${e}/index.html`}`);const n=await t.response.text();return a(e,n),t.path!==e&&a(t.path,n),{source:n,resolvedPath:t.path}}catch(n){return}}function l(e){const t=e.trim(),n=function(e){const t=function(e){let t=0,n=0,r=0,o=!1,s=!1,i=!1,a=!1;for(let c=0;c<e.length;c++){const l=e[c];if(a)a=!1;else if("\\"!==l)if(s||i||"'"!==l)if(o||i||'"'!==l)if(o||s||"`"!==l){if(!(o||s||i)&&("("===l?t++:")"===l?t=Math.max(0,t-1):"["===l?n++:"]"===l?n=Math.max(0,n-1):"{"===l?r++:"}"===l&&(r=Math.max(0,r-1)),"("===l&&0===t&&0===n&&0===r))return c}else i=!i;else s=!s;else o=!o;else a=!0}return-1}(e);if(t<0)return null;const n=function(e,t){let n=0,r=!1,o=!1,s=!1,i=!1;for(let a=t;a<e.length;a++){const t=e[a];if(i)i=!1;else if("\\"!==t)if(o||s||"'"!==t)if(r||s||'"'!==t)if(r||o||"`"!==t){if(!(r||o||s))if("("===t)n++;else if(")"===t){if(n--,0===n)return a;if(n<0)return-1}}else s=!s;else o=!o;else r=!r;else i=!0}return-1}(e,t);if(n<0)return null;if(0!==e.slice(n+1).trim().length)return null;const r=u(e.slice(0,t).trim());if(!r)return null;return{calleePath:r,args:function(e){const t=[];let n="",r=0,o=0,s=0,i=!1,a=!1,c=!1,l=!1;for(let f=0;f<e.length;f++){const u=e[f];if(l)n+=u,l=!1;else if("\\"!==u)if(a||c||"'"!==u)if(i||c||'"'!==u)if(i||a||"`"!==u){if(!i&&!a&&!c&&("("===u?r++:")"===u?r=Math.max(0,r-1):"["===u?o++:"]"===u?o=Math.max(0,o-1):"{"===u?s++:"}"===u&&(s=Math.max(0,s-1)),","===u&&0===r&&0===o&&0===s)){const e=n.trim();e.length>0&&t.push(e),n="";continue}n+=u}else c=!c,n+=u;else a=!a,n+=u;else i=!i,n+=u;else n+=u,l=!0}const u=n.trim();return u.length>0&&t.push(u),t}(e.slice(t+1,n))}}(t);if(n)return{raw:t,path:n.calleePath,isFunction:!0,isExpression:!0,functionArgs:n.args};const r=u(t);return r?{raw:t,path:r,isFunction:!1,isExpression:!1}:{raw:t,path:[],isExpression:!0}}function u(e){return/^[$A-Z_][0-9A-Z_$]*(?:\s*\.\s*[$A-Z_][0-9A-Z_$]*)*$/i.test(e)?e.split(".").map(e=>e.trim()).filter(e=>e.length>0):null}function f(e){let t=e.parentElement;for(;t;){if(t.hasAttribute&&t.hasAttribute("$for"))return!0;t=t.parentElement}return!1}function p(e){let t=e.parentElement;for(;t;){if(t.hasAttribute&&t.hasAttribute("$no:bind"))return!0;t=t.parentElement}return!1}const h=["onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmousemove","onmouseenter","onmouseleave","onkeydown","onkeyup","onkeypress","onfocus","onblur","onchange","oninput","onsubmit","onreset","onscroll","onload","onerror","ontouchstart","ontouchmove","ontouchend","ontouchcancel","ondragstart","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondrop"],d=Object.freeze(["alert","confirm","prompt","console","JSON","Math","Date","Array","Object","String","Number","Boolean","Map","Set","WeakMap","WeakSet","Symbol","BigInt","Promise","Proxy","Reflect","parseInt","parseFloat","isNaN","isFinite","Infinity","NaN","encodeURIComponent","decodeURIComponent","encodeURI","decodeURI","setTimeout","clearTimeout","setInterval","clearInterval","requestAnimationFrame","cancelAnimationFrame","requestIdleCallback","cancelIdleCallback","queueMicrotask","fetch","AbortController","AbortSignal","Headers","Request","Response","URL","URLSearchParams","navigator","location","history","localStorage","sessionStorage","crypto","document","window","globalThis","Element","HTMLElement","Event","CustomEvent","EventTarget","TextEncoder","TextDecoder","Blob","File","FileReader","FormData","Error","TypeError","RangeError","SyntaxError","ReferenceError","atob","btoa","structuredClone"]),m=Object.freeze([]),g=/* @__PURE__ */new Set(["with","eval","arguments","constructor","prototype","break","case","catch","continue","debugger","default","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","this","throw","try","typeof","var","void","while","class","const","enum","export","extends","import","super","implements","interface","let","package","private","protected","public","static","yield","null","true","false"]),_={enter:"Enter",tab:"Tab",esc:"Escape",escape:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",delete:"Delete",backspace:"Backspace",insert:"Insert",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",home:"Home",end:"End",pageup:"PageUp",pagedown:"PageDown"},y=["ctrl","alt","shift","meta"],b=["prevent","stop","self","once","passive","capture"],w={left:0,middle:1,right:2};function v(e){if(!e.startsWith("$on:"))return null;const t=e.slice(4).split(".");if(0===t.length||!t[0])return null;const n=t[0],r=t.slice(1),o={eventName:n,keyModifiers:[],systemModifiers:[],eventModifiers:[],mouseModifier:null,exact:!1};for(const s of r){const e=s.toLowerCase();"exact"!==e?b.includes(e)?o.eventModifiers.push(e):y.includes(e)?o.systemModifiers.push(e):e in w?o.mouseModifier=e:o.keyModifiers.push(e):o.exact=!0}return o}function $(e){const t={};return e.includes("passive")&&(t.passive=!0),e.includes("capture")&&(t.capture=!0),e.includes("once")&&(t.once=!0),t}function E(e,t){return function(n){if((!t.eventModifiers.includes("self")||n.target===n.currentTarget)&&(!(t.mouseModifier&&n instanceof MouseEvent)||function(e,t){return e.button===w[t]}(n,t.mouseModifier))&&(!(t.systemModifiers.length>0||t.exact)||!(n instanceof KeyboardEvent||n instanceof MouseEvent)||function(e,t,n){const r={ctrl:e.ctrlKey,alt:e.altKey,shift:e.shiftKey,meta:e.metaKey};for(const o of t)if(!r[o])return!1;if(n)for(const o of y)if(!t.includes(o)&&r[o])return!1;return!0}(n,t.systemModifiers,t.exact))){if(t.keyModifiers.length>0&&n instanceof KeyboardEvent){const e=t.keyModifiers.some(e=>function(e,t){const n=t.toLowerCase(),r=_[n];if(r)return e.key===r;if(1===n.length)return e.key.toLowerCase()===n;const o=n.split("-").map((e,t)=>0===t?e:e.charAt(0).toUpperCase()+e.slice(1)).join("");return e.key.toLowerCase()===n||e.key.toLowerCase()===o.toLowerCase()}(n,e));if(!e)return}t.eventModifiers.includes("prevent")&&n.preventDefault(),t.eventModifiers.includes("stop")&&n.stopPropagation(),e(n)}}}function A(e){return e.startsWith("$on:")}let S=null;var R=/* @__PURE__ */(e=>(e[e.EXPRESSION_EVAL_FAILED=101]="EXPRESSION_EVAL_FAILED",e[e.EXPRESSION_SYNTAX_ERROR=102]="EXPRESSION_SYNTAX_ERROR",e[e.EXPRESSION_UNDEFINED_VAR=103]="EXPRESSION_UNDEFINED_VAR",e[e.EXPRESSION_NULL_ACCESS=104]="EXPRESSION_NULL_ACCESS",e[e.SCRIPT_EXTRACT_FAILED=201]="SCRIPT_EXTRACT_FAILED",e[e.SCRIPT_EXECUTION_FAILED=202]="SCRIPT_EXECUTION_FAILED",e[e.EVENT_HANDLER_FAILED=301]="EVENT_HANDLER_FAILED",e[e.DIRECTIVE_ERROR=401]="DIRECTIVE_ERROR",e[e.LOOP_ERROR=402]="LOOP_ERROR",e[e.CONDITIONAL_ERROR=403]="CONDITIONAL_ERROR",e[e.COMPONENT_LOAD_FAILED=501]="COMPONENT_LOAD_FAILED",e[e.COMPONENT_NOT_FOUND=502]="COMPONENT_NOT_FOUND",e[e.MODULE_LOAD_FAILED=601]="MODULE_LOAD_FAILED",e[e.MODULE_EXECUTION_FAILED=602]="MODULE_EXECUTION_FAILED",e))(R||{});function x(e,t){!function(e,t){!function(e){const t=void 0!==e?e:S;if(!t)return"";const n=[];if(t.tagName&&n.push(`<${t.tagName}>`),t.sourcePath){const e=t.sourcePath.split("/").pop()||t.sourcePath;n.push(`(${e})`)}n.length>0&&n.join(" ")}(t)}(0,t),"undefined"!=typeof window&&"undefined"!=typeof console&&console}function C(e,t,n={}){var r;n.errorCode||(r=t)instanceof SyntaxError||r instanceof ReferenceError||r instanceof TypeError&&(r.message.includes("Cannot read properties of null")||r.message.includes("Cannot read properties of undefined")),function(e){if(e instanceof SyntaxError)return"Invalid expression syntax";if(e instanceof ReferenceError){const t=e.message.match(/(\w+) is not defined/);return t?`Undefined variable: "${t[1]}"`:"Undefined variable"}e instanceof TypeError&&(e.message.includes("Cannot read properties of null")||e.message.includes("Cannot read properties of undefined"))}(t)}const L=/* @__PURE__ */new Map,N=/* @__PURE__ */Symbol("reactive-array"),I=["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"];function T(e,t){return e[N]?e:new Proxy(e,{get(e,n){if(n===N)return!0;const r=e[n];return"string"==typeof n&&I.includes(n)&&"function"==typeof r?(...n)=>{const o=n.map(e=>Array.isArray(e)?T(e,t):e),s=r.apply(e,o);return t(),s}:Array.isArray(r)?T(r,t):r},set(e,n,r){const o="string"==typeof n?parseInt(n,10):NaN,s=!isNaN(o),i="length"===n,a=Array.isArray(r)?T(r,t):r;return e[n]===a||(e[n]=a,(s||i)&&t()),!0},deleteProperty(e,n){const r=delete e[n];return r&&t(),r}})}function k(e,t){for(const n of Object.keys(e)){const r=e[n];Array.isArray(r)?e[n]=T(r,t):r&&"object"==typeof r&&!Array.isArray(r)&&k(r,t)}return e}function M(e,t,n,r){const o=function(e,t){const n=/* @__PURE__ */new Map;for(const r of t)n.set(r,/* @__PURE__ */new Set);for(const r of e)for(const e of r.bindings)for(const o of t)O(e.raw,o)&&n.get(o).add(r);return n}(t,Object.keys(e));k(e,()=>{r&&r()});const s=new Proxy(e,{get:(e,t)=>e[t],set(e,s,i){const a=!(s in e);if(!a&&e[s]===i)return!0;const c=Array.isArray(i)?T(i,()=>{r&&r()}):i;return e[s]=c,a&&function(e,t,n){n.set(e,/* @__PURE__ */new Set);for(const r of t)for(const t of r.bindings)O(t.raw,e)&&n.get(e).add(r)}(s,t,o),((e,t)=>{const s=o.get(e);if(s)for(const r of s)n(r,t);r&&r()})(s,e),!0}});return s}function O(e,t){const n=function(e){let t=L.get(e);if(!t){const n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=new RegExp(`\\b${n}\\b`),L.set(e,t)}return t}(t);return n.test(e)}function D(e,t){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("/")?e.startsWith("/")?new URL(e,window.location.origin).href:e:new URL(e,t).href}function P(e){return{$registerComponent:function(t,n,r=!1){const o=D(n,e);return gt.registerComponent(t,o,r)},$registerComponents:function(t){const n=Array.isArray(t)?t.map(t=>({...t,path:D(t.path,e)})):Object.entries(t).map(([t,n])=>"string"==typeof n?{name:t,path:D(n,e)}:{name:t,...n,path:D(n.path,e)});return gt.registerComponents(n)},$use:function(t,n=!1){const r=function(e){return(e.split("/").pop()?.replace(/\.[^.]+$/,"")||e).replace(/([a-z])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1-$2").toLowerCase()}(t),o=D(t,e);return gt.registerComponent(r,o,n)}}}const F=["$registerComponent","$registerComponents","$use"],j=P(window.location.href),U=j.$registerComponent,W=j.$registerComponents,z=j.$use,H=e=>e instanceof ShadowRoot?e.host:e;function B(e,t,n,r){const o=Array.from(e.querySelectorAll("*"));for(const s of o)if(!q(s)){for(const e of h){const o=s.getAttribute(e);if(o){s.removeAttribute(e);const i=e.slice(2),a=X(o,t,n,r);a&&s.addEventListener(i,a)}}Z(s,t,n,r)}}function Z(e,t,n,r){const o=Array.from(e.attributes).filter(e=>A(e.name));for(const s of o){const o=v(s.name);if(!o)continue;const i=s.value;e.removeAttribute(s.name);const a=X(i,t,n,r);if(!a)continue;const c=E(a,o),l=$(o.eventModifiers);e.addEventListener(o.eventName,c,l)}}function q(e){if(e.hasAttribute("$for"))return!0;let t=e.parentElement;for(;t;){if(t.hasAttribute("$for"))return!0;t=t.parentElement}return!1}function X(e,t,n,r){try{const o=r?.__componentUrl,s=r?.__componentId,i=ee(o,s),a=Q(),c=["event","state","$refs",...a,...i.keys],l=Object.keys(t),u=l.filter(e=>"function"==typeof t[e]),f=l.filter(e=>"function"!=typeof t[e]),p=!0===t.__hasModuleScripts,h=p?f.length>0?`const { ${f.join(", ")} } = state;`:"":f.length>0?`let { ${f.join(", ")} } = state;`:"",d=p&&u.length>0?`const { ${u.join(", ")} } = state;`:"",m=function(e,t){if(!e||0===t.length)return e;const n=[];let r=e.replace(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/g,e=>(n.push(e),`__STRING_PLACEHOLDER_${n.length-1}__`));r=r.replace(/`(?:[^`\\$]|\\.|\$(?!\{)|\$\{[^}]*\})*`/g,e=>e.replace(/\$\{([^}]+)\}/g,(e,n)=>{let r=n;for(const o of t){const e=new RegExp(`(?<![^.]\\.)(?<!state\\.)\\b${K(o)}\\b(?!\\s*[:(])`,"g");r=r.replace(e,`state.${o}`)}return`\${${r}}`}));for(const s of t){const e=new RegExp(`(?<![^.]\\.)(?<!state\\.)\\b${K(s)}\\b(?!\\s*[:(])`,"g");r=r.replace(e,`state.${s}`)}let o=r;for(let s=0;s<n.length;s++)o=o.replace(`__STRING_PLACEHOLDER_${s}__`,n[s]);return o}(V(n,p?u:[]),f),g=f.some(t=>new RegExp(`\\b${t}\\b`).test(e)),_=p||!g?"":f.filter(t=>new RegExp(`\\b${t}\\b`).test(e)).map(e=>`state.${e} = ${e};`).join(" "),y=/\bawait\b/.test(e)||/\bawait\b/.test(m)||/\basync\b/.test(m),b=o||"ladrillos-event-handler",w=y?`"use strict"; ${h} ${d} ${m} try { await (async () => { ${e} })(); } finally { ${_} }\n//# sourceURL=${b}`:`"use strict"; ${h} ${d} ${m} ${e}; ${_}\n//# sourceURL=${b}`,v=Object.getPrototypeOf(async function(){}).constructor,$=y?new v(...c,w):new Function(...c,w);return e=>{try{const n=[e,t,r&&r.__refs||/* @__PURE__ */new Map,...a.map(()=>{}),...i.values],o=$(...n);o&&"function"==typeof o.catch&&o.catch(e=>{r?.tagName?.toLowerCase(),C(0,e,{errorCode:R.EVENT_HANDLER_FAILED})})}catch(n){r?.tagName?.toLowerCase(),C(0,n,{errorCode:R.EVENT_HANDLER_FAILED})}}}catch(o){return r?.tagName&&r.tagName.toLowerCase(),null}}function V(e,t=[]){const n=[],r=/(?:async\s+)?function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\([^)]*\)\s*\{/g;let o;for(;null!==(o=r.exec(e));){if(t.includes(o[1]))continue;const r=G(e,o.index);r&&n.push(r)}const s=/(?:const|let)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=\s*(?:async\s*)?\([^)]*\)\s*=>\s*\{/g;for(;null!==(o=s.exec(e));){if(t.includes(o[1]))continue;const r=o.index,s=e.indexOf("{",r+o[0].length-1),i=G(e,r,s);i&&n.push(i)}return n.map(e=>e.trim()).join(";\n")+(n.length>0?";":"")}function G(e,t,n){let r=0,o=t,s=!1,i="",a=!1;for(let c=n??t;c<e.length;c++){const t=e[c];if('"'!==t&&"'"!==t&&"`"!==t||"\\"===(c>0?e[c-1]:"")||(s?t===i&&(s=!1):(s=!0,i=t)),!s&&("{"===t&&(r++,a=!0),"}"===t&&r--,a&&0===r&&"}"===t)){o=c+1;break}}return 0!==r?null:e.slice(t,o)}function J(e,t,n,r,o,s,i=[]){try{const a=Y(e),c=`\n "use strict";\n ${function(e,t){if(0===t.length)return e;const n=[];let r=e.replace(/(["'])(?:(?!\1)[^\\]|\\.)*\1/g,e=>(n.push(e),`__STRING_PLACEHOLDER_${n.length-1}__`));r=r.replace(/`(?:[^`\\$]|\\.|\$(?!\{)|\$\{[^}]*\})*`/g,e=>e.replace(/\$\{([^}]+)\}/g,(e,n)=>{let r=n;for(const o of t){const e=new RegExp(`(?<![^.]\\.)(?<!__state__\\.)\\b${K(o)}\\b(?!\\s*[:(])`,"g");r=r.replace(e,`__state__.${o}`)}return`\${${r}}`}));for(const s of t){const e=new RegExp(`\\b(let|const|var)\\s+(${K(s)})\\s*=`,"g");r=r.replace(e,`__state__.${s} ??=`)}for(const s of t){const e=new RegExp(`(?<![^.]\\.)(?<!__state__\\.)\\b${K(s)}\\b(?!\\s*[:(])`,"g");r=r.replace(e,`__state__.${s}`)}let o=r;for(let s=0;s<n.length;s++)o=o.replace(`__STRING_PLACEHOLDER_${s}__`,n[s]);return o}(e,[.../* @__PURE__ */new Set([...a,...i])])}\n//# sourceURL=${n||"ladrillos-component"}\n `,l=ee(n,r),u=Q(),f=["__state__","$host","$refs",...u,...l.keys],p=[t,o,s,...u.map(()=>{}),...l.values];new Function(...f,c)(...p)}catch(a){}}function Y(e){const t=[],n=/(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/g;let r;for(;null!==(r=n.exec(e));)t.push(r[1]);return t}function K(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Q(){return m.filter(e=>!g.has(e))}function ee(n,r){const o=[],s=[];for(const e of d)e in globalThis&&(o.push(e),s.push(globalThis[e]));const i=P(n||window.location.href);o.push(...F),s.push(i.$registerComponent,i.$registerComponents,i.$use);const a=t(r||"anonymous");return o.push(...e),s.push(a.$emit,a.$listen),{keys:o,values:s}}function te(e,t){try{const n=Object.keys(t),r=Object.values(t),o=Q(),s=[...o,...n],i=[...o.map(()=>{}),...r];return new Function(...s,`"use strict"; return ${e};`)(...i)}catch(n){return C(0,n,{}),`{${e}}`}}function ne(e,t){let n=e.original;for(const r of e.bindings){const e=te(r.raw,t),o=String(e??"");n=n.replace(`{${r.raw}}`,o)}if(e.isAttribute&&e.attributeName){const t=e.element??e.node.parentElement;t&&t.setAttribute(e.attributeName,n)}else e.node.textContent=n}function re(e,t){for(const n of e)ne(n,t)}const oe=/* @__PURE__ */new Map,se=/* @__PURE__ */new Map,ie=/(?:import|export)\s+(?:[\s\S]*?\s+from\s+)?['"]([^'"]+)['"]/g,ae=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,ce=[".ts",".tsx",".mts"];function le(e){return e.startsWith("./")||e.startsWith("../")}function ue(e){return ce.some(t=>e.endsWith(t))}function fe(e){return!(e.startsWith("/")||e.startsWith("./")||e.startsWith("../")||e.startsWith("http://")||e.startsWith("https://")||e.startsWith("data:")||e.startsWith("blob:"))}const pe=/^(?:export\s+)?(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/gm;async function he(e,t,n){if(e.external)return document.querySelector(`script[src="${e.src}"]`)?Promise.resolve(void 0):new Promise((t,n)=>{const r=document.createElement("script");r.src=e.src,e.type&&(r.type=e.type),r.onload=()=>t(void 0),r.onerror=t=>n(new Error(`Failed to load external script: ${e.src}`)),document.head.appendChild(r)});if("module"!==e.type)return document.querySelector(`script[src="${e.src}"]`)?Promise.resolve(void 0):new Promise((t,n)=>{const r=document.createElement("script");r.src=e.src,e.type&&(r.type=e.type),r.onload=()=>t(void 0),r.onerror=t=>n(new Error(`Failed to load script: ${e.src}`)),document.head.appendChild(r)});try{const r=await fetch(e.src);if(!r.ok)throw new Error(`Failed to fetch module: ${e.src}`);const o=function(e){const t=function(e){const t=[];let n;for(pe.lastIndex=0;null!==(n=pe.exec(e));)t.push(n[1]);const r=/^(?:export\s+)?function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/gm;for(;null!==(n=r.exec(e));)t.includes(n[1])||t.push(n[1]);return t}(e),n=/* @__PURE__ */new Set,r=/export\s+(?:let|const|var|function)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;let o;for(;null!==(o=r.exec(e));)n.add(o[1]);const s=/export\s*\{([^}]+)\}/g;for(;null!==(o=s.exec(e));)o[1].split(",").map(e=>e.trim().split(/\s+as\s+/)[0].trim()).forEach(e=>n.add(e));const i=t.filter(e=>!n.has(e));return 0===i.length?e:`${e}\nexport { ${i.join(", ")} };`}(function(e){const t=[];let n=e;if(n=n.replace(/import\s*\{([^}]+)\}\s*from\s*(['"][^'"]+['"])\s*;?/g,(e,n,r)=>{const o=n.split(",").map(e=>e.trim()),s=[];for(const i of o){if(!i)continue;const e=i.match(/^(\w+)\s+as\s+(\w+)$/);if(e){const[,n,r]=e,o=`__raw_${r}`;s.push(`${n} as ${o}`),t.push(`const ${r} = __wrapReactiveArray(${o}, __ladrillos_componentId);`)}else{const e=`__raw_${i}`;s.push(`${i} as ${e}`),t.push(`const ${i} = __wrapReactiveArray(${e}, __ladrillos_componentId);`)}}return`import { ${s.join(", ")} } from ${r};`}),t.length>0){const e=n.split("\n");let r=-1;for(let t=0;t<e.length;t++){const n=e[t].trim();(n.startsWith("import ")||n.startsWith("import{"))&&(r=t)}r>=0&&(e.splice(r+1,0,"","// === Reactive Import Wrappers ===",...t,"// === End Reactive Import Wrappers ===",""),n=e.join("\n"))}return n}(function(e,t){let n=e;const r=[],o=[];return n=n.replace(ie,(e,n)=>{if(le(n)){const r=new URL(n,t).href;return ue(n)&&o.push(n),e.replace(n,r)}return fe(n)&&r.push(n),e}),n=n.replace(ae,(e,n)=>{if(le(n)){const e=new URL(n,t).href;return ue(n)&&o.push(n),`import("${e}")`}return fe(n)&&r.push(n),e}),n}(await r.text(),e.src))),s=function(e,t){return`\n// === LadrillosJS Framework Helpers (auto-injected) ===\nconst __ladrillos_componentId = "${e||"anonymous"}";\nconst __ladrillos_componentUrl = "${t||"unknown"}";\n\n// Global event bus (shared across all components)\nif (!globalThis.__ladrillosEventBus) {\n globalThis.__ladrillosEventBus = {\n listeners: new Map(),\n componentListeners: new Map()\n };\n}\n\n// Global state change callbacks (for reactive array updates)\nif (!globalThis.__ladrillosStateCallbacks) {\n globalThis.__ladrillosStateCallbacks = new Map();\n}\n\n// Reactive array symbol\nconst __REACTIVE_ARRAY = Symbol.for("ladrillos-reactive-array");\n\n// Array mutation methods to intercept\nconst __ARRAY_METHODS = ["push", "pop", "shift", "unshift", "splice", "sort", "reverse", "fill", "copyWithin"];\n\n// Wrap an array in a reactive proxy\nconst __wrapReactiveArray = (arr, componentId) => {\n if (!Array.isArray(arr) || arr[__REACTIVE_ARRAY]) return arr;\n \n const onMutate = () => {\n const callback = globalThis.__ladrillosStateCallbacks?.get(componentId);\n if (callback) callback();\n };\n \n return new Proxy(arr, {\n get(target, key) {\n if (key === __REACTIVE_ARRAY) return true;\n const value = target[key];\n if (typeof key === "string" && __ARRAY_METHODS.includes(key) && typeof value === "function") {\n return (...args) => {\n const result = value.apply(target, args);\n onMutate();\n return result;\n };\n }\n if (Array.isArray(value)) return __wrapReactiveArray(value, componentId);\n return value;\n },\n set(target, key, value) {\n const index = parseInt(key, 10);\n const isIndex = !isNaN(index);\n const isLength = key === "length";\n target[key] = Array.isArray(value) ? __wrapReactiveArray(value, componentId) : value;\n if (isIndex || isLength) onMutate();\n return true;\n }\n });\n};\n\nconst $emit = (eventName, data) => {\n const listeners = globalThis.__ladrillosEventBus.listeners.get(eventName);\n if (!listeners || listeners.size === 0) return;\n for (const registration of listeners) {\n try {\n registration.callback(data);\n } catch (error) {\n console.error(\`[LadrillosJS] Error in event listener for "\${eventName}":\`, error);\n }\n }\n};\n\nconst $listen = (eventName, callback) => {\n const bus = globalThis.__ladrillosEventBus;\n let listeners = bus.listeners.get(eventName);\n if (!listeners) {\n listeners = new Set();\n bus.listeners.set(eventName, listeners);\n }\n const registration = { callback, componentId: __ladrillos_componentId };\n listeners.add(registration);\n\n // Track by component ID for cleanup\n let componentRegs = bus.componentListeners.get(__ladrillos_componentId);\n if (!componentRegs) {\n componentRegs = new Set();\n bus.componentListeners.set(__ladrillos_componentId, componentRegs);\n }\n componentRegs.add({ event: eventName, registration });\n\n // Return unsubscribe function\n return () => {\n listeners?.delete(registration);\n if (listeners?.size === 0) bus.listeners.delete(eventName);\n const compRegs = bus.componentListeners.get(__ladrillos_componentId);\n if (compRegs) {\n for (const reg of compRegs) {\n if (reg.registration === registration) {\n compRegs.delete(reg);\n break;\n }\n }\n if (compRegs.size === 0) bus.componentListeners.delete(__ladrillos_componentId);\n }\n };\n};\n\n// Global refs registry (shared across all components)\n// Each component gets its own Map, keyed by component ID\nif (!globalThis.__ladrillosRefs) {\n globalThis.__ladrillosRefs = new Map();\n}\n\n// Helper to wrap refs Map in Proxy for cleaner dot notation access\nconst __createRefsProxy = (map) => new Proxy(map, {\n get(target, prop, receiver) {\n if (prop in target) {\n const value = Reflect.get(target, prop, receiver);\n return typeof value === "function" ? value.bind(target) : value;\n }\n if (typeof prop === "string") return target.get(prop);\n return undefined;\n },\n set(target, prop, value) {\n if (typeof prop === "string") { target.set(prop, value); return true; }\n return false;\n },\n has(target, prop) {\n return typeof prop === "string" ? target.has(prop) || prop in target : prop in target;\n }\n});\n\n// Get or create refs Map for this component (wrapped in Proxy)\nif (!globalThis.__ladrillosRefs.has(__ladrillos_componentId)) {\n globalThis.__ladrillosRefs.set(__ladrillos_componentId, __createRefsProxy(new Map()));\n}\n\n// $refs for this component - supports both $refs.inputEl and $refs.get("inputEl")\nconst $refs = globalThis.__ladrillosRefs.get(__ladrillos_componentId);\n\n// Helper to resolve relative paths against component URL\nconst __resolvePath = (path) => {\n if (path.startsWith("http://") || path.startsWith("https://") || path.startsWith("/")) {\n return path.startsWith("/") ? new URL(path, window.location.origin).href : path;\n }\n return new URL(path, __ladrillos_componentUrl).href;\n};\n\n// Helper to convert filename to tag name\nconst __filenameToTagName = (path) => {\n const filename = path.split("/").pop()?.replace(/\\.[^.]+$/, "") || path;\n return filename.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[_\\s]+/g, "-").toLowerCase();\n};\n\n// $registerComponent - Register a child component\nconst $registerComponent = async (name, path, useShadowDOM = false) => {\n const resolvedPath = __resolvePath(path);\n return globalThis.ladrillosjs.registerComponent({ name, path: resolvedPath, useShadowDOM });\n};\n\n// $registerComponents - Register multiple components at once\nconst $registerComponents = async (configs) => {\n const resolvedConfigs = configs.map(config => ({\n ...config,\n path: __resolvePath(config.path)\n }));\n return globalThis.ladrillosjs.registerComponents(resolvedConfigs);\n};\n\n// $use - Shorthand for $registerComponent with auto-derived tag name\nconst $use = async (path, useShadowDOM = false) => {\n const tagName = __filenameToTagName(path);\n return $registerComponent(tagName, path, useShadowDOM);\n};\n\n// === End Framework Helpers ===\n\n`}(t,n||e.src),i=new Blob([s+o],{type:"text/javascript"}),a=URL.createObjectURL(i);try{return await(0,eval)(`import("${a}")`)}finally{URL.revokeObjectURL(a)}}catch(r){throw r}}const de=/* @__PURE__ */new Map;async function me(e){if(se.has(e))return se.get(e);const t=(async()=>{try{return await(0,eval)(`import("${e}")`)}catch(t){throw t}})();return se.set(e,t),t}function ge(e,t){return t&&Array.isArray(e)?T(e,t):e}async function _e(n,r,o,s,i,a){if("module"!==n.type)throw new Error('executeModuleScriptWithReactivity only handles type="module" scripts');const c=n.content,l=await async function(e,t,n){const r=function(e){const t=[],n=/import\s+(?:(\{[^}]+\})|(\*\s+as\s+\w+)|(\w+)(?:\s*,\s*(\{[^}]+\}))?)?\s*(?:from\s+)?['"]([^'"]+)['"]/g;let r;for(;null!==(r=n.exec(e));){const[e,n,o,s,i,a]=r,c={statement:e,specifier:a,imports:[],isDefault:!1,isNamespace:!1,isSideEffect:!1};if(n||o||s||(c.isSideEffect=!0),s&&(c.isDefault=!0,c.imports.push({imported:"default",local:s})),o){c.isNamespace=!0;const e=o.replace(/\*\s+as\s+/,"").trim();c.imports.push({imported:"*",local:e})}const l=n||i;if(l){const e=l.slice(1,-1).split(",").map(e=>e.trim()).filter(Boolean);for(const t of e){const e=t.match(/(\w+)\s+as\s+(\w+)/);c.imports.push(e?{imported:e[1],local:e[2]}:{imported:t,local:t})}}t.push(c)}return t}(e),o={};for(const i of r){if(i.isSideEffect){const e=le(i.specifier)?new URL(i.specifier,t).href:i.specifier;await me(e);continue}const e=le(i.specifier)?new URL(i.specifier,t).href:i.specifier;try{const t=await me(e);for(const e of i.imports){let r;r="*"===e.imported?t:"default"===e.imported?t.default:t[e.imported],o[e.local]=ge(r,n)}}catch(s){}}return o}(c,r,a),u=function(e){return e.replace(/import\s+(?:(?:\{[^}]+\}|\*\s+as\s+\w+|\w+)(?:\s*,\s*\{[^}]+\})?\s+from\s+)?['"][^'"]+['"]\s*;?/g,"").trim()}(c),{variables:f,functions:p}=function(e){const t=[],n=[],r=e.replace(/`[^`]*`/g,e=>" ".repeat(e.length)).replace(/"(?:[^"\\]|\\.)*"/g,e=>" ".repeat(e.length)).replace(/'(?:[^'\\]|\\.)*'/g,e=>" ".repeat(e.length)).replace(/\/\*[\s\S]*?\*\//g,e=>" ".repeat(e.length)).replace(/\/\/[^\n]*/g,e=>" ".repeat(e.length));let o=0,s=0;for(;s<r.length;){const e=r[s];if("{"!==e)if("}"!==e){if(0===o){const e=r.slice(s).match(/^(?:async\s+)?function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/);if(e){n.push(e[1]),s+=e[0].length;continue}const o=r.slice(s).match(/^(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=/);if(o){t.push(o[1]),s+=o[0].length;continue}}s++}else o--,s++;else o++,s++}return{variables:t,functions:n}}(u),h=function(e,t){if(0===t.length)return e;const n=[];let r=e.replace(/(["'`])(?:(?!\1)[^\\]|\\.)*\1/g,e=>(n.push(e),`__STRING_PLACEHOLDER_${n.length-1}__`));for(const s of t){const e=new RegExp(`\\b(let|const|var)\\s+(${ye(s)})\\s*=`,"g");r=r.replace(e,`__state__.${s} =`)}for(const s of t){const e=new RegExp(`(?<![^.]\\.)(?<!__state__\\.)\\b${ye(s)}\\b(?!\\s*[:(])`,"g");r=r.replace(e,`__state__.${s}`)}let o=r;for(let s=0;s<n.length;s++)o=o.replace(`__STRING_PLACEHOLDER_${s}__`,n[s]);return o}(u,f),d=Object.keys(l),m=Object.values(l),g=`\n "use strict";\n return (async () => {\n ${h}\n ${p.length>0?`return { ${p.join(", ")} };`:"return {};"}\n })();\n `;try{const n=["console","alert","Math","JSON","Date","Array","Object","String","Number","Boolean","Promise","setTimeout","setInterval","clearTimeout","clearInterval"],a=n.map(e=>globalThis[e]),c=["$refs","__state__"],l=[s||/* @__PURE__ */new Map,i||{}],u=P(r),f=[u.$registerComponent,u.$registerComponents,u.$use],p=t(o||"anonymous"),h=[p.$emit,p.$listen],_={...globalThis.ladrillosjs||{},registerComponent:u.$registerComponent,registerComponents:u.$registerComponents},y=[...d,...n,...F,...e,...c,"ladrillosjs"],b=[...m,...a,...f,...h,...l,_],w=new Function(...y,g),v=await w(...b);return{...i||{},...v||{}}}catch(_){throw _}}function ye(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const be="$for",we="$if",ve="$else",$e="$else-if",Ee="$show",Ae="$bind",Se="$ref",Re=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]+)$/,xe=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ce=/^\(|\)$/g;function Le(e){return e.replace(/\$/g,"\\$")}function Ne(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(null===e||null===t)return e===t;if("object"!=typeof e)return e===t;const n=e,r=t,o=Object.keys(n),s=Object.keys(r);if(o.length!==s.length)return!1;for(const i of o)if(n[i]!==r[i])return!1;return!0}function Ie(e){const t=e.trim();return t.startsWith("{")&&t.endsWith("}")?t.slice(1,-1).trim():t}function Te(e){const t=e.match(Re);if(!t)return null;let n,[,r,o]=t;r=r.trim(),o=o.trim();const s=o.match(/\s+track\s+by\s+(.+)$/i);s&&(n=s[1].trim(),o=o.slice(0,s.index).trim());const i=r.replace(Ce,"").trim(),a=i.match(xe);let c,l,u;return a?(c=i.replace(xe,"").trim(),l=a[1]?.trim(),u=a[2]?.trim()):c=i,{item:c,index:l||u,key:n,array:o}}function ke(e,t,n,r,o,s){return e.removeAttribute(we),e.removeAttribute($e),e.removeAttribute(ve),{element:e,condition:t,type:n,placeholder:r,group:[],originalParent:o,nextSibling:s}}function Me(e,t){let n=e.parentElement;for(;n;){if(n.hasAttribute(be))return!0;n=n.parentElement}return!1}function Oe(e,t,n){const r=n(e.arrayName,t);if(!r||null==(o=r)||!Array.isArray(o)&&"function"!=typeof o[Symbol.iterator]&&"object"!=typeof o){for(const t of e.renderedElements)t.remove();return e.renderedElements=[],void(e.previousItems=[])}var o;const s=Array.from(r),i=e.previousItems||[],a=e.renderedElements;e.keyGetter||(e.keyGetter=function(e,t){if(!e)return(e,t)=>t;const n=e.startsWith(t+".")?e.slice(t.length+1).split("."):e.split(".");return e=>{let t=e;for(const r of n){if(null==t)return;t=t[r]}return t}}(e.keyAttribute,e.itemName));const c=(r,o)=>{const s=e.template.cloneNode(!0);return Fe(s,De(t,e,r,o),n),s};if(e.keyAttribute){const r=function(e,t,n){const r=[],o=/* @__PURE__ */new Map,s=/* @__PURE__ */new Map;for(let f=0;f<e.length;f++)o.set(n(e[f],f),f);for(let f=0;f<t.length;f++)s.set(n(t[f],f),f);const i=/* @__PURE__ */new Set;for(let f=0;f<e.length;f++){const t=n(e[f],f);s.has(t)||r.push({type:"remove",oldIndex:f,key:t,item:e[f]})}for(let f=0;f<t.length;f++){const e=n(t[f],f);o.has(e)||(r.push({type:"insert",newIndex:f,key:e,item:t[f]}),i.add(f))}const a=[];for(let f=0;f<e.length;f++){const t=n(e[f],f),r=s.get(t);void 0!==r&&a.push(r)}const c=function(e){if(0===e.length)return[];const t=e.length,n=new Array(t).fill(1),r=new Array(t).fill(-1);let o=1,s=0;for(let c=1;c<t;c++){for(let t=0;t<c;t++)e[t]<e[c]&&n[t]+1>n[c]&&(n[c]=n[t]+1,r[c]=t);n[c]>o&&(o=n[c],s=c)}const i=[];let a=s;for(;-1!==a;)i.unshift(a),a=r[a];return i}(a),l=new Set(c.map(e=>a[e]));let u=0;for(const f of a){for(;u<e.length&&!s.has(n(e[u],u));)u++;if(u<e.length){const t=n(e[u],u),o=u,i=s.get(t);l.has(i)||r.push({type:"move",oldIndex:o,newIndex:i,key:t,item:e[o]}),u++}}for(let f=0;f<t.length;f++){const s=n(t[f],f),i=o.get(s);if(void 0!==i){const n=t[f];Ne(e[i],n)||r.push({type:"update",oldIndex:i,newIndex:f,key:s,item:n})}}return r}(i,s,e.keyGetter),o=/* @__PURE__ */new Map;for(let t=0;t<i.length;t++){const n=e.keyGetter(i[t],t);a[t]&&o.set(n,a[t])}const l=new Array(s.length);for(const e of r)if("remove"===e.type&&void 0!==e.key){const t=o.get(e.key);t&&(t.remove(),o.delete(e.key))}for(let i=0;i<s.length;i++){const r=s[i],a=e.keyGetter(r,i),u=o.get(a);u?(Pe(u,De(t,e,r,i),n),l[i]=u):l[i]=c(r,i)}const u=document.createDocumentFragment();for(const e of l)u.appendChild(e);e.placeholder.parentNode?.insertBefore(u,e.placeholder.nextSibling),e.renderedElements=l}else{const r=Math.min(i.length,s.length);for(let i=0;i<r;i++){const r=De(t,e,s[i],i);Pe(a[i],r,n)}for(let e=s.length;e<i.length;e++)a[e]?.remove();const o=document.createDocumentFragment();for(let e=i.length;e<s.length;e++){const t=c(s[e],e);o.appendChild(t),a[e]=t}if(o.childNodes.length>0){const t=a[r-1]?.nextSibling||e.placeholder.nextSibling;e.placeholder.parentNode?.insertBefore(o,t)}e.renderedElements=a.slice(0,s.length)}e.previousItems=[...s]}function De(e,t,n,r){const o=e.__scriptContent,s={...e,[t.itemName]:n,__reactiveState__:e,__scriptContent__:o||"",__componentUrl__:e.__componentUrl||""};return t.indexName&&(s[t.indexName]=r),s}function Pe(e,t,n){const r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);let o;for(;o=r.nextNode();){const e=o.__originalTemplate;e&&(o.textContent=e.replace(/\{([^}]+)\}/g,(e,r)=>{const o=n(r.trim(),t);return String(o??"")}))}for(const s of Array.from(e.attributes)){const e=s.__originalTemplate;e&&(s.value=e.replace(/\{([^}]+)\}/g,(e,r)=>{const o=n(r.trim(),t);return null!==o&&"object"==typeof o?JSON.stringify(o):String(o??"")}))}for(const s of Array.from(e.children))Pe(s,t,n)}function Fe(e,t,n){for(const i of Array.from(e.attributes))if(i.value.includes("{")){i.__originalTemplate=i.value;const e=i.value.replace(/\{([^}]+)\}/g,(e,r)=>{const o=n(r.trim(),t);return null!==o&&"object"==typeof o?JSON.stringify(o):String(o??"")});i.value=e}!function(e,t){for(const n of h){const r=e.getAttribute(n);if(r){e.removeAttribute(n);const o=n.slice(2),s=je(r,t);s&&e.addEventListener(o,s)}}!function(e,t){const n=Array.from(e.attributes).filter(e=>A(e.name));for(const r of n){const n=v(r.name);if(!n)continue;const o=r.value;e.removeAttribute(r.name);const s=je(o,t);if(!s)continue;const i=E(s,n),a=$(n.eventModifiers);e.addEventListener(n.eventName,i,a)}}(e,t)}(e,t);const r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),o=[];let s;for(;s=r.nextNode();)s.textContent?.includes("{")&&o.push(s);for(const i of o)i.__originalTemplate=i.textContent,i.textContent=i.textContent.replace(/\{([^}]+)\}/g,(e,r)=>{const o=n(r.trim(),t);return String(o??"")});for(const i of Array.from(e.children))Fe(i,t,n)}function je(e,n){try{const r=n.__reactiveState__,o=n.__scriptContent__||"",s=Object.keys(n).filter(e=>!e.startsWith("__")),i=r?Object.keys(r).filter(e=>!e.startsWith("__")&&"function"!=typeof r[e]):[],a=s.filter(e=>!i.includes(e)&&"function"!=typeof n[e]),c=o.trim().length>0,l=s.filter(e=>"function"==typeof n[e]),u=r&&!0===r.__hasModuleScripts;let f="",p="";u?p=l.length>0?`const { ${l.join(", ")} } = context;`:"":c?f=V(o,[]):p=l.length>0?`const { ${l.join(", ")} } = context;`:"";const h=a.length>0?`const { ${a.join(", ")} } = context;`:"",d=r&&i.length>0?"reactiveState":"context",m=i.length>0?`let { ${i.join(", ")} } = ${d};`:"",g=!u&&r&&i.length>0?i.map(e=>`reactiveState.${e} = ${e};`).join(" "):"",_=t(n.__componentId__||r?.__componentId||"anonymous"),y=new Function("event","context","reactiveState","$emit","$listen",`"use strict";\n ${h}\n ${m}\n ${p}\n ${f}\n ${e};\n ${g}`);return e=>{try{y(e,n,r,_.$emit,_.$listen)}catch(t){}}}catch(r){return null}}function Ue(e,t,n){for(const r of e)r.element.parentNode&&r.element.remove();for(const r of e){let e=!1;if("else"===r.type)e=!0;else{const o=n(r.condition,t);e=Boolean(o)}if(e){r.placeholder.parentNode?.insertBefore(r.element,r.placeholder.nextSibling);break}}}function We(e,t,n,r){const o=e.element,{raw:s,path:i,isContentEditable:a}=e,c=n(s,t);ze(o,c,a);const l=i[0];r.has(l)||r.set(l,[]),r.get(l).push({element:o,path:i,isContentEditable:a}),s===l||r.has(s)||r.set(s,[]),s!==l&&r.get(s).push({element:o,path:i,isContentEditable:a});const u=function(e){if(e instanceof HTMLSelectElement)return"change";if(e instanceof HTMLInputElement){const t=e.type.toLowerCase();if("checkbox"===t||"radio"===t)return"change"}return"input"}(o);let f=!1;o.__isUpdatingFromState=()=>f,o.__setUpdatingFromState=e=>{f=e},o.addEventListener(u,()=>{if(f)return;const e=function(e,t){if(t)return e.textContent||"";if(e instanceof HTMLInputElement){const t=e.type.toLowerCase();return"checkbox"===t?e.checked:"number"===t||"range"===t?e.valueAsNumber:e.value}return e instanceof HTMLSelectElement?e.multiple?Array.from(e.selectedOptions).map(e=>e.value):e.value:e instanceof HTMLTextAreaElement?e.value:e.value??""}(o,a);!function(e,t,n){let r=e;for(let o=0;o<t.length-1;o++){const e=t[o];e in r&&"object"==typeof r[e]||(r[e]={}),r=r[e]}r[t[t.length-1]]=n}(t,i,e)})}function ze(e,t,n){if(n)e.textContent=String(t??"");else{if(e instanceof HTMLInputElement)return void("checkbox"===e.type.toLowerCase()?e.checked=Boolean(t):e.value=String(t??""));e.value=e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement?String(t??""):t}}const He=[],Be=/* @__PURE__ */new Set;let Ze=!1,qe=!1,Xe=0;const Ve=Promise.resolve();function Ge(){qe=!1,Ze=!0,He.sort((e,t)=>(e.id??0)-(t.id??0));try{for(const t of He)if(!1!==t.active)try{t()}catch(e){}}finally{He.length=0,Be.clear(),Ze=!1}}const Je=/* @__PURE__ */new Map;function Ye(e,t){const{tagName:o,template:s,scripts:i,externalScripts:a,externalStyles:c,styles:u,sourcePath:h,templateBindings:d=[]}=e,m=Y(i.map(e=>e.content).join("\n")),g=[.../* @__PURE__ */new Set([...m,...d])];class _ extends HTMLElement{static get observedAttributes(){return g}state={};_root=null;_initialized=!1;_componentId=`${o}-${Math.random().toString(36).slice(2)}`;_directives=null;_evaluator=null;_updateBoundInputs=null;constructor(){super()}async connectedCallback(){if(this._initialized)return;this._initialized=!0,S={tagName:o,sourcePath:h,instanceId:this._componentId},this._root=t?this.attachShadow({mode:"open"}):this;const{bindings:e}=((e,t)=>{e.innerHTML=t;const n=function(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null);let o;for(;o=n.nextNode();){if(f(o)||p(o))continue;const e=[...o.textContent.matchAll(r)];if(e.length>0){const n=o.textContent,r=e.map(e=>l(e[1].trim()));t.push({node:o,bindings:r,original:n})}}const s=function(e){const t=[],n=["$if","$else","$else-if","$for","$show","$bind","$ref","$no:bind"],o=Array.from(e.querySelectorAll("*"));for(const s of o)if(!(s.hasAttribute("$for")||f(s)||s.hasAttribute("$no:bind")||p(s)))for(const e of Array.from(s.attributes)){if(n.includes(e.name))continue;const o=[...e.value.matchAll(r)];if(o.length>0){const n=document.createTextNode(e.value),r=o.map(e=>l(e[1].trim()));t.push({node:n,bindings:r,original:e.value,isAttribute:!0,attributeName:e.name,element:s})}}return t}(e);return t.push(...s),t}(e);return{bindings:n,twoWayBindings:[],conditionals:[],loops:[]}})(this._root,s);((e,t,n)=>{if(!t)return;const r=document.createElement("style");r.textContent=t,n?e.appendChild(r):document.head.appendChild(r)})(this._root,u,t);const n=this._getAttributeOverrides(),m=i.filter(e=>"module"!==e.type),g=i.some(e=>"module"===e.type),_=new Proxy(/* @__PURE__ */new Map,{get(e,t,n){if(t in e){const r=Reflect.get(e,t,n);return"function"==typeof r?r.bind(e):r}if("string"==typeof t)return e.get(t)},set:(e,t,n)=>"string"==typeof t&&(e.set(t,n),!0),has:(e,t)=>"string"==typeof t&&e.has(t)||t in e});if(function(e,t){const n=Array.from(e.querySelectorAll(`[${Le(Se)}]`));for(const r of n){const e=r.getAttribute(Se);e&&t.set(e,r)}}(this._root,_),c&&c.length>0&&await async function(e,t,n){for(const o of e)if(n&&t)try{let e=de.get(o.href);if(!e){const t=await fetch(o.href);if(!t.ok)continue;e=await t.text(),de.set(o.href,e)}const n=document.createElement("style");n.textContent=e,n.setAttribute("data-external-href",o.href),t.insertBefore(n,t.firstChild)}catch(r){}else{if(document.querySelector(`link[href="${o.href}"]`))continue;await new Promise(e=>{const t=document.createElement("link");t.rel=o.rel||"stylesheet",t.href=o.href,t.onload=()=>e(),t.onerror=()=>{e()},document.head.appendChild(t)})}}(c,this._root,t),a.length>0&&await async function(e){const t=e.filter(e=>e.external);for(const r of t)try{await he(r)}catch(n){}}(a),this.state=await async function(e,t,n,r={},o,s=!1,i,a,c,l=[]){const u=H(e),f={},p=t.map(e=>e.content).join("\n");for(const[d,m]of Object.entries(r))f[d]=m;f.__scriptContent=p,f.__componentUrl=i,f.__componentId=a;const h=M(f,n,(e,t)=>ne(e,t),o);for(const d of t)J(d.content,h,i,a,u,c,l);return u.__state=h,u.__scriptContent=p,u.__componentUrl=i,u.__componentId=a,s||(B(e,h,p,u),re(n,h)),h}(this._root,m,e,n,()=>this._updateDirectives(),g,h,this._componentId,_,d),"undefined"!=typeof globalThis&&(globalThis.__ladrillosStateCallbacks||(globalThis.__ladrillosStateCallbacks=/* @__PURE__ */new Map),globalThis.__ladrillosStateCallbacks.set(this._componentId,()=>this._updateDirectives())),h){const e=await async function(e,t,n,r,o,s,i){const a={},c=e.filter(e=>"module"===e.type),l=t.filter(e=>"module"===e.type),u=t.filter(e=>"module"!==e.type);for(const p of u)try{await he(p,r,n)}catch(f){}for(const p of l)try{const e=await he(p,r,n);if(e&&"object"==typeof e)for(const[t,n]of Object.entries(e))"default"!==t&&(a[t]=n,s&&(s[t]=n))}catch(f){}for(const p of c)try{const e=await _e(p,n,r,o,s,i);Object.assign(a,e)}catch(f){}return a}(i,a,h,this._componentId,_,this.state,()=>this._updateDirectives());(g||a.length>0)&&(this.state.__hasModuleScripts=!0);for(const[t,n]of Object.entries(e))"function"==typeof n&&(this.state[t]=n)}if(g&&function(e,t,n){const r=H(e);B(e,n,r.__scriptContent||"",r),re(t,n)}(this._root,e,this.state),this._evaluator=te,this._directives=function(e,t){const n={loops:[],conditionals:[],twoWayBindings:[],refs:t,showElements:[]};return function(e,t){const n=Array.from(e.querySelectorAll(`[${Le(Se)}]`));for(const r of n){const e=r.getAttribute(Se);e&&(t.refs.set(e,r),r.removeAttribute(Se))}}(e,n),function(e,t){const n=Array.from(e.querySelectorAll(`[${Le(be)}]`));for(const r of n){const n=r.getAttribute(be);if(!n)continue;const o=Te(n);if(!o)continue;const s=document.createComment(` $for: ${n} `),i=r.parentElement||e;i.insertBefore(s,r),r.remove(),r.removeAttribute(be),t.loops.push({template:r,expression:n,itemName:o.item,indexName:o.index,arrayName:o.array,keyAttribute:o.key,placeholder:s,renderedElements:[],originalParent:i})}}(e,n),function(e,t){const n=Array.from(e.querySelectorAll(`[${Le(we)}]`));for(const r of n){if(Me(r))continue;const n=[],o=Ie(r.getAttribute(we)),s=document.createComment(` $if: ${o} `),i=r.parentElement||e,a=r.nextSibling;i.insertBefore(s,r),n.push(ke(r,o,"if",s,i,a));let c=r.nextElementSibling;for(;c;){if(!c.hasAttribute($e)){if(c.hasAttribute(ve)){n.push(ke(c,"","else",s,i,c.nextSibling)),c.remove();break}break}{const e=Ie(c.getAttribute($e)),t=c.nextElementSibling;n.push(ke(c,e,"else-if",s,i,c.nextSibling)),c.remove(),c=t}}r.remove();for(const e of n)e.group=n;t.conditionals.push(n)}}(e,n),function(e,t){const n=Array.from(e.querySelectorAll(`[${Le(Ee)}]`));for(const r of n){const e=r.getAttribute(Ee);if(!e)continue;const n=Ie(e);Me(r)||(t.showElements.push({element:r,expression:n,originalDisplay:r.style.display||""}),r.removeAttribute(Ee))}}(e,n),function(e,t){const n=Array.from(e.querySelectorAll(`[${Le(Ae)}]`));for(const r of n){const e=r.getAttribute(Ae);if(!e)continue;if(Me(r))continue;const n=e.split("."),o=r.hasAttribute("contenteditable");t.twoWayBindings.push({element:r,path:n,raw:e,isContentEditable:o}),r.removeAttribute(Ae)}}(e,n),n}(this._root,_),"undefined"!=typeof globalThis){globalThis.__ladrillosRefs||(globalThis.__ladrillosRefs=/* @__PURE__ */new Map);let e=globalThis.__ladrillosRefs.get(this._componentId);e||(e=/* @__PURE__ */new Map,globalThis.__ladrillosRefs.set(this._componentId,e));for(const[t,n]of this._directives.refs)e.set(t,n)}this.refs=this._directives.refs,this.__refs=this._directives.refs,this._updateDirectives(),this._directives.twoWayBindings.length>0&&(this._updateBoundInputs=function(e,t,n){const r=/* @__PURE__ */new Map;for(const o of e)We(o,t,n,r);return e=>{!function(e,t,n,r){const o=r?[r]:Array.from(e.keys());for(const s of o){const r=e.get(s);if(r)for(const e of r){const{element:r,path:o,isContentEditable:s}=e,i=n(o.join("."),t),a=r.__setUpdatingFromState;a&&a(!0),ze(r,i,s),a&&queueMicrotask(()=>a(!1))}}}(r,t,n,e)}}(this._directives.twoWayBindings,this.state,this._evaluator)),this.dispatchEvent(new CustomEvent("ladrillos:ready",{bubbles:!0,composed:!0,detail:{state:this.state,refs:this._directives.refs}}))}disconnectedCallback(){!function(e){const t=oe.get(e);if(t){for(const e of t)URL.revokeObjectURL(e);oe.delete(e)}}(this._componentId),n(this._componentId),function(e){const t=Je.get(e);t&&(t.active=!1,Je.delete(e))}(this._componentId),"undefined"!=typeof globalThis&&globalThis.__ladrillosStateCallbacks?.delete(this._componentId),this._initialized=!1}attributeChangedCallback(e,t,n){if(t===n)return;if(!this._initialized)return;const r=this._parseAttributeValue(n);this.state[e]=r}adoptedCallback(){}_updateDirectives(){this._directives&&this._evaluator&&function(e,t){let n=Je.get(e);n||(n=function(){const e=()=>{t()};return e.id=++Xe,e.active=!0,e}(),Je.set(e,n)),function(e){void 0===e.id&&(e.id=++Xe),Be.has(e.id)||(Be.add(e.id),He.push(e),Ze||qe||(qe=!0,Ve.then(Ge)))}(n)}(this._componentId,()=>{this._performDirectiveUpdates()})}_performDirectiveUpdates(){this._directives&&this._evaluator&&(this._directives.loops.length>0&&function(e,t,n){for(const r of e)Oe(r,t,n)}(this._directives.loops,this.state,this._evaluator),this._directives.conditionals.length>0&&function(e,t,n){for(const r of e)Ue(r,t,n)}(this._directives.conditionals,this.state,this._evaluator),this._directives.showElements.length>0&&function(e,t,n){for(const r of e){const e=n(r.expression,t),o=Boolean(e);r.element.style.display=o?r.originalDisplay:"none"}}(this._directives.showElements,this.state,this._evaluator),this._updateBoundInputs&&this._updateBoundInputs())}_getAttributeOverrides(){const e={},t=[];for(const r of Array.from(this.attributes))this._isReservedAttribute(r.name)?r.value&&""!==r.value.trim()&&t.push(r.name):e[r.name]=this._parseAttributeValue(r.value);const n=t.filter(e=>!d.includes(e));return n.length>0&&n.map(e=>{const t={title:"heading",class:"className",style:"customStyle",id:"componentId",hidden:"isHidden"}[e]||`my${e.charAt(0).toUpperCase()}${e.slice(1)}`;return`"${e}" → try "${t}"`}),e}_isReservedAttribute(e){return!d.includes(e)&&(["id","class","style","slot","part","is","tabindex","title","lang","dir","hidden","draggable","contenteditable"].includes(e.toLowerCase())||e.startsWith("data-"))}_parseAttributeValue(e){if(null===e)return null;if(""===e)return!0;if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);if(!isNaN(t)&&""!==e.trim())return t;try{const t=e.trim();if(t.startsWith("[")||t.startsWith("{"))return JSON.parse(t)}catch{}return e}get root(){return this._root}}return _}function Ke(e,t){const{tagName:n}=e;if(!customElements.get(n)){const r=Ye(e,t);customElements.define(n,r)}}const Qe=globalThis.requestIdleCallback||(e=>setTimeout(e,1)),et=globalThis.cancelIdleCallback||(e=>clearTimeout(e)),tt=(e=1e4)=>t=>{const n=Qe(t,{timeout:e});return()=>et(n)},nt=e=>(t,n)=>{if(function(e){const{top:t,left:n,bottom:r,right:o}=e.getBoundingClientRect(),{innerHeight:s,innerWidth:i}=window;return(t>0&&t<s||r>0&&r<s)&&(n>0&&n<i||o>0&&o<i)}(n))return void t();const r=new IntersectionObserver(e=>{for(const n of e)if(n.isIntersecting){r.disconnect(),t();break}},e);return r.observe(n),()=>r.disconnect()},rt=e=>t=>{if(!e)return void t();const n=matchMedia(e);if(!n.matches){const e=()=>t();return n.addEventListener("change",e,{once:!0}),()=>n.removeEventListener("change",e)}t()},ot=(e=["click","focusin"])=>{const t="string"==typeof e?[e]:e;return(e,n)=>{let r=!1;const o=t=>{r||(r=!0,s(),e(),queueMicrotask(()=>{t.target&&t.target instanceof Element&&t.target.dispatchEvent(new t.constructor(t.type,t))}))},s=()=>{for(const e of t)n.removeEventListener(e,o)};for(const i of t)n.addEventListener(i,o,{once:!0,passive:!0});return s}},st=(e=0)=>t=>{const n=setTimeout(t,e);return()=>clearTimeout(n)},it=nt({rootMargin:"100px"}),at=/* @__PURE__ */new Map;let ct;const lt=/* @__PURE__ */new Map,ut=/* @__PURE__ */new Set,ft=/* @__PURE__ */new Map;function pt(e,t,n,r){var o;ft.set(e,{name:e,absolutePath:t,useShadowDOM:n,strategy:r}),customElements.get(e)||customElements.define(e,(o=e,class extends HTMLElement{teardown;isLoading=!1;isUpgraded=!1;connectedCallback(){if(this.hasAttribute("eager"))return void this.triggerLoad();const e=ft.get(o);e?this.teardown=e.strategy(()=>this.triggerLoad(),this):this.triggerLoad()}disconnectedCallback(){this.teardown?.(),this.teardown=void 0}async triggerLoad(){if(!this.isLoading&&!this.isUpgraded){this.isLoading=!0,this.teardown?.(),this.teardown=void 0;try{const e=await ht(o);this.isUpgraded=!0,this.upgradeToRealComponent(e)}catch(e){x(0,{tagName:o}),this.isLoading=!1}}}upgradeToRealComponent(e){const t=document.createElement(e);for(const n of Array.from(this.attributes))"eager"!==n.name&&"tabindex"!==n.name&&t.setAttribute(n.name,n.value);this.parentNode?this.parentNode.replaceChild(t,this):x(0,{tagName:o})}}))}async function ht(e){const t=function(e){return`${e}--loaded`}(e);if(ut.has(e))return t;if(at.has(e))return await at.get(e),t;const n=ft.get(e);if(!n)throw new Error(`Lazy component "${e}" not registered`);const r=(async()=>{const r=await c(n.absolutePath);if(!r)throw new Error(`Failed to fetch component source for "${e}"`);const o=await s(r.source,e,r.resolvedPath);ct[e]=o;const i=Ye(o,n.useShadowDOM);return customElements.get(t)||customElements.define(t,i),ut.add(e),lt.set(e,{component:o,useShadowDOM:n.useShadowDOM}),o})();at.set(e,r);try{return await r,t}finally{at.delete(e)}}function dt(e){return ft.has(e)||ut.has(e)}async function mt(e){return ft.has(e)&&await ht(e),ct[e]}const gt=new class{components;constructor(){this.components={},ct=this.components}async registerComponent(e,t,n=!0,r=!1){if(this.components[e])return;const o=new URL(t,window.location.href).href;if(r)pt(e,o,n,!0===r?it:r);else try{const t=await c(o);if(!t)throw new Error(`Failed to fetch component source from ${o}`);const r=await s(t.source,e,t.resolvedPath);this.components[e]=r,Ke(r,n)}catch(i){x(0,{tagName:e,sourcePath:t})}}async registerComponents(e){const t=Array.isArray(e)?e:Object.entries(e).map(([e,t])=>"string"==typeof t?{name:e,path:t}:{name:e,...t}),n={success:[],failed:[],skipped:[]},r=[],o=[];for(const s of t){if(this.components[s.name]){n.skipped.push(s.name);continue}const e=new URL(s.path,window.location.href).href,t={...s,absolutePath:e};s.lazy?r.push(t):o.push(t)}for(const s of r)try{pt(s.name,s.absolutePath,s.useShadowDOM??!0,!0===s.lazy?it:s.lazy),n.success.push(s.name)}catch(l){n.failed.push({name:s.name,error:l instanceof Error?l:new Error(String(l))})}if(0===o.length)return n;const i=await Promise.allSettled(o.map(async e=>({config:e,result:await c(e.absolutePath)}))),a=await Promise.allSettled(i.map(async(e,t)=>{if("rejected"===e.status)throw e.reason;const{config:n,result:r}=e.value;if(!r)throw new Error(`Failed to fetch component source from ${n.absolutePath}`);return{config:n,component:await s(r.source,n.name,r.resolvedPath)}}));for(let s=0;s<a.length;s++){const e=a[s],t=o[s];if("rejected"===e.status){n.failed.push({name:t.name,error:e.reason instanceof Error?e.reason:new Error(String(e.reason))});continue}const{component:r}=e.value,i=t.useShadowDOM??!0;this.components[t.name]=r;try{Ke(r,i),n.success.push(t.name)}catch(l){n.failed.push({name:t.name,error:l instanceof Error?l:new Error(String(l))}),delete this.components[t.name]}}return n}async loadLazyComponent(e){return mt(e)}};export{z as $,st as a,ot as b,rt as c,nt as d,tt as e,W as f,U as g,it as h,mt as i,dt as j,gt as l};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ladrillosjs",
3
- "version": "2.0.0-beta.5",
3
+ "version": "2.0.0-beta.6",
4
4
  "description": "A lightweight, zero-dependency web component framework for building modular web applications.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -9,20 +9,36 @@
9
9
  ".": {
10
10
  "types": "./dist/index.d.ts",
11
11
  "default": "./dist/index.js"
12
+ },
13
+ "./core": {
14
+ "types": "./dist/core.d.ts",
15
+ "default": "./dist/core.js"
16
+ },
17
+ "./lazy": {
18
+ "types": "./dist/lazy.d.ts",
19
+ "default": "./dist/lazy.js"
20
+ },
21
+ "./events": {
22
+ "types": "./dist/events.d.ts",
23
+ "default": "./dist/events.js"
12
24
  }
13
25
  },
14
26
  "files": [
15
- "dist/index.js",
16
- "dist/index.d.ts"
27
+ "dist/*.js",
28
+ "dist/*.d.ts"
17
29
  ],
18
30
  "scripts": {
19
31
  "build": "vite build --config vite.npm.config.ts",
20
32
  "build:dev": "tsc -p tsconfig.json",
21
33
  "dev": "tsc -p tsconfig.json -w",
22
34
  "build:cdn": "vite build --config vite.cdn.config.ts",
23
- "watch:cdn": "vite build --config vite.cdn.config.ts --watch",
35
+ "build:cdn:dev": "vite build --config vite.cdn.dev.config.ts",
36
+ "watch:cdn": "vite build --config vite.cdn.dev.config.ts --watch",
24
37
  "serve:cdn": "npx serve dist-cdn -p 3000 --cors",
25
38
  "dev:cdn": "concurrently \"npm run watch:cdn\" \"npm run serve:cdn\"",
39
+ "dev:dotnet": "concurrently \"npm run dev:cdn\" \"cd samples/dotnet-sample && dotnet watch run\"",
40
+ "verify:build": "node scripts/verify-treeshaking.js",
41
+ "build:all": "npm run build && npm run build:cdn && npm run verify:build",
26
42
  "test": "echo \"Error: no test specified\" && exit 1"
27
43
  },
28
44
  "workspaces": [
@@ -39,7 +55,9 @@
39
55
  },
40
56
  "homepage": "https://github.com/drubiodev/LadrillosJS#readme",
41
57
  "devDependencies": {
58
+ "@swc/core": "^1.15.8",
42
59
  "concurrently": "^9.2.1",
60
+ "source-map-explorer": "^2.5.3",
43
61
  "terser": "^5.44.1",
44
62
  "typescript": "~5.9.3",
45
63
  "vite": "^7.2.7",