@neuralfog/elemix 0.5.8 → 0.5.9

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 (41) hide show
  1. package/README.md +37 -3
  2. package/dist/Reactive-DqnnbkBS.js +1 -0
  3. package/dist/decorators.js +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/reactive.js +1 -1
  6. package/dist/render-gNOLrCHj.js +1 -0
  7. package/dist/render.js +1 -1
  8. package/dist/signal.js +1 -1
  9. package/dist/src/Reactive.d.ts +1 -3
  10. package/dist/src/Signal.d.ts +1 -1
  11. package/dist/src/component/Component.d.ts +3 -4
  12. package/dist/src/component/Renderer.d.ts +1 -3
  13. package/dist/src/decorators/state.d.ts +1 -1
  14. package/dist/src/renderer/holes.d.ts +2 -0
  15. package/dist/src/renderer/render.d.ts +1 -1
  16. package/dist/src/renderer/types.d.ts +1 -0
  17. package/dist/src/types.d.ts +0 -7
  18. package/dist/test/before-mount-once.test.d.ts +1 -12
  19. package/dist/test/fixtures/BeforeMountOnce.d.ts +22 -0
  20. package/dist/test/fixtures/LifeCycle.d.ts +0 -1
  21. package/dist/test/fixtures/LifeCycleNoTemplate.d.ts +0 -1
  22. package/dist/test/fixtures/MainApp.d.ts +0 -1
  23. package/dist/test/fixtures/OnModelBinding.d.ts +18 -0
  24. package/dist/test/fixtures/OnMutation.d.ts +64 -0
  25. package/dist/test/fixtures/StateApp.d.ts +0 -1
  26. package/dist/test/fixtures/StateInProps.d.ts +0 -2
  27. package/dist/test/fixtures/TestComp.d.ts +0 -1
  28. package/dist/test/on-model-binding.test.d.ts +1 -0
  29. package/dist/test/on-mutation.test.d.ts +1 -0
  30. package/dist/testing/index.js +1 -1
  31. package/dist/utilities.js +1 -1
  32. package/dist/utils-DuxHz4sk.js +1 -0
  33. package/package.json +1 -1
  34. package/dist/Reactive-CQV_s8zX.js +0 -1
  35. package/dist/render-Dli1vT-6.js +0 -1
  36. package/dist/test/before-render-state-mutation.test.d.ts +0 -1
  37. package/dist/test/fixtures/FlagsApp.d.ts +0 -14
  38. package/dist/test/fixtures/SignalCustomFlag.d.ts +0 -4
  39. package/dist/test/user-defined-render-flags.test.d.ts +0 -1
  40. package/dist/types-DVvjIrJ6.js +0 -1
  41. package/dist/utils-lujR-c6b.js +0 -1
