ajo 0.0.25 → 0.0.26
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/index.cjs +10 -8
- package/index.js +10 -7
- package/index.min.js +1 -1
- package/package.json +1 -1
- package/readme.md +3 -3
package/index.cjs
CHANGED
|
@@ -25,6 +25,7 @@ __export(ajo_exports, {
|
|
|
25
25
|
useCatch: () => useCatch,
|
|
26
26
|
useEffect: () => useEffect,
|
|
27
27
|
useHost: () => useHost,
|
|
28
|
+
useInsert: () => useInsert,
|
|
28
29
|
useLayout: () => useLayout,
|
|
29
30
|
useMemo: () => useMemo,
|
|
30
31
|
useReducer: () => useReducer,
|
|
@@ -88,7 +89,7 @@ const Fragment = ({ children }) => children, h = (nodeName, props, ...children)
|
|
|
88
89
|
const prev = stack[i][0], next = isFunction(value) ? value(prev) : value;
|
|
89
90
|
if (is(prev, stack[i][0] = isFunction(fn) ? fn(prev, next) : next))
|
|
90
91
|
return;
|
|
91
|
-
|
|
92
|
+
runMutation(host);
|
|
92
93
|
}
|
|
93
94
|
];
|
|
94
95
|
return stack[hooks[0]++];
|
|
@@ -105,7 +106,7 @@ const Fragment = ({ children }) => children, h = (nodeName, props, ...children)
|
|
|
105
106
|
setValue(value2);
|
|
106
107
|
};
|
|
107
108
|
return [value, () => setValue()];
|
|
108
|
-
}, useHost = () => current, useState = (init) => useReducer(null, init), useRef = (current2) => useMemo(() => ({ current: current2 }), []), useCallback = (fn, deps) => useMemo(() => fn, deps), useLayout = (fn, deps) => useFx(fn, deps, "$layout"), useEffect = (fn, deps) => useFx(fn, deps, "$effect");
|
|
109
|
+
}, useHost = () => current, useState = (init) => useReducer(null, init), useRef = (current2) => useMemo(() => ({ current: current2 }), []), useCallback = (fn, deps) => useMemo(() => fn, deps), useInsert = (fn, deps) => useFx(fn, deps, "$insert"), useLayout = (fn, deps) => useFx(fn, deps, "$layout"), useEffect = (fn, deps) => useFx(fn, deps, "$effect");
|
|
109
110
|
const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
110
111
|
}, FN = Symbol(), isObject = (v) => v && typeof v == "object", isFunction = (v) => typeof v == "function", some = (a, b) => isArray(a) && isArray(b) ? a.some((v, i) => !is(v, b[i])) : !is(a, b), reduce = (v) => from(v).reduce(assign, {}), assign = (v, { name, value }) => (v[name] = value, v), microtask = globalThis.queueMicrotask ?? ((fn) => fn()), task = globalThis.requestAnimationFrame ?? microtask, create = (ns, name, key) => {
|
|
111
112
|
const node = ns ? document.createElementNS(ns, name) : document.createElement(name);
|
|
@@ -180,7 +181,7 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
180
181
|
current = null;
|
|
181
182
|
layoutQueue.add(host);
|
|
182
183
|
host.$layoutQueued = true;
|
|
183
|
-
layoutId ??= task(
|
|
184
|
+
layoutId ??= task(runLayout);
|
|
184
185
|
}
|
|
185
186
|
}, runIdle = () => {
|
|
186
187
|
idleId = null;
|
|
@@ -189,7 +190,7 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
189
190
|
host.$idle = false;
|
|
190
191
|
schedule(host);
|
|
191
192
|
}
|
|
192
|
-
},
|
|
193
|
+
}, runMutation = (host) => {
|
|
193
194
|
if (host.$runQueued)
|
|
194
195
|
return;
|
|
195
196
|
host.$runQueued = true;
|
|
@@ -197,11 +198,12 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
197
198
|
host.$runQueued = false;
|
|
198
199
|
run(host);
|
|
199
200
|
});
|
|
200
|
-
},
|
|
201
|
+
}, runLayout = () => {
|
|
201
202
|
layoutId = null;
|
|
202
203
|
for (const host of layoutQueue) {
|
|
203
204
|
layoutQueue.delete(host);
|
|
204
205
|
host.$layoutQueued = false;
|
|
206
|
+
runFx(host, "$insert");
|
|
205
207
|
try {
|
|
206
208
|
render(host.$h, host);
|
|
207
209
|
host.$h = null;
|
|
@@ -211,10 +213,10 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
211
213
|
runFx(host, "$layout");
|
|
212
214
|
effectQueue.add(host);
|
|
213
215
|
host.$effectQueued = true;
|
|
214
|
-
effectId ??= task(
|
|
216
|
+
effectId ??= task(runEffect);
|
|
215
217
|
}
|
|
216
218
|
}
|
|
217
|
-
},
|
|
219
|
+
}, runEffect = () => {
|
|
218
220
|
effectId = null;
|
|
219
221
|
for (const host of effectQueue) {
|
|
220
222
|
effectQueue.delete(host);
|
|
@@ -259,7 +261,7 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
259
261
|
effectQueue.delete(host);
|
|
260
262
|
host.$effectQueued = false;
|
|
261
263
|
}
|
|
262
|
-
for (const key of ["$layout", "$effect"])
|
|
264
|
+
for (const key of ["$insert", "$layout", "$effect"])
|
|
263
265
|
if (host[key]) {
|
|
264
266
|
for (const fx of host[key]) {
|
|
265
267
|
host[key].delete(fx);
|
package/index.js
CHANGED
|
@@ -79,7 +79,7 @@ export const
|
|
|
79
79
|
|
|
80
80
|
if (is(prev, stack[i][0] = isFunction(fn) ? fn(prev, next) : next)) return
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
runMutation(host)
|
|
83
83
|
}
|
|
84
84
|
]
|
|
85
85
|
|
|
@@ -115,6 +115,7 @@ export const
|
|
|
115
115
|
useRef = current => useMemo(() => ({ current }), []),
|
|
116
116
|
useCallback = (fn, deps) => useMemo(() => fn, deps),
|
|
117
117
|
|
|
118
|
+
useInsert = (fn, deps) => useFx(fn, deps, '$insert'),
|
|
118
119
|
useLayout = (fn, deps) => useFx(fn, deps, '$layout'),
|
|
119
120
|
useEffect = (fn, deps) => useFx(fn, deps, '$effect')
|
|
120
121
|
|
|
@@ -228,7 +229,7 @@ const
|
|
|
228
229
|
current = null
|
|
229
230
|
layoutQueue.add(host)
|
|
230
231
|
host.$layoutQueued = true
|
|
231
|
-
layoutId ??= task(
|
|
232
|
+
layoutId ??= task(runLayout)
|
|
232
233
|
}
|
|
233
234
|
},
|
|
234
235
|
|
|
@@ -243,7 +244,7 @@ const
|
|
|
243
244
|
}
|
|
244
245
|
},
|
|
245
246
|
|
|
246
|
-
|
|
247
|
+
runMutation = host => {
|
|
247
248
|
|
|
248
249
|
if (host.$runQueued) return
|
|
249
250
|
|
|
@@ -254,7 +255,7 @@ const
|
|
|
254
255
|
})
|
|
255
256
|
},
|
|
256
257
|
|
|
257
|
-
|
|
258
|
+
runLayout = () => {
|
|
258
259
|
|
|
259
260
|
layoutId = null
|
|
260
261
|
|
|
@@ -263,6 +264,8 @@ const
|
|
|
263
264
|
layoutQueue.delete(host)
|
|
264
265
|
host.$layoutQueued = false
|
|
265
266
|
|
|
267
|
+
runFx(host, '$insert')
|
|
268
|
+
|
|
266
269
|
try {
|
|
267
270
|
render(host.$h, host)
|
|
268
271
|
host.$h = null
|
|
@@ -272,12 +275,12 @@ const
|
|
|
272
275
|
runFx(host, '$layout')
|
|
273
276
|
effectQueue.add(host)
|
|
274
277
|
host.$effectQueued = true
|
|
275
|
-
effectId ??= task(
|
|
278
|
+
effectId ??= task(runEffect)
|
|
276
279
|
}
|
|
277
280
|
}
|
|
278
281
|
},
|
|
279
282
|
|
|
280
|
-
|
|
283
|
+
runEffect = () => {
|
|
281
284
|
|
|
282
285
|
effectId = null
|
|
283
286
|
|
|
@@ -333,7 +336,7 @@ const
|
|
|
333
336
|
host.$effectQueued = false
|
|
334
337
|
}
|
|
335
338
|
|
|
336
|
-
for (const key of ['$layout', '$effect']) if (host[key]) {
|
|
339
|
+
for (const key of ['$insert', '$layout', '$effect']) if (host[key]) {
|
|
337
340
|
|
|
338
341
|
for (const fx of host[key]) {
|
|
339
342
|
|
package/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var ajo=(()=>{var x=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var u in t)x(e,u,{get:t[u],enumerable:!0})},J=(e,t,u,
|
|
1
|
+
var ajo=(()=>{var x=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var u in t)x(e,u,{get:t[u],enumerable:!0})},J=(e,t,u,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of W(t))!D.call(e,n)&&n!==u&&x(e,n,{get:()=>t[n],enumerable:!(l=V(t,n))||l.enumerable});return e};var K=e=>J(x({},"__esModule",{value:!0}),e);var ye={};G(ye,{Fragment:()=>U,component:()=>X,h:()=>T,render:()=>Q,useCallback:()=>h,useCatch:()=>Y,useEffect:()=>ne,useHost:()=>p,useInsert:()=>ee,useLayout:()=>te,useMemo:()=>w,useReducer:()=>S,useRef:()=>_,useState:()=>Z});const U=({children:e})=>e,T=(e,t,...u)=>{const{length:l}=u;return u=l==0?null:l==1?u[0]:u,{children:u,...t,nodeName:e}},Q=(e,t,u)=>{let l=t.firstChild;for(e of b(e)){let n=l;if(e instanceof Node)n=e;else if(typeof e=="string"){for(;n&&n.nodeType!=3;)n=n.nextSibling;n?n.data!=e&&(n.data=e):n=document.createTextNode(e)}else{const{xmlns:r=u,nodeName:a,key:i,ref:o,memo:A,children:z,[E]:F,...P}=e;for(;n&&!(n.localName==a&&$(n.$key??=i,i));)n=n.nextSibling;n??=ie(r,a,i),ue(o)&&(o.current=n,n.$ref=o),(A==null||v(n.$deps,n.$deps=A))&&(fe(P,n),f(F)?F(n):Q(z,n,r))}n==l?l=l.nextSibling:oe(t,n,l)}for(;l;){const n=l.nextSibling;H(l),t.removeChild(l),l=n}},X=e=>({nodeName:t,as:u,props:l,key:n,ref:r,memo:a,...i})=>T(u??e?.as??"c-host",{...e?.props,...l,key:n,ref:r,memo:a,[E]:o=>{o.$fn=f(e)?e:le,o.$args={...e?.args,...i},M(o)}}),S=(e,t)=>{const u=p(),l=g(),[n,r]=l;return n==r.length&&(r[n]=[f(t)?t():t,a=>{const i=r[n][0],o=f(a)?a(i):a;$(i,r[n][0]=f(e)?e(i,o):o)||de(u)}]),r[l[0]++]},w=(e,t)=>{const u=g(),[l,n]=u;return(l==n.length||t==null||v(t,n[l][1]))&&(n[l]=[e(),t]),n[u[0]++][0]},Y=e=>{const t=p(),[u,l]=S(),n=g(),[r,a]=n;return a[n[0]++]=e,t.$catch??=i=>{f(a[r])&&a[r](i),l(i)},[u,()=>l()]},p=()=>c,Z=e=>S(null,e),_=e=>w(()=>({current:e}),[]),h=(e,t)=>w(()=>e,t),ee=(e,t)=>I(e,t,"$insert"),te=(e,t)=>I(e,t,"$layout"),ne=(e,t)=>I(e,t,"$effect"),{isArray:s,from:C}=Array,{is:$}=Object,le=()=>{},E=Symbol(),ue=e=>e&&typeof e=="object",f=e=>typeof e=="function",v=(e,t)=>s(e)&&s(t)?e.some((u,l)=>!$(u,t[l])):!$(e,t),re=e=>C(e).reduce(ae,{}),ae=(e,{name:t,value:u})=>(e[t]=u,e),j=globalThis.queueMicrotask??(e=>e()),q=globalThis.requestAnimationFrame??j,ie=(e,t,u)=>{const l=e?document.createElementNS(e,t):document.createElement(t);return l.$key=u,l},b=function*(e,t={data:""},u=!0){let l;for(e of s(e)?e:[e])e==null||typeof e=="boolean"||(typeof e.nodeName=="string"?((l=t.data)&&(t.data="",yield l),yield e):f(e.nodeName)?yield*b(e.nodeName(e),t,!1):s(e)?yield*b(e,t,!1):t.data+=e);u&&(l=t.data)&&(yield l)},fe=(e,t)=>{const u=t.$props??=t.hasAttributes()?re(t.attributes):{};for(const l in{...u,...t.$props=e}){let n=e[l];n!==u[l]&&(l.startsWith("set:")?t[l.slice(4)]=n:n==null||n===!1?t.removeAttribute(l):t.setAttribute(l,n===!0?"":n))}},oe=(e,t,u)=>{if(t.contains?.(document.activeElement)){const l=t.nextSibling;for(;u&&u!=t;){const n=u.nextSibling;e.insertBefore(u,l),u=n}}else e.insertBefore(t,u)},g=()=>c.$hooks??=[0,[]],I=(e,t,u)=>{const l=p(),n=g(),[r,a]=n;r==a.length?(l[u]??=new Set).add(a[r]=[null,e,t]):(t==null||v(t,a[r][2]))&&(a[r][1]=e,a[r][2]=t),n[0]++},M=e=>{if(!e.$idle){if(globalThis.navigator?.scheduling?.isInputPending()){d.add(e),e.$idle=!0,R??=requestIdleCallback(ce);return}B(e)}},B=e=>{e.$idle&&(d.delete(e),e.$idle=!1),c=e,c.$hooks&&(c.$hooks[0]=0);try{e.$h=e.$fn(e.$args)}catch(t){k(t,e.parentNode)}finally{c=null,y.add(e),e.$layoutQueued=!0,L??=q(se)}},ce=()=>{R=null;for(const e of C(d))d.delete(e),e.$idle=!1,M(e)},de=e=>{e.$runQueued||(e.$runQueued=!0,j(()=>{e.$runQueued=!1,B(e)}))},se=()=>{L=null;for(const e of y){y.delete(e),e.$layoutQueued=!1,N(e,"$insert");try{Q(e.$h,e),e.$h=null}catch(t){k(t,e)}finally{N(e,"$layout"),m.add(e),e.$effectQueued=!0,O??=q($e)}}},$e=()=>{O=null;for(const e of m)m.delete(e),e.$effectQueued=!1,N(e,"$effect")},N=(e,t)=>{if(e[t])for(const u of e[t]){const[l,n]=u;if(f(n))try{f(l)&&l(),u[0]=n()}catch(r){u[0]=null,k(r,e.parentNode)}finally{u[1]=null}}},H=e=>{if(e.nodeType==1){for(const t of e.children)H(t);if(e.$ref&&(e.$ref.current=null),!!e.$fn){e.$idle&&(d.delete(e),e.$idle=!1),e.$layoutQueued&&(y.delete(e),e.$layoutQueued=!1),e.$effectQueued&&(m.delete(e),e.$effectQueued=!1);for(const t of["$insert","$layout","$effect"])if(e[t])for(const u of e[t]){e[t].delete(u);try{const[l]=u;f(l)&&l()}catch(l){k(l,e.parentNode)}finally{u[0]=u[1]=null}}}}},k=(e,t)=>{for(let u;t;t=t.parentNode)if(f(u=t.$catch))return void u(e);throw e};let c=null,y=new Set,m=new Set,d=new Set,L=null,O=null,R=null;return K(ye);})();
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -7,7 +7,7 @@ ajo is a JavaScript view library for building user interfaces
|
|
|
7
7
|
npm install ajo
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
## render JSX to a DOM element
|
|
10
|
+
## render a JSX element to a DOM element
|
|
11
11
|
|
|
12
12
|
```jsx
|
|
13
13
|
/** @jsx h */
|
|
@@ -18,7 +18,7 @@ document.body.innerHTML = '<div>Hello World</div>'
|
|
|
18
18
|
render(<div>Goodbye World</div>, document.body)
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
## stateless
|
|
21
|
+
## function element (stateless)
|
|
22
22
|
|
|
23
23
|
```jsx
|
|
24
24
|
/** @jsx h */
|
|
@@ -29,7 +29,7 @@ const Greet = ({ name }) => <div>Hello {name}</div>
|
|
|
29
29
|
render(<Greet name="World" />, document.body)
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
## stateful
|
|
32
|
+
## component element (stateful)
|
|
33
33
|
|
|
34
34
|
```jsx
|
|
35
35
|
/** @jsx h */
|