ilha 0.8.3 → 0.8.4

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.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2,4 +2,4 @@ import{effect as e,endBatch as t,setActiveSub as n,signal as r,startBatch as i}f
2
2
  `)}`);return n.value}const y={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`};function b(e){return String(e).replace(/[&<>"']/g,e=>y[e])}function x(e){if(e.length===0||e[0]!==`
3
3
  `)return e;let t=e.split(`
4
4
  `);for(;t.length&&t[0].trim()===``;)t.shift();for(;t.length&&t[t.length-1].trim()===``;)t.pop();if(!t.length)return``;let n=Math.min(...t.filter(e=>e.trim()!==``).map(e=>e.match(/^(\s*)/)[1].length));return t.map(e=>e.slice(n)).join(`
5
- `)}const S=Symbol.for(`ilha.raw`),C=Symbol.for(`ilha.signalAccessor`),w=Symbol.for(`ilha.island`),T=Symbol.for(`ilha.islandCall`),E=Symbol.for(`ilha.islandMountInternal`),D=Symbol.for(`ilha.islandSlotTag`),O=`data-ilha-slot`,k=`data-ilha-props`,A=`data-ilha-state`;function j(e){return`<style data-ilha-css>@scope (:scope) to ([data-ilha]){${e.replace(/<\/style/gi,`<\\/style`)}}</style>`}const M=[];function N(e,t){let n={slots:new Map,positional:0,liveHost:e,pending:t?new Map:void 0,binds:[],slotTags:new Map};return M.push(n),n}function P(){M.pop()}function F(){return M[M.length-1]}function ae(e){return typeof e==`function`?w in e?!0:Object.getOwnPropertySymbols(e).some(e=>e.description===`ilha.island`):!1}function I(e){if(e==null||typeof e!=`object`&&typeof e!=`function`)return!1;if(T in e||Object.getOwnPropertySymbols(e).some(e=>e.description===`ilha.islandCall`))return!0;if(typeof e==`object`&&`island`in e){let t=e.island;return typeof t==`function`&&(w in t||Object.getOwnPropertySymbols(t).some(e=>e.description===`ilha.island`))}return!1}function L(e,t,n){let r=F(),i;i=n===void 0?r?`p:${r.positional++}`:`p:0`:`k:${n}`,r&&r.slots.set(i,{island:e,props:t});let a=p(e);r&&r.slotTags.set(i,a);let o=t?` ${k}='${b(JSON.stringify(t))}'`:``;if(r?.liveHost)return m(a,i,o,``);if(r?.pending){P();try{let n=e(t);return n instanceof Promise?(r.pending.set(i,n.then(String)),m(a,i,o,``)):m(a,i,o,String(n))}finally{M.push(r)}}let s=e.toString(t);return m(a,i,o,s)}async function R(e,t){for(let[n,r]of t.pending){let i=await r,a=t.slotTags.get(n)??`div`,o=b(n);if(o.length>500)throw Error(`Slot id exceeds safe length for regex replacement (${o.length} > 500).`);let s=o.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),c=a.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),l=RegExp(`<${c}\\s[^>]*${O}="${s}"[^>]*></${c}>`,`g`);e=e.replace(l,e=>{let t=`></${a}>`;return e.slice(0,-t.length)+`>${i}</${a}>`})}return e}function z(e){e[C]=!0;let t=e;return t.select=e=>G(t,e),t}function B(e){return typeof e==`function`?C in e?!0:Object.getOwnPropertySymbols(e).some(e=>e.description===`ilha.signalAccessor`):!1}function V(e,t){let n=e;for(let e of t){if(n==null)return;n=n[e]}return n}function H(e,t,n){if(t.length===0)return n;let[r,...i]=t;if(Array.isArray(e)){let t=r;if(t<0||t>=e.length)return e;let a=e[t],o=i.length===0?n:H(a,i,n);if(Object.is(a,o))return e;let s=e.slice();return s[t]=o,s}if(typeof e==`object`&&e){let t=e,a=String(r),o=t[a],s=i.length===0?n:H(o,i,n);if(i.length===0){if(Object.is(o,n))return e}else if(Object.is(o,s))return e;return{...t,[a]:s}}return i.length===0?n:H(void 0,i,n)}function U(e){return typeof e==`symbol`||e===`length`?null:/^\d+$/.test(e)?Number(e):e}function W(e,t){let n=[],r=e=>e===null||typeof e!=`object`&&typeof e!=`function`?e:new Proxy(e,{get(e,t,i){let a=U(t);a!=null&&n.push(a);let o=Reflect.get(e,t,i);return a!=null&&typeof o==`object`&&o?r(o):o}});return t(r(e)),n}function G(e,t){let n=W(e(),t),r=t(e()),i=n.length===0?e():V(e(),n);if(!Object.is(r,i))throw Error(`select(): selector must only traverse nested properties or array indexes — derived or transformed values are not supported.`);return z((...r)=>{if(r.length===0)return n.length===0?t(e()):V(e(),n);let i=n.length===0?r[0]:H(e(),n,r[0]);Object.is(e(),i)||e(i)})}function K(e){return{[S]:!0,value:e}}function q(e,...t){if(typeof e==`string`)return e;let n=``;for(let r=0;r<e.length;r++)n+=e[r],r<t.length&&(n+=String(t[r]));return n}function J(e){if(e==null||e===!0||e===!1)return``;if(Array.isArray(e))return e.map(J).join(``);if(Q(e))return e.value;if(I(e)){let t=typeof e==`function`?e():e;return L(t.island,t.props,t.key)}return ae(e)?L(e,void 0,void 0):B(e)||typeof e==`function`?b(e()):b(e)}const Y=new Set([`value`,`checked`,`valueAsNumber`,`valueAsDate`,`files`,`open`,`group`,`this`]),X=/\bbind:([a-zA-Z]+)\s*=\s*("|')?$/;function Z(e){if(e instanceof Date){if(isNaN(e.getTime()))return``;let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}return``}function oe(e){let t=e.lastIndexOf(`<`);if(t===-1)return null;let n=e.slice(t);if(n.includes(`>`))return null;let r=n.match(/\bvalue\s*=\s*("([^"]*)"|'([^']*)'|([^\s>]+))/);return r?r[2]??r[3]??r[4]??null:null}function se(e,t,n,r){let i=`${e}:${t}`,a;try{a=n()}catch{a=void 0}switch(e){case`value`:return[` value="${b(a??``)}"`,i];case`valueAsNumber`:return[` value="${b(a==null?``:String(a))}"`,i];case`valueAsDate`:return[` value="${b(Z(a))}"`,i];case`checked`:return[a?` checked`:``,i];case`open`:return[a?` open`:``,i];case`files`:return[``,i];case`this`:return[``,i];case`group`:{let e=oe(r);return e==null?[``,i]:[(Array.isArray(a)?a.map(String).includes(e):a!=null&&String(a)===e)?` checked`:``,i]}}}function ce(e,...t){let n=``,r=null,i=``,a=F();for(let o=0;o<e.length;o++){let s=e[o];if(r!==null&&(s.startsWith(r)&&(s=s.slice(1)),r=null),i!==``){let e=s.indexOf(`>`);e!==-1&&(s=s.slice(0,e)+` data-ilha-bind="${i}">`+s.slice(e+1),i=``)}if(o>=t.length){n+=s;continue}let c=t[o],l=s.match(X);if(l&&B(c)){let e=l[1],t=l[2]??null;if(!Y.has(e)){n+=s+J(c);continue}if(!a){let i=s.slice(0,s.length-l[0].length),a=t??`"`;n+=i+e+`=`+a+J(c)+a,t&&(r=t);continue}let o=s.length-l[0].length,u=s.slice(0,o).replace(/\s+$/,``),d=a.binds.length;a.binds.push({kind:e,accessor:c});let[f,p]=se(e,d,c,u);n+=u+f,i+=(i?`,`:``)+p,t&&(r=t);continue}n+=s+J(c)}return i!==``&&(n+=` data-ilha-bind="${i}"`),{[S]:!0,value:x(n)}}function Q(e){return typeof e!=`object`||!e||!(`value`in e)||typeof e.value!=`string`?!1:S in e?!0:Object.getOwnPropertySymbols(e).some(e=>e.description===`ilha.raw`)}function le(e){return Q(e)?e.value:e}const ue=new Map;function de(e,t){if(ue.has(e))return ue.get(e);let n=r(t),i=(...e)=>{if(e.length===0)return n();n(e[0])};return ue.set(e,i),i}function fe(e){let t=r(e);return z((...e)=>{if(e.length===0)return t();t(e[0])})}function pe(e){let t=n(void 0);try{return e()}finally{n(t)}}function me(e){i();try{return e()}finally{t()}}function he(e,t){let n=z((...n)=>{if(n.length>0){t&&t(n[0]);return}return e().value});return new Proxy(n,{get(t,n,r){return n===`loading`||n===`value`||n===`error`?e()[n]:Reflect.get(t,n,r)}})}function ge(){return he(()=>({loading:!1,value:void 0,error:void 0}))}function _e(e){let t=new Map;for(let[n,r]of Object.entries(e))t.set(n,he(()=>r,e=>{r.loading=!1,r.value=e,r.error=void 0}));return new Proxy({},{get(e,n){return t.get(n)??ge()}})}function ve(t,i,a,o){let s=new Map;for(let e of t){let t;if(o!=null&&e.key in o)t={...o[e.key]};else if(e.fn.constructor.name===`AsyncFunction`||e.fn.constructor.name===`AsyncGeneratorFunction`)t={loading:!0,value:void 0,error:void 0};else{let n=new AbortController;try{let r=e.fn({state:i,input:a,signal:n.signal});r instanceof Promise?(t={loading:!0,value:void 0,error:void 0},r.catch(()=>{})):t={loading:!1,value:r,error:void 0}}catch(e){t={loading:!1,value:void 0,error:e instanceof Error?e:Error(String(e))}}finally{n.abort()}}let n=r(t);s.set(e.key,n)}let c=new Map;for(let e of t){let t=s.get(e.key);c.set(e.key,he(()=>t(),e=>{let r=n(void 0);t({loading:!1,value:e,error:void 0}),n(r)}))}return{proxy:new Proxy({},{get(e,t){return c.get(t)??ge()}}),setup:()=>{let r=[];for(let c of t){let t=s.get(c.key),l=new AbortController,u=o!=null&&c.key in o,d=e(()=>{l.abort(),l=new AbortController;let e=l,r;try{r=c.fn({state:i,input:a,signal:e.signal})}catch(e){if(u){u=!1;return}let r=n(void 0);t({loading:!1,value:void 0,error:e instanceof Error?e:Error(String(e))}),n(r);return}if(u){u=!1,r instanceof Promise&&r.catch(()=>{});return}if(!(r instanceof Promise)){let e=n(void 0);t({loading:!1,value:r,error:void 0}),n(e);return}let o=n(void 0);t({loading:!0,value:t().value,error:void 0}),n(o),r.then(n=>{e.signal.aborted||t({loading:!1,value:n,error:void 0})}).catch(n=>{e.signal.aborted||t({loading:!1,value:void 0,error:n instanceof Error?n:Error(String(n))})})});r.push(()=>{d(),l.abort()})}return()=>r.forEach(e=>e())}}}const ye=`data-ilha-bind`;function be(e){let t=[];for(let n of e.split(`,`)){let[e,r]=n.split(`:`);if(!e||!r)continue;let i=Number(r);!Number.isInteger(i)||i<0||t.push({kind:e,index:i})}return t}function xe(e,t){let n=e;switch(t){case`value`:return{event:e.tagName===`SELECT`?`change`:`input`,read:e=>e.value,write:(e,t)=>e.value=t==null?``:String(t)};case`valueAsNumber`:return{event:`input`,read:e=>{let t=e.valueAsNumber;return Number.isNaN(t)?null:t},write:(e,t)=>e.value=t==null||Number.isNaN(t)?``:String(t)};case`valueAsDate`:return{event:`input`,read:e=>e.valueAsDate,write:(e,t)=>{e.value=Z(t)}};case`checked`:return{event:`change`,read:e=>e.checked,write:(e,t)=>e.checked=!!t};case`files`:return{event:`change`,read:e=>e.files,write:()=>{}};case`open`:return{event:`toggle`,read:e=>e.open,write:(e,t)=>e.open=!!t};case`this`:return{event:null,read:()=>void 0,write:()=>{}};case`group`:{let e=n.type===`checkbox`;return{event:`change`,read:t=>{let n=t;return e?{__ilhaGroup:!0,value:n.value,checked:n.checked}:n.checked?n.value:void 0},write:(t,n)=>{let r=t;e?r.checked=(Array.isArray(n)?n.map(String):[]).includes(r.value):r.checked=n!=null&&String(n)===r.value}}}}}function Se(e,t){if(t.length===0)return()=>{};let n=[],r=[];e.hasAttribute(ye)&&r.push(e);for(let t of e.querySelectorAll(`[${ye}]`))r.push(t);for(let e of r){let r=be(e.getAttribute(ye));for(let i of r){let r=t[i.index];if(!r||r.kind!==i.kind)continue;let{event:a,read:o,write:s}=xe(e,i.kind),c=r.accessor;if(i.kind===`this`){c(e),n.push(()=>c(null));continue}try{s(e,c())}catch{}if(a===null)continue;let l=()=>{let t=o(e);if(i.kind===`group`){let e=t;if(e===void 0)return;if(typeof e==`object`&&e.__ilhaGroup){let t=c(),n=Array.isArray(t)?[...t]:[],r=n.findIndex(t=>String(t)===e.value);if(e.checked&&r===-1){let r=e.value,i=Array.isArray(t)&&t.length>0?t[0]:void 0;if(i!==void 0)if(typeof i==`number`){let e=Number(r);r=Number.isNaN(e)?r:e}else typeof i==`boolean`&&(r=!!r);n.push(r)}else !e.checked&&r!==-1&&n.splice(r,1);c(n);return}let n=c(),r=e;if(typeof n==`number`&&typeof e==`string`){let t=Number(e);r=Number.isNaN(t)?0:t}else typeof n==`boolean`&&(r=!!e);c(r);return}let n=c(),r=t;if(typeof n==`number`&&typeof t==`string`){let e=Number(t);r=Number.isNaN(e)?0:e}else typeof n==`boolean`&&(r=!!t);c(r)};e.addEventListener(a,l),n.push(()=>e.removeEventListener(a,l))}}return()=>n.forEach(e=>e())}function Ce(e){let t=e.lastIndexOf(`@`),n=t===-1?``:e.slice(0,t),r=(t===-1?e:e.slice(t+1)).split(`:`),i=r[0],a=new Set(r.slice(1));return{selector:n,eventType:i,options:{once:a.has(`once`),capture:a.has(`capture`),passive:a.has(`passive`)},abortable:a.has(`abortable`)}}function we(e){if(typeof AbortSignal.any==`function`)return AbortSignal.any(e);let t=new AbortController,n=[];for(let r of e){if(r.aborted)return t.abort(r.reason),n.forEach(e=>e()),t.signal;let e=()=>t.abort(r.reason);r.addEventListener(`abort`,e,{once:!0}),n.push(()=>r.removeEventListener(`abort`,e))}return t.signal.aborted||t.signal.addEventListener(`abort`,()=>{n.forEach(e=>e())}),t.signal}const $=new Set;function Te(e,t){if($.size===0)return!1;for(let n of $)try{n(e,t)}catch(e){console.error(e)}return!0}function Ee(e){return $.add(e),()=>{$.delete(e)}}var De=class a{_cfg;constructor(e){this._cfg=e}input(e){let t=null,n=null;return e!==void 0&&(v(e)?t=e:n=e),new a({schema:t,defaultInput:n,states:[],deriveds:[],ons:[],effects:[],onMounts:[],onErrors:[],transition:null,css:null,as:null})}as(e){return new a({...this._cfg,as:f(e)})}state(e,t){let n=this._cfg;return new a({...n,states:[...n.states,{key:e,init:t}]})}derived(e,t){let n=this._cfg;return new a({...n,deriveds:[...n.deriveds,{key:e,fn:t}]})}on(e,t){let n=Ce(e);return new a({...this._cfg,ons:[...this._cfg.ons,{selector:n.selector,event:n.eventType,options:n.options,abortable:n.abortable,handler:t}]})}effect(e){return new a({...this._cfg,effects:[...this._cfg.effects,{fn:e}]})}onMount(e){return new a({...this._cfg,onMounts:[...this._cfg.onMounts,{fn:e}]})}onError(e){return new a({...this._cfg,onErrors:[...this._cfg.onErrors,{fn:e}]})}transition(e){return new a({...this._cfg,transition:e})}css(e,...t){let n;if(typeof e==`string`)n=e;else{let r=``;for(let n=0;n<e.length;n++)r+=e[n],n<t.length&&(r+=String(t[n]));n=r}return new a({...this._cfg,css:n})}render(a){let{schema:o,defaultInput:l,states:u,deriveds:d,ons:p,effects:m,onMounts:ne,onErrors:h,transition:g,css:_,as:v}=this._cfg,y=_==null?``:j(_),x=v??`div`;function S(e){let t={...l??{},...e??{}};return o?ie(o,t):t}function C(e,t,n){let r=N(t,n);try{let t=le(e()),n=r.slots,i=r.binds;if(r.pending&&r.pending.size>0){let e=r.pending,a=r.slotTags;return(async()=>({html:await R(t,{pending:e,slotTags:a}),slots:n,binds:i}))()}return{html:t,slots:n,binds:i}}finally{P()}}function M(e){let t={};for(let n of u){let r=typeof n.init==`function`?n.init(e):n.init,i=z((...e)=>{if(e.length===0)return r});t[n.key]=i}return t}function ae(e,t){let n={};for(let i of u){let a=r(t&&i.key in t?t[i.key]:typeof i.init==`function`?i.init(e):i.init),o=z((...e)=>{if(e.length===0)return a();a(e[0])});n[i.key]=o}return n}function I(e,t=!1){let r=S(e),i=M(r),o=d.map(e=>{let t=n(void 0);try{return{key:e.key,result:e.fn({state:i,input:r,signal:new AbortController().signal})}}catch(t){return{key:e.key,result:Promise.reject(t)}}finally{n(t)}});if(!o.some(e=>e.result instanceof Promise)||t){let e={};for(let t of o)t.result instanceof Promise?e[t.key]={loading:!0,value:void 0,error:void 0}:e[t.key]={loading:!1,value:t.result,error:void 0};let t=_e(e),s=n(void 0);try{let{html:e}=C(()=>a({state:i,derived:t,input:r}));return y+e}finally{n(s)}}return Promise.all(o.map(async e=>{try{return{key:e.key,envelope:{loading:!1,value:await Promise.resolve(e.result),error:void 0}}}catch(t){return{key:e.key,envelope:{loading:!1,value:void 0,error:t instanceof Error?t:Error(String(t))}}}})).then(async e=>{let t={};for(let n of e)t[n.key]=n.envelope;let o=_e(t),s=n(void 0);try{let{html:e}=await C(()=>a({state:i,derived:o,input:r}),void 0,!0);return y+e}finally{n(s)}})}function L(e,t){return B(e,t).unmount}function B(o,l){if(l===void 0){let e=o.getAttribute(k);if(e){let t=s(e,k);t!==void 0&&(l=t)}}let u=r(S(l)),f=new Proxy({},{get(e,t){return u()[t]},has(e,t){return t in u()},ownKeys(){let e=n(void 0);try{return Reflect.ownKeys(u())}finally{n(e)}},getOwnPropertyDescriptor(e,t){let r=n(void 0);try{return Reflect.getOwnPropertyDescriptor(u(),t)}finally{n(r)}}}),_,v=o.getAttribute(A);if(v){let e=s(v,A);e!==void 0&&(_=e)}let ie=_?Object.fromEntries(Object.entries(_).filter(([e])=>e!==`_derived`&&e!==`_skipOnMount`)):void 0,b=_?._derived,x;if(b){x={};for(let[e,t]of Object.entries(b))t.error&&!(t.error instanceof Error)?x[e]={...t,error:Error(String(t.error))}:x[e]=t}let w=_!=null,T=w&&_?._skipOnMount===!0,D=ae(f,ie),j=[],M=new AbortController;j.push(()=>M.abort());let{proxy:N,setup:P}=ve(d,D,f,x),F=()=>{};function I(e,t){let n=e instanceof Error?e:Error(String(e));if(h.length===0){Te(n,t)||console.error(n);return}for(let e of h)try{e.fn({error:n,source:t,state:D,derived:N,input:f,host:o})}catch(e){console.error(e)}}if(g?.enter)try{let e=g.enter(o);e instanceof Promise&&e.catch(e=>I(e,`transition`))}catch(e){I(e,`transition`)}let L=new Map,R=new Map;function z(e,t){L.delete(e);let n=Symbol(),r=t.unmount(),i=t=>{let r=R.get(e);!r||r.token!==n||(r.el.remove(),t?.remove(),R.delete(e))};if(r instanceof Promise)return R.set(e,{el:t.el,token:n}),r.finally(()=>i());t.el.remove()}function B(e){let t=e;for(;t&&t!==o;){if(t.hasAttribute(`data-ilha`))return!1;t=t.parentElement}return t===o}function V(){let e=new Set([...R.values()].map(e=>e.el)),t=new Map;for(let n of o.querySelectorAll(`[${O}]`)){if(e.has(n))continue;let r=n.getAttribute(O);r===null||t.has(r)||B(n)&&t.set(r,n)}return t}function H(e){for(let[t,n]of L)e.has(t)||z(t,n);let t=null;for(let[r,{island:i,props:a}]of e){let e=L.get(r);if(e){e.updateProps(a);continue}t===null&&(t=V());let o=t.get(r)??null;if(!o)continue;let c=a;if(c===void 0){let e=o.getAttribute(k)??o.getAttribute(`data-props`);if(e){let t=s(e,`props on [${O}="${r}"]`);t!==void 0&&(c=t)}}let l=n(void 0),u;try{let e=i[E];u=e?e(o,c):{unmount:i.mount(o,c),updateProps:()=>{}}}finally{n(l)}L.set(r,{el:o,...u})}}let U=[],W=new Set,G=new WeakMap;function K(){for(let e of p)e.options.once&&W.has(e)||(e.selector===``?[o]:Array.from(o.querySelectorAll(e.selector))).forEach(n=>{let r=r=>{if(e.options.once){W.add(e);for(let t of U.filter(t=>t.entry===e))t.target.removeEventListener(t.type,t.fn,t.options);U.splice(0,U.length,...U.filter(t=>t.entry!==e))}let a=r.target instanceof Element?r.target:n,s=e.selector===``?a:n,c;if(e.abortable){let t=G.get(e);t||(t=new WeakMap,G.set(e,t));let r=t.get(n);r&&r.abort();let i=new AbortController;t.set(n,i),c=we([M.signal,i.signal])}else c=M.signal;let l;i();try{l=e.handler({state:D,derived:N,input:f,host:o,target:s,event:r,signal:c})}catch(e){I(e,`on`),t();return}t(),l instanceof Promise&&l.catch(e=>{e&&e.name===`AbortError`||I(e,`on`)})},a={...e.options,once:!1};n.addEventListener(e.event,r,a),U.push({target:n,type:e.event,fn:r,options:a,entry:e})})}function q(){for(let e of U)e.target.removeEventListener(e.type,e.fn,e.options);U.length=0}let J=w&&o.childNodes.length>0,Y=C(()=>a({state:D,derived:N,input:f}),J?o:void 0);J||(o.innerHTML=y+Y.html);let X=Se(o,Y.binds);if(j.push(()=>X()),H(Y.slots),j.push(()=>L.forEach(e=>e.unmount())),K(),!T)for(let e of ne){let t=n(void 0),r;try{r=e.fn({state:D,derived:N,input:f,host:o,hydrated:w})}catch(e){I(e,`mount`)}finally{n(t)}if(r){let e=r;j.push(()=>{try{e()}catch(e){I(e,`mount`)}})}}for(let n of m){let r,a=null,s=e(()=>{if(r){try{r()}catch(e){I(e,`effect`)}r=void 0}a&&a.abort(),a=new AbortController;let e=we([M.signal,a.signal]);i();try{r=n.fn({state:D,derived:N,input:f,host:o,signal:e})}catch(e){I(e,`effect`)}finally{t()}});j.push(()=>{if(s(),r)try{r()}catch(e){I(e,`effect`)}a&&a.abort()})}F=P(),j.push(F);let Z=!1,oe=Y.html,se=0,ce=e(()=>{let e=++se,{html:t,slots:n,binds:r}=C(()=>a({state:D,derived:N,input:f}),o),i=y+t;if(!Z&&(Z=!0,t===oe||L.size>0&&L.size===n.size&&[...n.keys()].every(e=>L.has(e))&&ee(oe,t,n.keys())))return;q(),X();let s=L.size,c=[];for(let[e,t]of L)if(!n.has(e)){let n=z(e,t);n instanceof Promise&&c.push(n)}let l=()=>{if(e!==se)return;let t=new Map,a=n.size<s;for(let[e,r]of L){if(!n.has(e)||!r.el.isConnected)continue;if(a&&e.startsWith(`p:`)){z(e,r);continue}let i=r.el.tagName.toLowerCase(),o=document.createElement(i);o.setAttribute(O,e);let s=te(n.get(e)?.props);s!==``&&o.setAttribute(k,s),r.el.replaceWith(o),t.set(e,r.el)}let c=document.createElement(`template`),l=o.tagName.toLowerCase();if(c.innerHTML=`<${l}>${i}</${l}>`,re(o,c.content.firstElementChild),t.size>0){let e=V();for(let[n,r]of t){let t=e.get(n);t&&t.replaceWith(r)}}K(),X=Se(o,r),H(n)};c.length>0?Promise.allSettled(c).then(e=>{for(let t of e)t.status===`rejected`&&console.error(t.reason);l()}):l()}),Q=!1;return{unmount:()=>{if(Q)return;Q=!0,ce(),q();let e=[];for(let[,t]of L){let n=t.unmount();n instanceof Promise&&e.push(n)}if(g?.leave)try{let t=g.leave(o);t instanceof Promise&&e.push(t)}catch(e){I(e,`transition`)}let t=()=>{for(let e of j)e()};if(e.length>0)return Promise.all(e).then(t).catch(e=>{I(e,`transition`),t()});t()},updateProps:e=>{if(Q)return;let t=S(e);c(u(),t)||u(t)}}}let V=function(e){return F()?{[T]:!0,island:V,props:e,key:void 0}:I(e)};return V.toString=e=>I(e,!0),V.mount=(e,t)=>L(e,t),V[E]=(e,t)=>B(e,t),V[D]=x,V.key=e=>{if(typeof e!=`string`||e.trim().length===0)throw Error(`island.key() requires a non-empty string.`);if(e.includes(`:`))throw Error(`island.key() key cannot contain the slot separator ":" (got "${e}").`);let t=(t=>({[T]:!0,island:V,props:t,key:e}));return t[T]=!0,t},V[w]=!0,V.hydratable=async(e,t)=>{let{name:r,as:i=`div`,snapshot:a=!1,skipOnMount:o}=t,s=f(i),c=e??{},l=await I(c),p=b(JSON.stringify(c)),m=``;if(a!==!1){let e=a===!0||a.state!==!1,t=a===!0||a.derived!==!1,r=o??(e||t),i={},s=S(c),l=M(s);if(e)for(let e of u)i[e.key]=l[e.key]();if(t){let e={};for(let t of d){let r=n(void 0),i,a,o=!1;try{i=t.fn({state:l,input:s,signal:new AbortController().signal})}catch(e){o=!0,a=e}finally{n(r)}if(o){e[t.key]={loading:!1,value:void 0,error:a instanceof Error?a.message:String(a)};continue}try{let n=await Promise.resolve(i);e[t.key]={loading:!1,value:n,error:void 0}}catch(n){e[t.key]={loading:!1,value:void 0,error:n instanceof Error?n.message:String(n)}}}i._derived=e}r&&(i._skipOnMount=!0),m=` ${A}='${b(JSON.stringify(i))}'`}return`<${s} data-ilha="${b(r)}" ${k}='${p}'${m}>${l}</${s}>`},V}};function Oe(e,t,n){let r=typeof e==`string`?document.querySelector(e):e;return r?t.mount(r,n):(console.warn(`[ilha] from(): element not found: ${e}`),null)}function ke(e,t={}){let n=t.root??document.body,r=t.lazy??!1,i=[];function a(t){let n=t.getAttribute(`data-ilha`);if(!n)return;let r=e[n];if(!r){`${n}${Object.keys(e).join(`, `)}`;return}let a={},o=t.getAttribute(k);if(o){let e=s(o,`${k} on [data-ilha="${n}"]`);e!==void 0&&(a=e)}i.push(r.mount(t,a))}let o=Array.from(n.querySelectorAll(`[data-ilha]`));if(r&&typeof IntersectionObserver<`u`){let e=!1,t=new IntersectionObserver(n=>{if(!e)for(let e of n)e.isIntersecting&&(a(e.target),t.unobserve(e.target))});o.forEach(e=>t.observe(e)),i.push(()=>{e=!0,t.disconnect()})}else o.forEach(a);return{unmount:()=>{let e=[];for(let t of i){let n=t();n instanceof Promise&&e.push(n)}if(e.length>0)return Promise.all(e).then(()=>{})}}}const Ae=new De({schema:null,defaultInput:null,states:[],deriveds:[],ons:[],effects:[],onMounts:[],onErrors:[],transition:null,css:null,as:null}),je=Object.assign(Ae,{html:ce,raw:K,mount:ke,from:Oe,context:de,signal:fe,batch:me,untrack:pe,onUncaughtError:Ee});function Me(e,t,n){return K(L(e,t,n))}const Ne=ce,Pe=K,Fe=q,Ie=ke,Le=Oe,Re=de;export{E as ISLAND_MOUNT_INTERNAL,Me as __ilhaJsxSlot,me as batch,Re as context,Fe as css,je as default,Le as from,Ne as html,fe as ilhaSignal,fe as signal,Ie as mount,Ee as onUncaughtError,Pe as raw,pe as untrack};
5
+ `)}const S=Symbol.for(`ilha.raw`),C=Symbol.for(`ilha.signalAccessor`),w=Symbol.for(`ilha.island`),T=Symbol.for(`ilha.islandCall`),E=Symbol.for(`ilha.islandMountInternal`),D=Symbol.for(`ilha.islandSlotTag`),O=`data-ilha-slot`,k=`data-ilha-props`,A=`data-ilha-state`;function j(e){return`<style data-ilha-css>@scope (:scope) to ([data-ilha]){${e.replace(/<\/style/gi,`<\\/style`)}}</style>`}const M=[];function N(e,t){let n={slots:new Map,positional:0,liveHost:e,pending:t?new Map:void 0,binds:[],slotTags:new Map};return M.push(n),n}function P(){M.pop()}function F(){return M[M.length-1]}function ae(e){return typeof e==`function`?w in e?!0:Object.getOwnPropertySymbols(e).some(e=>e.description===`ilha.island`):!1}function I(e){if(e==null||typeof e!=`object`&&typeof e!=`function`)return!1;if(T in e||Object.getOwnPropertySymbols(e).some(e=>e.description===`ilha.islandCall`))return!0;if(typeof e==`object`&&`island`in e){let t=e.island;return typeof t==`function`&&(w in t||Object.getOwnPropertySymbols(t).some(e=>e.description===`ilha.island`))}return!1}function L(e,t,n){let r=F(),i;i=n===void 0?r?`p:${r.positional++}`:`p:0`:`k:${n}`,r&&r.slots.set(i,{island:e,props:t});let a=p(e);r&&r.slotTags.set(i,a);let o=t?` ${k}='${b(JSON.stringify(t))}'`:``;if(r?.liveHost)return m(a,i,o,``);if(r?.pending){P();try{let n=e(t);return n instanceof Promise?(r.pending.set(i,n.then(String)),m(a,i,o,``)):m(a,i,o,String(n))}finally{M.push(r)}}let s=e.toString(t);return m(a,i,o,s)}async function R(e,t){for(let[n,r]of t.pending){let i=await r,a=t.slotTags.get(n)??`div`,o=b(n);if(o.length>500)throw Error(`Slot id exceeds safe length for regex replacement (${o.length} > 500).`);let s=o.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),c=a.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),l=RegExp(`<${c}\\s[^>]*${O}="${s}"[^>]*></${c}>`,`g`);e=e.replace(l,e=>{let t=`></${a}>`;return e.slice(0,-t.length)+`>${i}</${a}>`})}return e}function z(e){e[C]=!0;let t=e;return t.select=e=>G(t,e),t}function B(e){return typeof e==`function`?C in e?!0:Object.getOwnPropertySymbols(e).some(e=>e.description===`ilha.signalAccessor`):!1}function V(e,t){let n=e;for(let e of t){if(n==null)return;n=n[e]}return n}function H(e,t,n){if(t.length===0)return n;let[r,...i]=t;if(Array.isArray(e)){let t=r;if(t<0||t>=e.length)return e;let a=e[t],o=i.length===0?n:H(a,i,n);if(Object.is(a,o))return e;let s=e.slice();return s[t]=o,s}if(typeof e==`object`&&e){let t=e,a=String(r),o=t[a],s=i.length===0?n:H(o,i,n);if(i.length===0){if(Object.is(o,n))return e}else if(Object.is(o,s))return e;return{...t,[a]:s}}return i.length===0?n:H(void 0,i,n)}function U(e){return typeof e==`symbol`||e===`length`?null:/^\d+$/.test(e)?Number(e):e}function W(e,t){let n=[],r=e=>e===null||typeof e!=`object`&&typeof e!=`function`?e:new Proxy(e,{get(e,t,i){let a=U(t);a!=null&&n.push(a);let o=Reflect.get(e,t,i);return a!=null&&typeof o==`object`&&o?r(o):o}});return t(r(e)),n}function G(e,t){let n=W(e(),t),r=t(e()),i=n.length===0?e():V(e(),n);if(!Object.is(r,i))throw Error(`select(): selector must only traverse nested properties or array indexes — derived or transformed values are not supported.`);return z((...r)=>{if(r.length===0)return n.length===0?t(e()):V(e(),n);let i=n.length===0?r[0]:H(e(),n,r[0]);Object.is(e(),i)||e(i)})}function K(e){return{[S]:!0,value:e}}function q(e,...t){if(typeof e==`string`)return e;let n=``;for(let r=0;r<e.length;r++)n+=e[r],r<t.length&&(n+=String(t[r]));return n}function J(e){if(e==null||e===!0||e===!1)return``;if(Array.isArray(e))return e.map(J).join(``);if(Q(e))return e.value;if(I(e)){let t=typeof e==`function`?e():e;return L(t.island,t.props,t.key)}return ae(e)?L(e,void 0,void 0):B(e)||typeof e==`function`?b(e()):b(e)}const Y=new Set([`value`,`checked`,`valueAsNumber`,`valueAsDate`,`files`,`open`,`group`,`this`]),X=/\bbind:([a-zA-Z]+)\s*=\s*("|')?$/;function Z(e){if(e instanceof Date){if(isNaN(e.getTime()))return``;let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}return``}function oe(e){let t=e.lastIndexOf(`<`);if(t===-1)return null;let n=e.slice(t);if(n.includes(`>`))return null;let r=n.match(/\bvalue\s*=\s*("([^"]*)"|'([^']*)'|([^\s>]+))/);return r?r[2]??r[3]??r[4]??null:null}function se(e,t,n,r){let i=`${e}:${t}`,a;try{a=n()}catch{a=void 0}switch(e){case`value`:return[` value="${b(a??``)}"`,i];case`valueAsNumber`:return[` value="${b(a==null?``:String(a))}"`,i];case`valueAsDate`:return[` value="${b(Z(a))}"`,i];case`checked`:return[a?` checked`:``,i];case`open`:return[a?` open`:``,i];case`files`:return[``,i];case`this`:return[``,i];case`group`:{let e=oe(r);return e==null?[``,i]:[(Array.isArray(a)?a.map(String).includes(e):a!=null&&String(a)===e)?` checked`:``,i]}}}function ce(e,...t){let n=``,r=null,i=``,a=F();for(let o=0;o<e.length;o++){let s=e[o];if(r!==null&&(s.startsWith(r)&&(s=s.slice(1)),r=null),i!==``){let e=s.indexOf(`>`);e!==-1&&(s=s.slice(0,e)+` data-ilha-bind="${i}">`+s.slice(e+1),i=``)}if(o>=t.length){n+=s;continue}let c=t[o],l=s.match(X);if(l&&B(c)){let e=l[1],t=l[2]??null;if(!Y.has(e)){n+=s+J(c);continue}if(!a){let i=s.slice(0,s.length-l[0].length),a=t??`"`;n+=i+e+`=`+a+J(c)+a,t&&(r=t);continue}let o=s.length-l[0].length,u=s.slice(0,o).replace(/\s+$/,``),d=a.binds.length;a.binds.push({kind:e,accessor:c});let[f,p]=se(e,d,c,u);n+=u+f,i+=(i?`,`:``)+p,t&&(r=t);continue}n+=s+J(c)}return i!==``&&(n+=` data-ilha-bind="${i}"`),{[S]:!0,value:x(n)}}function Q(e){return typeof e!=`object`||!e||!(`value`in e)||typeof e.value!=`string`?!1:S in e?!0:Object.getOwnPropertySymbols(e).some(e=>e.description===`ilha.raw`)}function le(e){return Q(e)?e.value:e}const ue=new Map;function de(e,t){if(ue.has(e))return ue.get(e);let n=r(t),i=(...e)=>{if(e.length===0)return n();n(e[0])};return ue.set(e,i),i}function fe(e){let t=r(e);return z((...e)=>{if(e.length===0)return t();t(e[0])})}function pe(e){let t=n(void 0);try{return e()}finally{n(t)}}function me(e){i();try{return e()}finally{t()}}function he(e,t){let n=z((...n)=>{if(n.length>0){t&&t(n[0]);return}return e().value});return new Proxy(n,{get(t,n,r){return n===`loading`||n===`value`||n===`error`?e()[n]:Reflect.get(t,n,r)}})}function ge(){return he(()=>({loading:!1,value:void 0,error:void 0}))}function _e(e){let t=new Map;for(let[n,r]of Object.entries(e))t.set(n,he(()=>r,e=>{r.loading=!1,r.value=e,r.error=void 0}));return new Proxy({},{get(e,n){return t.get(n)??ge()}})}function ve(t,i,a,o){let s=new Map;for(let e of t){let t;if(o!=null&&e.key in o)t={...o[e.key]};else if(e.fn.constructor.name===`AsyncFunction`||e.fn.constructor.name===`AsyncGeneratorFunction`)t={loading:!0,value:void 0,error:void 0};else{let n=new AbortController;try{let r=e.fn({state:i,input:a,signal:n.signal});r instanceof Promise?(t={loading:!0,value:void 0,error:void 0},r.catch(()=>{})):t={loading:!1,value:r,error:void 0}}catch(e){t={loading:!1,value:void 0,error:e instanceof Error?e:Error(String(e))}}finally{n.abort()}}let n=r(t);s.set(e.key,n)}let c=new Map;for(let e of t){let t=s.get(e.key);c.set(e.key,he(()=>t(),e=>{let r=n(void 0);t({loading:!1,value:e,error:void 0}),n(r)}))}return{proxy:new Proxy({},{get(e,t){return c.get(t)??ge()}}),setup:()=>{let r=[];for(let c of t){let t=s.get(c.key),l=new AbortController,u=o!=null&&c.key in o,d=e(()=>{l.abort(),l=new AbortController;let e=l,r;try{r=c.fn({state:i,input:a,signal:e.signal})}catch(e){if(u){u=!1;return}let r=n(void 0);t({loading:!1,value:void 0,error:e instanceof Error?e:Error(String(e))}),n(r);return}if(u){u=!1,r instanceof Promise&&r.catch(()=>{});return}if(!(r instanceof Promise)){let e=n(void 0);t({loading:!1,value:r,error:void 0}),n(e);return}let o=n(void 0);t({loading:!0,value:t().value,error:void 0}),n(o),r.then(n=>{e.signal.aborted||t({loading:!1,value:n,error:void 0})}).catch(n=>{e.signal.aborted||t({loading:!1,value:void 0,error:n instanceof Error?n:Error(String(n))})})});r.push(()=>{d(),l.abort()})}return()=>r.forEach(e=>e())}}}const ye=`data-ilha-bind`;function be(e){let t=[];for(let n of e.split(`,`)){let[e,r]=n.split(`:`);if(!e||!r)continue;let i=Number(r);!Number.isInteger(i)||i<0||t.push({kind:e,index:i})}return t}function xe(e,t){let n=e;switch(t){case`value`:return{event:e.tagName===`SELECT`?`change`:`input`,read:e=>e.value,write:(e,t)=>e.value=t==null?``:String(t)};case`valueAsNumber`:return{event:`input`,read:e=>{let t=e.valueAsNumber;return Number.isNaN(t)?null:t},write:(e,t)=>e.value=t==null||Number.isNaN(t)?``:String(t)};case`valueAsDate`:return{event:`input`,read:e=>e.valueAsDate,write:(e,t)=>{e.value=Z(t)}};case`checked`:return{event:`change`,read:e=>e.checked,write:(e,t)=>e.checked=!!t};case`files`:return{event:`change`,read:e=>e.files,write:()=>{}};case`open`:return{event:`toggle`,read:e=>e.open,write:(e,t)=>e.open=!!t};case`this`:return{event:null,read:()=>void 0,write:()=>{}};case`group`:{let e=n.type===`checkbox`;return{event:`change`,read:t=>{let n=t;return e?{__ilhaGroup:!0,value:n.value,checked:n.checked}:n.checked?n.value:void 0},write:(t,n)=>{let r=t;e?r.checked=(Array.isArray(n)?n.map(String):[]).includes(r.value):r.checked=n!=null&&String(n)===r.value}}}}}function Se(e,t){if(t.length===0)return()=>{};let n=[],r=[];e.hasAttribute(ye)&&r.push(e);for(let t of e.querySelectorAll(`[${ye}]`))r.push(t);for(let e of r){let r=be(e.getAttribute(ye));for(let i of r){let r=t[i.index];if(!r||r.kind!==i.kind)continue;let{event:a,read:o,write:s}=xe(e,i.kind),c=r.accessor;if(i.kind===`this`){c(e),n.push(()=>c(null));continue}try{s(e,c())}catch{}if(a===null)continue;let l=()=>{let t=o(e);if(i.kind===`group`){let e=t;if(e===void 0)return;if(typeof e==`object`&&e.__ilhaGroup){let t=c(),n=Array.isArray(t)?[...t]:[],r=n.findIndex(t=>String(t)===e.value);if(e.checked&&r===-1){let r=e.value,i=Array.isArray(t)&&t.length>0?t[0]:void 0;if(i!==void 0)if(typeof i==`number`){let e=Number(r);r=Number.isNaN(e)?r:e}else typeof i==`boolean`&&(r=!!r);n.push(r)}else !e.checked&&r!==-1&&n.splice(r,1);c(n);return}let n=c(),r=e;if(typeof n==`number`&&typeof e==`string`){let t=Number(e);r=Number.isNaN(t)?0:t}else typeof n==`boolean`&&(r=!!e);c(r);return}let n=c(),r=t;if(typeof n==`number`&&typeof t==`string`){let e=Number(t);r=Number.isNaN(e)?0:e}else typeof n==`boolean`&&(r=!!t);c(r)};e.addEventListener(a,l),n.push(()=>e.removeEventListener(a,l))}}return()=>n.forEach(e=>e())}function Ce(e){let t=e.lastIndexOf(`@`),n=t===-1?``:e.slice(0,t),r=(t===-1?e:e.slice(t+1)).split(`:`),i=r[0],a=new Set(r.slice(1));return{selector:n,eventType:i,options:{once:a.has(`once`),capture:a.has(`capture`),passive:a.has(`passive`)},abortable:a.has(`abortable`)}}function we(e){if(typeof AbortSignal.any==`function`)return AbortSignal.any(e);let t=new AbortController,n=[];for(let r of e){if(r.aborted)return t.abort(r.reason),n.forEach(e=>e()),t.signal;let e=()=>t.abort(r.reason);r.addEventListener(`abort`,e,{once:!0}),n.push(()=>r.removeEventListener(`abort`,e))}return t.signal.aborted||t.signal.addEventListener(`abort`,()=>{n.forEach(e=>e())}),t.signal}const $=new Set;function Te(e,t){if($.size===0)return!1;for(let n of $)try{n(e,t)}catch(e){console.error(e)}return!0}function Ee(e){return $.add(e),()=>{$.delete(e)}}var De=class a{_cfg;constructor(e){this._cfg=e}input(e){let t=null,n=null;return e!==void 0&&(v(e)?t=e:n=e),new a({schema:t,defaultInput:n,states:[],deriveds:[],ons:[],effects:[],onMounts:[],onErrors:[],transition:null,css:null,as:null})}as(e){return new a({...this._cfg,as:f(e)})}state(e,t){let n=this._cfg;return new a({...n,states:[...n.states,{key:e,init:t}]})}derived(e,t){let n=this._cfg;return new a({...n,deriveds:[...n.deriveds,{key:e,fn:t}]})}on(e,t){let n=Ce(e);return new a({...this._cfg,ons:[...this._cfg.ons,{selector:n.selector,event:n.eventType,options:n.options,abortable:n.abortable,handler:t}]})}effect(e){return new a({...this._cfg,effects:[...this._cfg.effects,{fn:e}]})}onMount(e){return new a({...this._cfg,onMounts:[...this._cfg.onMounts,{fn:e}]})}onError(e){return new a({...this._cfg,onErrors:[...this._cfg.onErrors,{fn:e}]})}transition(e){return new a({...this._cfg,transition:e})}css(e,...t){let n;if(typeof e==`string`)n=e;else{let r=``;for(let n=0;n<e.length;n++)r+=e[n],n<t.length&&(r+=String(t[n]));n=r}return new a({...this._cfg,css:n})}render(a){let{schema:o,defaultInput:l,states:u,deriveds:d,ons:p,effects:m,onMounts:ne,onErrors:h,transition:g,css:_,as:v}=this._cfg,y=_==null?``:j(_),x=v??`div`;function S(e){let t={...l??{},...e??{}};return o?ie(o,t):t}function C(e,t,n){let r=N(t,n);try{let t=le(e()),n=r.slots,i=r.binds;if(r.pending&&r.pending.size>0){let e=r.pending,a=r.slotTags;return(async()=>({html:await R(t,{pending:e,slotTags:a}),slots:n,binds:i}))()}return{html:t,slots:n,binds:i}}finally{P()}}function M(e){let t={};for(let n of u){let r=typeof n.init==`function`?n.init(e):n.init,i=z((...e)=>{if(e.length===0)return r});t[n.key]=i}return t}function ae(e,t){let n={};for(let i of u){let a=r(t&&i.key in t?t[i.key]:typeof i.init==`function`?i.init(e):i.init),o=z((...e)=>{if(e.length===0)return a();a(e[0])});n[i.key]=o}return n}function I(e,t=!1){let r=S(e),i=M(r),o=d.map(e=>{let t=n(void 0);try{return{key:e.key,result:e.fn({state:i,input:r,signal:new AbortController().signal})}}catch(t){return{key:e.key,result:Promise.reject(t)}}finally{n(t)}});if(!o.some(e=>e.result instanceof Promise)||t){let e={};for(let t of o)t.result instanceof Promise?e[t.key]={loading:!0,value:void 0,error:void 0}:e[t.key]={loading:!1,value:t.result,error:void 0};let t=_e(e),s=n(void 0);try{let{html:e}=C(()=>a({state:i,derived:t,input:r}));return y+e}finally{n(s)}}return Promise.all(o.map(async e=>{try{return{key:e.key,envelope:{loading:!1,value:await Promise.resolve(e.result),error:void 0}}}catch(t){return{key:e.key,envelope:{loading:!1,value:void 0,error:t instanceof Error?t:Error(String(t))}}}})).then(async e=>{let t={};for(let n of e)t[n.key]=n.envelope;let o=_e(t),s=n(void 0);try{let{html:e}=await C(()=>a({state:i,derived:o,input:r}),void 0,!0);return y+e}finally{n(s)}})}function L(e,t){return B(e,t).unmount}function B(o,l){if(l===void 0){let e=o.getAttribute(k);if(e){let t=s(e,k);t!==void 0&&(l=t)}}let u=r(S(l)),f=new Proxy({},{get(e,t){return u()[t]},has(e,t){return t in u()},ownKeys(){let e=n(void 0);try{return Reflect.ownKeys(u())}finally{n(e)}},getOwnPropertyDescriptor(e,t){let r=n(void 0);try{return Reflect.getOwnPropertyDescriptor(u(),t)}finally{n(r)}}}),_,v=o.getAttribute(A);if(v){let e=s(v,A);e!==void 0&&(_=e)}let ie=_?Object.fromEntries(Object.entries(_).filter(([e])=>e!==`_derived`&&e!==`_skipOnMount`)):void 0,b=_?._derived,x;if(b){x={};for(let[e,t]of Object.entries(b))t.error&&!(t.error instanceof Error)?x[e]={...t,error:Error(String(t.error))}:x[e]=t}let w=_!=null,T=w&&_?._skipOnMount===!0,D=ae(f,ie),j=[],M=new AbortController;j.push(()=>M.abort());let{proxy:N,setup:P}=ve(d,D,f,x),F=()=>{};function I(e,t){let n=e instanceof Error?e:Error(String(e));if(h.length===0){Te(n,t)||console.error(n);return}for(let e of h)try{e.fn({error:n,source:t,state:D,derived:N,input:f,host:o})}catch(e){console.error(e)}}if(g?.enter)try{let e=g.enter(o);e instanceof Promise&&e.catch(e=>I(e,`transition`))}catch(e){I(e,`transition`)}let L=new Map,R=new Map;function z(e,t){L.delete(e);let n=Symbol(),r=t.unmount(),i=t=>{let r=R.get(e);!r||r.token!==n||(r.el.remove(),t?.remove(),R.delete(e))};if(r instanceof Promise)return R.set(e,{el:t.el,token:n}),r.finally(()=>i());t.el.remove()}function B(e){let t=e;for(;t&&t!==o;){if(t.hasAttribute(`data-ilha`))return!1;t=t.parentElement}return t===o}function V(){let e=new Set([...R.values()].map(e=>e.el)),t=new Map;for(let n of o.querySelectorAll(`[${O}]`)){if(e.has(n))continue;let r=n.getAttribute(O);r===null||t.has(r)||B(n)&&t.set(r,n)}return t}function H(e){for(let[t,n]of L)e.has(t)||z(t,n);for(let[t,n]of L){let r=e.get(t);r&&r.island!==n.island&&z(t,n)}let t=null;for(let[r,{island:i,props:a}]of e){let e=L.get(r);if(e){e.updateProps(a);continue}t===null&&(t=V());let o=t.get(r)??null;if(!o)continue;let c=a;if(c===void 0){let e=o.getAttribute(k)??o.getAttribute(`data-props`);if(e){let t=s(e,`props on [${O}="${r}"]`);t!==void 0&&(c=t)}}let l=n(void 0),u;try{let e=i[E];u=e?e(o,c):{unmount:i.mount(o,c),updateProps:()=>{}}}finally{n(l)}L.set(r,{el:o,island:i,...u})}}let U=[],W=new Set,G=new WeakMap;function K(){for(let e of p)e.options.once&&W.has(e)||(e.selector===``?[o]:Array.from(o.querySelectorAll(e.selector))).forEach(n=>{let r=r=>{if(e.options.once){W.add(e);for(let t of U.filter(t=>t.entry===e))t.target.removeEventListener(t.type,t.fn,t.options);U.splice(0,U.length,...U.filter(t=>t.entry!==e))}let a=r.target instanceof Element?r.target:n,s=e.selector===``?a:n,c;if(e.abortable){let t=G.get(e);t||(t=new WeakMap,G.set(e,t));let r=t.get(n);r&&r.abort();let i=new AbortController;t.set(n,i),c=we([M.signal,i.signal])}else c=M.signal;let l;i();try{l=e.handler({state:D,derived:N,input:f,host:o,target:s,event:r,signal:c})}catch(e){I(e,`on`),t();return}t(),l instanceof Promise&&l.catch(e=>{e&&e.name===`AbortError`||I(e,`on`)})},a={...e.options,once:!1};n.addEventListener(e.event,r,a),U.push({target:n,type:e.event,fn:r,options:a,entry:e})})}function q(){for(let e of U)e.target.removeEventListener(e.type,e.fn,e.options);U.length=0}let J=w&&o.childNodes.length>0,Y=C(()=>a({state:D,derived:N,input:f}),J?o:void 0);J||(o.innerHTML=y+Y.html);let X=Se(o,Y.binds);if(j.push(()=>X()),H(Y.slots),j.push(()=>L.forEach(e=>e.unmount())),K(),!T)for(let e of ne){let t=n(void 0),r;try{r=e.fn({state:D,derived:N,input:f,host:o,hydrated:w})}catch(e){I(e,`mount`)}finally{n(t)}if(r){let e=r;j.push(()=>{try{e()}catch(e){I(e,`mount`)}})}}for(let n of m){let r,a=null,s=e(()=>{if(r){try{r()}catch(e){I(e,`effect`)}r=void 0}a&&a.abort(),a=new AbortController;let e=we([M.signal,a.signal]);i();try{r=n.fn({state:D,derived:N,input:f,host:o,signal:e})}catch(e){I(e,`effect`)}finally{t()}});j.push(()=>{if(s(),r)try{r()}catch(e){I(e,`effect`)}a&&a.abort()})}F=P(),j.push(F);let Z=!1,oe=Y.html,se=0,ce=e(()=>{let e=++se,{html:t,slots:n,binds:r}=C(()=>a({state:D,derived:N,input:f}),o),i=y+t;if(!Z&&(Z=!0,t===oe||L.size>0&&L.size===n.size&&[...n.keys()].every(e=>L.has(e))&&ee(oe,t,n.keys())))return;q(),X();let s=L.size,c=[];for(let[e,t]of L)if(!n.has(e)){let n=z(e,t);n instanceof Promise&&c.push(n)}for(let[e,t]of L){let r=n.get(e);if(r&&r.island!==t.island){let n=z(e,t);n instanceof Promise&&c.push(n)}}let l=()=>{if(e!==se)return;let t=new Map,a=n.size<s;for(let[e,r]of L){if(!n.has(e)||!r.el.isConnected)continue;if(a&&e.startsWith(`p:`)){z(e,r);continue}let i=r.el.tagName.toLowerCase(),o=document.createElement(i);o.setAttribute(O,e);let s=te(n.get(e)?.props);s!==``&&o.setAttribute(k,s),r.el.replaceWith(o),t.set(e,r.el)}let c=document.createElement(`template`),l=o.tagName.toLowerCase();if(c.innerHTML=`<${l}>${i}</${l}>`,re(o,c.content.firstElementChild),t.size>0){let e=V();for(let[n,r]of t){let t=e.get(n);t&&t.replaceWith(r)}}K(),X=Se(o,r),H(n)};c.length>0?Promise.allSettled(c).then(e=>{for(let t of e)t.status===`rejected`&&console.error(t.reason);l()}):l()}),Q=!1;return{unmount:()=>{if(Q)return;Q=!0,ce(),q();let e=[];for(let[,t]of L){let n=t.unmount();n instanceof Promise&&e.push(n)}if(g?.leave)try{let t=g.leave(o);t instanceof Promise&&e.push(t)}catch(e){I(e,`transition`)}let t=()=>{for(let e of j)e()};if(e.length>0)return Promise.all(e).then(t).catch(e=>{I(e,`transition`),t()});t()},updateProps:e=>{if(Q)return;let t=S(e);c(u(),t)||u(t)}}}let V=function(e){return F()?{[T]:!0,island:V,props:e,key:void 0}:I(e)};return V.toString=e=>I(e,!0),V.mount=(e,t)=>L(e,t),V[E]=(e,t)=>B(e,t),V[D]=x,V.key=e=>{if(typeof e!=`string`||e.trim().length===0)throw Error(`island.key() requires a non-empty string.`);if(e.includes(`:`))throw Error(`island.key() key cannot contain the slot separator ":" (got "${e}").`);let t=(t=>({[T]:!0,island:V,props:t,key:e}));return t[T]=!0,t},V[w]=!0,V.hydratable=async(e,t)=>{let{name:r,as:i=`div`,snapshot:a=!1,skipOnMount:o}=t,s=f(i),c=e??{},l=await I(c),p=b(JSON.stringify(c)),m=``;if(a!==!1){let e=a===!0||a.state!==!1,t=a===!0||a.derived!==!1,r=o??(e||t),i={},s=S(c),l=M(s);if(e)for(let e of u)i[e.key]=l[e.key]();if(t){let e={};for(let t of d){let r=n(void 0),i,a,o=!1;try{i=t.fn({state:l,input:s,signal:new AbortController().signal})}catch(e){o=!0,a=e}finally{n(r)}if(o){e[t.key]={loading:!1,value:void 0,error:a instanceof Error?a.message:String(a)};continue}try{let n=await Promise.resolve(i);e[t.key]={loading:!1,value:n,error:void 0}}catch(n){e[t.key]={loading:!1,value:void 0,error:n instanceof Error?n.message:String(n)}}}i._derived=e}r&&(i._skipOnMount=!0),m=` ${A}='${b(JSON.stringify(i))}'`}return`<${s} data-ilha="${b(r)}" ${k}='${p}'${m}>${l}</${s}>`},V}};function Oe(e,t,n){let r=typeof e==`string`?document.querySelector(e):e;return r?t.mount(r,n):(console.warn(`[ilha] from(): element not found: ${e}`),null)}function ke(e,t={}){let n=t.root??document.body,r=t.lazy??!1,i=[];function a(t){let n=t.getAttribute(`data-ilha`);if(!n)return;let r=e[n];if(!r){`${n}${Object.keys(e).join(`, `)}`;return}let a={},o=t.getAttribute(k);if(o){let e=s(o,`${k} on [data-ilha="${n}"]`);e!==void 0&&(a=e)}i.push(r.mount(t,a))}let o=Array.from(n.querySelectorAll(`[data-ilha]`));if(r&&typeof IntersectionObserver<`u`){let e=!1,t=new IntersectionObserver(n=>{if(!e)for(let e of n)e.isIntersecting&&(a(e.target),t.unobserve(e.target))});o.forEach(e=>t.observe(e)),i.push(()=>{e=!0,t.disconnect()})}else o.forEach(a);return{unmount:()=>{let e=[];for(let t of i){let n=t();n instanceof Promise&&e.push(n)}if(e.length>0)return Promise.all(e).then(()=>{})}}}const Ae=new De({schema:null,defaultInput:null,states:[],deriveds:[],ons:[],effects:[],onMounts:[],onErrors:[],transition:null,css:null,as:null}),je=Object.assign(Ae,{html:ce,raw:K,mount:ke,from:Oe,context:de,signal:fe,batch:me,untrack:pe,onUncaughtError:Ee});function Me(e,t,n){return K(L(e,t,n))}const Ne=ce,Pe=K,Fe=q,Ie=ke,Le=Oe,Re=de;export{E as ISLAND_MOUNT_INTERNAL,Me as __ilhaJsxSlot,me as batch,Re as context,Fe as css,je as default,Le as from,Ne as html,fe as ilhaSignal,fe as signal,Ie as mount,Ee as onUncaughtError,Pe as raw,pe as untrack};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ilha",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "description": "A tiny, framework-free island architecture library",
5
5
  "keywords": [
6
6
  "framework-free",