package/README.md CHANGED
@@ -283,7 +283,7 @@ export class CounterDisplay extends Component {
283
283
 
284
284
  ## Lifecycle Hooks
285
285
 
286
- Components support four lifecycle hooks: `beforeMount`, `onMount`, `onRender`, and `onDispose`.
286
+ Components support four lifecycle hooks: `beforeMount`, `onMount`, `onMutation`, and `onDispose`.
287
287
 
288
288
  ```typescript
289
289
  @component()
@@ -296,8 +296,8 @@ export class Dashboard extends Component {
296
296
  // Called after first render
297
297
  }
298
298
 
299
- onRender(renderTriggers?: string[]): void {
300
- // Called after each render with triggers that caused the update
299
+ onMutation(): void {
300
+ // Called after a render that actually mutated the DOM
301
301
  }
302
302
 
303
303
  onDispose(): void {
@@ -310,6 +310,40 @@ export class Dashboard extends Component {
310
310
  }
311
311
  ```
312
312
 
313
+ ## Side Effects with `onMutation`
314
+
315
+ `onMutation` is the right place for DOM-coupled side effects — measuring layout, syncing a canvas or SVG to its container, scrolling into view, positioning popovers, firing intersection checks, anything that needs the DOM to be in a known new state before it runs.
316
+
317
+ It is distinct from "ran a render." A render happens whenever subscribed state, props, or signals change. But a render does not always mutate the DOM:
318
+
319
+ - Setting a state field to the same value triggers a render, but no DOM write happens — `onMutation` does not fire.
320
+ - A parent re-renders because its state changed, but the only thing in its template that uses that state is a prop passed into a child. The parent's own DOM is untouched, so the parent's `onMutation` does not fire. The child's `onMutation` does.
321
+ - A list re-renders with the same keys and the same text — no inserts, no deletes, no text writes — `onMutation` does not fire.
322
+
323
+ Whenever any hole actually writes to user-visible DOM (text content, attributes, classes, list inserts/deletes/moves, template swaps, input value sync), `onMutation` fires once at the end of that render — after every write has flushed and before paint.
324
+
325
+ ```typescript
326
+ @component()
327
+ export class Chart extends Component {
328
+ @state()
329
+ state = { points: [] as number[] };
330
+
331
+ private canvas = ref<HTMLCanvasElement>();
332
+
333
+ onMutation(): void {
334
+ const el = this.canvas.value;
335
+ if (!el) return;
336
+ const rect = el.getBoundingClientRect();
337
+ el.width = rect.width;
338
+ el.height = rect.height;
339
+ drawChart(el, this.state.points);
340
+ }
341
+
342
+ template(): Template {
343
+ return html`<canvas :ref=${this.canvas}></canvas>`;
344
+ }
345
+ }
346
+ ```
313
347
  ## Conditionals
314
348
 
315
349
  Use ternary expressions in templates.
@@ -0,0 +1 @@
1
+ const e=require("./renderers-BBOJdSjj.js");var t=class{subscribers=new Set;proxy;proxySet=new WeakSet;get value(){return this.proxy}constructor(e){this.proxy=this.create(e)}subscribe(e){return this.subscribers.has(e)||this.subscribers.add(e),this}unsubscribe(e){return this.subscribers.delete(e),this}create(t){let n=this;return new Proxy(t,{get(t,i){let a=t[i];r(a);let o=e.n.active;if(o&&(n.subscribers.add(o),o.tracked.add(n)),typeof a==`object`&&a&&!n.proxySet.has(a)){let e=new Proxy(a,this);return n.proxySet.add(e),e}return a},set(e,t,i){return e[t]=i,r(e),n.notify(),!0}})}notify(){for(let e of this.subscribers)e.render()}},n=`Reactive state does not support collections: Map, WeakMap, Set, WeakSet`,r=e=>{if(e instanceof Map||e instanceof WeakMap||e instanceof Set||e instanceof WeakSet)throw Error(n)};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types-DVvjIrJ6.js"),t=require("./utilities-2r7JOSrZ.js");var n=(e,t)=>{customElements.get(e)===void 0&&customElements.define(e,t)},r=e=>r=>{let i=t.t(r.name);r.$styles=e?.styles||[],n(i,r)},i=t=>(n,r)=>{n.stateProperties||=new Map,n.stateProperties.has(r)||n.stateProperties.set(r,t||e.t.LOCAL_STATE)};exports.component=r,exports.state=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utilities-2r7JOSrZ.js");var t=(e,t)=>{customElements.get(e)===void 0&&customElements.define(e,t)},n=n=>r=>{let i=e.t(r.name);r.$styles=n?.styles||[],t(i,r)},r=()=>(e,t)=>{e.stateProperties||=new Set,e.stateProperties.add(t)};exports.component=n,exports.state=r;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./render-Dli1vT-6.js"),t=require("./types-DVvjIrJ6.js"),n=require("./renderers-BBOJdSjj.js"),r=require("./Reactive-CQV_s8zX.js"),i=require("./App-tMVVu8H5.js");var a=class{component;locked=!1;pendingOnMount=!1;scheduledRenderTriggers=new Set;constructor(e){this.component=e}schedule(e,t=!1){t&&(this.pendingOnMount=!0);let r=n.n.active;n.n.active=null;let i;try{i=this.component.template()}finally{n.n.active=r}i&&(e&&this.scheduledRenderTriggers.add(e),this.locked||(this.locked=!0,n.t.add(this),setTimeout(()=>{this.render(Array.from(this.scheduledRenderTriggers)),this.scheduledRenderTriggers.clear(),this.locked=!1,n.t.delete(this),this.pendingOnMount&&(this.pendingOnMount=!1,this.component.onMount(),this.component.removeAttribute(`data-cloak`))},0)))}render(t){for(let e of this.component.tracked)e.unsubscribe(this.component);this.component.tracked.clear();let r=n.n.active;n.n.active=this.component,this.component.beforeRender(t);try{e.n(this.component.template(),this.component.root)}finally{n.n.active=r}this.component.onRender(t)}},o=class{component;constructor(e){this.component=e}initialize(){let e=this.component.constructor.prototype.stateProperties;if(e)for(let[t,n]of e){let e=this.component;e[t]=new r.t(e[t],n).subscribe(this.component).value}}},s=class{component;data={};constructor(e){this.component=e}initialize(){let e=this.component;e.__pendingProps&&=(Object.assign(this.data,e.__pendingProps),void 0),this.data=new r.t(this.data,t.t.PROPS).subscribe(this.component).value}setReactive(e,t){this.data[e]=t}set(e,t){if(typeof t==`object`&&t){this.setReactive(e,t);return}let n=this.data[e];if(typeof t==`function`){this.data[e]||this.setReactive(e,t);return}n!==t&&this.setReactive(e,t)}},c=class{component;styles;constructor(e){this.component=e,this.styles=this.component.constructor.$styles}initialize(){if(this.component.shadowRoot&&this.styles.length){let e=new CSSStyleSheet;e.replaceSync(this.styles.join(` `));let t=i.t.config.baseStyles||[];this.component.shadowRoot.adoptedStyleSheets=[...t,e,...this.component.controlStyles]}}},l=class extends HTMLElement{static formAssociated;$props=new s(this);$renderer=new a(this);$localState=new o(this);$styles=new c(this);$controlStyles;internals;tracked=new Set;get root(){return this.shadowRoot}get props(){return this.$props.data}get styles(){return this.$styles}get controlStyles(){return this.$controlStyles||[]}constructor(){super(),this.attachShadow({mode:`open`}),this.setAttribute(`data-cloak`,``)}connectedCallback(){this.$styles.initialize(),this.$props.initialize(),this.attachFormInternals(),this.$localState.initialize(),this.beforeMount(),this.render(t.t.ON_MOUNT,!0)}attachFormInternals(){this.internals||this.constructor.formAssociated&&(this.internals=this.attachInternals())}disconnectedCallback(){n.t.delete(this.$renderer),this.unsubscribeFromSignals(),this.onDispose()}template(){}onRender(e){}beforeRender(e){}beforeMount(){}onMount(){}onDispose(){}render(e,t=!1){this.$renderer.schedule(e,t)}setControlStyles(e){this.$controlStyles=e}unsubscribeFromSignals(){for(let e of this.tracked)e.unsubscribe(this);this.tracked.clear()}hasSlot(e){return Array.from(this.children).some(t=>t.getAttribute(`slot`)===e)}};exports.Component=l,exports.RenderTrigger=t.t,exports.html=t.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./render-gNOLrCHj.js"),t=require("./renderers-BBOJdSjj.js"),n=require("./Reactive-DqnnbkBS.js"),r=require("./App-tMVVu8H5.js");var i=class{component;locked=!1;pendingOnMount=!1;constructor(e){this.component=e}schedule(e=!1){e&&(this.pendingOnMount=!0);let n=t.n.active;t.n.active=null,this.component.template()&&(t.n.active=n,this.locked||(this.locked=!0,t.t.add(this),setTimeout(()=>{this.render(),this.locked=!1,t.t.delete(this),this.pendingOnMount&&(this.pendingOnMount=!1,this.component.onMount(),this.component.removeAttribute(`data-cloak`))},0)))}render(){for(let e of this.component.tracked)e.unsubscribe(this.component);this.component.tracked.clear();let n=t.n.active;t.n.active=this.component;let r=e.n(this.component.template(),this.component.root);t.n.active=n,r&&this.component.onMutation()}},a=class{component;constructor(e){this.component=e}initialize(){let e=this.component.constructor.prototype.stateProperties;if(e)for(let t of e){let e=this.component;e[t]=new n.t(e[t]).subscribe(this.component).value}}},o=class{component;data={};constructor(e){this.component=e}initialize(){let e=this.component;e.__pendingProps&&=(Object.assign(this.data,e.__pendingProps),void 0),this.data=new n.t(this.data).subscribe(this.component).value}setReactive(e,t){this.data[e]=t}set(e,t){if(typeof t==`object`&&t){this.setReactive(e,t);return}let n=this.data[e];if(typeof t==`function`){this.data[e]||this.setReactive(e,t);return}n!==t&&this.setReactive(e,t)}},s=class{component;styles;constructor(e){this.component=e,this.styles=this.component.constructor.$styles}initialize(){if(this.component.shadowRoot&&this.styles.length){let e=new CSSStyleSheet;e.replaceSync(this.styles.join(` `));let t=r.t.config.baseStyles||[];this.component.shadowRoot.adoptedStyleSheets=[...t,e,...this.component.controlStyles]}}},c=class extends HTMLElement{static formAssociated;$props=new o(this);$renderer=new i(this);$localState=new a(this);$styles=new s(this);$controlStyles;internals;tracked=new Set;get root(){return this.shadowRoot}get props(){return this.$props.data}get styles(){return this.$styles}get controlStyles(){return this.$controlStyles||[]}constructor(){super(),this.attachShadow({mode:`open`}),this.setAttribute(`data-cloak`,``)}connectedCallback(){this.$styles.initialize(),this.$props.initialize(),this.attachFormInternals(),this.$localState.initialize(),this.beforeMount(),this.render(!0)}attachFormInternals(){this.internals||this.constructor.formAssociated&&(this.internals=this.attachInternals())}disconnectedCallback(){t.t.delete(this.$renderer),this.unsubscribeFromSignals(),this.onDispose()}template(){}onMutation(){}beforeMount(){}onMount(){}onDispose(){}render(e=!1){this.$renderer.schedule(e)}setControlStyles(e){this.$controlStyles=e}unsubscribeFromSignals(){for(let e of this.tracked)e.unsubscribe(this);this.tracked.clear()}hasSlot(e){return Array.from(this.children).some(t=>t.getAttribute(`slot`)===e)}},l=e.t;exports.Component=c,exports.html=l;
package/dist/reactive.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./Reactive-CQV_s8zX.js");exports.Reactive=e.t,exports.UNSUPPORTED_COLLECTION_ERROR_MESSAGE=e.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./Reactive-DqnnbkBS.js");exports.Reactive=e.t,exports.UNSUPPORTED_COLLECTION_ERROR_MESSAGE=e.n;
@@ -0,0 +1 @@
1
+ const e=require("./utils-DuxHz4sk.js");var t={deletes:[],inserts:[],moves:[]},n=(e,n)=>{let i=e.length,a=n.length;if(i===a){let r=!0;for(let t=0;t<i;t++)if(e[t].key!==n[t].key){r=!1;break}if(r)return t}let o=Object.create(null);for(let t=0;t<i;t++)o[e[t].key]=t;let s=new Int32Array(a),c=[],l=[],u=Object.create(null);for(let e=0;e<a;e++){let t=n[e].key;u[t]=!0;let r=o[t];r===void 0?s[e]=-1:(s[e]=r,c.push(r),l.push(e))}let d=r(c),f=new Uint8Array(a);for(let e=0;e<d.length;e++)f[l[d[e]]]=1;let p=[],m=[],h=[];for(let t=0;t<i;t++)u[e[t].key]!==!0&&p.push({key:e[t].key});for(let e=0;e<a;e++){let t=e+1<a?n[e+1].key:void 0;s[e]===-1?m.push({key:n[e].key,value:n[e],beforeKey:t}):f[e]||h.push({key:n[e].key,beforeKey:t})}return{deletes:p,inserts:m,moves:h}},r=e=>{let t=e.length;if(t===0)return[];let n=new Int32Array(t),r=new Int32Array(t),i=0;for(let a=0;a<t;a++){let t=0,o=i;for(;t<o;){let n=t+o>>>1;e[r[n]]<e[a]?t=n+1:o=n}r[t]=a,t===i&&i++,n[a]=t>0?r[t-1]:-1}let a=Array(i),o=r[i-1];for(let e=i-1;e>=0;e--)a[e]=o,o=n[o];return a},i=!1,a=()=>{i=!1},o=()=>i,s=()=>{i=!0},c=e=>typeof e==`object`&&!!e&&`strings`in e&&`values`in e,l=/(\S+)(?==(?:["']?)$)/,u=(t,n)=>{let r=t.match(l);if(!r)return;let i=r[1],a={index:n,name:i,value:e.i(n),virtual:!1,type:e.o.STD},o=i[0];return o===`@`?(a.virtual=!0,a.type=e.o.EVENT):o===`:`?(a.virtual=!0,a.type=i.endsWith(`:ref`)?e.o.REF:e.o.PROP):o===`~`&&i.startsWith(`~onmodel`)?(a.virtual=!0,a.type=e.o.ONMODEL):o===`~`&&i.startsWith(`~model`)?(a.virtual=!0,a.type=e.o.MODEL):o===`.`&&(a.virtual=!0,a.type=i.startsWith(`.class`)?e.o.DIRECT_CLASS:e.o.DIRECT_PROP),a},d=new Map,f=e=>{let t=d.get(e);if(t)return t;let n=``;for(let t=0;t<e.length;t++){let r=e[t],i=r.charCodeAt(0);n+=i>=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122||r===`-`||r===`_`?r:`\\${r}`}return d.set(e,n),n},p=(e,t,n)=>{for(let r=0,i=t.length;r<i;r++){let i=t[r],a=e.querySelector(`[${f(i.name)}='${i.value}']`);a&&(i.virtual&&a.removeAttribute(i.name),n.set(i.index,O[i.type](a,i)))}},m=e=>Array.isArray(e)?`list`:c(e)?`template`:`string`,h=(e,t,n)=>e===`list`?y(t,n):e===`template`?v(t,n):_(t),g=(e,t,n)=>{let r,i;return e=>{let a=m(e);i&&i!==a&&(r?.dispose(),r=void 0),r||(r=h(a,t,n),i=a),r.update(e)}},_=e=>{let t=document.createTextNode(``);return e.before(t),{update:e=>{let n=e==null?``:String(e);t.textContent!==n&&(t.textContent=n,s())},dispose:()=>{t.remove()}}},v=(e,t)=>{let n,r,i=[],a=()=>{i.length&&s();for(let e=0;e<i.length;e++)i[e].remove();i=[]};return{update:o=>{let c=o;n!==c.strings&&(r=void 0,a()),r||(r=t(c),n=c.strings,i=r.mountBefore(e,c.values),s()),r.update(c.values)},dispose:a}},y=(e,t)=>{let r=new Map,i=new Map,a=[],o=(n,a)=>{if(!n.key)throw Error(`use repeat directive when rendering the lists`);let o=r.get(n.key);if(!o){o=t(n),r.set(n.key,o);let c=a||e,l=o.mountBefore(c,n.values);l.length&&i.set(n.key,l[l.length-1]),s()}return o},c=()=>{i.size&&s();for(let[,e]of i)e.remove();r.clear(),i.clear()},l=e=>{for(let t=0;t<e.length;t++)o(e[t]).update(e[t].values)};return{update:t=>{let u=t;if(!a.length){l(u),a=u;return}if(!u.length){c(),a=u;return}let{deletes:d,inserts:f,moves:p}=n(a,u);if(d.length===u.length||f.length===u.length){c(),l(u),a=u;return}d.length&&s();for(let e=d.length-1;e>=0;e--){let t=d[e].key;i.get(t)?.remove(),i.delete(t),r.delete(t)}p.length&&s();for(let t=p.length-1;t>=0;t--){let n=i.get(p[t].key),r=i.get(p[t].beforeKey);n&&r?r.before(n):n&&e.before(n)}for(let e=f.length-1;e>=0;e--){let t=i.get(f[e].beforeKey);o(f[e].value,t)}for(let e=0;e<u.length;e++)r.get(u[e].key)?.update(u[e].values);a=u},dispose:()=>{c(),a=[]}}},b=(e,t)=>{let n,{name:r}=t;return t=>{if(t===void 0)return;let i=String(t);n!==i&&(n=i,e.setAttribute(r,i),s())}},x=(e,t)=>{let n,r=`on${t.name.slice(1)}`;return t=>{t===void 0||n===t||(n=t,e[r]=t)}},S=(e,t)=>{let n=t.name.slice(1);return t=>{let r=e;if(r.$props){r.$props.set(n,t);return}r.__pendingProps||={},r.__pendingProps[n]=t}},C=e=>{let t=e;return n=>{if(n===void 0)return;let r=n;t.value!==r.value&&(t.value=r.value,s()),e.oninput||=()=>{if(t.value===r.value)return;let n=e.__onmodel;n&&(t.value=n(t.value)),r.value=t.value}}},w=e=>t=>{e.__onmodel=typeof t==`function`?t:void 0},T=e=>t=>{t!==void 0&&(t.value=e)},E=t=>{let n=t.getAttribute(`class`)||``,r;return i=>{if(i==null){n.length&&r!==n&&(r=n,t.setAttribute(`class`,n),s());return}if(typeof i==`string`){let a=e.a(n,i);r!==a&&(r=a,t.setAttribute(`class`,a),s());return}if(typeof i==`object`){let a=``;for(let[e,t]of Object.entries(i))t&&(a.length&&(a+=` `),a+=e);let o=e.a(n,a);r!==o&&(r=o,t.setAttribute(`class`,o),s())}}},D=(e,t)=>{let n=t.name.slice(1),r;return t=>{r!==t&&(r=t,e[n]=t)}},O={[e.o.STD]:b,[e.o.EVENT]:x,[e.o.PROP]:S,[e.o.MODEL]:e=>C(e),[e.o.ONMODEL]:e=>w(e),[e.o.REF]:e=>T(e),[e.o.DIRECT_CLASS]:e=>E(e),[e.o.DIRECT_PROP]:D},k=t=>{let n=new Map,r=[],i,a=``,{strings:o}=t;for(let t=0,n=o.length;t<n;t++)if(a+=o[t],t<n-1){let n=u(o[t],t);n&&r.push(n),a+=e.i(t)}a=e.n(e.t(a));let s=()=>(i||(i=document.createElement(`template`),i.innerHTML=a),i.content.cloneNode(!0)),c=(t,i)=>{let a=document.createTreeWalker(t,NodeFilter.SHOW_COMMENT,null);for(;a.nextNode();){let{nodeValue:t}=a.currentNode;if(t?.startsWith(`₥`)){let r=e.r(t);n.set(r,g(i[r],a.currentNode,k))}}p(t,r,n)},l=e=>{for(let[t,r]of n)r(e[t])};return{mount:(e,t)=>{let n=s();c(n,t),l(t),e.appendChild(n)},mountBefore:(e,t)=>{let n=s();c(n,t),l(t);let r=Array.from(n.childNodes);return e.before(n),r},update:e=>{for(let[t,r]of n)r(e[t])}}},A=(e,...t)=>({strings:e,values:t,key:``}),j=Symbol(),M=(e,t)=>{if(!t)throw Error(`render method needs to accept instance of HTMLElement`);a();let n=t;n[j]||(n[j]=new Map);let r=n[j],i=r.get(e.strings);return i||(i=k(e),r.set(e.strings,i),i.mount(t,e.values)),i.update(e.values),o()};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return A}});
package/dist/render.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./render-Dli1vT-6.js");exports.html=e.t,exports.render=e.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./render-gNOLrCHj.js");exports.html=e.t,exports.render=e.n;
package/dist/signal.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types-DVvjIrJ6.js"),t=require("./Reactive-CQV_s8zX.js");var n=(n,r)=>new t.t(n,r||e.t.SIGNAL);exports.signal=n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./Reactive-DqnnbkBS.js");var t=t=>new e.t(t);exports.signal=t;
@@ -1,12 +1,10 @@
1
1
  import type { Component } from './component/Component';
2
- import type { RenderTriggerType } from './types';
3
2
  export declare class Reactive<State> {
4
- private renderTrigger?;
5
3
  subscribers: Set<Component<unknown>>;
6
4
  private proxy;
7
5
  private proxySet;
8
6
  get value(): State;
9
- constructor(state: any, renderTrigger?: RenderTriggerType | undefined);
7
+ constructor(state: any);
10
8
  subscribe(instance: Component): Reactive<State>;
11
9
  unsubscribe(instance: Component): Reactive<State>;
12
10
  private create;
@@ -1,2 +1,2 @@
1
1
  import { Reactive } from './Reactive';
2
- export declare const signal: <State>(state: State, renderTrigger?: string) => Reactive<State>;
2
+ export declare const signal: <State>(state: State) => Reactive<State>;
@@ -1,4 +1,4 @@
1
- import { type RenderTriggerType, type Template } from '../types';
1
+ import type { Template } from '../types';
2
2
  import { Styles } from './Styles';
3
3
  type Trackable = {
4
4
  unsubscribe(c: Component): unknown;
@@ -26,12 +26,11 @@ export declare class Component<ComponentProps = unknown> extends HTMLElement {
26
26
  private attachFormInternals;
27
27
  disconnectedCallback(): void;
28
28
  template(): Template;
29
- onRender(renderTriggers?: RenderTriggerType[]): void;
30
- beforeRender(renderTriggers?: RenderTriggerType[]): void;
29
+ onMutation(): void;
31
30
  beforeMount(): void;
32
31
  onMount(): void;
33
32
  onDispose(): void;
34
- render(renderTrigger?: RenderTriggerType, isConnectedCallback?: boolean): void;
33
+ render(isConnectedCallback?: boolean): void;
35
34
  setControlStyles(styles: CSSStyleSheet[]): void;
36
35
  private unsubscribeFromSignals;
37
36
  hasSlot(name: string): boolean;
@@ -1,11 +1,9 @@
1
1
  import type { Component } from './Component';
2
- import type { RenderTriggerType } from '../types';
3
2
  export declare class Renderer {
4
3
  private component;
5
4
  private locked;
6
5
  private pendingOnMount;
7
- private scheduledRenderTriggers;
8
6
  constructor(component: Component);
9
- schedule(renderTrigger?: RenderTriggerType, isConnectedCallback?: boolean): void;
7
+ schedule(isConnectedCallback?: boolean): void;
10
8
  private render;
11
9
  }
@@ -1,3 +1,3 @@
1
1
  type Component = any;
2
- export declare const state: (renderTrigger?: string) => (component: Component, propertyName: string) => void;
2
+ export declare const state: () => (component: Component, propertyName: string) => void;
3
3
  export {};
@@ -1,4 +1,6 @@
1
1
  import { type AttrDef, type Fragment, type Hole, type HtmlTemplate } from './types';
2
+ export declare const resetDirty: () => void;
3
+ export declare const readDirty: () => boolean;
2
4
  export declare const isTemplate: (v: unknown) => v is HtmlTemplate;
3
5
  export declare const detectAttribute: (raw: string, index: number) => AttrDef | undefined;
4
6
  export declare const hydrateAttributes: (frag: DocumentFragment, attrs: AttrDef[], holes: Map<number, Hole>) => void;
@@ -1,3 +1,3 @@
1
1
  import type { HtmlTemplate } from './types';
2
2
  export declare const html: (strings: TemplateStringsArray, ...values: unknown[]) => HtmlTemplate;
3
- export declare const render: (template: HtmlTemplate, container: HTMLElement | null) => void;
3
+ export declare const render: (template: HtmlTemplate, container: HTMLElement | null) => boolean;
@@ -18,6 +18,7 @@ export declare const Attr: {
18
18
  readonly REF: 4;
19
19
  readonly DIRECT_CLASS: 5;
20
20
  readonly DIRECT_PROP: 6;
21
+ readonly ONMODEL: 7;
21
22
  };
22
23
  export type Attr = (typeof Attr)[keyof typeof Attr];
23
24
  export type AttrDef = {
@@ -1,10 +1,3 @@
1
1
  import type { HtmlTemplate } from './renderer/types';
2
2
  export type Template = HtmlTemplate;
3
3
  export declare const html: (strings: TemplateStringsArray, ...values: unknown[]) => HtmlTemplate;
4
- export declare const RenderTrigger: {
5
- readonly PROPS: "PROPS";
6
- readonly SIGNAL: "SIGNAL";
7
- readonly LOCAL_STATE: "LOCAL_STATE";
8
- readonly ON_MOUNT: "ON_MOUNT";
9
- };
10
- export type RenderTriggerType = (typeof RenderTrigger)[keyof typeof RenderTrigger] | string;
@@ -1,12 +1 @@
1
- import { Component } from '../src/component/Component';
2
- import { type Template } from '../src/types';
3
- export declare class BeforeMountChild extends Component {
4
- beforeMount(): void;
5
- template: () => Template;
6
- }
7
- export declare class BeforeMountSwapParent extends Component {
8
- state: {
9
- showB: boolean;
10
- };
11
- template: () => Template;
12
- }
1
+ import './fixtures/BeforeMountOnce';
@@ -0,0 +1,22 @@
1
+ import { Component } from '../../src/component/Component';
2
+ import { type Template } from '../../src/types';
3
+ export declare const counter: {
4
+ value: number;
5
+ };
6
+ export declare const resetCounter: () => void;
7
+ export declare class BeforeMountChild extends Component {
8
+ beforeMount(): void;
9
+ template: () => Template;
10
+ }
11
+ export declare class BeforeMountParent extends Component {
12
+ state: {
13
+ count: number;
14
+ };
15
+ template: () => Template;
16
+ }
17
+ export declare class BeforeMountSwapParent extends Component {
18
+ state: {
19
+ showB: boolean;
20
+ };
21
+ template: () => Template;
22
+ }
@@ -2,7 +2,6 @@ import { Component } from '../../src/component/Component';
2
2
  import type { Template } from '../../src/types';
3
3
  export declare class LifeCycle extends Component {
4
4
  beforeMount: () => void;
5
- onRender: (_renderTrigger?: string[]) => void;
6
5
  onMount: () => void;
7
6
  onDispose: () => void;
8
7
  template: () => Template;
@@ -1,5 +1,4 @@
1
1
  import { Component } from '../../src/component/Component';
2
2
  export declare class LifeCycleNoTemplate extends Component {
3
- onRender: (_renderTrigger?: string[]) => void;
4
3
  onMount: () => void;
5
4
  }
@@ -8,6 +8,5 @@ export declare class MainApp extends Component {
8
8
  size: number;
9
9
  };
10
10
  propsHandler: () => void;
11
- onRender: (_renderTrigger?: string[]) => void;
12
11
  template: () => Template;
13
12
  }
@@ -0,0 +1,18 @@
1
+ import { Component } from '../../src/component/Component';
2
+ import { type Template } from '../../src/types';
3
+ export declare class OnModelClampApp extends Component {
4
+ state: {
5
+ input: import("../../utilities").Ref<string>;
6
+ };
7
+ template: () => Template;
8
+ }
9
+ export declare class OnModelOnlyApp extends Component {
10
+ calls: string[];
11
+ template: () => Template;
12
+ }
13
+ export declare class OnModelOrderApp extends Component {
14
+ state: {
15
+ input: import("../../utilities").Ref<string>;
16
+ };
17
+ template: () => Template;
18
+ }
@@ -0,0 +1,64 @@
1
+ import { Component } from '../../src/component/Component';
2
+ import { type Template } from '../../src/types';
3
+ export declare const mutationSignal: import("../../reactive").Reactive<{
4
+ label: string;
5
+ }>;
6
+ export declare const resetMutationSignal: () => void;
7
+ type ChildProps = {
8
+ label?: string;
9
+ };
10
+ export declare class OnMutationStateApp extends Component {
11
+ mutations: number;
12
+ state: {
13
+ label: string;
14
+ tick: number;
15
+ };
16
+ onMutation(): void;
17
+ template: () => Template;
18
+ }
19
+ export declare class OnMutationChild extends Component<ChildProps> {
20
+ mutations: number;
21
+ onMutation(): void;
22
+ template: () => Template;
23
+ }
24
+ export declare class OnMutationPropParent extends Component {
25
+ mutations: number;
26
+ state: {
27
+ label: string;
28
+ };
29
+ onMutation(): void;
30
+ template: () => Template;
31
+ }
32
+ export declare class OnMutationSignalApp extends Component {
33
+ mutations: number;
34
+ onMutation(): void;
35
+ template: () => Template;
36
+ }
37
+ export declare class OnMutationListApp extends Component {
38
+ mutations: number;
39
+ state: {
40
+ items: {
41
+ id: string;
42
+ text: string;
43
+ }[];
44
+ };
45
+ onMutation(): void;
46
+ template: () => Template;
47
+ }
48
+ export declare class OnMutationSwapApp extends Component {
49
+ mutations: number;
50
+ state: {
51
+ show: "a" | "b";
52
+ };
53
+ onMutation(): void;
54
+ template: () => Template;
55
+ }
56
+ export declare class OnMutationClassApp extends Component {
57
+ mutations: number;
58
+ state: {
59
+ active: boolean;
60
+ };
61
+ onMutation(): void;
62
+ template: () => Template;
63
+ }
64
+ export {};
@@ -14,7 +14,6 @@ export declare class StateApp extends Component {
14
14
  };
15
15
  };
16
16
  };
17
- onRender: (_renderTrigger?: string[]) => void;
18
17
  onDispose: () => void;
19
18
  template: () => Template;
20
19
  }
@@ -6,7 +6,6 @@ export type StateInPropsChildProps = {
6
6
  };
7
7
  };
8
8
  export declare class StateInPropsChild extends Component<StateInPropsChildProps> {
9
- onRender: (_renderTrigger?: string[]) => void;
10
9
  template: () => Template;
11
10
  }
12
11
  export declare class StateInProps extends Component {
@@ -15,6 +14,5 @@ export declare class StateInProps extends Component {
15
14
  nestedValue: string;
16
15
  };
17
16
  };
18
- onRender: (_renderTrigger?: string[]) => void;
19
17
  template: () => Template;
20
18
  }
