@neuralfog/elemix 0.5.7 → 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.
- package/README.md +37 -3
- package/dist/Reactive-DqnnbkBS.js +1 -0
- package/dist/decorators.js +1 -1
- package/dist/index.js +1 -1
- package/dist/reactive.js +1 -1
- package/dist/render-gNOLrCHj.js +1 -0
- package/dist/render.js +1 -1
- package/dist/signal.js +1 -1
- package/dist/src/Reactive.d.ts +1 -3
- package/dist/src/Signal.d.ts +1 -1
- package/dist/src/component/Component.d.ts +3 -3
- package/dist/src/component/Renderer.d.ts +1 -3
- package/dist/src/decorators/state.d.ts +1 -1
- package/dist/src/renderer/holes.d.ts +2 -0
- package/dist/src/renderer/render.d.ts +1 -1
- package/dist/src/renderer/types.d.ts +1 -0
- package/dist/src/types.d.ts +0 -7
- package/dist/test/before-mount-once.test.d.ts +1 -12
- package/dist/test/fixtures/BeforeMountOnce.d.ts +22 -0
- package/dist/test/fixtures/LifeCycle.d.ts +0 -1
- package/dist/test/fixtures/LifeCycleNoTemplate.d.ts +0 -1
- package/dist/test/fixtures/MainApp.d.ts +0 -1
- package/dist/test/fixtures/OnModelBinding.d.ts +18 -0
- package/dist/test/fixtures/OnMutation.d.ts +64 -0
- package/dist/test/fixtures/StateApp.d.ts +0 -1
- package/dist/test/fixtures/StateInProps.d.ts +0 -2
- package/dist/test/fixtures/TestComp.d.ts +0 -1
- package/dist/test/on-model-binding.test.d.ts +1 -0
- package/dist/test/on-mutation.test.d.ts +1 -0
- package/dist/testing/index.js +1 -1
- package/dist/utilities.js +1 -1
- package/dist/utils-DuxHz4sk.js +1 -0
- package/package.json +1 -1
- package/dist/Reactive-CQV_s8zX.js +0 -1
- package/dist/render-Dli1vT-6.js +0 -1
- package/dist/test/fixtures/FlagsApp.d.ts +0 -14
- package/dist/test/fixtures/SignalCustomFlag.d.ts +0 -4
- package/dist/test/user-defined-render-flags.test.d.ts +0 -1
- package/dist/types-DVvjIrJ6.js +0 -1
- 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`, `
|
|
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
|
-
|
|
300
|
-
// Called after
|
|
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}});
|
package/dist/decorators.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./
|
|
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-
|
|
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-
|
|
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-
|
|
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("./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./Reactive-DqnnbkBS.js");var t=t=>new e.t(t);exports.signal=t;
|
package/dist/src/Reactive.d.ts
CHANGED
|
@@ -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
|
|
7
|
+
constructor(state: any);
|
|
10
8
|
subscribe(instance: Component): Reactive<State>;
|
|
11
9
|
unsubscribe(instance: Component): Reactive<State>;
|
|
12
10
|
private create;
|
package/dist/src/Signal.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Reactive } from './Reactive';
|
|
2
|
-
export declare const signal: <State>(state: State
|
|
2
|
+
export declare const signal: <State>(state: State) => Reactive<State>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { Template } from '../types';
|
|
2
2
|
import { Styles } from './Styles';
|
|
3
3
|
type Trackable = {
|
|
4
4
|
unsubscribe(c: Component): unknown;
|
|
@@ -26,11 +26,11 @@ export declare class Component<ComponentProps = unknown> extends HTMLElement {
|
|
|
26
26
|
private attachFormInternals;
|
|
27
27
|
disconnectedCallback(): void;
|
|
28
28
|
template(): Template;
|
|
29
|
-
|
|
29
|
+
onMutation(): void;
|
|
30
30
|
beforeMount(): void;
|
|
31
31
|
onMount(): void;
|
|
32
32
|
onDispose(): void;
|
|
33
|
-
render(
|
|
33
|
+
render(isConnectedCallback?: boolean): void;
|
|
34
34
|
setControlStyles(styles: CSSStyleSheet[]): void;
|
|
35
35
|
private unsubscribeFromSignals;
|
|
36
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(
|
|
7
|
+
schedule(isConnectedCallback?: boolean): void;
|
|
10
8
|
private render;
|
|
11
9
|
}
|
|
@@ -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) =>
|
|
3
|
+
export declare const render: (template: HtmlTemplate, container: HTMLElement | null) => boolean;
|
package/dist/src/types.d.ts
CHANGED
|
@@ -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
|
|
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;
|
|
@@ -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 {};
|
|
@@ -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
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './fixtures/OnModelBinding';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './fixtures/OnMutation';
|
package/dist/testing/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../render-
|
|
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-
|
|
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 +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}});
|
package/dist/render-Dli1vT-6.js
DELETED
|
@@ -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,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 +0,0 @@
|
|
|
1
|
-
import './fixtures/FlagsApp';
|
package/dist/types-DVvjIrJ6.js
DELETED
|
@@ -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}});
|
package/dist/utils-lujR-c6b.js
DELETED
|
@@ -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}});
|