lithent 1.18.2 → 1.18.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/dist/index.d.ts +2 -1
- package/dist/lithent.mjs +34 -33
- package/dist/lithent.mjs.map +1 -1
- package/dist/lithent.umd.js +1 -1
- package/dist/lithent.umd.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/universalRef.d.ts +2 -2
- package/examples/dist/assets/{index-CoLsHZbl.js → index-GZ-P6cMy.js} +2 -2
- package/examples/dist/assets/index-GZ-P6cMy.js.map +1 -0
- package/examples/dist/index.html +1 -1
- package/package.json +1 -1
- package/src/hook/mountCallback.ts +3 -3
- package/src/hook/unmount.ts +4 -4
- package/src/hook/updateCallback.ts +3 -3
- package/src/hook/useUpdate.ts +3 -3
- package/src/index.ts +2 -1
- package/src/render.ts +2 -2
- package/src/types/index.ts +1 -1
- package/src/utils/redraw.ts +4 -4
- package/src/utils/universalRef.ts +5 -5
- package/ssr/dist/lithentSsr.mjs +125 -91
- package/ssr/dist/lithentSsr.mjs.map +1 -1
- package/ssr/dist/lithentSsr.umd.js +2 -2
- package/ssr/dist/lithentSsr.umd.js.map +1 -1
- package/ssr/src/hydration.ts +3 -1
- package/ssr/src/tests/tostring.tsx +22 -7
- package/examples/dist/assets/index-CoLsHZbl.js.map +0 -1
package/README.md
CHANGED
|
@@ -90,14 +90,14 @@ pnpm add lithent
|
|
|
90
90
|
|
|
91
91
|
#### Or Use CDN
|
|
92
92
|
|
|
93
|
-
* UMD : https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
94
|
-
* UMD-HELPER: https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
95
|
-
* UMD-FTAGS: https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
96
|
-
* UMD-TAG: https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
97
|
-
* ESM : https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
98
|
-
* ESM-HELPER: https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
99
|
-
* ESM-FTAGS: https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
100
|
-
* ESM-TAG: https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
93
|
+
* UMD : https://cdn.jsdelivr.net/npm/lithent@1.18.4/dist/lithent.umd.js
|
|
94
|
+
* UMD-HELPER: https://cdn.jsdelivr.net/npm/lithent@1.18.4/helper/dist/lithentHelper.umd.js
|
|
95
|
+
* UMD-FTAGS: https://cdn.jsdelivr.net/npm/lithent@1.18.4/ftags/dist/lithentFTags.umd.js
|
|
96
|
+
* UMD-TAG: https://cdn.jsdelivr.net/npm/lithent@1.18.4/tag/dist/lithentTag.umd.js
|
|
97
|
+
* ESM : https://cdn.jsdelivr.net/npm/lithent@1.18.4/dist/lithent.mjs
|
|
98
|
+
* ESM-HELPER: https://cdn.jsdelivr.net/npm/lithent@1.18.4/helper/dist/lithentHelper.mjs
|
|
99
|
+
* ESM-FTAGS: https://cdn.jsdelivr.net/npm/lithent@1.18.4/ftags/dist/lithentFTags.mjs
|
|
100
|
+
* ESM-TAG: https://cdn.jsdelivr.net/npm/lithent@1.18.4/tag/dist/lithentTag.mjs
|
|
101
101
|
|
|
102
102
|
|
|
103
103
|
It's easier to use lithent with JSX or HTM.
|
|
@@ -122,9 +122,9 @@ import { fTags, fFragment, fMount } from 'lithent/ftags';
|
|
|
122
122
|
const { section, div, p, br, strong } = fTags;
|
|
123
123
|
|
|
124
124
|
/* UMD
|
|
125
|
-
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
126
|
-
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
127
|
-
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
125
|
+
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.4/dist/lithent.umd.js"></script>
|
|
126
|
+
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.4/helper/dist/lithentHelper.umd.js"></script>
|
|
127
|
+
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.4/ftags/dist/lithentFTags.umd.js"></script>
|
|
128
128
|
|
|
129
129
|
const { render } = lithent;
|
|
130
130
|
const { fTags, fMount, fFragment } = lithentFTags;
|
|
@@ -197,10 +197,10 @@ const destroy = render(lTag`<${Component} />`, document.getElementById('root'),
|
|
|
197
197
|
#### With UMD
|
|
198
198
|
|
|
199
199
|
```html
|
|
200
|
-
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
201
|
-
<!--script src="https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
202
|
-
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
203
|
-
<!--script src="https://cdn.jsdelivr.net/npm/lithent@1.18.
|
|
200
|
+
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.4/dist/lithent.umd.js"></script>
|
|
201
|
+
<!--script src="https://cdn.jsdelivr.net/npm/lithent@1.18.4/helper/dist/lithentHelper.umd.js"></script-->
|
|
202
|
+
<script src="https://cdn.jsdelivr.net/npm/lithent@1.18.4/tag/dist/lithentTag.umd.js"></script>
|
|
203
|
+
<!--script src="https://cdn.jsdelivr.net/npm/lithent@1.18.4/ftags/dist/lithentFTags.umd.js"></script-->
|
|
204
204
|
|
|
205
205
|
<div id="root"></div>
|
|
206
206
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
export { h, Fragment, portal, mount } from './wDom';
|
|
2
2
|
export { isPropType } from './utils';
|
|
3
3
|
export { componentUpdate } from './utils/redraw';
|
|
4
|
+
export { componentMap } from './utils/universalRef';
|
|
4
5
|
export { render } from './render';
|
|
5
6
|
export { mountCallback } from './hook/mountCallback';
|
|
6
7
|
export { updateCallback } from './hook/updateCallback';
|
|
7
8
|
export { ref, nextTick } from './hook/ref';
|
|
8
|
-
export type { WDom, TagFunction, TagFunctionResolver, FragmentFunction, Component, ComponentSubKey,
|
|
9
|
+
export type { WDom, TagFunction, TagFunctionResolver, FragmentFunction, Component, ComponentSubKey, ComponentMap, Props, Renew, MiddleStateWDomChildren, MiddleStateWDom, NodePointer, Param, } from './types';
|
|
9
10
|
declare global {
|
|
10
11
|
namespace JSX {
|
|
11
12
|
interface IntrinsicElements {
|
package/dist/lithent.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const R = (e) => typeof e == "object" && !("resolve" in e), N = (e, t) => R(e) && e.type === t,
|
|
1
|
+
const R = (e) => typeof e == "object" && !("resolve" in e), N = (e, t) => R(e) && e.type === t, de = (e, t) => "ctor" in e ? e.ctor === (t == null ? void 0 : t.ctor) : e === (t == null ? void 0 : t.ctor), he = (e, t) => {
|
|
2
2
|
var s, c;
|
|
3
3
|
return R(e) && (t == null ? void 0 : t.type) === "fragment" && ((s = t == null ? void 0 : t.children) == null ? void 0 : s.length) === ((c = e == null ? void 0 : e.children) == null ? void 0 : c.length);
|
|
4
4
|
}, ie = (e, t) => {
|
|
@@ -20,7 +20,7 @@ const R = (e) => typeof e == "object" && !("resolve" in e), N = (e, t) => R(e) &
|
|
|
20
20
|
let t = "et";
|
|
21
21
|
return T(e) ? t = "c" : N(e, "fragment") ? t = "f" : N(e, "element") ? t = "e" : N(e, "loop") ? t = "l" : N(e, "text") ? t = "t" : m(e) && (t = "et"), t;
|
|
22
22
|
}, ke = {
|
|
23
|
-
c:
|
|
23
|
+
c: de,
|
|
24
24
|
l: ye,
|
|
25
25
|
t: X,
|
|
26
26
|
e: ie,
|
|
@@ -96,11 +96,11 @@ const I = () => {
|
|
|
96
96
|
t && t !== "N" && ({
|
|
97
97
|
A: G,
|
|
98
98
|
D: $,
|
|
99
|
-
R:
|
|
99
|
+
R: Ae,
|
|
100
100
|
U: B,
|
|
101
101
|
CNSU: B,
|
|
102
102
|
SR: ce,
|
|
103
|
-
SU:
|
|
103
|
+
SU: Me
|
|
104
104
|
}[t](e), delete e.needRerender, delete e.oldChildren, delete e.oldProps);
|
|
105
105
|
}, F = (e) => {
|
|
106
106
|
e.props && e.el && ue(e.props, e.el), (e.children || []).forEach((t) => {
|
|
@@ -111,7 +111,7 @@ const I = () => {
|
|
|
111
111
|
}, $ = (e) => {
|
|
112
112
|
e.oldProps && e.el && ue(e.oldProps, e.el), te(
|
|
113
113
|
e,
|
|
114
|
-
|
|
114
|
+
M(y(e))
|
|
115
115
|
);
|
|
116
116
|
}, te = (e, t) => {
|
|
117
117
|
var s, c;
|
|
@@ -124,7 +124,7 @@ const I = () => {
|
|
|
124
124
|
});
|
|
125
125
|
}, ce = (e) => {
|
|
126
126
|
$(e), G(e);
|
|
127
|
-
},
|
|
127
|
+
}, Me = (e) => {
|
|
128
128
|
if (B(e), y(e).needRerender !== "CNSU") {
|
|
129
129
|
const s = ne(e);
|
|
130
130
|
G(e, s);
|
|
@@ -133,7 +133,7 @@ const I = () => {
|
|
|
133
133
|
t || (t = L(e));
|
|
134
134
|
const s = y(e);
|
|
135
135
|
if (s.type) {
|
|
136
|
-
const c =
|
|
136
|
+
const c = M(s), n = s.type === "loop" && s.needRerender && s.needRerender !== "CNSU" ? j(s, y(s)) : j(e, s);
|
|
137
137
|
t && c && (e.tag !== "portal" && (n ? c.insertBefore(t, n) : c.appendChild(t)), I());
|
|
138
138
|
}
|
|
139
139
|
}, ne = (e) => v(e.type) ? ((e == null ? void 0 : e.children) || []).reduce((t, s) => {
|
|
@@ -153,13 +153,13 @@ const I = () => {
|
|
|
153
153
|
return t || (n ? re(s.children || []) : r && r.nodeType !== 11 ? r : t);
|
|
154
154
|
},
|
|
155
155
|
void 0
|
|
156
|
-
),
|
|
156
|
+
), Ae = (e) => {
|
|
157
157
|
const t = y(e), s = e.el;
|
|
158
158
|
if (t.type && s)
|
|
159
159
|
if (s.nodeType === 11)
|
|
160
160
|
ce(e);
|
|
161
161
|
else {
|
|
162
|
-
const c =
|
|
162
|
+
const c = M(t), r = L(e);
|
|
163
163
|
c && e.tag !== "portal" && c.replaceChild(r, s), I();
|
|
164
164
|
}
|
|
165
165
|
}, ue = (e, t) => {
|
|
@@ -237,10 +237,10 @@ const I = () => {
|
|
|
237
237
|
}), P(c).forEach(
|
|
238
238
|
([n]) => r[n] = ""
|
|
239
239
|
));
|
|
240
|
-
},
|
|
240
|
+
}, M = (e) => {
|
|
241
241
|
const t = v(e.type);
|
|
242
|
-
return e.isRoot && t ? e.wrapElement : t ?
|
|
243
|
-
},
|
|
242
|
+
return e.isRoot && t ? e.wrapElement : t ? M(y(e)) : e.el;
|
|
243
|
+
}, A = (e, t) => qe(
|
|
244
244
|
e,
|
|
245
245
|
ke[Re(e)](e, t),
|
|
246
246
|
t
|
|
@@ -254,9 +254,9 @@ const I = () => {
|
|
|
254
254
|
}, _e = (e, t, s) => {
|
|
255
255
|
s !== "A" && t && (e.el = t.el), s && ["D", "R", "SR"].includes(s) && (t && (U(t), F(t)), e.oldChildren = t == null ? void 0 : t.children), e.oldProps = t == null ? void 0 : t.props;
|
|
256
256
|
}, Ie = (e, t, s) => {
|
|
257
|
-
const c = s && s.type, r = m(e), n = e.isRoot, u = s && y(s), l = !n && (u == null ? void 0 : u.type), h = o(e),
|
|
258
|
-
let
|
|
259
|
-
return r ?
|
|
257
|
+
const c = s && s.type, r = m(e), n = e.isRoot, u = s && y(s), l = !n && (u == null ? void 0 : u.type), h = o(e), d = l === "loop" && E(h), i = e.type === "text" && t && e.text === (s == null ? void 0 : s.text), x = e === s;
|
|
258
|
+
let p;
|
|
259
|
+
return r ? p = "D" : i || x ? p = "N" : c ? t ? p = d ? "SU" : "U" : p = d ? "SR" : "R" : p = "A", e.type === "loop" && p === "U" && s && ze(e, s) && (p = "CNSU"), p;
|
|
260
260
|
}, ze = (e, t) => {
|
|
261
261
|
const s = [...(t == null ? void 0 : t.children) || []], c = [...(e == null ? void 0 : e.children) || []].filter(
|
|
262
262
|
(u) => s.find((l) => o(u) === o(l))
|
|
@@ -275,9 +275,9 @@ const I = () => {
|
|
|
275
275
|
const { compProps: s, compChild: c } = e, { props: r, children: n } = t;
|
|
276
276
|
return s && $e(s, r), c && Ge(c, n), e.reRender && e.reRender();
|
|
277
277
|
}, Xe = (e, t, s) => T(e) ? t && s ? Je(s, e) : e.resolve() : e, Ye = (e, t, s) => t && s ? He(e, s) : Ze(e), Ze = (e) => (e.children || []).map(
|
|
278
|
-
(t) => b(
|
|
278
|
+
(t) => b(A(t), { getParent: () => e })
|
|
279
279
|
), He = (e, t) => e.type === "loop" && E(o((e.children || [])[0])) ? Ve(e, t) : (e.children || []).map(
|
|
280
|
-
(s, c) => b(
|
|
280
|
+
(s, c) => b(A(s, (t.children || [])[c]), {
|
|
281
281
|
getParent: () => e
|
|
282
282
|
})
|
|
283
283
|
), Ve = (e, t) => {
|
|
@@ -291,7 +291,7 @@ const I = () => {
|
|
|
291
291
|
}, Ke = (e, t) => {
|
|
292
292
|
const s = [...e.children || []], c = [...t.children || []];
|
|
293
293
|
return [s.map((n) => {
|
|
294
|
-
const u = ge(n, c), l =
|
|
294
|
+
const u = ge(n, c), l = A(n, u);
|
|
295
295
|
return u && c.splice(c.indexOf(u), 1), l.getParent = () => e, l;
|
|
296
296
|
}), c];
|
|
297
297
|
}, ge = (e, t) => t.find(
|
|
@@ -311,7 +311,7 @@ const me = (e, t) => {
|
|
|
311
311
|
q.forEach((e) => {
|
|
312
312
|
e();
|
|
313
313
|
}), q.clear(), _ = !1;
|
|
314
|
-
},
|
|
314
|
+
}, pt = (e, t = () => []) => {
|
|
315
315
|
f.get(a()).upR.push(() => H(e, t)), H(e, t);
|
|
316
316
|
}, De = () => {
|
|
317
317
|
var t;
|
|
@@ -322,25 +322,25 @@ const me = (e, t) => {
|
|
|
322
322
|
[C]: !0,
|
|
323
323
|
children: t
|
|
324
324
|
}), et = (e, t, ...s) => {
|
|
325
|
-
const c = { value: void 0 }, r = t || {}, n =
|
|
325
|
+
const c = { value: void 0 }, r = t || {}, n = pe(c, s), u = rt(e, r, n);
|
|
326
326
|
return T(u) || (c.value = u), u;
|
|
327
|
-
},
|
|
327
|
+
}, dt = (e, t) => et("portal", { portal: t }, e), ht = (e) => (t, s) => e, tt = (e, t, s, c) => {
|
|
328
328
|
var i;
|
|
329
329
|
if (c.isLegacy)
|
|
330
330
|
return;
|
|
331
331
|
O.value = !0;
|
|
332
|
-
const r = fe(e, t, s), n =
|
|
332
|
+
const r = fe(e, t, s), n = A(r, c), { isRoot: u, getParent: l, wrapElement: h, afterElement: d } = c;
|
|
333
333
|
if (n.getParent = l, !u && l) {
|
|
334
|
-
const x = ((i = l()) == null ? void 0 : i.children) || [],
|
|
335
|
-
x.splice(
|
|
334
|
+
const x = ((i = l()) == null ? void 0 : i.children) || [], p = x.indexOf(c);
|
|
335
|
+
x.splice(p, 1, n);
|
|
336
336
|
} else
|
|
337
|
-
n.isRoot = !0, n.wrapElement = h, n.afterElement =
|
|
337
|
+
n.isRoot = !0, n.wrapElement = h, n.afterElement = d;
|
|
338
338
|
O.value = !1, ee(n);
|
|
339
339
|
}, fe = (e, t, s) => ({ tagName: e.name, ctor: e, props: t, children: s, resolve: (u = t) => {
|
|
340
340
|
Se(u);
|
|
341
|
-
const l = e(t, s),
|
|
341
|
+
const l = e(t, s), d = (typeof l == "function" ? l : () => () => l)(we(u), t, s);
|
|
342
342
|
return st(
|
|
343
|
-
|
|
343
|
+
d,
|
|
344
344
|
u,
|
|
345
345
|
e,
|
|
346
346
|
t,
|
|
@@ -349,8 +349,8 @@ const me = (e, t) => {
|
|
|
349
349
|
} }), st = (e, t, s, c, r) => {
|
|
350
350
|
let n = e, u = e(c);
|
|
351
351
|
u.reRender && (n = (h) => {
|
|
352
|
-
const
|
|
353
|
-
return
|
|
352
|
+
const d = e(h), i = J({}, d);
|
|
353
|
+
return d.getParent = () => i, i;
|
|
354
354
|
}, u = n(c));
|
|
355
355
|
const l = ct(
|
|
356
356
|
n,
|
|
@@ -393,13 +393,13 @@ const me = (e, t) => {
|
|
|
393
393
|
props: t,
|
|
394
394
|
children: s
|
|
395
395
|
};
|
|
396
|
-
},
|
|
396
|
+
}, pe = (e, t) => t.map(
|
|
397
397
|
(s) => b(ut(s), { getParent: () => e.value })
|
|
398
398
|
), ut = (e) => {
|
|
399
399
|
if (e == null || e === !1)
|
|
400
400
|
return { type: null, [C]: !0 };
|
|
401
401
|
if (Array.isArray(e)) {
|
|
402
|
-
const t = { value: void 0 }, s =
|
|
402
|
+
const t = { value: void 0 }, s = pe(t, e), c = {
|
|
403
403
|
type: "loop",
|
|
404
404
|
[C]: !0,
|
|
405
405
|
children: s
|
|
@@ -411,15 +411,16 @@ const me = (e, t) => {
|
|
|
411
411
|
}, it = (e) => ({ value: e }), yt = () => Promise.resolve();
|
|
412
412
|
export {
|
|
413
413
|
J as Fragment,
|
|
414
|
+
f as componentMap,
|
|
414
415
|
we as componentUpdate,
|
|
415
416
|
et as h,
|
|
416
417
|
lt as isPropType,
|
|
417
418
|
ht as mount,
|
|
418
419
|
ft as mountCallback,
|
|
419
420
|
yt as nextTick,
|
|
420
|
-
|
|
421
|
+
dt as portal,
|
|
421
422
|
it as ref,
|
|
422
423
|
ot as render,
|
|
423
|
-
|
|
424
|
+
pt as updateCallback
|
|
424
425
|
};
|
|
425
426
|
//# sourceMappingURL=lithent.mjs.map
|
package/dist/lithent.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lithent.mjs","sources":["../src/utils/predicator.ts","../src/utils/universalRef.ts","../src/utils/index.ts","../src/hook/unmount.ts","../src/hook/mountCallback.ts","../src/hook/useUpdate.ts","../src/render.ts","../src/diff.ts","../src/utils/redraw.ts","../src/hook/updateCallback.ts","../src/wDom.ts","../src/hook/ref.ts"],"sourcesContent":["import { Fragment } from '@/wDom';\nimport {\n WDom,\n TagFunction,\n TagFunctionResolver,\n FragmentFunction,\n WDomType,\n} from '@/types';\n\ntype WDomParam =\n | string\n | WDom\n | TagFunction\n | TagFunctionResolver\n | FragmentFunction;\n\n/**\n * Predicator\n */\n\nconst checkPlainWDomType = (wDom: WDomParam): wDom is WDom =>\n typeof wDom === 'object' && !('resolve' in wDom);\n\nconst checkPlainType = (wDom: WDomParam, typeName: string) =>\n checkPlainWDomType(wDom) && wDom.type === typeName;\n\nconst checkSameCustomComponent = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n 'ctor' in newWDom\n ? newWDom.ctor === originalWDom?.ctor\n : newWDom === originalWDom?.ctor;\n\nconst checkSameFragment = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === 'fragment' &&\n originalWDom?.children?.length === newWDom?.children?.length;\n\nconst checkSameTagElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === 'element' &&\n originalWDom?.tag === newWDom.tag &&\n originalWDom?.children?.length === newWDom?.children?.length;\n\nconst checkNormalTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => checkPlainWDomType(newWDom) && originalWDom?.type === newWDom.type;\n\nconst checkLoopTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === newWDom.type &&\n ((checkExisty(getKey((newWDom.children || [])[0])) &&\n checkExisty(getKey((originalWDom?.children || [])[0]))) ||\n originalWDom?.children?.length === newWDom?.children?.length);\n\nexport const getKey = (target: WDom) =>\n target?.compProps?.key ?? target?.props?.key;\n\nexport const checkVirtualType = (type?: string | null) =>\n type && ['fragment', 'loop'].includes(type);\n\nexport const checkCustemComponentFunction = (\n target: WDomParam\n): target is TagFunction | TagFunctionResolver =>\n (typeof target === 'function' && !checkFragmentFunction(target)) ||\n (typeof target === 'object' && 'resolve' in target);\n\nexport const checkFragmentFunction = (\n target: unknown\n): target is FragmentFunction =>\n typeof target === 'function' && target === Fragment;\n\nexport const checkEmptyElement = (wDom: WDomParam) =>\n checkPlainWDomType(wDom) && !wDom.type;\n\nexport const checkExisty = (value: unknown) =>\n value !== null && value !== undefined;\n\nexport const checkStyleData = (\n dataKey: string,\n dataValue: unknown\n): dataValue is Record<string, string> =>\n dataKey === 'style' && typeof dataValue === 'object';\n\nexport const checkRefData = (\n dataKey: string,\n dataValue: unknown\n): dataValue is {\n value: HTMLElement | Element | DocumentFragment | Text | undefined;\n} => dataKey === 'ref' && typeof dataValue === 'object';\n\nexport const hasAccessorMethods = (target: unknown, dataKey: string) => {\n const descriptor = Object.getOwnPropertyDescriptor(\n target!.constructor.prototype,\n dataKey\n );\n\n return descriptor && descriptor.get && descriptor.set;\n};\n\nexport const getWDomType = (\n wDom: WDom | TagFunction | TagFunctionResolver\n): WDomType => {\n let result: WDomType = 'et';\n\n if (checkCustemComponentFunction(wDom)) {\n result = 'c';\n } else if (checkPlainType(wDom, 'fragment')) {\n result = 'f';\n } else if (checkPlainType(wDom, 'element')) {\n result = 'e';\n } else if (checkPlainType(wDom, 'loop')) {\n result = 'l';\n } else if (checkPlainType(wDom, 'text')) {\n result = 't';\n } else if (checkEmptyElement(wDom)) {\n result = 'et';\n }\n\n return result;\n};\n\nexport const checkSameWDomWithOriginal = {\n c: checkSameCustomComponent,\n l: checkLoopTypeElement,\n t: checkNormalTypeElement,\n e: checkSameTagElement,\n f: checkSameFragment,\n et: checkNormalTypeElement,\n};\n","import { ComponentRef, ComponentSubKey, Props } from '@/types';\n\nexport const wdomSymbol = Symbol.for('lithentWDomSymbol');\nexport const xmlnsRef: { value: string } = { value: '' };\nexport const compKeyRef: { value: Props } = { value: {} };\nexport const needDiffRef: { value: boolean } = { value: false };\nexport const componentRef: ComponentRef = new WeakMap();\n\nconst setComponetRef = (compKey: Props) => {\n componentRef.set(compKey, {\n vd: { value: null },\n up: () => {},\n upR: [],\n upS: { value: 0 },\n upD: [],\n upCB: [],\n mts: [],\n umts: [],\n });\n};\n\nexport const getComponentKey = () => compKeyRef.value;\n\nexport const getComponentSubInfo = (\n compKey: Props,\n subKey: ComponentSubKey\n) => {\n if (componentRef.get(compKey)) {\n return componentRef.get(compKey)![subKey];\n }\n return null;\n};\n\nexport const initUpdateHookState = (compKey: Props) =>\n (compKeyRef.value = compKey);\n\nexport const initMountHookState = (compKey: Props) => {\n compKeyRef.value = compKey;\n setComponetRef(compKey);\n};\n","import { WDom, Props } from '@/types';\n\nimport { wdomSymbol } from '@/utils/universalRef';\n\nexport const getParent = (vDom: WDom) =>\n (vDom.getParent && vDom.getParent()) as WDom;\n\nexport const entries = Object.entries;\nexport const keys = Object.keys;\nexport const assign = Object.assign;\nexport const isPropType = (obj: unknown): obj is Props => {\n return (\n typeof obj === 'object' &&\n !Array.isArray(obj) &&\n !Object.getOwnPropertySymbols(obj).includes(wdomSymbol)\n );\n};\n","import { WDom, Props } from '@/types';\nimport { componentRef, getComponentKey } from '@/utils/universalRef';\n\nexport const unmount = (effectAction: () => void) => {\n componentRef.get(getComponentKey())!.umts.push(effectAction);\n};\n\nexport const runUnmountQueueFromWDom = (newWDom: WDom) => {\n const { compKey } = newWDom;\n\n if (compKey) {\n removeItem(compKey);\n }\n recursiveRunUnmount(newWDom);\n};\n\nconst recursiveRunUnmount = (wDom: WDom) => {\n (wDom.children || []).forEach(item => {\n const childComKey = item.compKey;\n if (childComKey) {\n runUnmountQueueFromWDom(item);\n } else {\n recursiveRunUnmount(item);\n }\n });\n};\n\nconst removeItem = (compKey: Props) => {\n const subInfo = componentRef.get(compKey);\n if (subInfo) {\n subInfo!.umts.forEach(effect => effect());\n subInfo!.umts = [];\n componentRef.delete(compKey);\n }\n};\n","import { WDom } from '@/types';\nimport {\n compKeyRef,\n componentRef,\n getComponentKey,\n} from '@/utils/universalRef';\nimport { unmount } from '@/hook/unmount';\n\nlet mountedQueue: WDom[] = [];\n\nexport const execMountedQueue = () => {\n mountedQueue.forEach(item => runMountedQueueFromWDom(item));\n mountedQueue = [];\n};\nexport const addMountedQueue = (wDom: WDom) => {\n if (wDom.compKey) {\n mountedQueue.push(wDom);\n }\n};\nexport const mountCallback = (effectAction: () => void) =>\n (componentRef.get(getComponentKey())?.mts || []).push(effectAction);\n\nexport const runMountedQueueFromWDom = (newWDom: WDom) => {\n const { compKey } = newWDom;\n\n if (compKey) {\n const component = componentRef.get(compKey);\n const queue = component?.mts;\n const sequence = component?.upS;\n\n compKeyRef.value = compKey;\n\n if (sequence) {\n sequence.value = 0;\n }\n\n if (queue) {\n component.mts = [];\n\n queue.forEach((effect: Function) => {\n const callback = effect();\n if (callback) {\n unmount(callback);\n }\n });\n }\n }\n};\n","import { WDom } from '@/types';\nimport {\n compKeyRef,\n componentRef,\n getComponentKey,\n} from '@/utils/universalRef';\n\nexport const useUpdated = (\n effectAction: () => (() => void) | void,\n dependencies: () => any[] = () => []\n) => {\n const component = componentRef.get(getComponentKey());\n const { upD, upS } = component!;\n const def = upD[upS.value];\n\n if (def && checkNeedPushQueue(def, dependencies())) {\n const callback = effectAction();\n if (callback) {\n component!.upCB.push(callback);\n }\n }\n\n upD[upS.value] = dependencies();\n upS.value += 1;\n};\n\nexport const runUpdatedQueueFromWDom = (newWDom: WDom) => {\n const { compKey } = newWDom;\n\n if (compKey) {\n const component = componentRef.get(compKey);\n const queue = component?.upCB;\n const sequence = component?.upS;\n\n compKeyRef.value = compKey;\n\n if (sequence) {\n sequence.value = 0;\n }\n\n if (newWDom.ctor && queue) {\n component.upCB = [];\n queue.forEach((effect: Function) => effect());\n }\n }\n};\n\nconst checkNeedPushQueue = (originalDefs: unknown[], newDefs: unknown[]) =>\n !originalDefs.length\n ? true\n : originalDefs.some((def, index) => def !== newDefs[index]);\n","import { WDom, Props } from '@/types';\nimport {\n checkStyleData,\n checkRefData,\n checkExisty,\n checkVirtualType,\n hasAccessorMethods,\n} from '@/utils/predicator';\n\nimport { componentRef, xmlnsRef } from '@/utils/universalRef';\nimport { runUnmountQueueFromWDom } from '@/hook/unmount';\nimport { execMountedQueue, addMountedQueue } from '@/hook/mountCallback';\nimport { runUpdatedQueueFromWDom } from '@/hook/useUpdate';\nimport { getParent, entries, keys } from '@/utils';\n\nconst getAttrKey = (keyName: string) =>\n keyName === 'className' ? 'class' : keyName;\n\nconst getEventName = (eventKey: string) =>\n eventKey.replace(/^on(.*)/, (_match, p1) => p1.toLowerCase());\n\nconst DF = () => new DocumentFragment();\nconst CE = (t: string) => document.createElement(t);\n\nexport const render = (\n wDom: WDom,\n wrapElement: HTMLElement | null,\n afterElement?: HTMLElement | null,\n isHydration?: boolean\n) => {\n wDom.isRoot = true;\n wrapElement ??= document.body;\n wDom.wrapElement = wrapElement;\n\n const Dom = wDomToDom(wDom, isHydration);\n\n if (afterElement) {\n wDom.afterElement = afterElement;\n wrapElement.insertBefore(Dom, afterElement);\n } else if (!isHydration) {\n if (wrapElement.tagName === 'HTML') {\n wrapElement.replaceWith(Dom);\n } else {\n wrapElement.appendChild(Dom);\n }\n }\n\n execMountedQueue();\n\n return () => {\n const component = componentRef.get(wDom.compProps || {})?.vd.value;\n\n if (component) {\n runUnmountQueueFromWDom(component);\n }\n\n recursiveRemoveEvent(component || wDom);\n rootDelete(component || wDom);\n };\n};\n\nexport const wDomUpdate = (newWDomTree: WDom) => {\n const { needRerender } = newWDomTree;\n\n if (needRerender && needRerender !== 'N') {\n ({\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n CNSU: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate,\n })[needRerender](newWDomTree);\n\n delete newWDomTree.needRerender;\n delete newWDomTree.oldChildren;\n delete newWDomTree.oldProps;\n }\n};\n\nexport const recursiveRemoveEvent = (originalWDom: WDom) => {\n if (originalWDom.props && originalWDom.el) {\n removeEvent(originalWDom.props, originalWDom.el);\n }\n\n (originalWDom.children || []).forEach((childItem: WDom) => {\n recursiveRemoveEvent(childItem);\n });\n};\n\nconst rootDelete = (newWDom: WDom) => {\n deleteRealDom(newWDom, newWDom.wrapElement as HTMLElement);\n};\n\nexport const typeDelete = (newWDom: WDom) => {\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n\n deleteRealDom(\n newWDom,\n findRealParentElement(getParent(newWDom)) as HTMLElement\n );\n};\n\nconst deleteRealDom = (newWDom: WDom, parent: HTMLElement) => {\n if (parent && newWDom.el) {\n if ([1, 3].includes(newWDom.el?.nodeType)) {\n parent.removeChild(newWDom.el);\n } else if (newWDom.el?.nodeType === 11) {\n findChildWithRemoveElement(newWDom, parent as HTMLElement);\n }\n delete newWDom.el;\n }\n};\n\nconst findChildWithRemoveElement = (newWDom: WDom, parent: HTMLElement) => {\n (newWDom?.oldChildren || newWDom?.children || []).forEach(item => {\n const nodeType = item.el?.nodeType;\n if (nodeType) {\n if ([1, 3].includes(nodeType)) {\n if ((item.el as HTMLElement).tagName === 'HTML') {\n (item.el as HTMLElement).innerHTML = '';\n } else {\n (item.el as HTMLElement).remove();\n }\n } else if (nodeType === 11) {\n findChildWithRemoveElement(item, parent);\n }\n }\n });\n};\n\nconst typeSortedReplace = (newWDom: WDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom);\n};\n\nconst typeSortedUpdate = (newWDom: WDom) => {\n typeUpdate(newWDom);\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.needRerender !== 'CNSU') {\n const newElement = getElementFromFragment(newWDom);\n\n typeAdd(newWDom, newElement);\n }\n};\n\nconst typeAdd = (\n newWDom: WDom,\n newElement?: HTMLElement | DocumentFragment | Text\n) => {\n if (!newElement) {\n newElement = wDomToDom(newWDom) as HTMLElement;\n }\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const isLoop = parentWDom.type === 'loop';\n const nextEl =\n isLoop && parentWDom.needRerender && parentWDom.needRerender !== 'CNSU'\n ? startFindNextBrotherElement(parentWDom, getParent(parentWDom))\n : startFindNextBrotherElement(newWDom, parentWDom);\n\n if (newElement && parentEl) {\n if (newWDom.tag !== 'portal') {\n if (nextEl) {\n parentEl.insertBefore(newElement, nextEl);\n } else {\n parentEl.appendChild(newElement);\n }\n }\n\n execMountedQueue();\n }\n }\n};\n\nconst getElementFromFragment = (newWDom: WDom) => {\n if (checkVirtualType(newWDom.type)) {\n return (newWDom?.children || []).reduce((acc, item) => {\n const element = getElementFromFragment(item);\n\n if (element) {\n acc.appendChild(element);\n }\n return acc;\n }, DF());\n }\n\n return newWDom.el;\n};\n\nconst startFindNextBrotherElement = (\n wDom: WDom,\n parentWDom: WDom\n): HTMLElement | DocumentFragment | Text | undefined => {\n const brothers = parentWDom.children || [];\n const index = brothers.indexOf(wDom);\n const nextIndex = index + 1;\n const candidiateBrothers = brothers.slice(nextIndex);\n\n const finedNextEl = findChildFragmentNextElement(candidiateBrothers);\n const parentType = parentWDom.type || '';\n\n if (finedNextEl) {\n return finedNextEl;\n }\n\n if (!parentWDom.isRoot && checkVirtualType(parentType)) {\n return startFindNextBrotherElement(parentWDom, getParent(parentWDom));\n } else if (\n parentWDom.isRoot &&\n checkVirtualType(parentType) &&\n parentWDom.afterElement\n ) {\n return parentWDom.afterElement;\n }\n\n return undefined;\n};\n\nconst findChildFragmentNextElement = (\n candidiateBrothers: WDom[]\n): HTMLElement | DocumentFragment | Text | undefined =>\n candidiateBrothers.reduce(\n (\n targetEl: HTMLElement | DocumentFragment | Text | undefined,\n bItem: WDom\n ) => {\n const type = bItem.type;\n const el = bItem.el;\n const isFragment = type && checkVirtualType(type);\n\n if (targetEl) {\n return targetEl;\n } else if (isFragment) {\n return findChildFragmentNextElement(bItem.children || []);\n } else if (el && el.nodeType !== 11) {\n return el;\n }\n\n return targetEl;\n },\n undefined\n );\n\nconst typeReplace = (newWDom: WDom) => {\n const parentWDom = getParent(newWDom);\n const orignalElement = newWDom.el;\n\n if (parentWDom.type && orignalElement) {\n if (orignalElement.nodeType === 11) {\n typeSortedReplace(newWDom);\n } else {\n const parentElement = findRealParentElement(parentWDom);\n const newElement = wDomToDom(newWDom);\n\n if (parentElement && newWDom.tag !== 'portal') {\n parentElement.replaceChild(newElement, orignalElement);\n }\n execMountedQueue();\n }\n }\n};\n\nconst removeEvent = (\n oldProps: Props,\n element: HTMLElement | DocumentFragment | Text\n) => {\n entries(oldProps || {}).forEach(([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(\n getEventName(dataKey),\n dataValue as (e: Event) => void\n );\n }\n });\n};\n\nconst typeUpdate = (newWDom: WDom) => {\n const element = newWDom.el;\n\n if (newWDom.type === 'text') {\n updateText(newWDom);\n\n return;\n }\n\n if (element) {\n const { oldProps, props } = newWDom;\n\n updateProps(props, element, oldProps);\n\n delete newWDom.oldProps;\n\n if (newWDom.tag === 'input') {\n (element as HTMLInputElement).value = String(newWDom?.props?.value || '');\n }\n }\n\n (newWDom.children || []).forEach((childItem: WDom) => wDomUpdate(childItem));\n\n runUpdatedQueueFromWDom(newWDom);\n};\n\nconst updateText = (newWDom: WDom) => {\n const element = newWDom.el;\n\n if (element) {\n element.nodeValue = String(newWDom.text);\n }\n};\n\nconst updateProps = (\n props?: Props,\n element?: HTMLElement | Element | DocumentFragment | Text,\n oldProps?: Props | null,\n isHydration?: boolean\n) => {\n const originalProps = { ...oldProps };\n\n entries(props || {}).forEach(([dataKey, dataValue]: [string, unknown]) => {\n if (isHydration && dataKey.match(/^on/)) {\n updateEvent(\n element as HTMLElement,\n dataKey,\n dataValue as (e: Event) => void,\n originalProps[dataKey] as (e: Event) => void\n );\n } else {\n if (dataKey === 'key' || dataValue === originalProps[dataKey]) {\n // Do nothing\n } else if (dataKey === 'portal' && typeof dataValue === 'object') {\n // Do nothing\n } else if (dataKey === 'innerHTML' && typeof dataValue === 'string') {\n (element as HTMLElement).innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n updateStyle(\n dataValue,\n checkStyleData(dataKey, originalProps.style)\n ? originalProps.style\n : {},\n element\n );\n } else if (checkRefData(dataKey, dataValue)) {\n dataValue.value = element;\n } else if (dataKey.match(/^on/)) {\n updateEvent(\n element as HTMLElement,\n dataKey,\n dataValue as (e: Event) => void,\n originalProps[dataKey] as (e: Event) => void\n );\n } else if (dataKey) {\n if (dataKey !== 'type' && hasAccessorMethods(element, dataKey)) {\n (element as { [key: string]: any })[dataKey] = dataValue;\n } else {\n setAttr(\n getAttrKey(dataKey),\n element as HTMLElement,\n dataValue as string\n );\n }\n }\n\n delete originalProps[dataKey];\n }\n });\n\n keys(originalProps).forEach(dataKey =>\n (element as HTMLElement).removeAttribute(dataKey)\n );\n};\n\nconst setAttr = (dataKey: string, element: HTMLElement, dataValue: string) => {\n if (xmlnsRef.value && dataKey !== 'xmlns') {\n element.setAttributeNS(null, dataKey, dataValue);\n } else {\n element.setAttribute(dataKey, dataValue);\n }\n};\n\nconst wDomToDom = (wDom: WDom, isHydration?: boolean): HTMLElement => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = checkVirtualType(type);\n\n if (tag === 'svg') {\n xmlnsRef.value = String(props?.xmlns);\n }\n\n if (!isHydration) {\n if (isVirtualType) {\n element = DF();\n } else if (type === 'element' && tag) {\n if (tag === 'portal' && props?.portal) {\n element = props.portal as HTMLElement;\n } else {\n element = xmlnsRef.value\n ? document.createElementNS(xmlnsRef.value, tag)\n : CE(tag);\n }\n } else if (type === 'text' && checkExisty(text)) {\n element = document.createTextNode(String(text));\n } else {\n element = CE('e');\n }\n\n wDom.el = element as HTMLElement;\n } else {\n element = wDom.el;\n }\n\n wDomChildrenToDom(children, element, isHydration);\n\n updateProps(props, element, null, isHydration);\n\n addMountedQueue(wDom);\n\n if (tag === 'svg') {\n xmlnsRef.value = '';\n }\n\n return element as HTMLElement;\n};\n\nconst wDomChildrenToDom = (\n children: WDom[],\n parentElement?: HTMLElement | Element | DocumentFragment | Text,\n isHydration?: boolean\n) => {\n const elementChildren = children.reduce(\n (acc: DocumentFragment, childItem: WDom) => {\n if (childItem.type) {\n const childElement = wDomToDom(childItem, isHydration);\n\n if (childItem.tag !== 'portal' && !isHydration) {\n acc.appendChild(childElement);\n }\n }\n\n return acc;\n },\n DF()\n );\n\n if (!isHydration && parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\n};\n\nconst updateEvent = (\n element: HTMLElement,\n eventKey: string,\n newEventHandler: (e: Event) => void,\n oldEventHandler: (e: Event) => void\n) => {\n const eventName = getEventName(eventKey);\n\n if (oldEventHandler !== newEventHandler) {\n if (oldEventHandler) {\n element.removeEventListener(eventName, oldEventHandler);\n }\n\n if (newEventHandler) {\n element.addEventListener(eventName, newEventHandler);\n }\n }\n};\n\nconst updateStyle = (\n style: Record<string, string>,\n oldStyle: Record<string, string>,\n element?: HTMLElement | Element | DocumentFragment | Text\n) => {\n const originalStyle = { ...oldStyle };\n const elementStyle = (element as HTMLElement)?.style;\n\n if (elementStyle) {\n entries(style).forEach(([styleKey, dataValue]) => {\n (elementStyle as any)[styleKey] = dataValue;\n delete originalStyle[styleKey];\n });\n\n entries(originalStyle).forEach(\n ([styleKey]) => ((elementStyle as any)[styleKey] = '')\n );\n }\n};\n\nconst findRealParentElement = (\n vDom: WDom\n): HTMLElement | DocumentFragment | Text | undefined => {\n const isVirtualType = checkVirtualType(vDom.type);\n if (vDom.isRoot && isVirtualType) {\n return vDom.wrapElement;\n }\n\n if (!isVirtualType) {\n return vDom.el as HTMLElement;\n }\n\n return findRealParentElement(getParent(vDom));\n};\n","import { WDom, TagFunctionResolver, RenderType, Props } from '@/types';\nimport { checkCustemComponentFunction, getKey } from '@/utils/predicator';\nimport { getParent } from '@/utils';\nimport { typeDelete, recursiveRemoveEvent } from '@/render';\nimport {\n checkEmptyElement,\n checkSameWDomWithOriginal,\n getWDomType,\n checkExisty,\n} from '@/utils/predicator';\n\nimport { runUnmountQueueFromWDom } from '@/hook/unmount';\nimport { assign, keys, entries } from '@/utils';\n\n/**\n * The starting point of the diffing process between the original virtual DOM and the new virtual DOM for re-rendering.\n */\nexport const makeNewWDomTree = (\n newWDom: WDom | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n remakeNewWDom(\n newWDom,\n checkSameWDomWithOriginal[getWDomType(newWDom)](newWDom, originalWDom),\n originalWDom\n );\n\n/**\n * Create a new virtual DOM after comparing with the previous virtual DOM\n */\nconst remakeNewWDom = (\n newWDom: WDom | TagFunctionResolver,\n isSameType: boolean,\n originalWDom?: WDom\n) => {\n const remakeWDom = generalize(newWDom, isSameType, originalWDom);\n const param: [newWDom: WDom, isSameType: boolean, originalWDom?: WDom] = [\n remakeWDom,\n isSameType,\n originalWDom,\n ];\n const needRerender = addReRenderTypeProperty(...param);\n const isNoting = needRerender === 'N';\n\n if (!isNoting) {\n remakeWDom.children = remakeChildrenForDiff(...param);\n }\n\n remakeWDom.needRerender = needRerender;\n inheritPropForRender(remakeWDom, originalWDom, needRerender);\n\n if (!isNoting && originalWDom) {\n originalWDom.isLegacy = true;\n delete originalWDom.children;\n }\n\n return remakeWDom;\n};\n\n/**\n * Handle what the new virtual DOM should inherit or reconcile from the original virtual DOM.\n */\nconst inheritPropForRender = (\n remakeWDom: WDom,\n originalWDom?: WDom,\n needRerender?: RenderType\n) => {\n if (needRerender !== 'A' && originalWDom) {\n remakeWDom.el = originalWDom.el;\n }\n\n if (needRerender && ['D', 'R', 'SR'].includes(needRerender)) {\n if (originalWDom) {\n runUnmountQueueFromWDom(originalWDom);\n recursiveRemoveEvent(originalWDom);\n }\n remakeWDom.oldChildren = originalWDom?.children;\n }\n\n remakeWDom.oldProps = originalWDom?.props;\n};\n\n/**\n * Indicate the state information for the new virtual DOM to be reflected in the real DOM.\n */\nconst addReRenderTypeProperty = (\n newWDom: WDom,\n isSameType: boolean,\n originalWDom?: WDom\n): RenderType | undefined => {\n const existOriginalWDom = originalWDom && originalWDom.type;\n const isEmptyElement = checkEmptyElement(newWDom);\n const isRoot = newWDom.isRoot;\n const originalParentWDom = originalWDom && getParent(originalWDom);\n const origParentType = !isRoot && originalParentWDom?.type;\n const key = getKey(newWDom);\n const isKeyCheckedWDom = origParentType === 'loop' && checkExisty(key);\n const isSameText =\n newWDom.type === 'text' &&\n isSameType &&\n newWDom.text === originalWDom?.text;\n const isSameWDom = newWDom === originalWDom;\n\n let result: RenderType | undefined;\n if (isEmptyElement) {\n result = 'D';\n } else if (isSameText || isSameWDom) {\n result = 'N';\n } else if (!existOriginalWDom) {\n result = 'A';\n } else if (isSameType) {\n result = isKeyCheckedWDom ? 'SU' : 'U';\n } else {\n result = isKeyCheckedWDom ? 'SR' : 'R';\n }\n\n if (\n newWDom.type === 'loop' &&\n result === 'U' &&\n originalWDom &&\n chkDiffLoopOrder(newWDom, originalWDom)\n ) {\n result = 'CNSU';\n }\n\n return result;\n};\n\n/**\n * Check if a reverse order swap is needed when updating types that require reordering.\n */\nconst chkDiffLoopOrder = (newWDom: WDom, originalWDom: WDom) => {\n const origChildren = [...(originalWDom?.children || [])];\n const newChildren = [...(newWDom?.children || [])].filter(item =>\n origChildren.find(newItem => getKey(item) === getKey(newItem))\n );\n const filteredChildren = origChildren.filter(item =>\n newChildren.find(newItem => getKey(item) === getKey(newItem))\n );\n let isSame = filteredChildren.length === newChildren.length;\n\n if (isSame) {\n isSame = filteredChildren.every(\n (item, index) => getKey(item) === getKey(newChildren[index])\n );\n }\n\n return isSame;\n};\n\n/**\n * Handling virtual DOM attribute updates.\n */\nconst updateProps = (props: Props, infoProps: Props) => {\n if (props && infoProps !== props) {\n keys(props).forEach(key => delete props[key]);\n\n entries(infoProps || {}).forEach(([key, value]) => (props[key] = value));\n }\n};\n\nconst updateChildren = (children: WDom[], infoChidren: WDom[]) => {\n if (children && infoChidren !== children) {\n children.splice(0, children.length);\n\n if (infoChidren) {\n infoChidren.forEach(childrenItem => children.push(childrenItem));\n }\n }\n};\n\n/**\n * Start handling when the virtual DOM is updated rather than completely replaced with a new type.\n * (Reflect the state of props or children to ensure the new state is applied)\n * (Handle the reflection of the new state while ensuring that the actual references of props or children are not changed)\n */\nconst runUpdate = (vDom: WDom, infoVdom: TagFunctionResolver) => {\n const { compProps: props, compChild: children } = vDom;\n const { props: infoProps, children: infoChidren } = infoVdom;\n\n if (props) {\n updateProps(props, infoProps);\n }\n\n if (children) {\n updateChildren(children, infoChidren);\n }\n\n const newVDom = vDom.reRender && vDom.reRender();\n\n return newVDom as WDom;\n};\n\n/**\n * Replace the compared virtual DOM with the new virtual DOM or simply update it.\n */\nconst generalize = (\n newWDom: WDom | TagFunctionResolver,\n isSameType: boolean,\n originalWDom?: WDom\n): WDom => {\n if (checkCustemComponentFunction(newWDom)) {\n return isSameType && originalWDom\n ? runUpdate(originalWDom, newWDom)\n : newWDom.resolve();\n }\n\n return newWDom;\n};\n\n/**\n * 자식 가상돔들도 전부 재귀처리하며 똑같은 처리를 해준다.\n */\nconst remakeChildrenForDiff = (\n newWDom: WDom,\n isSameType: boolean,\n originalWDom?: WDom\n) =>\n isSameType && originalWDom\n ? remakeChildrenForUpdate(newWDom, originalWDom)\n : remakeChildrenForAdd(newWDom);\n\n/**\n * Recursive handling for the creation of a new virtual DOM.\n */\nconst remakeChildrenForAdd = (newWDom: WDom) =>\n (newWDom.children || []).map((item: WDom) =>\n assign(makeNewWDomTree(item), { getParent: () => newWDom })\n );\n\n/**\n * Recursive handling for updates, not additions.\n */\nconst remakeChildrenForUpdate = (newWDom: WDom, originalWDom: WDom) =>\n newWDom.type === 'loop' && checkExisty(getKey((newWDom.children || [])[0]))\n ? remakeChildrenForLoopUpdate(newWDom, originalWDom)\n : (newWDom.children || []).map((item: WDom, index: number) =>\n assign(makeNewWDomTree(item, (originalWDom.children || [])[index]), {\n getParent: () => newWDom,\n })\n );\n\n/**\n * Handling virtual DOM of loop-type elements.\n */\nconst remakeChildrenForLoopUpdate = (newWDom: WDom, originalWDom: WDom) => {\n const [remakedChildren, unUsedChildren] = diffLoopChildren(\n newWDom,\n originalWDom\n );\n\n unUsedChildren.forEach(unusedItem => {\n runUnmountQueueFromWDom(unusedItem);\n recursiveRemoveEvent(unusedItem);\n typeDelete(unusedItem);\n });\n\n return remakedChildren;\n};\n\n/**\n * Recursive handling of loop-type virtual DOM elements.\n */\nconst diffLoopChildren = (newWDom: WDom, originalWDom: WDom) => {\n const newChildren = [...(newWDom.children || [])];\n const originalChildren = [...(originalWDom.children || [])];\n const remakedChildren = newChildren.map(item => {\n const originalItem = findSameKeyOriginalItem(item, originalChildren);\n const childItem = makeNewWDomTree(item, originalItem);\n\n if (originalItem) {\n originalChildren.splice(originalChildren.indexOf(originalItem), 1);\n }\n\n childItem.getParent = () => newWDom;\n\n return childItem;\n });\n\n return [remakedChildren, originalChildren];\n};\n\n/**\n * When comparing loop-type virtual DOM elements, use the key to determine the comparison\n */\nconst findSameKeyOriginalItem = (item: WDom, originalChildren: WDom[]) =>\n originalChildren.find(\n orignalChildItem => getKey(orignalChildItem) === getKey(item)\n );\n","import { Props } from '@/types';\nimport { componentRef } from '@/utils/universalRef';\n\nconst redrawQueue = new Map<Props, () => void>();\nlet redrawQueueTimeout: boolean = false;\n\nexport const setRedrawAction = (compKey: Props, exec: () => void) => {\n if (componentRef.get(compKey)) {\n componentRef.get(compKey)!.up = () => {\n redrawQueue.set(compKey, exec);\n\n if (!redrawQueueTimeout) {\n redrawQueueTimeout = true;\n queueMicrotask(execRedrawQueue);\n }\n };\n }\n};\n\nexport const componentUpdate = (compKey: Props) => () => {\n const up = componentRef.get(compKey)?.up;\n let result = false;\n if (up) {\n up();\n result = true;\n }\n\n return result;\n};\n\nconst execRedrawQueue = () => {\n redrawQueue.forEach((item: () => void) => {\n item();\n });\n\n redrawQueue.clear();\n redrawQueueTimeout = false;\n};\n","import { componentRef, getComponentKey } from '@/utils/universalRef';\n\nimport { useUpdated } from '@/hook/useUpdate';\n\nexport const updateCallback = (\n effectAction: () => (() => void) | void,\n dependencies: () => any[] = () => []\n) => {\n const updateReqs = componentRef.get(getComponentKey())!.upR;\n\n updateReqs.push(() => useUpdated(effectAction, dependencies));\n useUpdated(effectAction, dependencies);\n};\n\nexport const runUpdateCallback = () => {\n const updateReqs = componentRef.get(getComponentKey())?.upR;\n\n if (updateReqs?.length) {\n updateReqs.forEach(callback => callback());\n }\n};\n","import {\n WDom,\n TagFunction,\n FragmentFunction,\n Props,\n MiddleStateWDomChildren,\n MiddleStateWDom,\n NodePointer,\n Component,\n} from '@/types';\n\nimport { makeNewWDomTree } from '@/diff';\nimport { wDomUpdate } from '@/render';\nimport {\n initUpdateHookState,\n initMountHookState,\n needDiffRef,\n getComponentSubInfo,\n wdomSymbol,\n} from '@/utils/universalRef';\nimport { setRedrawAction, componentUpdate } from '@/utils/redraw';\nimport { runUpdateCallback } from '@/hook/updateCallback';\nimport {\n checkFragmentFunction,\n checkCustemComponentFunction,\n} from '@/utils/predicator';\nimport { assign } from '@/utils';\n\n/**\n * It allows grouping multiple elements together.\n */\nexport const Fragment = (_props: Props, ...children: WDom[]) =>\n ({\n type: 'fragment',\n [wdomSymbol]: true,\n children,\n }) as WDom;\n\n/**\n * Element creation\n */\nexport const h = (\n tag: TagFunction | FragmentFunction | string,\n props: Props,\n ...children: MiddleStateWDomChildren\n) => {\n const nodeParentPointer: NodePointer = { value: undefined };\n const newProps = props || {};\n const newChildren = remakeChildren(nodeParentPointer, children);\n const node = makeNode(tag, newProps, newChildren);\n\n if (!checkCustemComponentFunction(node)) {\n nodeParentPointer.value = node;\n }\n\n return node;\n};\n\n/**\n * Enables portals\n */\nexport const portal = (wDom: WDom, portal: HTMLElement) => {\n return h('portal', { portal }, wDom);\n};\n\n/**\n * It helps with component creation.\n */\nexport const mount =\n <T>(component: Component<T>) =>\n (_props: T, _children?: MiddleStateWDomChildren) =>\n component;\n\n/**\n * It re-renders starting from a specific component.\n */\nconst reRenderCustomComponent = (\n tag: TagFunction,\n props: Props,\n children: WDom[],\n originalWDom: WDom\n) => {\n if (originalWDom.isLegacy) {\n return;\n }\n needDiffRef.value = true;\n\n const newWDom = makeWDomResolver(tag, props, children);\n const newWDomTree = makeNewWDomTree(newWDom, originalWDom);\n const { isRoot, getParent, wrapElement, afterElement } = originalWDom;\n\n newWDomTree.getParent = getParent;\n\n if (!isRoot && getParent) {\n const brothers = getParent()?.children || [];\n const index = brothers.indexOf(originalWDom);\n\n brothers.splice(index, 1, newWDomTree);\n } else {\n newWDomTree.isRoot = true;\n newWDomTree.wrapElement = wrapElement;\n newWDomTree.afterElement = afterElement;\n }\n\n needDiffRef.value = false;\n\n wDomUpdate(newWDomTree);\n};\n\n/**\n * Create an intermediate step for diffing between the existing virtual DOM and the new one during re-rendering\n */\nconst makeWDomResolver = (tag: TagFunction, props: Props, children: WDom[]) => {\n const tagName = tag.name;\n const ctor = tag;\n // 리졸브는 컴포넌트를 새로 만든다.\n const resolve = (compKey = props) => {\n initMountHookState(compKey);\n\n const initialComponent = tag(props, children);\n const component =\n typeof initialComponent === 'function'\n ? initialComponent\n : () => () => initialComponent;\n const componentMaker = component(componentUpdate(compKey), props, children);\n\n const customNode = makeCustomNode(\n componentMaker,\n compKey,\n tag,\n props,\n children\n );\n\n return customNode;\n };\n\n return { tagName, ctor, props, children, resolve };\n};\n\n/**\n * Create the actual virtual DOM node from the component.\n */\nconst makeCustomNode = (\n componentMaker: (props: Props) => WDom,\n compKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[]\n) => {\n let newCustomComponentMaker = componentMaker;\n let customNode = componentMaker(props);\n\n if (customNode.reRender) {\n newCustomComponentMaker = (newProps: Props): WDom => {\n const customNode = componentMaker(newProps);\n const newNode = Fragment({}, customNode);\n\n customNode.getParent = () => newNode;\n\n return newNode;\n };\n\n customNode = newCustomComponentMaker(props);\n }\n\n const reRender = makeReRender(\n newCustomComponentMaker,\n compKey,\n tag,\n props,\n children\n );\n\n addComponentProps(customNode, compKey, tag, props, children, reRender);\n\n return customNode;\n};\n\n/**\n * When the virtual DOM is actually created from the component, generate a re-render method for future redraws.\n */\nconst makeReRender = (\n componentMaker: (props: Props) => WDom,\n compKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[]\n) => {\n const reRender = () =>\n wDomMaker(componentMaker, compKey, tag, props, children, reRender);\n return reRender;\n};\n\n/**\n * The starting point for redrawing from the re-render method\n */\nconst wDomMaker = (\n componentMaker: (props: Props) => WDom,\n compKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[],\n reRender: () => WDom\n) => {\n initUpdateHookState(compKey);\n runUpdateCallback();\n\n const customNode = componentMaker(props);\n\n addComponentProps(customNode, compKey, tag, props, children, reRender);\n\n return customNode;\n};\n\n/**\n * When creating a custom component node, attach additional information attributes to the virtual DOM object.\n */\nconst addComponentProps = (\n wDom: WDom,\n compKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[],\n reRender: () => WDom\n) => {\n assign(wDom, {\n compProps: props,\n compChild: children,\n ctor: tag,\n tagName: tag.name,\n compKey,\n reRender,\n });\n\n setRedrawAction(compKey, () =>\n reRenderCustomComponent(tag, props, children, wDom)\n );\n\n if (getComponentSubInfo(compKey, 'vd')) {\n (getComponentSubInfo(compKey, 'vd') as { value: WDom }).value = wDom;\n }\n};\n\n/**\n * The starting point where the virtual DOM is created from the h function.\n */\nconst makeNode = (\n tag: TagFunction | FragmentFunction | string,\n props: Props,\n children: WDom[]\n) => {\n if (checkFragmentFunction(tag)) {\n return Fragment(props, ...children);\n } else if (checkCustemComponentFunction(tag)) {\n const componetMakeResolver = makeWDomResolver(tag, props, children);\n\n return needDiffRef.value\n ? componetMakeResolver\n : componetMakeResolver.resolve();\n }\n\n return {\n type: 'element',\n [wdomSymbol]: true,\n tag,\n props,\n children,\n } as WDom;\n};\n\n/**\n * The starting point for recursively processing the child virtual DOM elements.\n */\nconst remakeChildren = (\n nodeParentPointer: NodePointer,\n children: MiddleStateWDomChildren\n): WDom[] =>\n children.map((item: MiddleStateWDom) =>\n assign(makeChildrenItem(item), { getParent: () => nodeParentPointer.value })\n );\n\n/**\n * Recursively process the child virtual DOM elements.\n */\nconst makeChildrenItem = (item: MiddleStateWDom): WDom => {\n if (item === null || item === undefined || item === false) {\n return { type: null, [wdomSymbol]: true } as WDom;\n } else if (Array.isArray(item)) {\n const nodeParentPointer: NodePointer = { value: undefined };\n const children = remakeChildren(nodeParentPointer, item);\n const node = {\n type: 'loop',\n [wdomSymbol]: true,\n children,\n } as WDom;\n nodeParentPointer.value = node;\n\n return node;\n } else if (typeof item === 'string' || typeof item === 'number') {\n return { type: 'text', [wdomSymbol]: true, text: item } as WDom;\n }\n\n return item;\n};\n","export const ref = <T>(initValue: T) => ({ value: initValue });\nexport const nextTick = () => Promise.resolve();\n"],"names":["checkPlainWDomType","wDom","checkPlainType","typeName","checkSameCustomComponent","newWDom","originalWDom","checkSameFragment","_a","_b","checkSameTagElement","checkNormalTypeElement","checkLoopTypeElement","checkExisty","getKey","target","checkVirtualType","type","checkCustemComponentFunction","checkFragmentFunction","Fragment","checkEmptyElement","value","checkStyleData","dataKey","dataValue","checkRefData","hasAccessorMethods","descriptor","getWDomType","result","checkSameWDomWithOriginal","wdomSymbol","xmlnsRef","compKeyRef","needDiffRef","componentRef","setComponetRef","compKey","getComponentKey","getComponentSubInfo","subKey","initUpdateHookState","initMountHookState","getParent","vDom","entries","keys","assign","isPropType","obj","unmount","effectAction","runUnmountQueueFromWDom","removeItem","recursiveRunUnmount","item","subInfo","effect","mountedQueue","execMountedQueue","runMountedQueueFromWDom","addMountedQueue","mountCallback","component","queue","sequence","callback","useUpdated","dependencies","upD","upS","def","checkNeedPushQueue","runUpdatedQueueFromWDom","originalDefs","newDefs","index","getAttrKey","keyName","getEventName","eventKey","_match","p1","DF","CE","t","render","wrapElement","afterElement","isHydration","Dom","wDomToDom","recursiveRemoveEvent","rootDelete","wDomUpdate","newWDomTree","needRerender","typeAdd","typeDelete","typeReplace","typeUpdate","typeSortedReplace","typeSortedUpdate","removeEvent","childItem","deleteRealDom","findRealParentElement","parent","findChildWithRemoveElement","nodeType","newElement","getElementFromFragment","parentWDom","parentEl","nextEl","startFindNextBrotherElement","acc","element","brothers","nextIndex","candidiateBrothers","finedNextEl","findChildFragmentNextElement","parentType","targetEl","bItem","el","isFragment","orignalElement","parentElement","oldProps","updateText","props","updateProps","originalProps","updateEvent","updateStyle","setAttr","tag","text","children","isVirtualType","wDomChildrenToDom","elementChildren","childElement","newEventHandler","oldEventHandler","eventName","style","oldStyle","originalStyle","elementStyle","styleKey","makeNewWDomTree","remakeNewWDom","isSameType","remakeWDom","generalize","param","addReRenderTypeProperty","isNoting","remakeChildrenForDiff","inheritPropForRender","existOriginalWDom","isEmptyElement","isRoot","originalParentWDom","origParentType","key","isKeyCheckedWDom","isSameText","isSameWDom","chkDiffLoopOrder","origChildren","newChildren","newItem","filteredChildren","isSame","infoProps","updateChildren","infoChidren","childrenItem","runUpdate","infoVdom","remakeChildrenForUpdate","remakeChildrenForAdd","remakeChildrenForLoopUpdate","remakedChildren","unUsedChildren","diffLoopChildren","unusedItem","originalChildren","originalItem","findSameKeyOriginalItem","orignalChildItem","redrawQueue","redrawQueueTimeout","setRedrawAction","exec","execRedrawQueue","componentUpdate","up","updateCallback","runUpdateCallback","updateReqs","_props","h","nodeParentPointer","newProps","remakeChildren","node","makeNode","portal","mount","_children","reRenderCustomComponent","makeWDomResolver","initialComponent","componentMaker","makeCustomNode","newCustomComponentMaker","customNode","newNode","reRender","makeReRender","addComponentProps","wDomMaker","componetMakeResolver","makeChildrenItem","ref","initValue","nextTick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lithent.mjs","sources":["../src/utils/predicator.ts","../src/utils/universalRef.ts","../src/utils/index.ts","../src/hook/unmount.ts","../src/hook/mountCallback.ts","../src/hook/useUpdate.ts","../src/render.ts","../src/diff.ts","../src/utils/redraw.ts","../src/hook/updateCallback.ts","../src/wDom.ts","../src/hook/ref.ts"],"sourcesContent":["import { Fragment } from '@/wDom';\nimport {\n WDom,\n TagFunction,\n TagFunctionResolver,\n FragmentFunction,\n WDomType,\n} from '@/types';\n\ntype WDomParam =\n | string\n | WDom\n | TagFunction\n | TagFunctionResolver\n | FragmentFunction;\n\n/**\n * Predicator\n */\n\nconst checkPlainWDomType = (wDom: WDomParam): wDom is WDom =>\n typeof wDom === 'object' && !('resolve' in wDom);\n\nconst checkPlainType = (wDom: WDomParam, typeName: string) =>\n checkPlainWDomType(wDom) && wDom.type === typeName;\n\nconst checkSameCustomComponent = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n 'ctor' in newWDom\n ? newWDom.ctor === originalWDom?.ctor\n : newWDom === originalWDom?.ctor;\n\nconst checkSameFragment = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === 'fragment' &&\n originalWDom?.children?.length === newWDom?.children?.length;\n\nconst checkSameTagElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === 'element' &&\n originalWDom?.tag === newWDom.tag &&\n originalWDom?.children?.length === newWDom?.children?.length;\n\nconst checkNormalTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => checkPlainWDomType(newWDom) && originalWDom?.type === newWDom.type;\n\nconst checkLoopTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === newWDom.type &&\n ((checkExisty(getKey((newWDom.children || [])[0])) &&\n checkExisty(getKey((originalWDom?.children || [])[0]))) ||\n originalWDom?.children?.length === newWDom?.children?.length);\n\nexport const getKey = (target: WDom) =>\n target?.compProps?.key ?? target?.props?.key;\n\nexport const checkVirtualType = (type?: string | null) =>\n type && ['fragment', 'loop'].includes(type);\n\nexport const checkCustemComponentFunction = (\n target: WDomParam\n): target is TagFunction | TagFunctionResolver =>\n (typeof target === 'function' && !checkFragmentFunction(target)) ||\n (typeof target === 'object' && 'resolve' in target);\n\nexport const checkFragmentFunction = (\n target: unknown\n): target is FragmentFunction =>\n typeof target === 'function' && target === Fragment;\n\nexport const checkEmptyElement = (wDom: WDomParam) =>\n checkPlainWDomType(wDom) && !wDom.type;\n\nexport const checkExisty = (value: unknown) =>\n value !== null && value !== undefined;\n\nexport const checkStyleData = (\n dataKey: string,\n dataValue: unknown\n): dataValue is Record<string, string> =>\n dataKey === 'style' && typeof dataValue === 'object';\n\nexport const checkRefData = (\n dataKey: string,\n dataValue: unknown\n): dataValue is {\n value: HTMLElement | Element | DocumentFragment | Text | undefined;\n} => dataKey === 'ref' && typeof dataValue === 'object';\n\nexport const hasAccessorMethods = (target: unknown, dataKey: string) => {\n const descriptor = Object.getOwnPropertyDescriptor(\n target!.constructor.prototype,\n dataKey\n );\n\n return descriptor && descriptor.get && descriptor.set;\n};\n\nexport const getWDomType = (\n wDom: WDom | TagFunction | TagFunctionResolver\n): WDomType => {\n let result: WDomType = 'et';\n\n if (checkCustemComponentFunction(wDom)) {\n result = 'c';\n } else if (checkPlainType(wDom, 'fragment')) {\n result = 'f';\n } else if (checkPlainType(wDom, 'element')) {\n result = 'e';\n } else if (checkPlainType(wDom, 'loop')) {\n result = 'l';\n } else if (checkPlainType(wDom, 'text')) {\n result = 't';\n } else if (checkEmptyElement(wDom)) {\n result = 'et';\n }\n\n return result;\n};\n\nexport const checkSameWDomWithOriginal = {\n c: checkSameCustomComponent,\n l: checkLoopTypeElement,\n t: checkNormalTypeElement,\n e: checkSameTagElement,\n f: checkSameFragment,\n et: checkNormalTypeElement,\n};\n","import { ComponentMap, ComponentSubKey, Props } from '@/types';\n\nexport const wdomSymbol = Symbol.for('lithentWDomSymbol');\nexport const xmlnsRef: { value: string } = { value: '' };\nexport const compKeyRef: { value: Props } = { value: {} };\nexport const needDiffRef: { value: boolean } = { value: false };\nexport const componentMap: ComponentMap = new WeakMap();\n\nconst setComponetRef = (compKey: Props) => {\n componentMap.set(compKey, {\n vd: { value: null },\n up: () => {},\n upR: [],\n upS: { value: 0 },\n upD: [],\n upCB: [],\n mts: [],\n umts: [],\n });\n};\n\nexport const getComponentKey = () => compKeyRef.value;\n\nexport const getComponentSubInfo = (\n compKey: Props,\n subKey: ComponentSubKey\n) => {\n if (componentMap.get(compKey)) {\n return componentMap.get(compKey)![subKey];\n }\n return null;\n};\n\nexport const initUpdateHookState = (compKey: Props) =>\n (compKeyRef.value = compKey);\n\nexport const initMountHookState = (compKey: Props) => {\n compKeyRef.value = compKey;\n setComponetRef(compKey);\n};\n","import { WDom, Props } from '@/types';\n\nimport { wdomSymbol } from '@/utils/universalRef';\n\nexport const getParent = (vDom: WDom) =>\n (vDom.getParent && vDom.getParent()) as WDom;\n\nexport const entries = Object.entries;\nexport const keys = Object.keys;\nexport const assign = Object.assign;\nexport const isPropType = (obj: unknown): obj is Props => {\n return (\n typeof obj === 'object' &&\n !Array.isArray(obj) &&\n !Object.getOwnPropertySymbols(obj).includes(wdomSymbol)\n );\n};\n","import { WDom, Props } from '@/types';\nimport { componentMap, getComponentKey } from '@/utils/universalRef';\n\nexport const unmount = (effectAction: () => void) => {\n componentMap.get(getComponentKey())!.umts.push(effectAction);\n};\n\nexport const runUnmountQueueFromWDom = (newWDom: WDom) => {\n const { compKey } = newWDom;\n\n if (compKey) {\n removeItem(compKey);\n }\n recursiveRunUnmount(newWDom);\n};\n\nconst recursiveRunUnmount = (wDom: WDom) => {\n (wDom.children || []).forEach(item => {\n const childComKey = item.compKey;\n if (childComKey) {\n runUnmountQueueFromWDom(item);\n } else {\n recursiveRunUnmount(item);\n }\n });\n};\n\nconst removeItem = (compKey: Props) => {\n const subInfo = componentMap.get(compKey);\n if (subInfo) {\n subInfo!.umts.forEach(effect => effect());\n subInfo!.umts = [];\n componentMap.delete(compKey);\n }\n};\n","import { WDom } from '@/types';\nimport {\n compKeyRef,\n componentMap,\n getComponentKey,\n} from '@/utils/universalRef';\nimport { unmount } from '@/hook/unmount';\n\nlet mountedQueue: WDom[] = [];\n\nexport const execMountedQueue = () => {\n mountedQueue.forEach(item => runMountedQueueFromWDom(item));\n mountedQueue = [];\n};\nexport const addMountedQueue = (wDom: WDom) => {\n if (wDom.compKey) {\n mountedQueue.push(wDom);\n }\n};\nexport const mountCallback = (effectAction: () => void) =>\n (componentMap.get(getComponentKey())?.mts || []).push(effectAction);\n\nexport const runMountedQueueFromWDom = (newWDom: WDom) => {\n const { compKey } = newWDom;\n\n if (compKey) {\n const component = componentMap.get(compKey);\n const queue = component?.mts;\n const sequence = component?.upS;\n\n compKeyRef.value = compKey;\n\n if (sequence) {\n sequence.value = 0;\n }\n\n if (queue) {\n component.mts = [];\n\n queue.forEach((effect: Function) => {\n const callback = effect();\n if (callback) {\n unmount(callback);\n }\n });\n }\n }\n};\n","import { WDom } from '@/types';\nimport {\n compKeyRef,\n componentMap,\n getComponentKey,\n} from '@/utils/universalRef';\n\nexport const useUpdated = (\n effectAction: () => (() => void) | void,\n dependencies: () => any[] = () => []\n) => {\n const component = componentMap.get(getComponentKey());\n const { upD, upS } = component!;\n const def = upD[upS.value];\n\n if (def && checkNeedPushQueue(def, dependencies())) {\n const callback = effectAction();\n if (callback) {\n component!.upCB.push(callback);\n }\n }\n\n upD[upS.value] = dependencies();\n upS.value += 1;\n};\n\nexport const runUpdatedQueueFromWDom = (newWDom: WDom) => {\n const { compKey } = newWDom;\n\n if (compKey) {\n const component = componentMap.get(compKey);\n const queue = component?.upCB;\n const sequence = component?.upS;\n\n compKeyRef.value = compKey;\n\n if (sequence) {\n sequence.value = 0;\n }\n\n if (newWDom.ctor && queue) {\n component.upCB = [];\n queue.forEach((effect: Function) => effect());\n }\n }\n};\n\nconst checkNeedPushQueue = (originalDefs: unknown[], newDefs: unknown[]) =>\n !originalDefs.length\n ? true\n : originalDefs.some((def, index) => def !== newDefs[index]);\n","import { WDom, Props } from '@/types';\nimport {\n checkStyleData,\n checkRefData,\n checkExisty,\n checkVirtualType,\n hasAccessorMethods,\n} from '@/utils/predicator';\n\nimport { componentMap, xmlnsRef } from '@/utils/universalRef';\nimport { runUnmountQueueFromWDom } from '@/hook/unmount';\nimport { execMountedQueue, addMountedQueue } from '@/hook/mountCallback';\nimport { runUpdatedQueueFromWDom } from '@/hook/useUpdate';\nimport { getParent, entries, keys } from '@/utils';\n\nconst getAttrKey = (keyName: string) =>\n keyName === 'className' ? 'class' : keyName;\n\nconst getEventName = (eventKey: string) =>\n eventKey.replace(/^on(.*)/, (_match, p1) => p1.toLowerCase());\n\nconst DF = () => new DocumentFragment();\nconst CE = (t: string) => document.createElement(t);\n\nexport const render = (\n wDom: WDom,\n wrapElement: HTMLElement | null,\n afterElement?: HTMLElement | null,\n isHydration?: boolean\n) => {\n wDom.isRoot = true;\n wrapElement ??= document.body;\n wDom.wrapElement = wrapElement;\n\n const Dom = wDomToDom(wDom, isHydration);\n\n if (afterElement) {\n wDom.afterElement = afterElement;\n wrapElement.insertBefore(Dom, afterElement);\n } else if (!isHydration) {\n if (wrapElement.tagName === 'HTML') {\n wrapElement.replaceWith(Dom);\n } else {\n wrapElement.appendChild(Dom);\n }\n }\n\n execMountedQueue();\n\n return () => {\n const component = componentMap.get(wDom.compProps || {})?.vd.value;\n\n if (component) {\n runUnmountQueueFromWDom(component);\n }\n\n recursiveRemoveEvent(component || wDom);\n rootDelete(component || wDom);\n };\n};\n\nexport const wDomUpdate = (newWDomTree: WDom) => {\n const { needRerender } = newWDomTree;\n\n if (needRerender && needRerender !== 'N') {\n ({\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n CNSU: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate,\n })[needRerender](newWDomTree);\n\n delete newWDomTree.needRerender;\n delete newWDomTree.oldChildren;\n delete newWDomTree.oldProps;\n }\n};\n\nexport const recursiveRemoveEvent = (originalWDom: WDom) => {\n if (originalWDom.props && originalWDom.el) {\n removeEvent(originalWDom.props, originalWDom.el);\n }\n\n (originalWDom.children || []).forEach((childItem: WDom) => {\n recursiveRemoveEvent(childItem);\n });\n};\n\nconst rootDelete = (newWDom: WDom) => {\n deleteRealDom(newWDom, newWDom.wrapElement as HTMLElement);\n};\n\nexport const typeDelete = (newWDom: WDom) => {\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n\n deleteRealDom(\n newWDom,\n findRealParentElement(getParent(newWDom)) as HTMLElement\n );\n};\n\nconst deleteRealDom = (newWDom: WDom, parent: HTMLElement) => {\n if (parent && newWDom.el) {\n if ([1, 3].includes(newWDom.el?.nodeType)) {\n parent.removeChild(newWDom.el);\n } else if (newWDom.el?.nodeType === 11) {\n findChildWithRemoveElement(newWDom, parent as HTMLElement);\n }\n delete newWDom.el;\n }\n};\n\nconst findChildWithRemoveElement = (newWDom: WDom, parent: HTMLElement) => {\n (newWDom?.oldChildren || newWDom?.children || []).forEach(item => {\n const nodeType = item.el?.nodeType;\n if (nodeType) {\n if ([1, 3].includes(nodeType)) {\n if ((item.el as HTMLElement).tagName === 'HTML') {\n (item.el as HTMLElement).innerHTML = '';\n } else {\n (item.el as HTMLElement).remove();\n }\n } else if (nodeType === 11) {\n findChildWithRemoveElement(item, parent);\n }\n }\n });\n};\n\nconst typeSortedReplace = (newWDom: WDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom);\n};\n\nconst typeSortedUpdate = (newWDom: WDom) => {\n typeUpdate(newWDom);\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.needRerender !== 'CNSU') {\n const newElement = getElementFromFragment(newWDom);\n\n typeAdd(newWDom, newElement);\n }\n};\n\nconst typeAdd = (\n newWDom: WDom,\n newElement?: HTMLElement | DocumentFragment | Text\n) => {\n if (!newElement) {\n newElement = wDomToDom(newWDom) as HTMLElement;\n }\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const isLoop = parentWDom.type === 'loop';\n const nextEl =\n isLoop && parentWDom.needRerender && parentWDom.needRerender !== 'CNSU'\n ? startFindNextBrotherElement(parentWDom, getParent(parentWDom))\n : startFindNextBrotherElement(newWDom, parentWDom);\n\n if (newElement && parentEl) {\n if (newWDom.tag !== 'portal') {\n if (nextEl) {\n parentEl.insertBefore(newElement, nextEl);\n } else {\n parentEl.appendChild(newElement);\n }\n }\n\n execMountedQueue();\n }\n }\n};\n\nconst getElementFromFragment = (newWDom: WDom) => {\n if (checkVirtualType(newWDom.type)) {\n return (newWDom?.children || []).reduce((acc, item) => {\n const element = getElementFromFragment(item);\n\n if (element) {\n acc.appendChild(element);\n }\n return acc;\n }, DF());\n }\n\n return newWDom.el;\n};\n\nconst startFindNextBrotherElement = (\n wDom: WDom,\n parentWDom: WDom\n): HTMLElement | DocumentFragment | Text | undefined => {\n const brothers = parentWDom.children || [];\n const index = brothers.indexOf(wDom);\n const nextIndex = index + 1;\n const candidiateBrothers = brothers.slice(nextIndex);\n\n const finedNextEl = findChildFragmentNextElement(candidiateBrothers);\n const parentType = parentWDom.type || '';\n\n if (finedNextEl) {\n return finedNextEl;\n }\n\n if (!parentWDom.isRoot && checkVirtualType(parentType)) {\n return startFindNextBrotherElement(parentWDom, getParent(parentWDom));\n } else if (\n parentWDom.isRoot &&\n checkVirtualType(parentType) &&\n parentWDom.afterElement\n ) {\n return parentWDom.afterElement;\n }\n\n return undefined;\n};\n\nconst findChildFragmentNextElement = (\n candidiateBrothers: WDom[]\n): HTMLElement | DocumentFragment | Text | undefined =>\n candidiateBrothers.reduce(\n (\n targetEl: HTMLElement | DocumentFragment | Text | undefined,\n bItem: WDom\n ) => {\n const type = bItem.type;\n const el = bItem.el;\n const isFragment = type && checkVirtualType(type);\n\n if (targetEl) {\n return targetEl;\n } else if (isFragment) {\n return findChildFragmentNextElement(bItem.children || []);\n } else if (el && el.nodeType !== 11) {\n return el;\n }\n\n return targetEl;\n },\n undefined\n );\n\nconst typeReplace = (newWDom: WDom) => {\n const parentWDom = getParent(newWDom);\n const orignalElement = newWDom.el;\n\n if (parentWDom.type && orignalElement) {\n if (orignalElement.nodeType === 11) {\n typeSortedReplace(newWDom);\n } else {\n const parentElement = findRealParentElement(parentWDom);\n const newElement = wDomToDom(newWDom);\n\n if (parentElement && newWDom.tag !== 'portal') {\n parentElement.replaceChild(newElement, orignalElement);\n }\n execMountedQueue();\n }\n }\n};\n\nconst removeEvent = (\n oldProps: Props,\n element: HTMLElement | DocumentFragment | Text\n) => {\n entries(oldProps || {}).forEach(([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(\n getEventName(dataKey),\n dataValue as (e: Event) => void\n );\n }\n });\n};\n\nconst typeUpdate = (newWDom: WDom) => {\n const element = newWDom.el;\n\n if (newWDom.type === 'text') {\n updateText(newWDom);\n\n return;\n }\n\n if (element) {\n const { oldProps, props } = newWDom;\n\n updateProps(props, element, oldProps);\n\n delete newWDom.oldProps;\n\n if (newWDom.tag === 'input') {\n (element as HTMLInputElement).value = String(newWDom?.props?.value || '');\n }\n }\n\n (newWDom.children || []).forEach((childItem: WDom) => wDomUpdate(childItem));\n\n runUpdatedQueueFromWDom(newWDom);\n};\n\nconst updateText = (newWDom: WDom) => {\n const element = newWDom.el;\n\n if (element) {\n element.nodeValue = String(newWDom.text);\n }\n};\n\nconst updateProps = (\n props?: Props,\n element?: HTMLElement | Element | DocumentFragment | Text,\n oldProps?: Props | null,\n isHydration?: boolean\n) => {\n const originalProps = { ...oldProps };\n\n entries(props || {}).forEach(([dataKey, dataValue]: [string, unknown]) => {\n if (isHydration && dataKey.match(/^on/)) {\n updateEvent(\n element as HTMLElement,\n dataKey,\n dataValue as (e: Event) => void,\n originalProps[dataKey] as (e: Event) => void\n );\n } else {\n if (dataKey === 'key' || dataValue === originalProps[dataKey]) {\n // Do nothing\n } else if (dataKey === 'portal' && typeof dataValue === 'object') {\n // Do nothing\n } else if (dataKey === 'innerHTML' && typeof dataValue === 'string') {\n (element as HTMLElement).innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n updateStyle(\n dataValue,\n checkStyleData(dataKey, originalProps.style)\n ? originalProps.style\n : {},\n element\n );\n } else if (checkRefData(dataKey, dataValue)) {\n dataValue.value = element;\n } else if (dataKey.match(/^on/)) {\n updateEvent(\n element as HTMLElement,\n dataKey,\n dataValue as (e: Event) => void,\n originalProps[dataKey] as (e: Event) => void\n );\n } else if (dataKey) {\n if (dataKey !== 'type' && hasAccessorMethods(element, dataKey)) {\n (element as { [key: string]: any })[dataKey] = dataValue;\n } else {\n setAttr(\n getAttrKey(dataKey),\n element as HTMLElement,\n dataValue as string\n );\n }\n }\n\n delete originalProps[dataKey];\n }\n });\n\n keys(originalProps).forEach(dataKey =>\n (element as HTMLElement).removeAttribute(dataKey)\n );\n};\n\nconst setAttr = (dataKey: string, element: HTMLElement, dataValue: string) => {\n if (xmlnsRef.value && dataKey !== 'xmlns') {\n element.setAttributeNS(null, dataKey, dataValue);\n } else {\n element.setAttribute(dataKey, dataValue);\n }\n};\n\nconst wDomToDom = (wDom: WDom, isHydration?: boolean): HTMLElement => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = checkVirtualType(type);\n\n if (tag === 'svg') {\n xmlnsRef.value = String(props?.xmlns);\n }\n\n if (!isHydration) {\n if (isVirtualType) {\n element = DF();\n } else if (type === 'element' && tag) {\n if (tag === 'portal' && props?.portal) {\n element = props.portal as HTMLElement;\n } else {\n element = xmlnsRef.value\n ? document.createElementNS(xmlnsRef.value, tag)\n : CE(tag);\n }\n } else if (type === 'text' && checkExisty(text)) {\n element = document.createTextNode(String(text));\n } else {\n element = CE('e');\n }\n\n wDom.el = element as HTMLElement;\n } else {\n element = wDom.el;\n }\n\n wDomChildrenToDom(children, element, isHydration);\n\n updateProps(props, element, null, isHydration);\n\n addMountedQueue(wDom);\n\n if (tag === 'svg') {\n xmlnsRef.value = '';\n }\n\n return element as HTMLElement;\n};\n\nconst wDomChildrenToDom = (\n children: WDom[],\n parentElement?: HTMLElement | Element | DocumentFragment | Text,\n isHydration?: boolean\n) => {\n const elementChildren = children.reduce(\n (acc: DocumentFragment, childItem: WDom) => {\n if (childItem.type) {\n const childElement = wDomToDom(childItem, isHydration);\n\n if (childItem.tag !== 'portal' && !isHydration) {\n acc.appendChild(childElement);\n }\n }\n\n return acc;\n },\n DF()\n );\n\n if (!isHydration && parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\n};\n\nconst updateEvent = (\n element: HTMLElement,\n eventKey: string,\n newEventHandler: (e: Event) => void,\n oldEventHandler: (e: Event) => void\n) => {\n const eventName = getEventName(eventKey);\n\n if (oldEventHandler !== newEventHandler) {\n if (oldEventHandler) {\n element.removeEventListener(eventName, oldEventHandler);\n }\n\n if (newEventHandler) {\n element.addEventListener(eventName, newEventHandler);\n }\n }\n};\n\nconst updateStyle = (\n style: Record<string, string>,\n oldStyle: Record<string, string>,\n element?: HTMLElement | Element | DocumentFragment | Text\n) => {\n const originalStyle = { ...oldStyle };\n const elementStyle = (element as HTMLElement)?.style;\n\n if (elementStyle) {\n entries(style).forEach(([styleKey, dataValue]) => {\n (elementStyle as any)[styleKey] = dataValue;\n delete originalStyle[styleKey];\n });\n\n entries(originalStyle).forEach(\n ([styleKey]) => ((elementStyle as any)[styleKey] = '')\n );\n }\n};\n\nconst findRealParentElement = (\n vDom: WDom\n): HTMLElement | DocumentFragment | Text | undefined => {\n const isVirtualType = checkVirtualType(vDom.type);\n if (vDom.isRoot && isVirtualType) {\n return vDom.wrapElement;\n }\n\n if (!isVirtualType) {\n return vDom.el as HTMLElement;\n }\n\n return findRealParentElement(getParent(vDom));\n};\n","import { WDom, TagFunctionResolver, RenderType, Props } from '@/types';\nimport { checkCustemComponentFunction, getKey } from '@/utils/predicator';\nimport { getParent } from '@/utils';\nimport { typeDelete, recursiveRemoveEvent } from '@/render';\nimport {\n checkEmptyElement,\n checkSameWDomWithOriginal,\n getWDomType,\n checkExisty,\n} from '@/utils/predicator';\n\nimport { runUnmountQueueFromWDom } from '@/hook/unmount';\nimport { assign, keys, entries } from '@/utils';\n\n/**\n * The starting point of the diffing process between the original virtual DOM and the new virtual DOM for re-rendering.\n */\nexport const makeNewWDomTree = (\n newWDom: WDom | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n remakeNewWDom(\n newWDom,\n checkSameWDomWithOriginal[getWDomType(newWDom)](newWDom, originalWDom),\n originalWDom\n );\n\n/**\n * Create a new virtual DOM after comparing with the previous virtual DOM\n */\nconst remakeNewWDom = (\n newWDom: WDom | TagFunctionResolver,\n isSameType: boolean,\n originalWDom?: WDom\n) => {\n const remakeWDom = generalize(newWDom, isSameType, originalWDom);\n const param: [newWDom: WDom, isSameType: boolean, originalWDom?: WDom] = [\n remakeWDom,\n isSameType,\n originalWDom,\n ];\n const needRerender = addReRenderTypeProperty(...param);\n const isNoting = needRerender === 'N';\n\n if (!isNoting) {\n remakeWDom.children = remakeChildrenForDiff(...param);\n }\n\n remakeWDom.needRerender = needRerender;\n inheritPropForRender(remakeWDom, originalWDom, needRerender);\n\n if (!isNoting && originalWDom) {\n originalWDom.isLegacy = true;\n delete originalWDom.children;\n }\n\n return remakeWDom;\n};\n\n/**\n * Handle what the new virtual DOM should inherit or reconcile from the original virtual DOM.\n */\nconst inheritPropForRender = (\n remakeWDom: WDom,\n originalWDom?: WDom,\n needRerender?: RenderType\n) => {\n if (needRerender !== 'A' && originalWDom) {\n remakeWDom.el = originalWDom.el;\n }\n\n if (needRerender && ['D', 'R', 'SR'].includes(needRerender)) {\n if (originalWDom) {\n runUnmountQueueFromWDom(originalWDom);\n recursiveRemoveEvent(originalWDom);\n }\n remakeWDom.oldChildren = originalWDom?.children;\n }\n\n remakeWDom.oldProps = originalWDom?.props;\n};\n\n/**\n * Indicate the state information for the new virtual DOM to be reflected in the real DOM.\n */\nconst addReRenderTypeProperty = (\n newWDom: WDom,\n isSameType: boolean,\n originalWDom?: WDom\n): RenderType | undefined => {\n const existOriginalWDom = originalWDom && originalWDom.type;\n const isEmptyElement = checkEmptyElement(newWDom);\n const isRoot = newWDom.isRoot;\n const originalParentWDom = originalWDom && getParent(originalWDom);\n const origParentType = !isRoot && originalParentWDom?.type;\n const key = getKey(newWDom);\n const isKeyCheckedWDom = origParentType === 'loop' && checkExisty(key);\n const isSameText =\n newWDom.type === 'text' &&\n isSameType &&\n newWDom.text === originalWDom?.text;\n const isSameWDom = newWDom === originalWDom;\n\n let result: RenderType | undefined;\n if (isEmptyElement) {\n result = 'D';\n } else if (isSameText || isSameWDom) {\n result = 'N';\n } else if (!existOriginalWDom) {\n result = 'A';\n } else if (isSameType) {\n result = isKeyCheckedWDom ? 'SU' : 'U';\n } else {\n result = isKeyCheckedWDom ? 'SR' : 'R';\n }\n\n if (\n newWDom.type === 'loop' &&\n result === 'U' &&\n originalWDom &&\n chkDiffLoopOrder(newWDom, originalWDom)\n ) {\n result = 'CNSU';\n }\n\n return result;\n};\n\n/**\n * Check if a reverse order swap is needed when updating types that require reordering.\n */\nconst chkDiffLoopOrder = (newWDom: WDom, originalWDom: WDom) => {\n const origChildren = [...(originalWDom?.children || [])];\n const newChildren = [...(newWDom?.children || [])].filter(item =>\n origChildren.find(newItem => getKey(item) === getKey(newItem))\n );\n const filteredChildren = origChildren.filter(item =>\n newChildren.find(newItem => getKey(item) === getKey(newItem))\n );\n let isSame = filteredChildren.length === newChildren.length;\n\n if (isSame) {\n isSame = filteredChildren.every(\n (item, index) => getKey(item) === getKey(newChildren[index])\n );\n }\n\n return isSame;\n};\n\n/**\n * Handling virtual DOM attribute updates.\n */\nconst updateProps = (props: Props, infoProps: Props) => {\n if (props && infoProps !== props) {\n keys(props).forEach(key => delete props[key]);\n\n entries(infoProps || {}).forEach(([key, value]) => (props[key] = value));\n }\n};\n\nconst updateChildren = (children: WDom[], infoChidren: WDom[]) => {\n if (children && infoChidren !== children) {\n children.splice(0, children.length);\n\n if (infoChidren) {\n infoChidren.forEach(childrenItem => children.push(childrenItem));\n }\n }\n};\n\n/**\n * Start handling when the virtual DOM is updated rather than completely replaced with a new type.\n * (Reflect the state of props or children to ensure the new state is applied)\n * (Handle the reflection of the new state while ensuring that the actual references of props or children are not changed)\n */\nconst runUpdate = (vDom: WDom, infoVdom: TagFunctionResolver) => {\n const { compProps: props, compChild: children } = vDom;\n const { props: infoProps, children: infoChidren } = infoVdom;\n\n if (props) {\n updateProps(props, infoProps);\n }\n\n if (children) {\n updateChildren(children, infoChidren);\n }\n\n const newVDom = vDom.reRender && vDom.reRender();\n\n return newVDom as WDom;\n};\n\n/**\n * Replace the compared virtual DOM with the new virtual DOM or simply update it.\n */\nconst generalize = (\n newWDom: WDom | TagFunctionResolver,\n isSameType: boolean,\n originalWDom?: WDom\n): WDom => {\n if (checkCustemComponentFunction(newWDom)) {\n return isSameType && originalWDom\n ? runUpdate(originalWDom, newWDom)\n : newWDom.resolve();\n }\n\n return newWDom;\n};\n\n/**\n * 자식 가상돔들도 전부 재귀처리하며 똑같은 처리를 해준다.\n */\nconst remakeChildrenForDiff = (\n newWDom: WDom,\n isSameType: boolean,\n originalWDom?: WDom\n) =>\n isSameType && originalWDom\n ? remakeChildrenForUpdate(newWDom, originalWDom)\n : remakeChildrenForAdd(newWDom);\n\n/**\n * Recursive handling for the creation of a new virtual DOM.\n */\nconst remakeChildrenForAdd = (newWDom: WDom) =>\n (newWDom.children || []).map((item: WDom) =>\n assign(makeNewWDomTree(item), { getParent: () => newWDom })\n );\n\n/**\n * Recursive handling for updates, not additions.\n */\nconst remakeChildrenForUpdate = (newWDom: WDom, originalWDom: WDom) =>\n newWDom.type === 'loop' && checkExisty(getKey((newWDom.children || [])[0]))\n ? remakeChildrenForLoopUpdate(newWDom, originalWDom)\n : (newWDom.children || []).map((item: WDom, index: number) =>\n assign(makeNewWDomTree(item, (originalWDom.children || [])[index]), {\n getParent: () => newWDom,\n })\n );\n\n/**\n * Handling virtual DOM of loop-type elements.\n */\nconst remakeChildrenForLoopUpdate = (newWDom: WDom, originalWDom: WDom) => {\n const [remakedChildren, unUsedChildren] = diffLoopChildren(\n newWDom,\n originalWDom\n );\n\n unUsedChildren.forEach(unusedItem => {\n runUnmountQueueFromWDom(unusedItem);\n recursiveRemoveEvent(unusedItem);\n typeDelete(unusedItem);\n });\n\n return remakedChildren;\n};\n\n/**\n * Recursive handling of loop-type virtual DOM elements.\n */\nconst diffLoopChildren = (newWDom: WDom, originalWDom: WDom) => {\n const newChildren = [...(newWDom.children || [])];\n const originalChildren = [...(originalWDom.children || [])];\n const remakedChildren = newChildren.map(item => {\n const originalItem = findSameKeyOriginalItem(item, originalChildren);\n const childItem = makeNewWDomTree(item, originalItem);\n\n if (originalItem) {\n originalChildren.splice(originalChildren.indexOf(originalItem), 1);\n }\n\n childItem.getParent = () => newWDom;\n\n return childItem;\n });\n\n return [remakedChildren, originalChildren];\n};\n\n/**\n * When comparing loop-type virtual DOM elements, use the key to determine the comparison\n */\nconst findSameKeyOriginalItem = (item: WDom, originalChildren: WDom[]) =>\n originalChildren.find(\n orignalChildItem => getKey(orignalChildItem) === getKey(item)\n );\n","import { Props } from '@/types';\nimport { componentMap } from '@/utils/universalRef';\n\nconst redrawQueue = new Map<Props, () => void>();\nlet redrawQueueTimeout: boolean = false;\n\nexport const setRedrawAction = (compKey: Props, exec: () => void) => {\n if (componentMap.get(compKey)) {\n componentMap.get(compKey)!.up = () => {\n redrawQueue.set(compKey, exec);\n\n if (!redrawQueueTimeout) {\n redrawQueueTimeout = true;\n queueMicrotask(execRedrawQueue);\n }\n };\n }\n};\n\nexport const componentUpdate = (compKey: Props) => () => {\n const up = componentMap.get(compKey)?.up;\n let result = false;\n if (up) {\n up();\n result = true;\n }\n\n return result;\n};\n\nconst execRedrawQueue = () => {\n redrawQueue.forEach((item: () => void) => {\n item();\n });\n\n redrawQueue.clear();\n redrawQueueTimeout = false;\n};\n","import { componentMap, getComponentKey } from '@/utils/universalRef';\n\nimport { useUpdated } from '@/hook/useUpdate';\n\nexport const updateCallback = (\n effectAction: () => (() => void) | void,\n dependencies: () => any[] = () => []\n) => {\n const updateReqs = componentMap.get(getComponentKey())!.upR;\n\n updateReqs.push(() => useUpdated(effectAction, dependencies));\n useUpdated(effectAction, dependencies);\n};\n\nexport const runUpdateCallback = () => {\n const updateReqs = componentMap.get(getComponentKey())?.upR;\n\n if (updateReqs?.length) {\n updateReqs.forEach(callback => callback());\n }\n};\n","import {\n WDom,\n TagFunction,\n FragmentFunction,\n Props,\n MiddleStateWDomChildren,\n MiddleStateWDom,\n NodePointer,\n Component,\n} from '@/types';\n\nimport { makeNewWDomTree } from '@/diff';\nimport { wDomUpdate } from '@/render';\nimport {\n initUpdateHookState,\n initMountHookState,\n needDiffRef,\n getComponentSubInfo,\n wdomSymbol,\n} from '@/utils/universalRef';\nimport { setRedrawAction, componentUpdate } from '@/utils/redraw';\nimport { runUpdateCallback } from '@/hook/updateCallback';\nimport {\n checkFragmentFunction,\n checkCustemComponentFunction,\n} from '@/utils/predicator';\nimport { assign } from '@/utils';\n\n/**\n * It allows grouping multiple elements together.\n */\nexport const Fragment = (_props: Props, ...children: WDom[]) =>\n ({\n type: 'fragment',\n [wdomSymbol]: true,\n children,\n }) as WDom;\n\n/**\n * Element creation\n */\nexport const h = (\n tag: TagFunction | FragmentFunction | string,\n props: Props,\n ...children: MiddleStateWDomChildren\n) => {\n const nodeParentPointer: NodePointer = { value: undefined };\n const newProps = props || {};\n const newChildren = remakeChildren(nodeParentPointer, children);\n const node = makeNode(tag, newProps, newChildren);\n\n if (!checkCustemComponentFunction(node)) {\n nodeParentPointer.value = node;\n }\n\n return node;\n};\n\n/**\n * Enables portals\n */\nexport const portal = (wDom: WDom, portal: HTMLElement) => {\n return h('portal', { portal }, wDom);\n};\n\n/**\n * It helps with component creation.\n */\nexport const mount =\n <T>(component: Component<T>) =>\n (_props: T, _children?: MiddleStateWDomChildren) =>\n component;\n\n/**\n * It re-renders starting from a specific component.\n */\nconst reRenderCustomComponent = (\n tag: TagFunction,\n props: Props,\n children: WDom[],\n originalWDom: WDom\n) => {\n if (originalWDom.isLegacy) {\n return;\n }\n needDiffRef.value = true;\n\n const newWDom = makeWDomResolver(tag, props, children);\n const newWDomTree = makeNewWDomTree(newWDom, originalWDom);\n const { isRoot, getParent, wrapElement, afterElement } = originalWDom;\n\n newWDomTree.getParent = getParent;\n\n if (!isRoot && getParent) {\n const brothers = getParent()?.children || [];\n const index = brothers.indexOf(originalWDom);\n\n brothers.splice(index, 1, newWDomTree);\n } else {\n newWDomTree.isRoot = true;\n newWDomTree.wrapElement = wrapElement;\n newWDomTree.afterElement = afterElement;\n }\n\n needDiffRef.value = false;\n\n wDomUpdate(newWDomTree);\n};\n\n/**\n * Create an intermediate step for diffing between the existing virtual DOM and the new one during re-rendering\n */\nconst makeWDomResolver = (tag: TagFunction, props: Props, children: WDom[]) => {\n const tagName = tag.name;\n const ctor = tag;\n // 리졸브는 컴포넌트를 새로 만든다.\n const resolve = (compKey = props) => {\n initMountHookState(compKey);\n\n const initialComponent = tag(props, children);\n const component =\n typeof initialComponent === 'function'\n ? initialComponent\n : () => () => initialComponent;\n const componentMaker = component(componentUpdate(compKey), props, children);\n\n const customNode = makeCustomNode(\n componentMaker,\n compKey,\n tag,\n props,\n children\n );\n\n return customNode;\n };\n\n return { tagName, ctor, props, children, resolve };\n};\n\n/**\n * Create the actual virtual DOM node from the component.\n */\nconst makeCustomNode = (\n componentMaker: (props: Props) => WDom,\n compKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[]\n) => {\n let newCustomComponentMaker = componentMaker;\n let customNode = componentMaker(props);\n\n if (customNode.reRender) {\n newCustomComponentMaker = (newProps: Props): WDom => {\n const customNode = componentMaker(newProps);\n const newNode = Fragment({}, customNode);\n\n customNode.getParent = () => newNode;\n\n return newNode;\n };\n\n customNode = newCustomComponentMaker(props);\n }\n\n const reRender = makeReRender(\n newCustomComponentMaker,\n compKey,\n tag,\n props,\n children\n );\n\n addComponentProps(customNode, compKey, tag, props, children, reRender);\n\n return customNode;\n};\n\n/**\n * When the virtual DOM is actually created from the component, generate a re-render method for future redraws.\n */\nconst makeReRender = (\n componentMaker: (props: Props) => WDom,\n compKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[]\n) => {\n const reRender = () =>\n wDomMaker(componentMaker, compKey, tag, props, children, reRender);\n return reRender;\n};\n\n/**\n * The starting point for redrawing from the re-render method\n */\nconst wDomMaker = (\n componentMaker: (props: Props) => WDom,\n compKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[],\n reRender: () => WDom\n) => {\n initUpdateHookState(compKey);\n runUpdateCallback();\n\n const customNode = componentMaker(props);\n\n addComponentProps(customNode, compKey, tag, props, children, reRender);\n\n return customNode;\n};\n\n/**\n * When creating a custom component node, attach additional information attributes to the virtual DOM object.\n */\nconst addComponentProps = (\n wDom: WDom,\n compKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[],\n reRender: () => WDom\n) => {\n assign(wDom, {\n compProps: props,\n compChild: children,\n ctor: tag,\n tagName: tag.name,\n compKey,\n reRender,\n });\n\n setRedrawAction(compKey, () =>\n reRenderCustomComponent(tag, props, children, wDom)\n );\n\n if (getComponentSubInfo(compKey, 'vd')) {\n (getComponentSubInfo(compKey, 'vd') as { value: WDom }).value = wDom;\n }\n};\n\n/**\n * The starting point where the virtual DOM is created from the h function.\n */\nconst makeNode = (\n tag: TagFunction | FragmentFunction | string,\n props: Props,\n children: WDom[]\n) => {\n if (checkFragmentFunction(tag)) {\n return Fragment(props, ...children);\n } else if (checkCustemComponentFunction(tag)) {\n const componetMakeResolver = makeWDomResolver(tag, props, children);\n\n return needDiffRef.value\n ? componetMakeResolver\n : componetMakeResolver.resolve();\n }\n\n return {\n type: 'element',\n [wdomSymbol]: true,\n tag,\n props,\n children,\n } as WDom;\n};\n\n/**\n * The starting point for recursively processing the child virtual DOM elements.\n */\nconst remakeChildren = (\n nodeParentPointer: NodePointer,\n children: MiddleStateWDomChildren\n): WDom[] =>\n children.map((item: MiddleStateWDom) =>\n assign(makeChildrenItem(item), { getParent: () => nodeParentPointer.value })\n );\n\n/**\n * Recursively process the child virtual DOM elements.\n */\nconst makeChildrenItem = (item: MiddleStateWDom): WDom => {\n if (item === null || item === undefined || item === false) {\n return { type: null, [wdomSymbol]: true } as WDom;\n } else if (Array.isArray(item)) {\n const nodeParentPointer: NodePointer = { value: undefined };\n const children = remakeChildren(nodeParentPointer, item);\n const node = {\n type: 'loop',\n [wdomSymbol]: true,\n children,\n } as WDom;\n nodeParentPointer.value = node;\n\n return node;\n } else if (typeof item === 'string' || typeof item === 'number') {\n return { type: 'text', [wdomSymbol]: true, text: item } as WDom;\n }\n\n return item;\n};\n","export const ref = <T>(initValue: T) => ({ value: initValue });\nexport const nextTick = () => Promise.resolve();\n"],"names":["checkPlainWDomType","wDom","checkPlainType","typeName","checkSameCustomComponent","newWDom","originalWDom","checkSameFragment","_a","_b","checkSameTagElement","checkNormalTypeElement","checkLoopTypeElement","checkExisty","getKey","target","checkVirtualType","type","checkCustemComponentFunction","checkFragmentFunction","Fragment","checkEmptyElement","value","checkStyleData","dataKey","dataValue","checkRefData","hasAccessorMethods","descriptor","getWDomType","result","checkSameWDomWithOriginal","wdomSymbol","xmlnsRef","compKeyRef","needDiffRef","componentMap","setComponetRef","compKey","getComponentKey","getComponentSubInfo","subKey","initUpdateHookState","initMountHookState","getParent","vDom","entries","keys","assign","isPropType","obj","unmount","effectAction","runUnmountQueueFromWDom","removeItem","recursiveRunUnmount","item","subInfo","effect","mountedQueue","execMountedQueue","runMountedQueueFromWDom","addMountedQueue","mountCallback","component","queue","sequence","callback","useUpdated","dependencies","upD","upS","def","checkNeedPushQueue","runUpdatedQueueFromWDom","originalDefs","newDefs","index","getAttrKey","keyName","getEventName","eventKey","_match","p1","DF","CE","t","render","wrapElement","afterElement","isHydration","Dom","wDomToDom","recursiveRemoveEvent","rootDelete","wDomUpdate","newWDomTree","needRerender","typeAdd","typeDelete","typeReplace","typeUpdate","typeSortedReplace","typeSortedUpdate","removeEvent","childItem","deleteRealDom","findRealParentElement","parent","findChildWithRemoveElement","nodeType","newElement","getElementFromFragment","parentWDom","parentEl","nextEl","startFindNextBrotherElement","acc","element","brothers","nextIndex","candidiateBrothers","finedNextEl","findChildFragmentNextElement","parentType","targetEl","bItem","el","isFragment","orignalElement","parentElement","oldProps","updateText","props","updateProps","originalProps","updateEvent","updateStyle","setAttr","tag","text","children","isVirtualType","wDomChildrenToDom","elementChildren","childElement","newEventHandler","oldEventHandler","eventName","style","oldStyle","originalStyle","elementStyle","styleKey","makeNewWDomTree","remakeNewWDom","isSameType","remakeWDom","generalize","param","addReRenderTypeProperty","isNoting","remakeChildrenForDiff","inheritPropForRender","existOriginalWDom","isEmptyElement","isRoot","originalParentWDom","origParentType","key","isKeyCheckedWDom","isSameText","isSameWDom","chkDiffLoopOrder","origChildren","newChildren","newItem","filteredChildren","isSame","infoProps","updateChildren","infoChidren","childrenItem","runUpdate","infoVdom","remakeChildrenForUpdate","remakeChildrenForAdd","remakeChildrenForLoopUpdate","remakedChildren","unUsedChildren","diffLoopChildren","unusedItem","originalChildren","originalItem","findSameKeyOriginalItem","orignalChildItem","redrawQueue","redrawQueueTimeout","setRedrawAction","exec","execRedrawQueue","componentUpdate","up","updateCallback","runUpdateCallback","updateReqs","_props","h","nodeParentPointer","newProps","remakeChildren","node","makeNode","portal","mount","_children","reRenderCustomComponent","makeWDomResolver","initialComponent","componentMaker","makeCustomNode","newCustomComponentMaker","customNode","newNode","reRender","makeReRender","addComponentProps","wDomMaker","componetMakeResolver","makeChildrenItem","ref","initValue","nextTick"],"mappings":"AAoBA,MAAMA,IAAqB,CAACC,MAC1B,OAAOA,KAAS,YAAY,EAAE,aAAaA,IAEvCC,IAAiB,CAACD,GAAiBE,MACvCH,EAAmBC,CAAI,KAAKA,EAAK,SAASE,GAEtCC,KAA2B,CAC/BC,GACAC,MAEA,UAAUD,IACNA,EAAQ,UAASC,KAAA,gBAAAA,EAAc,QAC/BD,OAAYC,KAAA,gBAAAA,EAAc,OAE1BC,KAAoB,CACxBF,GACAC,MAEA;AAlBF,MAAAE,GAAAC;AAkBE,SAAAT,EAAmBK,CAAO,MAC1BC,KAAA,gBAAAA,EAAc,UAAS,gBACvBE,IAAAF,KAAA,gBAAAA,EAAc,aAAd,gBAAAE,EAAwB,cAAWC,IAAAJ,KAAA,gBAAAA,EAAS,aAAT,gBAAAI,EAAmB;AAAA,GAElDC,KAAsB,CAC1BL,GACAC,MAEA;AA1BF,MAAAE,GAAAC;AA0BE,SAAAT,EAAmBK,CAAO,MAC1BC,KAAA,gBAAAA,EAAc,UAAS,cACvBA,KAAA,gBAAAA,EAAc,SAAQD,EAAQ,SAC9BG,IAAAF,KAAA,gBAAAA,EAAc,aAAd,gBAAAE,EAAwB,cAAWC,IAAAJ,KAAA,gBAAAA,EAAS,aAAT,gBAAAI,EAAmB;AAAA,GAElDE,IAAyB,CAC7BN,GACAC,MACGN,EAAmBK,CAAO,MAAKC,KAAA,gBAAAA,EAAc,UAASD,EAAQ,MAE7DO,KAAuB,CAC3BP,GACAC,MAEA;AAxCF,MAAAE,GAAAC;AAwCE,SAAAT,EAAmBK,CAAO,MAC1BC,KAAA,gBAAAA,EAAc,UAASD,EAAQ,SAC7BQ,EAAYC,GAAQT,EAAQ,YAAY,IAAI,CAAC,CAAC,CAAC,KAC/CQ,EAAYC,IAAQR,KAAA,gBAAAA,EAAc,aAAY,CAAA,GAAI,CAAC,CAAC,CAAC,OACrDE,IAAAF,KAAA,gBAAAA,EAAc,aAAd,gBAAAE,EAAwB,cAAWC,IAAAJ,KAAA,gBAAAA,EAAS,aAAT,gBAAAI,EAAmB;AAAA,GAE7CK,IAAS,CAACC,MAAA;AA9CvB,MAAAP,GAAAC;AA+CE,WAAAD,IAAAO,KAAA,gBAAAA,EAAQ,cAAR,gBAAAP,EAAmB,UAAOC,IAAAM,KAAA,gBAAAA,EAAQ,UAAR,gBAAAN,EAAe;AAAA,GAE9BO,IAAmB,CAACC,MAC/BA,KAAQ,CAAC,YAAY,MAAM,EAAE,SAASA,CAAI,GAE/BC,IAA+B,CAC1CH,MAEC,OAAOA,KAAW,cAAc,CAACI,EAAsBJ,CAAM,KAC7D,OAAOA,KAAW,YAAY,aAAaA,GAEjCI,IAAwB,CACnCJ,MAEA,OAAOA,KAAW,cAAcA,MAAWK,GAEhCC,IAAoB,CAACpB,MAChCD,EAAmBC,CAAI,KAAK,CAACA,EAAK,MAEvBY,IAAc,CAACS,MAC1BA,KAAU,MAECC,IAAiB,CAC5BC,GACAC,MAEAD,MAAY,WAAW,OAAOC,KAAc,UAEjCC,KAAe,CAC1BF,GACAC,MAGGD,MAAY,SAAS,OAAOC,KAAc,UAElCE,KAAqB,CAACZ,GAAiBS,MAAoB;AACtE,QAAMI,IAAa,OAAO;AAAA,IACxBb,EAAQ,YAAY;AAAA,IACpBS;AAAA,EAAA;AAGK,SAAAI,KAAcA,EAAW,OAAOA,EAAW;AACpD,GAEaC,KAAc,CACzB5B,MACa;AACb,MAAI6B,IAAmB;AAEnB,SAAAZ,EAA6BjB,CAAI,IAC1B6B,IAAA,MACA5B,EAAeD,GAAM,UAAU,IAC/B6B,IAAA,MACA5B,EAAeD,GAAM,SAAS,IAC9B6B,IAAA,MACA5B,EAAeD,GAAM,MAAM,IAC3B6B,IAAA,MACA5B,EAAeD,GAAM,MAAM,IAC3B6B,IAAA,MACAT,EAAkBpB,CAAI,MACtB6B,IAAA,OAGJA;AACT,GAEaC,KAA4B;AAAA,EACvC,GAAG3B;AAAA,EACH,GAAGQ;AAAA,EACH,GAAGD;AAAA,EACH,GAAGD;AAAA,EACH,GAAGH;AAAA,EACH,IAAII;AACN,GC1IaqB,IAAa,OAAO,IAAI,mBAAmB,GAC3CC,IAA8B,EAAE,OAAO,MACvCC,IAA+B,EAAE,OAAO,CAAA,KACxCC,IAAkC,EAAE,OAAO,MAC3CC,wBAAiC,QAAQ,GAEhDC,KAAiB,CAACC,MAAmB;AACzC,EAAAF,EAAa,IAAIE,GAAS;AAAA,IACxB,IAAI,EAAE,OAAO,KAAK;AAAA,IAClB,IAAI,MAAM;AAAA,IAAC;AAAA,IACX,KAAK,CAAC;AAAA,IACN,KAAK,EAAE,OAAO,EAAE;AAAA,IAChB,KAAK,CAAC;AAAA,IACN,MAAM,CAAC;AAAA,IACP,KAAK,CAAC;AAAA,IACN,MAAM,CAAC;AAAA,EAAA,CACR;AACH,GAEaC,IAAkB,MAAML,EAAW,OAEnCM,IAAsB,CACjCF,GACAG,MAEIL,EAAa,IAAIE,CAAO,IACnBF,EAAa,IAAIE,CAAO,EAAGG,CAAM,IAEnC,MAGIC,KAAsB,CAACJ,MACjCJ,EAAW,QAAQI,GAETK,KAAqB,CAACL,MAAmB;AACpD,EAAAJ,EAAW,QAAQI,GACnBD,GAAeC,CAAO;AACxB,GCnCaM,IAAY,CAACC,MACvBA,EAAK,aAAaA,EAAK,aAEbC,IAAU,OAAO,SACjBC,IAAO,OAAO,MACdC,IAAS,OAAO,QAChBC,KAAa,CAACC,MAEvB,OAAOA,KAAQ,YACf,CAAC,MAAM,QAAQA,CAAG,KAClB,CAAC,OAAO,sBAAsBA,CAAG,EAAE,SAASlB,CAAU,GCX7CmB,KAAU,CAACC,MAA6B;AACnD,EAAAhB,EAAa,IAAIG,EAAiB,CAAA,EAAG,KAAK,KAAKa,CAAY;AAC7D,GAEaC,IAA0B,CAAChD,MAAkB;AAClD,QAAA,EAAE,SAAAiC,EAAY,IAAAjC;AAEpB,EAAIiC,KACFgB,GAAWhB,CAAO,GAEpBiB,EAAoBlD,CAAO;AAC7B,GAEMkD,IAAsB,CAACtD,MAAe;AAC1C,GAACA,EAAK,YAAY,CAAC,GAAG,QAAQ,CAAQuD,MAAA;AAEpC,IADoBA,EAAK,UAEvBH,EAAwBG,CAAI,IAE5BD,EAAoBC,CAAI;AAAA,EAC1B,CACD;AACH,GAEMF,KAAa,CAAChB,MAAmB;AAC/B,QAAAmB,IAAUrB,EAAa,IAAIE,CAAO;AACxC,EAAImB,MACFA,EAAS,KAAK,QAAQ,CAAUC,MAAAA,EAAQ,CAAA,GACxCD,EAAS,OAAO,IAChBrB,EAAa,OAAOE,CAAO;AAE/B;AC1BA,IAAIqB,IAAuB,CAAA;AAEpB,MAAMC,IAAmB,MAAM;AACpC,EAAAD,EAAa,QAAQ,CAAAH,MAAQK,GAAwBL,CAAI,CAAC,GAC1DG,IAAe,CAAA;AACjB,GACaG,KAAkB,CAAC7D,MAAe;AAC7C,EAAIA,EAAK,WACP0D,EAAa,KAAK1D,CAAI;AAE1B,GACa8D,KAAgB,CAACX;AJC9B,MAAA5C;AIAG,YAAAA,IAAA4B,EAAa,IAAIG,EAAiB,CAAA,MAAlC,gBAAA/B,EAAqC,QAAO,IAAI,KAAK4C,CAAY;AAAA,GAEvDS,KAA0B,CAACxD,MAAkB;AAClD,QAAA,EAAE,SAAAiC,EAAY,IAAAjC;AAEpB,MAAIiC,GAAS;AACL,UAAA0B,IAAY5B,EAAa,IAAIE,CAAO,GACpC2B,IAAQD,KAAA,gBAAAA,EAAW,KACnBE,IAAWF,KAAA,gBAAAA,EAAW;AAE5B,IAAA9B,EAAW,QAAQI,GAEf4B,MACFA,EAAS,QAAQ,IAGfD,MACFD,EAAU,MAAM,IAEVC,EAAA,QAAQ,CAACP,MAAqB;AAClC,YAAMS,IAAWT;AACjB,MAAIS,KACFhB,GAAQgB,CAAQ;AAAA,IAClB,CACD;AAAA,EAEL;AACF,GCxCaC,IAAa,CACxBhB,GACAiB,IAA4B,MAAM,CAAA,MAC/B;AACH,QAAML,IAAY5B,EAAa,IAAIG,EAAiB,CAAA,GAC9C,EAAE,KAAA+B,GAAK,KAAAC,EAAQ,IAAAP,GACfQ,IAAMF,EAAIC,EAAI,KAAK;AAEzB,MAAIC,KAAOC,GAAmBD,GAAKH,EAAc,CAAA,GAAG;AAClD,UAAMF,IAAWf;AACjB,IAAIe,KACSH,EAAA,KAAK,KAAKG,CAAQ;AAAA,EAEjC;AAEI,EAAAG,EAAAC,EAAI,KAAK,IAAIF,EAAa,GAC9BE,EAAI,SAAS;AACf,GAEaG,KAA0B,CAACrE,MAAkB;AAClD,QAAA,EAAE,SAAAiC,EAAY,IAAAjC;AAEpB,MAAIiC,GAAS;AACL,UAAA0B,IAAY5B,EAAa,IAAIE,CAAO,GACpC2B,IAAQD,KAAA,gBAAAA,EAAW,MACnBE,IAAWF,KAAA,gBAAAA,EAAW;AAE5B,IAAA9B,EAAW,QAAQI,GAEf4B,MACFA,EAAS,QAAQ,IAGf7D,EAAQ,QAAQ4D,MAClBD,EAAU,OAAO,IACjBC,EAAM,QAAQ,CAACP,MAAqBA,EAAQ,CAAA;AAAA,EAEhD;AACF,GAEMe,KAAqB,CAACE,GAAyBC,MAClDD,EAAa,SAEVA,EAAa,KAAK,CAACH,GAAKK,MAAUL,MAAQI,EAAQC,CAAK,CAAC,IADxD,IClCAC,KAAa,CAACC,MAClBA,MAAY,cAAc,UAAUA,GAEhCC,IAAe,CAACC,MACpBA,EAAS,QAAQ,WAAW,CAACC,GAAQC,MAAOA,EAAG,YAAa,CAAA,GAExDC,IAAK,MAAM,IAAI,oBACfC,IAAK,CAACC,MAAc,SAAS,cAAcA,CAAC,GAErCC,KAAS,CACpBtF,GACAuF,GACAC,GACAC,MACG;AACH,EAAAzF,EAAK,SAAS,IACduF,UAAgB,SAAS,OACzBvF,EAAK,cAAcuF;AAEb,QAAAG,IAAMC,EAAU3F,GAAMyF,CAAW;AAEvC,SAAID,KACFxF,EAAK,eAAewF,GACRD,EAAA,aAAaG,GAAKF,CAAY,KAChCC,MACNF,EAAY,YAAY,SAC1BA,EAAY,YAAYG,CAAG,IAE3BH,EAAY,YAAYG,CAAG,IAId/B,KAEV,MAAM;AN7Bf,QAAApD;AM8BU,UAAAwD,KAAYxD,IAAA4B,EAAa,IAAInC,EAAK,aAAa,CAAE,CAAA,MAArC,gBAAAO,EAAwC,GAAG;AAE7D,IAAIwD,KACFX,EAAwBW,CAAS,GAGnC6B,EAAqB7B,KAAa/D,CAAI,GACtC6F,GAAW9B,KAAa/D,CAAI;AAAA,EAAA;AAEhC,GAEa8F,KAAa,CAACC,MAAsB;AACzC,QAAA,EAAE,cAAAC,EAAiB,IAAAD;AAErB,EAAAC,KAAgBA,MAAiB,QAClC;AAAA,IACC,GAAGC;AAAA,IACH,GAAGC;AAAA,IACH,GAAGC;AAAA,IACH,GAAGC;AAAA,IACH,MAAMA;AAAA,IACN,IAAIC;AAAA,IACJ,IAAIC;AAAA,EAAA,EACHN,CAAY,EAAED,CAAW,GAE5B,OAAOA,EAAY,cACnB,OAAOA,EAAY,aACnB,OAAOA,EAAY;AAEvB,GAEaH,IAAuB,CAACvF,MAAuB;AACtD,EAAAA,EAAa,SAASA,EAAa,MACzBkG,GAAAlG,EAAa,OAAOA,EAAa,EAAE,IAGhDA,EAAa,YAAY,CAAI,GAAA,QAAQ,CAACmG,MAAoB;AACzD,IAAAZ,EAAqBY,CAAS;AAAA,EAAA,CAC/B;AACH,GAEMX,KAAa,CAACzF,MAAkB;AACtB,EAAAqG,GAAArG,GAASA,EAAQ,WAA0B;AAC3D,GAEa8F,IAAa,CAAC9F,MAAkB;AACvC,EAAAA,EAAQ,YAAYA,EAAQ,MAClBmG,GAAAnG,EAAQ,UAAUA,EAAQ,EAAE,GAG1CqG;AAAA,IACErG;AAAA,IACAsG,EAAsB/D,EAAUvC,CAAO,CAAC;AAAA,EAAA;AAE5C,GAEMqG,KAAgB,CAACrG,GAAeuG,MAAwB;ANtF9D,MAAApG,GAAAC;AMuFM,EAAAmG,KAAUvG,EAAQ,OAChB,CAAC,GAAG,CAAC,EAAE,UAASG,IAAAH,EAAQ,OAAR,gBAAAG,EAAY,QAAQ,IAC/BoG,EAAA,YAAYvG,EAAQ,EAAE,MACpBI,IAAAJ,EAAQ,OAAR,gBAAAI,EAAY,cAAa,MAClCoG,GAA2BxG,CAA8B,GAE3D,OAAOA,EAAQ;AAEnB,GAEMwG,KAA6B,CAACxG,GAAeuG,MAAwB;AACzE,IAACvG,KAAA,gBAAAA,EAAS,iBAAeA,KAAA,gBAAAA,EAAS,aAAY,IAAI,QAAQ,CAAQmD,MAAA;ANlGpE,QAAAhD;AMmGU,UAAAsG,KAAWtG,IAAAgD,EAAK,OAAL,gBAAAhD,EAAS;AAC1B,IAAIsG,MACE,CAAC,GAAG,CAAC,EAAE,SAASA,CAAQ,IACrBtD,EAAK,GAAmB,YAAY,SACtCA,EAAK,GAAmB,YAAY,KAEpCA,EAAK,GAAmB,WAElBsD,MAAa,MACtBD,GAA2BrD,CAAY;AAAA,EAE3C,CACD;AACH,GAEM8C,KAAoB,CAACjG,MAAkB;AAC3C,EAAA8F,EAAW9F,CAAO,GAClB6F,EAAQ7F,CAAO;AACjB,GAEMkG,KAAmB,CAAClG,MAAkB;AAItC,MAHJgG,EAAWhG,CAAO,GAECuC,EAAUvC,CAAO,EACrB,iBAAiB,QAAQ;AAChC,UAAA0G,IAAaC,GAAuB3G,CAAO;AAEjD,IAAA6F,EAAQ7F,GAAS0G,CAAU;AAAA,EAC7B;AACF,GAEMb,IAAU,CACd7F,GACA0G,MACG;AACH,EAAKA,MACHA,IAAanB,EAAUvF,CAAO;AAG1B,QAAA4G,IAAarE,EAAUvC,CAAO;AACpC,MAAI4G,EAAW,MAAM;AACb,UAAAC,IAAWP,EAAsBM,CAAU,GAE3CE,IADSF,EAAW,SAAS,UAEvBA,EAAW,gBAAgBA,EAAW,iBAAiB,SAC7DG,EAA4BH,GAAYrE,EAAUqE,CAAU,CAAC,IAC7DG,EAA4B/G,GAAS4G,CAAU;AAErD,IAAIF,KAAcG,MACZ7G,EAAQ,QAAQ,aACd8G,IACOD,EAAA,aAAaH,GAAYI,CAAM,IAExCD,EAAS,YAAYH,CAAU,IAIlBnD;EAErB;AACF,GAEMoD,KAAyB,CAAC3G,MAC1BW,EAAiBX,EAAQ,IAAI,MACvBA,KAAA,gBAAAA,EAAS,aAAY,CAAA,GAAI,OAAO,CAACgH,GAAK7D,MAAS;AAC/C,QAAA8D,IAAUN,GAAuBxD,CAAI;AAE3C,SAAI8D,KACFD,EAAI,YAAYC,CAAO,GAElBD;AAAA,GACNjC,EAAI,CAAA,IAGF/E,EAAQ,IAGX+G,IAA8B,CAClCnH,GACAgH,MACsD;AAChD,QAAAM,IAAWN,EAAW,YAAY,IAElCO,IADQD,EAAS,QAAQtH,CAAI,IACT,GACpBwH,IAAqBF,EAAS,MAAMC,CAAS,GAE7CE,IAAcC,GAA6BF,CAAkB,GAC7DG,IAAaX,EAAW,QAAQ;AAEtC,MAAIS;AACK,WAAAA;AAGT,MAAI,CAACT,EAAW,UAAUjG,EAAiB4G,CAAU;AACnD,WAAOR,EAA4BH,GAAYrE,EAAUqE,CAAU,CAAC;MAEpEA,EAAW,UACXjG,EAAiB4G,CAAU,KAC3BX,EAAW;AAEX,WAAOA,EAAW;AAItB,GAEMU,KAA+B,CACnCF,MAEAA,EAAmB;AAAA,EACjB,CACEI,GACAC,MACG;AACH,UAAM7G,IAAO6G,EAAM,MACbC,IAAKD,EAAM,IACXE,IAAa/G,KAAQD,EAAiBC,CAAI;AAEhD,WAAI4G,MAEOG,IACFL,GAA6BG,EAAM,YAAY,CAAE,CAAA,IAC/CC,KAAMA,EAAG,aAAa,KACxBA,IAGFF;AAAA,EACT;AAAA,EACA;AACF,GAEIzB,KAAc,CAAC/F,MAAkB;AAC/B,QAAA4G,IAAarE,EAAUvC,CAAO,GAC9B4H,IAAiB5H,EAAQ;AAE3B,MAAA4G,EAAW,QAAQgB;AACjB,QAAAA,EAAe,aAAa;AAC9B,MAAA3B,GAAkBjG,CAAO;AAAA,SACpB;AACC,YAAA6H,IAAgBvB,EAAsBM,CAAU,GAChDF,IAAanB,EAAUvF,CAAO;AAEhC,MAAA6H,KAAiB7H,EAAQ,QAAQ,YACrB6H,EAAA,aAAanB,GAAYkB,CAAc,GAEtCrE;IACnB;AAEJ,GAEM4C,KAAc,CAClB2B,GACAb,MACG;AACK,EAAAxE,EAAAqF,KAAY,EAAE,EAAE,QAAQ,CAAC,CAAC3G,GAASC,CAAS,MAAyB;AACvE,IAAAD,EAAQ,MAAM,KAAK,KACb8F,EAAA;AAAA,MACNtC,EAAaxD,CAAO;AAAA,MACpBC;AAAA,IAAA;AAAA,EAEJ,CACD;AACH,GAEM4E,IAAa,CAAChG,MAAkB;ANvQtC,MAAAG;AMwQE,QAAM8G,IAAUjH,EAAQ;AAEpB,MAAAA,EAAQ,SAAS,QAAQ;AAC3B,IAAA+H,GAAW/H,CAAO;AAElB;AAAA,EACF;AAEA,MAAIiH,GAAS;AACL,UAAA,EAAE,UAAAa,GAAU,OAAAE,EAAU,IAAAhI;AAEhBiI,IAAAA,GAAAD,GAAOf,GAASa,CAAQ,GAEpC,OAAO9H,EAAQ,UAEXA,EAAQ,QAAQ,YACjBiH,EAA6B,QAAQ,SAAO9G,IAAAH,KAAA,gBAAAA,EAAS,UAAT,gBAAAG,EAAgB,UAAS,EAAE;AAAA,EAE5E;AAEC,GAAAH,EAAQ,YAAY,IAAI,QAAQ,CAACoG,MAAoBV,GAAWU,CAAS,CAAC,GAE3E/B,GAAwBrE,CAAO;AACjC,GAEM+H,KAAa,CAAC/H,MAAkB;AACpC,QAAMiH,IAAUjH,EAAQ;AAExB,EAAIiH,MACMA,EAAA,YAAY,OAAOjH,EAAQ,IAAI;AAE3C,GAEMiI,KAAc,CAClBD,GACAf,GACAa,GACAzC,MACG;AACG,QAAA6C,IAAgB,EAAE,GAAGJ;AAEnB,EAAArF,EAAAuF,KAAS,EAAE,EAAE,QAAQ,CAAC,CAAC7G,GAASC,CAAS,MAAyB;AACxE,IAAIiE,KAAelE,EAAQ,MAAM,KAAK,IACpCgH;AAAA,MACElB;AAAA,MACA9F;AAAA,MACAC;AAAA,MACA8G,EAAc/G,CAAO;AAAA,IAAA,KAGnBA,MAAY,SAASC,MAAc8G,EAAc/G,CAAO,KAEjDA,MAAY,YAAY,OAAOC,KAAc,aAE7CD,MAAY,eAAe,OAAOC,KAAc,WACxD6F,EAAwB,YAAY7F,IAC5BF,EAAeC,GAASC,CAAS,IAC1CgH;AAAA,MACEhH;AAAA,MACAF,EAAeC,GAAS+G,EAAc,KAAK,IACvCA,EAAc,QACd,CAAC;AAAA,MACLjB;AAAA,IAAA,IAEO5F,GAAaF,GAASC,CAAS,IACxCA,EAAU,QAAQ6F,IACT9F,EAAQ,MAAM,KAAK,IAC5BgH;AAAA,MACElB;AAAA,MACA9F;AAAA,MACAC;AAAA,MACA8G,EAAc/G,CAAO;AAAA,IAAA,IAEdA,MACLA,MAAY,UAAUG,GAAmB2F,GAAS9F,CAAO,IAC1D8F,EAAmC9F,CAAO,IAAIC,IAE/CiH;AAAA,MACE5D,GAAWtD,CAAO;AAAA,MAClB8F;AAAA,MACA7F;AAAA,IAAA,KAKN,OAAO8G,EAAc/G,CAAO;AAAA,EAC9B,CACD,GAEDuB,EAAKwF,CAAa,EAAE;AAAA,IAAQ,CAAA/G,MACzB8F,EAAwB,gBAAgB9F,CAAO;AAAA,EAAA;AAEpD,GAEMkH,KAAU,CAAClH,GAAiB8F,GAAsB7F,MAAsB;AACxE,EAAAQ,EAAS,SAAST,MAAY,UACxB8F,EAAA,eAAe,MAAM9F,GAASC,CAAS,IAEvC6F,EAAA,aAAa9F,GAASC,CAAS;AAE3C,GAEMmE,IAAY,CAAC3F,GAAYyF,MAAuC;AAChE,MAAA4B;AACE,QAAA,EAAE,MAAArG,GAAM,KAAA0H,GAAK,MAAAC,GAAM,OAAAP,GAAO,UAAAQ,IAAW,CAAA,EAAO,IAAA5I,GAC5C6I,IAAgB9H,EAAiBC,CAAI;AAE3C,SAAI0H,MAAQ,UACD1G,EAAA,QAAQ,OAAOoG,KAAA,gBAAAA,EAAO,KAAK,IAGjC3C,IAmBH4B,IAAUrH,EAAK,MAlBX6I,IACFxB,IAAUlC,EAAG,IACJnE,MAAS,aAAa0H,IAC3BA,MAAQ,aAAYN,KAAA,QAAAA,EAAO,UAC7Bf,IAAUe,EAAM,SAENf,IAAArF,EAAS,QACf,SAAS,gBAAgBA,EAAS,OAAO0G,CAAG,IAC5CtD,EAAGsD,CAAG,IAEH1H,MAAS,UAAUJ,EAAY+H,CAAI,IAC5CtB,IAAU,SAAS,eAAe,OAAOsB,CAAI,CAAC,IAE9CtB,IAAUjC,EAAG,GAAG,GAGlBpF,EAAK,KAAKqH,IAKMyB,GAAAF,GAAUvB,GAAS5B,CAAW,GAEpC4C,GAAAD,GAAOf,GAAS,MAAM5B,CAAW,GAE7C5B,GAAgB7D,CAAI,GAEhB0I,MAAQ,UACV1G,EAAS,QAAQ,KAGZqF;AACT,GAEMyB,KAAoB,CACxBF,GACAX,GACAxC,MACG;AACH,QAAMsD,IAAkBH,EAAS;AAAA,IAC/B,CAACxB,GAAuBZ,MAAoB;AAC1C,UAAIA,EAAU,MAAM;AACZ,cAAAwC,IAAerD,EAAUa,GAAWf,CAAW;AAErD,QAAIe,EAAU,QAAQ,YAAY,CAACf,KACjC2B,EAAI,YAAY4B,CAAY;AAAA,MAEhC;AAEO,aAAA5B;AAAA,IACT;AAAA,IACAjC,EAAG;AAAA,EAAA;AAGL,EAAI,CAACM,KAAewC,KAAiBc,EAAgB,mBACnDd,EAAc,YAAYc,CAAe;AAE7C,GAEMR,IAAc,CAClBlB,GACArC,GACAiE,GACAC,MACG;AACG,QAAAC,IAAYpE,EAAaC,CAAQ;AAEvC,EAAIkE,MAAoBD,MAClBC,KACM7B,EAAA,oBAAoB8B,GAAWD,CAAe,GAGpDD,KACM5B,EAAA,iBAAiB8B,GAAWF,CAAe;AAGzD,GAEMT,KAAc,CAClBY,GACAC,GACAhC,MACG;AACG,QAAAiC,IAAgB,EAAE,GAAGD,KACrBE,IAAgBlC,KAAA,gBAAAA,EAAyB;AAE/C,EAAIkC,MACF1G,EAAQuG,CAAK,EAAE,QAAQ,CAAC,CAACI,GAAUhI,CAAS,MAAM;AAC/C,IAAA+H,EAAqBC,CAAQ,IAAIhI,GAClC,OAAO8H,EAAcE,CAAQ;AAAA,EAAA,CAC9B,GAED3G,EAAQyG,CAAa,EAAE;AAAA,IACrB,CAAC,CAACE,CAAQ,MAAQD,EAAqBC,CAAQ,IAAI;AAAA,EAAA;AAGzD,GAEM9C,IAAwB,CAC5B9D,MACsD;AAChD,QAAAiG,IAAgB9H,EAAiB6B,EAAK,IAAI;AAC5C,SAAAA,EAAK,UAAUiG,IACVjG,EAAK,cAGTiG,IAIEnC,EAAsB/D,EAAUC,CAAI,CAAC,IAHnCA,EAAK;AAIhB,GC1ea6G,IAAkB,CAC7BrJ,GACAC,MAEAqJ;AAAA,EACEtJ;AAAA,EACA0B,GAA0BF,GAAYxB,CAAO,CAAC,EAAEA,GAASC,CAAY;AAAA,EACrEA;AACF,GAKIqJ,KAAgB,CACpBtJ,GACAuJ,GACAtJ,MACG;AACH,QAAMuJ,IAAaC,GAAWzJ,GAASuJ,GAAYtJ,CAAY,GACzDyJ,IAAmE;AAAA,IACvEF;AAAA,IACAD;AAAA,IACAtJ;AAAA,EAAA,GAEI2F,IAAe+D,GAAwB,GAAGD,CAAK,GAC/CE,IAAWhE,MAAiB;AAElC,SAAKgE,MACQJ,EAAA,WAAWK,GAAsB,GAAGH,CAAK,IAGtDF,EAAW,eAAe5D,GACLkE,GAAAN,GAAYvJ,GAAc2F,CAAY,GAEvD,CAACgE,KAAY3J,MACfA,EAAa,WAAW,IACxB,OAAOA,EAAa,WAGfuJ;AACT,GAKMM,KAAuB,CAC3BN,GACAvJ,GACA2F,MACG;AACC,EAAAA,MAAiB,OAAO3F,MAC1BuJ,EAAW,KAAKvJ,EAAa,KAG3B2F,KAAgB,CAAC,KAAK,KAAK,IAAI,EAAE,SAASA,CAAY,MACpD3F,MACF+C,EAAwB/C,CAAY,GACpCuF,EAAqBvF,CAAY,IAEnCuJ,EAAW,cAAcvJ,KAAA,gBAAAA,EAAc,WAGzCuJ,EAAW,WAAWvJ,KAAA,gBAAAA,EAAc;AACtC,GAKM0J,KAA0B,CAC9B3J,GACAuJ,GACAtJ,MAC2B;AACrB,QAAA8J,IAAoB9J,KAAgBA,EAAa,MACjD+J,IAAiBhJ,EAAkBhB,CAAO,GAC1CiK,IAASjK,EAAQ,QACjBkK,IAAqBjK,KAAgBsC,EAAUtC,CAAY,GAC3DkK,IAAiB,CAACF,MAAUC,KAAA,gBAAAA,EAAoB,OAChDE,IAAM3J,EAAOT,CAAO,GACpBqK,IAAmBF,MAAmB,UAAU3J,EAAY4J,CAAG,GAC/DE,IACJtK,EAAQ,SAAS,UACjBuJ,KACAvJ,EAAQ,UAASC,KAAA,gBAAAA,EAAc,OAC3BsK,IAAavK,MAAYC;AAE3B,MAAAwB;AACJ,SAAIuI,IACOvI,IAAA,MACA6I,KAAcC,IACd9I,IAAA,MACCsI,IAEDR,IACT9H,IAAS4I,IAAmB,OAAO,MAEnC5I,IAAS4I,IAAmB,OAAO,MAJ1B5I,IAAA,KAQTzB,EAAQ,SAAS,UACjByB,MAAW,OACXxB,KACAuK,GAAiBxK,GAASC,CAAY,MAE7BwB,IAAA,SAGJA;AACT,GAKM+I,KAAmB,CAACxK,GAAeC,MAAuB;AAC9D,QAAMwK,IAAe,CAAC,IAAIxK,KAAA,gBAAAA,EAAc,aAAY,CAAG,CAAA,GACjDyK,IAAc,CAAC,IAAI1K,KAAA,gBAAAA,EAAS,aAAY,CAAA,CAAG,EAAE;AAAA,IAAO,CAAAmD,MACxDsH,EAAa,KAAK,CAAAE,MAAWlK,EAAO0C,CAAI,MAAM1C,EAAOkK,CAAO,CAAC;AAAA,EAAA,GAEzDC,IAAmBH,EAAa;AAAA,IAAO,CAAAtH,MAC3CuH,EAAY,KAAK,CAAAC,MAAWlK,EAAO0C,CAAI,MAAM1C,EAAOkK,CAAO,CAAC;AAAA,EAAA;AAE1D,MAAAE,IAASD,EAAiB,WAAWF,EAAY;AAErD,SAAIG,MACFA,IAASD,EAAiB;AAAA,IACxB,CAACzH,GAAMqB,MAAU/D,EAAO0C,CAAI,MAAM1C,EAAOiK,EAAYlG,CAAK,CAAC;AAAA,EAAA,IAIxDqG;AACT,GAKM5C,KAAc,CAACD,GAAc8C,MAAqB;AAClD,EAAA9C,KAAS8C,MAAc9C,MACzBtF,EAAKsF,CAAK,EAAE,QAAQ,OAAO,OAAOA,EAAMoC,CAAG,CAAC,GAE5C3H,EAAQqI,KAAa,EAAE,EAAE,QAAQ,CAAC,CAACV,GAAKnJ,CAAK,MAAO+G,EAAMoC,CAAG,IAAInJ,CAAM;AAE3E,GAEM8J,KAAiB,CAACvC,GAAkBwC,MAAwB;AAC5D,EAAAxC,KAAYwC,MAAgBxC,MACrBA,EAAA,OAAO,GAAGA,EAAS,MAAM,GAE9BwC,KACFA,EAAY,QAAQ,CAAAC,MAAgBzC,EAAS,KAAKyC,CAAY,CAAC;AAGrE,GAOMC,KAAY,CAAC1I,GAAY2I,MAAkC;AAC/D,QAAM,EAAE,WAAWnD,GAAO,WAAWQ,MAAahG,GAC5C,EAAE,OAAOsI,GAAW,UAAUE,MAAgBG;AAEpD,SAAInD,KACFC,GAAYD,GAAO8C,CAAS,GAG1BtC,KACFuC,GAAevC,GAAUwC,CAAW,GAGtBxI,EAAK,YAAYA,EAAK,SAAS;AAGjD,GAKMiH,KAAa,CACjBzJ,GACAuJ,GACAtJ,MAEIY,EAA6Bb,CAAO,IAC/BuJ,KAActJ,IACjBiL,GAAUjL,GAAcD,CAAO,IAC/BA,EAAQ,YAGPA,GAMH6J,KAAwB,CAC5B7J,GACAuJ,GACAtJ,MAEAsJ,KAActJ,IACVmL,GAAwBpL,GAASC,CAAY,IAC7CoL,GAAqBrL,CAAO,GAK5BqL,KAAuB,CAACrL,OAC3BA,EAAQ,YAAY,CAAI,GAAA;AAAA,EAAI,CAACmD,MAC5BR,EAAO0G,EAAgBlG,CAAI,GAAG,EAAE,WAAW,MAAMnD,GAAS;AAC5D,GAKIoL,KAA0B,CAACpL,GAAeC,MAC9CD,EAAQ,SAAS,UAAUQ,EAAYC,GAAQT,EAAQ,YAAY,IAAI,CAAC,CAAC,CAAC,IACtEsL,GAA4BtL,GAASC,CAAY,KAChDD,EAAQ,YAAY,CAAA,GAAI;AAAA,EAAI,CAACmD,GAAYqB,MACxC7B,EAAO0G,EAAgBlG,IAAOlD,EAAa,YAAY,IAAIuE,CAAK,CAAC,GAAG;AAAA,IAClE,WAAW,MAAMxE;AAAA,EAAA,CAClB;AACH,GAKAsL,KAA8B,CAACtL,GAAeC,MAAuB;AACnE,QAAA,CAACsL,GAAiBC,CAAc,IAAIC;AAAA,IACxCzL;AAAA,IACAC;AAAA,EAAA;AAGF,SAAAuL,EAAe,QAAQ,CAAcE,MAAA;AACnC,IAAA1I,EAAwB0I,CAAU,GAClClG,EAAqBkG,CAAU,GAC/B5F,EAAW4F,CAAU;AAAA,EAAA,CACtB,GAEMH;AACT,GAKME,KAAmB,CAACzL,GAAeC,MAAuB;AAC9D,QAAMyK,IAAc,CAAC,GAAI1K,EAAQ,YAAY,CAAG,CAAA,GAC1C2L,IAAmB,CAAC,GAAI1L,EAAa,YAAY,CAAG,CAAA;AAcnD,SAAA,CAbiByK,EAAY,IAAI,CAAQvH,MAAA;AACxC,UAAAyI,IAAeC,GAAwB1I,GAAMwI,CAAgB,GAC7DvF,IAAYiD,EAAgBlG,GAAMyI,CAAY;AAEpD,WAAIA,KACFD,EAAiB,OAAOA,EAAiB,QAAQC,CAAY,GAAG,CAAC,GAGnExF,EAAU,YAAY,MAAMpG,GAErBoG;AAAA,EAAA,CACR,GAEwBuF,CAAgB;AAC3C,GAKME,KAA0B,CAAC1I,GAAYwI,MAC3CA,EAAiB;AAAA,EACf,CAAoBG,MAAArL,EAAOqL,CAAgB,MAAMrL,EAAO0C,CAAI;AAC9D,GC7RI4I,wBAAkB;AACxB,IAAIC,IAA8B;AAErB,MAAAC,KAAkB,CAAChK,GAAgBiK,MAAqB;AAC/D,EAAAnK,EAAa,IAAIE,CAAO,MAC1BF,EAAa,IAAIE,CAAO,EAAG,KAAK,MAAM;AACxB,IAAA8J,EAAA,IAAI9J,GAASiK,CAAI,GAExBF,MACkBA,IAAA,IACrB,eAAeG,EAAe;AAAA,EAChC;AAGN,GAEaC,KAAkB,CAACnK,MAAmB,MAAM;ARCzD,MAAA9B;AQAE,QAAMkM,KAAKlM,IAAA4B,EAAa,IAAIE,CAAO,MAAxB,gBAAA9B,EAA2B;AACtC,MAAIsB,IAAS;AACb,SAAI4K,MACCA,KACM5K,IAAA,KAGJA;AACT,GAEM0K,KAAkB,MAAM;AAChB,EAAAJ,EAAA,QAAQ,CAAC5I,MAAqB;AACnC,IAAAA;EAAA,CACN,GAED4I,EAAY,MAAM,GACGC,IAAA;AACvB,GCjCaM,KAAiB,CAC5BvJ,GACAiB,IAA4B,MAAM,CAAA,MAC/B;AAGH,EAFmBjC,EAAa,IAAIG,EAAiB,CAAA,EAAG,IAE7C,KAAK,MAAM6B,EAAWhB,GAAciB,CAAY,CAAC,GAC5DD,EAAWhB,GAAciB,CAAY;AACvC,GAEauI,KAAoB,MAAM;ATMvC,MAAApM;ASLE,QAAMqM,KAAarM,IAAA4B,EAAa,IAAIG,EAAiB,CAAA,MAAlC,gBAAA/B,EAAqC;AAExD,EAAIqM,KAAA,QAAAA,EAAY,UACHA,EAAA,QAAQ,CAAY1I,MAAAA,EAAU,CAAA;AAE7C,GCWa/C,IAAW,CAAC0L,MAAkBjE,OACxC;AAAA,EACC,MAAM;AAAA,EACN,CAAC7G,CAAU,GAAG;AAAA,EACd,UAAA6G;AACF,IAKWkE,KAAI,CACfpE,GACAN,MACGQ,MACA;AACG,QAAAmE,IAAiC,EAAE,OAAO,OAAU,GACpDC,IAAW5E,KAAS,IACpB0C,IAAcmC,GAAeF,GAAmBnE,CAAQ,GACxDsE,IAAOC,GAASzE,GAAKsE,GAAUlC,CAAW;AAE5C,SAAC7J,EAA6BiM,CAAI,MACpCH,EAAkB,QAAQG,IAGrBA;AACT,GAKaE,KAAS,CAACpN,GAAYoN,MAC1BN,GAAE,UAAU,EAAE,QAAAM,EAAAA,GAAUpN,CAAI,GAMxBqN,KACX,CAAItJ,MACJ,CAAC8I,GAAWS,MACVvJ,GAKEwJ,KAA0B,CAC9B7E,GACAN,GACAQ,GACAvI,MACG;AV7DL,MAAAE;AU8DE,MAAIF,EAAa;AACf;AAEF,EAAA6B,EAAY,QAAQ;AAEpB,QAAM9B,IAAUoN,GAAiB9E,GAAKN,GAAOQ,CAAQ,GAC/C7C,IAAc0D,EAAgBrJ,GAASC,CAAY,GACnD,EAAE,QAAAgK,GAAQ,WAAA1H,GAAW,aAAA4C,GAAa,cAAAC,MAAiBnF;AAIrD,MAFJ0F,EAAY,YAAYpD,GAEpB,CAAC0H,KAAU1H,GAAW;AACxB,UAAM2E,MAAW/G,IAAAoC,QAAA,gBAAApC,EAAa,aAAY,CAAA,GACpCqE,IAAQ0C,EAAS,QAAQjH,CAAY;AAElC,IAAAiH,EAAA,OAAO1C,GAAO,GAAGmB,CAAW;AAAA,EAAA;AAErC,IAAAA,EAAY,SAAS,IACrBA,EAAY,cAAcR,GAC1BQ,EAAY,eAAeP;AAG7B,EAAAtD,EAAY,QAAQ,IAEpB4D,GAAWC,CAAW;AACxB,GAKMyH,KAAmB,CAAC9E,GAAkBN,GAAcQ,OAyBjD,EAAE,SAxBOF,EAAI,MAwBF,MAvBLA,GAuBW,OAAAN,GAAO,UAAAQ,GAAU,SArBzB,CAACvG,IAAU+F,MAAU;AACnC,EAAA1F,GAAmBL,CAAO;AAEpB,QAAAoL,IAAmB/E,EAAIN,GAAOQ,CAAQ,GAKtC8E,KAHJ,OAAOD,KAAqB,aACxBA,IACA,MAAM,MAAMA,GACejB,GAAgBnK,CAAO,GAAG+F,GAAOQ,CAAQ;AAUnE,SARY+E;AAAA,IACjBD;AAAA,IACArL;AAAA,IACAqG;AAAA,IACAN;AAAA,IACAQ;AAAA,EAAA;AAGK,EAGwC,IAM7C+E,KAAiB,CACrBD,GACArL,GACAqG,GACAN,GACAQ,MACG;AACH,MAAIgF,IAA0BF,GAC1BG,IAAaH,EAAetF,CAAK;AAErC,EAAIyF,EAAW,aACbD,IAA0B,CAACZ,MAA0B;AAC7Ca,UAAAA,IAAaH,EAAeV,CAAQ,GACpCc,IAAU3M,EAAS,CAAC,GAAG0M,CAAU;AAEvCA,WAAAA,EAAW,YAAY,MAAMC,GAEtBA;AAAA,EAAA,GAGTD,IAAaD,EAAwBxF,CAAK;AAG5C,QAAM2F,IAAWC;AAAA,IACfJ;AAAA,IACAvL;AAAA,IACAqG;AAAA,IACAN;AAAA,IACAQ;AAAA,EAAA;AAGF,SAAAqF,GAAkBJ,GAAYxL,GAASqG,GAAKN,GAAOQ,GAAUmF,CAAQ,GAE9DF;AACT,GAKMG,KAAe,CACnBN,GACArL,GACAqG,GACAN,GACAQ,MACG;AACG,QAAAmF,IAAW,MACfG,GAAUR,GAAgBrL,GAASqG,GAAKN,GAAOQ,GAAUmF,CAAQ;AAC5D,SAAAA;AACT,GAKMG,KAAY,CAChBR,GACArL,GACAqG,GACAN,GACAQ,GACAmF,MACG;AACH,EAAAtL,GAAoBJ,CAAO,GACTsK;AAEZ,QAAAkB,IAAaH,EAAetF,CAAK;AAEvC,SAAA6F,GAAkBJ,GAAYxL,GAASqG,GAAKN,GAAOQ,GAAUmF,CAAQ,GAE9DF;AACT,GAKMI,KAAoB,CACxBjO,GACAqC,GACAqG,GACAN,GACAQ,GACAmF,MACG;AACH,EAAAhL,EAAO/C,GAAM;AAAA,IACX,WAAWoI;AAAA,IACX,WAAWQ;AAAA,IACX,MAAMF;AAAA,IACN,SAASA,EAAI;AAAA,IACb,SAAArG;AAAA,IACA,UAAA0L;AAAA,EAAA,CACD,GAED1B;AAAA,IAAgBhK;AAAA,IAAS,MACvBkL,GAAwB7E,GAAKN,GAAOQ,GAAU5I,CAAI;AAAA,EAAA,GAGhDuC,EAAoBF,GAAS,IAAI,MAClCE,EAAoBF,GAAS,IAAI,EAAsB,QAAQrC;AAEpE,GAKMmN,KAAW,CACfzE,GACAN,GACAQ,MACG;AACC,MAAA1H,EAAsBwH,CAAG;AACpB,WAAAvH,EAASiH,GAAO,GAAGQ,CAAQ;AACpC,MAAW3H,EAA6ByH,CAAG,GAAG;AAC5C,UAAMyF,IAAuBX,GAAiB9E,GAAKN,GAAOQ,CAAQ;AAElE,WAAO1G,EAAY,QACfiM,IACAA,EAAqB,QAAQ;AAAA,EACnC;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,CAACpM,CAAU,GAAG;AAAA,IACd,KAAA2G;AAAA,IACA,OAAAN;AAAA,IACA,UAAAQ;AAAA,EAAA;AAEJ,GAKMqE,KAAiB,CACrBF,GACAnE,MAEAA,EAAS;AAAA,EAAI,CAACrF,MACZR,EAAOqL,GAAiB7K,CAAI,GAAG,EAAE,WAAW,MAAMwJ,EAAkB,OAAO;AAC7E,GAKIqB,KAAmB,CAAC7K,MAAgC;AACxD,MAAIA,KAAS,QAA8BA,MAAS;AAClD,WAAO,EAAE,MAAM,MAAM,CAACxB,CAAU,GAAG,GAAK;AAC/B,MAAA,MAAM,QAAQwB,CAAI,GAAG;AACxB,UAAAwJ,IAAiC,EAAE,OAAO,OAAU,GACpDnE,IAAWqE,GAAeF,GAAmBxJ,CAAI,GACjD2J,IAAO;AAAA,MACX,MAAM;AAAA,MACN,CAACnL,CAAU,GAAG;AAAA,MACd,UAAA6G;AAAA,IAAA;AAEF,WAAAmE,EAAkB,QAAQG,GAEnBA;AAAA,aACE,OAAO3J,KAAS,YAAY,OAAOA,KAAS;AAC9C,WAAA,EAAE,MAAM,QAAQ,CAACxB,CAAU,GAAG,IAAM,MAAMwB;AAG5C,SAAAA;AACT,GChTa8K,KAAM,CAAIC,OAAkB,EAAE,OAAOA,EAAU,IAC/CC,KAAW,MAAM,QAAQ,QAAQ;"}
|