@@ -12,7 +12,6 @@ export declare class TestComp extends Component<TestCompProps> {
12
12
  state2: {
13
13
  number: number;
14
14
  };
15
- onRender: (_renderTrigger?: string[]) => void;
16
15
  onDispose: () => void;
17
16
  template: () => Template;
18
17
  }
@@ -0,0 +1 @@
1
+ import './fixtures/OnModelBinding';
@@ -0,0 +1 @@
1
+ import './fixtures/OnMutation';
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../render-Dli1vT-6.js");var t=(e,n)=>{let r=Array.from(e.querySelectorAll(n)),i=e=>{for(let i of t(e,n))r.includes(i)||r.push(i)};e instanceof HTMLElement&&e.shadowRoot&&i(e.shadowRoot);for(let t of e.querySelectorAll(`*`))t.shadowRoot&&i(t.shadowRoot);return r},n=(e,n)=>t(e,n)[0],r=async(e,t,r=2e3)=>{let i=performance.now();for(;performance.now()-i<r;){let r=n(e,t);if(r)return r;await new Promise(e=>setTimeout(e,25))}throw Error(`Timeout waiting for ${t}`)},i=()=>{let t={screen(n){return e.n(n,document.body),t},body(){return document.body},root(){return document.body.firstElementChild},getComponent(e){return n(document.body,e)}};return t};exports.present=i,exports.query=n,exports.queryAll=t,exports.waitFor=r;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../render-gNOLrCHj.js");var t=(e,n)=>{let r=Array.from(e.querySelectorAll(n)),i=e=>{for(let i of t(e,n))r.includes(i)||r.push(i)};e instanceof HTMLElement&&e.shadowRoot&&i(e.shadowRoot);for(let t of e.querySelectorAll(`*`))t.shadowRoot&&i(t.shadowRoot);return r},n=(e,n)=>t(e,n)[0],r=async(e,t,r=2e3)=>{let i=performance.now();for(;performance.now()-i<r;){let r=n(e,t);if(r)return r;await new Promise(e=>setTimeout(e,25))}throw Error(`Timeout waiting for ${t}`)},i=()=>{let t={screen(n){return e.n(n,document.body),t},body(){return document.body},root(){return document.body.firstElementChild},getComponent(e){return n(document.body,e)}};return t};exports.present=i,exports.query=n,exports.queryAll=t,exports.waitFor=r;
package/dist/utilities.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-lujR-c6b.js"),t=require("./utilities-2r7JOSrZ.js");exports.camelToKebabCase=t.t,exports.fastUID=t.n,exports.makeCssStylesheet=t.r,exports.mergeClasses=e.a,exports.ref=t.i,exports.render=t.a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-DuxHz4sk.js"),t=require("./utilities-2r7JOSrZ.js");exports.camelToKebabCase=t.t,exports.fastUID=t.n,exports.makeCssStylesheet=t.r,exports.mergeClasses=e.a,exports.ref=t.i,exports.render=t.a;
@@ -0,0 +1 @@
1
+ var e={EVENT:0,PROP:1,MODEL:2,STD:3,REF:4,DIRECT_CLASS:5,DIRECT_PROP:6,ONMODEL:7},t=RegExp(`₥(\\d+)`),n=e=>{let n=e.match(t);if(!n)throw Error(`Unable to extract index from hole comment`);return Number(n[1])},r=e=>`<!--₥${e}-->`,i=e=>e.replace(/(\S+)=((<!--[\s\S]*?-->)|([^\s'">]+))/g,`$1="$2"`),a=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`source`,`track`,`wbr`]),o=/<([a-zA-Z][a-zA-Z0-9-]*)((?:"<!--[^<>]*-->"|"[^"<>]*"|'[^'<>]*'|[^<>])*?)\s*\/>/g,s=e=>e.replace(o,(e,t,n)=>a.has(t.toLowerCase())?e:`<${t}${n}></${t}>`),c=(e,t)=>{let n=new Set,r=``,i=e=>{let t=e.split(` `);for(let e=0;e<t.length;e++){let i=t[e];i&&!n.has(i)&&(n.add(i),r.length&&(r+=` `),r+=i)}};return i(e),i(t),r};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neuralfog/elemix",
3
- "version": "0.5.8",
3
+ "version": "0.5.9",
4
4
  "license": "MIT",
5
5
  "author": "brownhounds",
6
6
  "main": "dist/index.js",
@@ -1 +0,0 @@
1
- const e=require("./renderers-BBOJdSjj.js");var t=class{renderTrigger;subscribers=new Set;proxy;proxySet=new WeakSet;get value(){return this.proxy}constructor(e,t){this.renderTrigger=t,this.proxy=this.create(e)}subscribe(e){return this.subscribers.has(e)||this.subscribers.add(e),this}unsubscribe(e){return this.subscribers.delete(e),this}create(t){let n=this;return new Proxy(t,{get(t,i){let a=t[i];r(a);let o=e.n.active;if(o&&(n.subscribers.add(o),o.tracked.add(n)),typeof a==`object`&&a&&!n.proxySet.has(a)){let e=new Proxy(a,this);return n.proxySet.add(e),e}return a},set(e,t,i){return e[t]=i,r(e),n.notify(),!0}})}notify(){for(let e of this.subscribers)e.render(this.renderTrigger)}},n=`Reactive state does not support collections: Map, WeakMap, Set, WeakSet`,r=e=>{if(e instanceof Map||e instanceof WeakMap||e instanceof Set||e instanceof WeakSet)throw Error(n)};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
@@ -1 +0,0 @@
1
- const e=require("./utils-lujR-c6b.js");var t={deletes:[],inserts:[],moves:[]},n=(e,n)=>{let i=e.length,a=n.length;if(i===a){let r=!0;for(let t=0;t<i;t++)if(e[t].key!==n[t].key){r=!1;break}if(r)return t}let o=Object.create(null);for(let t=0;t<i;t++)o[e[t].key]=t;let s=new Int32Array(a),c=[],l=[],u=Object.create(null);for(let e=0;e<a;e++){let t=n[e].key;u[t]=!0;let r=o[t];r===void 0?s[e]=-1:(s[e]=r,c.push(r),l.push(e))}let d=r(c),f=new Uint8Array(a);for(let e=0;e<d.length;e++)f[l[d[e]]]=1;let p=[],m=[],h=[];for(let t=0;t<i;t++)u[e[t].key]!==!0&&p.push({key:e[t].key});for(let e=0;e<a;e++){let t=e+1<a?n[e+1].key:void 0;s[e]===-1?m.push({key:n[e].key,value:n[e],beforeKey:t}):f[e]||h.push({key:n[e].key,beforeKey:t})}return{deletes:p,inserts:m,moves:h}},r=e=>{let t=e.length;if(t===0)return[];let n=new Int32Array(t),r=new Int32Array(t),i=0;for(let a=0;a<t;a++){let t=0,o=i;for(;t<o;){let n=t+o>>>1;e[r[n]]<e[a]?t=n+1:o=n}r[t]=a,t===i&&i++,n[a]=t>0?r[t-1]:-1}let a=Array(i),o=r[i-1];for(let e=i-1;e>=0;e--)a[e]=o,o=n[o];return a},i=e=>typeof e==`object`&&!!e&&`strings`in e&&`values`in e,a=/(\S+)(?==(?:["']?)$)/,o=(t,n)=>{let r=t.match(a);if(!r)return;let i=r[1],o={index:n,name:i,value:e.i(n),virtual:!1,type:e.o.STD},s=i[0];return s===`@`?(o.virtual=!0,o.type=e.o.EVENT):s===`:`?(o.virtual=!0,o.type=i.endsWith(`:ref`)?e.o.REF:e.o.PROP):s===`~`&&i.startsWith(`~model`)?(o.virtual=!0,o.type=e.o.MODEL):s===`.`&&(o.virtual=!0,o.type=i.startsWith(`.class`)?e.o.DIRECT_CLASS:e.o.DIRECT_PROP),o},s=new Map,c=e=>{let t=s.get(e);if(t)return t;let n=``;for(let t=0;t<e.length;t++){let r=e[t],i=r.charCodeAt(0);n+=i>=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122||r===`-`||r===`_`?r:`\\${r}`}return s.set(e,n),n},l=(e,t,n)=>{for(let r=0,i=t.length;r<i;r++){let i=t[r],a=e.querySelector(`[${c(i.name)}='${i.value}']`);a&&(i.virtual&&a.removeAttribute(i.name),n.set(i.index,C[i.type](a,i)))}},u=e=>Array.isArray(e)?`list`:i(e)?`template`:`string`,d=(e,t,n)=>e===`list`?h(t,n):e===`template`?m(t,n):p(t),f=(e,t,n)=>{let r,i;return e=>{let a=u(e);i&&i!==a&&(r?.dispose(),r=void 0),r||(r=d(a,t,n),i=a),r.update(e)}},p=e=>{let t=document.createTextNode(``);return e.before(t),{update:e=>{let n=e==null?``:String(e);t.textContent!==n&&(t.textContent=n)},dispose:()=>{t.remove()}}},m=(e,t)=>{let n,r,i=[],a=()=>{for(let e=0;e<i.length;e++)i[e].remove();i=[]};return{update:o=>{let s=o;n!==s.strings&&(r=void 0,a()),r||(r=t(s),n=s.strings,i=r.mountBefore(e,s.values)),r.update(s.values)},dispose:a}},h=(e,t)=>{let r=new Map,i=new Map,a=[],o=(n,a)=>{if(!n.key)throw Error(`use repeat directive when rendering the lists`);let o=r.get(n.key);if(!o){o=t(n),r.set(n.key,o);let s=a||e,c=o.mountBefore(s,n.values);c.length&&i.set(n.key,c[c.length-1])}return o},s=()=>{for(let[,e]of i)e.remove();r.clear(),i.clear()},c=e=>{for(let t=0;t<e.length;t++)o(e[t]).update(e[t].values)};return{update:t=>{let l=t;if(!a.length){c(l),a=l;return}if(!l.length){s(),a=l;return}let{deletes:u,inserts:d,moves:f}=n(a,l);if(u.length===l.length||d.length===l.length){s(),c(l),a=l;return}for(let e=u.length-1;e>=0;e--){let t=u[e].key;i.get(t)?.remove(),i.delete(t),r.delete(t)}for(let t=f.length-1;t>=0;t--){let n=i.get(f[t].key),r=i.get(f[t].beforeKey);n&&r?r.before(n):n&&e.before(n)}for(let e=d.length-1;e>=0;e--){let t=i.get(d[e].beforeKey);o(d[e].value,t)}for(let e=0;e<l.length;e++)r.get(l[e].key)?.update(l[e].values);a=l},dispose:()=>{s(),a=[]}}},g=(e,t)=>{let n,{name:r}=t;return t=>{if(t===void 0)return;let i=String(t);n!==i&&(n=i,e.setAttribute(r,i))}},_=(e,t)=>{let n,r=`on${t.name.slice(1)}`;return t=>{t===void 0||n===t||(n=t,e[r]=t)}},v=(e,t)=>{let n=t.name.slice(1);return t=>{let r=e;if(r.$props){r.$props.set(n,t);return}r.__pendingProps||={},r.__pendingProps[n]=t}},y=e=>t=>{if(t===void 0)return;let n=t,r=e;r.value!==n.value&&(r.value=n.value),e.oninput||=e=>{n.value=e.target.value}},b=e=>t=>{t!==void 0&&(t.value=e)},x=t=>{let n=t.getAttribute(`class`)||``,r;return i=>{if(i==null){n.length&&r!==n&&(r=n,t.setAttribute(`class`,n));return}if(typeof i==`string`){let a=e.a(n,i);r!==a&&(r=a,t.setAttribute(`class`,a));return}if(typeof i==`object`){let a=``;for(let[e,t]of Object.entries(i))t&&(a.length&&(a+=` `),a+=e);let o=e.a(n,a);r!==o&&(r=o,t.setAttribute(`class`,o))}}},S=(e,t)=>{let n=t.name.slice(1),r;return t=>{r!==t&&(r=t,e[n]=t)}},C={[e.o.STD]:g,[e.o.EVENT]:_,[e.o.PROP]:v,[e.o.MODEL]:e=>y(e),[e.o.REF]:e=>b(e),[e.o.DIRECT_CLASS]:e=>x(e),[e.o.DIRECT_PROP]:S},w=t=>{let n=new Map,r=[],i,a=``,{strings:s}=t;for(let t=0,n=s.length;t<n;t++)if(a+=s[t],t<n-1){let n=o(s[t],t);n&&r.push(n),a+=e.i(t)}a=e.n(e.t(a));let c=()=>(i||(i=document.createElement(`template`),i.innerHTML=a),i.content.cloneNode(!0)),u=(t,i)=>{let a=document.createTreeWalker(t,NodeFilter.SHOW_COMMENT,null);for(;a.nextNode();){let{nodeValue:t}=a.currentNode;if(t?.startsWith(`₥`)){let r=e.r(t);n.set(r,f(i[r],a.currentNode,w))}}l(t,r,n)},d=e=>{for(let[t,r]of n)r(e[t])};return{mount:(e,t)=>{let n=c();u(n,t),d(t),e.appendChild(n)},mountBefore:(e,t)=>{let n=c();u(n,t),d(t);let r=Array.from(n.childNodes);return e.before(n),r},update:e=>{for(let[t,r]of n)r(e[t])}}},T=(e,...t)=>({strings:e,values:t,key:``}),E=Symbol(),D=(e,t)=>{if(!t)throw Error(`render method needs to accept instance of HTMLElement`);let n=t;n[E]||(n[E]=new Map);let r=n[E],i=r.get(e.strings);i||(i=w(e),r.set(e.strings,i),i.mount(t,e.values)),i.update(e.values)};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return T}});
@@ -1 +0,0 @@
1
- export {};
@@ -1,14 +0,0 @@
1
- import { Component } from '../../src/component/Component';
2
- import { type Template } from '../../src/types';
3
- export declare const CUSTOM_STATE_FLAG_1 = "user defined state flag 1";
4
- export declare const CUSTOM_STATE_FLAG_2 = "user defined state flag 2";
5
- export declare class FlagsApp extends Component {
6
- state: {
7
- value: string;
8
- };
9
- state2: {
10
- value: string;
11
- };
12
- onRender: (_renderTrigger?: string[]) => void;
13
- template: () => Template;
14
- }
@@ -1,4 +0,0 @@
1
- export declare const CUSTOM_SIGNAL_FLAG = "user defined signal flag";
2
- export declare const signalWithFlag: import("../../reactive").Reactive<{
3
- value: string;
4
- }>;
@@ -1 +0,0 @@
1
- import './fixtures/FlagsApp';
@@ -1 +0,0 @@
1
- var e=require("./render-Dli1vT-6.js").t,t={PROPS:`PROPS`,SIGNAL:`SIGNAL`,LOCAL_STATE:`LOCAL_STATE`,ON_MOUNT:`ON_MOUNT`};Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
@@ -1 +0,0 @@
1
- var e={EVENT:0,PROP:1,MODEL:2,STD:3,REF:4,DIRECT_CLASS:5,DIRECT_PROP:6},t=RegExp(`₥(\\d+)`),n=e=>{let n=e.match(t);if(!n)throw Error(`Unable to extract index from hole comment`);return Number(n[1])},r=e=>`<!--₥${e}-->`,i=e=>e.replace(/(\S+)=((<!--[\s\S]*?-->)|([^\s'">]+))/g,`$1="$2"`),a=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`source`,`track`,`wbr`]),o=/<([a-zA-Z][a-zA-Z0-9-]*)((?:"<!--[^<>]*-->"|"[^"<>]*"|'[^'<>]*'|[^<>])*?)\s*\/>/g,s=e=>e.replace(o,(e,t,n)=>a.has(t.toLowerCase())?e:`<${t}${n}></${t}>`),c=(e,t)=>{let n=new Set,r=``,i=e=>{let t=e.split(` `);for(let e=0;e<t.length;e++){let i=t[e];i&&!n.has(i)&&(n.add(i),r.length&&(r+=` `),r+=i)}};return i(e),i(t),r};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});