airx 0.4.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +247 -63
  2. package/output/app/app.d.ts +11 -0
  3. package/output/app/app.d.ts.map +1 -0
  4. package/output/app/app.test.d.ts +2 -0
  5. package/output/app/app.test.d.ts.map +1 -0
  6. package/output/app/index.d.ts +2 -0
  7. package/output/app/index.d.ts.map +1 -0
  8. package/output/{esm → element}/element.d.ts +2 -1
  9. package/output/element/element.d.ts.map +1 -0
  10. package/output/element/element.test.d.ts +2 -0
  11. package/output/element/element.test.d.ts.map +1 -0
  12. package/output/element/index.d.ts +2 -0
  13. package/output/element/index.d.ts.map +1 -0
  14. package/output/index.d.ts +6 -0
  15. package/output/index.d.ts.map +1 -0
  16. package/output/index.js +711 -0
  17. package/output/index.umd.cjs +1 -0
  18. package/output/logger/index.d.ts +2 -0
  19. package/output/logger/index.d.ts.map +1 -0
  20. package/output/{esm → logger}/logger.d.ts +1 -0
  21. package/output/logger/logger.d.ts.map +1 -0
  22. package/output/logger/logger.test.d.ts +2 -0
  23. package/output/logger/logger.test.d.ts.map +1 -0
  24. package/output/{esm/render/common/index.d.ts → render/basic/common.d.ts} +2 -1
  25. package/output/render/basic/common.d.ts.map +1 -0
  26. package/output/render/basic/common.test.d.ts +2 -0
  27. package/output/render/basic/common.test.d.ts.map +1 -0
  28. package/output/{umd/render/common → render/basic/hooks}/hooks.d.ts +2 -1
  29. package/output/render/basic/hooks/hooks.d.ts.map +1 -0
  30. package/output/render/basic/hooks/hooks.test.d.ts +2 -0
  31. package/output/render/basic/hooks/hooks.test.d.ts.map +1 -0
  32. package/output/render/basic/hooks/index.d.ts +2 -0
  33. package/output/render/basic/hooks/index.d.ts.map +1 -0
  34. package/output/render/basic/index.d.ts +2 -0
  35. package/output/render/basic/index.d.ts.map +1 -0
  36. package/output/{esm/render/common/plugins → render/basic/plugins/context}/context.d.ts +2 -1
  37. package/output/render/basic/plugins/context/context.d.ts.map +1 -0
  38. package/output/render/basic/plugins/context/context.test.d.ts +2 -0
  39. package/output/render/basic/plugins/context/context.test.d.ts.map +1 -0
  40. package/output/render/basic/plugins/context/index.d.ts +2 -0
  41. package/output/render/basic/plugins/context/index.d.ts.map +1 -0
  42. package/output/render/basic/plugins/index.d.ts +3 -0
  43. package/output/render/basic/plugins/index.d.ts.map +1 -0
  44. package/output/{umd/render/common/plugins/internal → render/basic/plugins/internal/basic}/basic.d.ts +4 -3
  45. package/output/render/basic/plugins/internal/basic/basic.d.ts.map +1 -0
  46. package/output/render/basic/plugins/internal/basic/basic.test.d.ts +2 -0
  47. package/output/render/basic/plugins/internal/basic/basic.test.d.ts.map +1 -0
  48. package/output/render/basic/plugins/internal/basic/index.d.ts +2 -0
  49. package/output/render/basic/plugins/internal/basic/index.d.ts.map +1 -0
  50. package/output/render/basic/plugins/internal/inject/index.d.ts +2 -0
  51. package/output/render/basic/plugins/internal/inject/index.d.ts.map +1 -0
  52. package/output/{esm/render/common/plugins/internal → render/basic/plugins/internal/inject}/inject.d.ts +3 -2
  53. package/output/render/basic/plugins/internal/inject/inject.d.ts.map +1 -0
  54. package/output/render/basic/plugins/internal/inject/inject.test.d.ts +2 -0
  55. package/output/render/basic/plugins/internal/inject/inject.test.d.ts.map +1 -0
  56. package/output/{umd/render/common/plugins/index.d.ts → render/basic/plugins/plugin.d.ts} +2 -2
  57. package/output/render/basic/plugins/plugin.d.ts.map +1 -0
  58. package/output/render/basic/plugins/plugin.test.d.ts +2 -0
  59. package/output/render/basic/plugins/plugin.test.d.ts.map +1 -0
  60. package/output/{esm/render → render/browser}/browser.d.ts +4 -3
  61. package/output/render/browser/browser.d.ts.map +1 -0
  62. package/output/render/browser/browser.test.d.ts +2 -0
  63. package/output/render/browser/browser.test.d.ts.map +1 -0
  64. package/output/render/browser/index.d.ts +2 -0
  65. package/output/render/browser/index.d.ts.map +1 -0
  66. package/output/render/index.d.ts +5 -0
  67. package/output/render/index.d.ts.map +1 -0
  68. package/output/render/server/index.d.ts +2 -0
  69. package/output/render/server/index.d.ts.map +1 -0
  70. package/output/{umd/render → render/server}/server.d.ts +3 -2
  71. package/output/render/server/server.d.ts.map +1 -0
  72. package/output/render/server/server.test.d.ts +2 -0
  73. package/output/render/server/server.test.d.ts.map +1 -0
  74. package/output/signal/index.d.ts +4 -0
  75. package/output/signal/index.d.ts.map +1 -0
  76. package/output/{esm/signal/index.d.ts → signal/signal.d.ts} +2 -2
  77. package/output/signal/signal.d.ts.map +1 -0
  78. package/output/signal/signal.test.d.ts +5 -0
  79. package/output/signal/signal.test.d.ts.map +1 -0
  80. package/output/symbol/index.d.ts +2 -0
  81. package/output/symbol/index.d.ts.map +1 -0
  82. package/output/types/index.d.ts +2 -0
  83. package/output/types/index.d.ts.map +1 -0
  84. package/output/{esm → types}/types.d.ts +4 -2
  85. package/output/types/types.d.ts.map +1 -0
  86. package/package.json +35 -11
  87. package/output/esm/index.d.ts +0 -14
  88. package/output/esm/index.js +0 -1289
  89. package/output/esm/index.js.map +0 -1
  90. package/output/esm/render/common/hooks.d.ts +0 -10
  91. package/output/esm/render/common/plugins/index.d.ts +0 -19
  92. package/output/esm/render/common/plugins/internal/basic.d.ts +0 -10
  93. package/output/esm/render/index.d.ts +0 -4
  94. package/output/esm/render/server.d.ts +0 -5
  95. package/output/esm/symbol.d.ts +0 -2
  96. package/output/umd/element.d.ts +0 -48
  97. package/output/umd/index.d.ts +0 -14
  98. package/output/umd/index.js +0 -1304
  99. package/output/umd/index.js.map +0 -1
  100. package/output/umd/logger.d.ts +0 -3
  101. package/output/umd/render/browser.d.ts +0 -7
  102. package/output/umd/render/common/index.d.ts +0 -64
  103. package/output/umd/render/common/plugins/context.d.ts +0 -5
  104. package/output/umd/render/common/plugins/internal/inject.d.ts +0 -6
  105. package/output/umd/render/index.d.ts +0 -4
  106. package/output/umd/signal/index.d.ts +0 -6
  107. package/output/umd/symbol.d.ts +0 -2
  108. package/output/umd/types.d.ts +0 -1173
@@ -0,0 +1,711 @@
1
+ const L = {
2
+ current: null
3
+ };
4
+ function A() {
5
+ if (L.current == null)
6
+ throw new Error("Unable to find a valid component context");
7
+ return L.current;
8
+ }
9
+ const ie = (l) => A().onMounted(l), re = (l) => A().onUnmounted(l), le = (l) => A().inject(l), se = (l, e) => A().provide(l, e);
10
+ function H() {
11
+ return typeof process < "u" && process?.env?.NODE_ENV === "development" && process?.env?.AIRX_DEBUG === "true";
12
+ }
13
+ function O(l) {
14
+ function e() {
15
+ return `[${(/* @__PURE__ */ new Date()).toLocaleString()}][${l}]`;
16
+ }
17
+ function n(...i) {
18
+ H() && console.log(e(), ...i);
19
+ }
20
+ return { debug: n };
21
+ }
22
+ let x;
23
+ const X = (function() {
24
+ if (typeof self < "u")
25
+ return self;
26
+ if (typeof window < "u")
27
+ return window;
28
+ if (typeof global < "u")
29
+ return global;
30
+ throw new Error("unable to locate global object");
31
+ })();
32
+ function K() {
33
+ const l = X.Signal;
34
+ if (l == null) throw new Error("Signal is undefined");
35
+ if (x == null && (x = l), x !== l) throw new Error("Signal have multiple instances");
36
+ return l;
37
+ }
38
+ function J(l) {
39
+ const e = K();
40
+ return new e.subtle.Watcher(l);
41
+ }
42
+ function Y(l, e) {
43
+ const n = K();
44
+ return new n.Computed(l, e);
45
+ }
46
+ function Z(l) {
47
+ const e = K();
48
+ return l instanceof e.State;
49
+ }
50
+ const G = /* @__PURE__ */ Symbol("airx-element");
51
+ function F(l, e, ...n) {
52
+ const i = [];
53
+ return n.length > 0 ? i.push(...n) : e && e.children && i.push(e.children), {
54
+ type: l,
55
+ props: {
56
+ ...e,
57
+ children: i
58
+ },
59
+ [G]: !0
60
+ };
61
+ }
62
+ function T(l) {
63
+ return typeof l == "object" && l !== null && Reflect.get(l, G) === !0;
64
+ }
65
+ function ce(l) {
66
+ return () => l.children;
67
+ }
68
+ function ue(l) {
69
+ return l;
70
+ }
71
+ function $(l) {
72
+ console.error(l);
73
+ const e = () => {
74
+ console.error(l);
75
+ }, n = () => l == null ? "Unknown rendering error" : l instanceof Error ? l.message : JSON.stringify(l), i = {
76
+ padding: "8px",
77
+ fontSize: "20px",
78
+ color: "rgb(255,255,255)",
79
+ backgroundColor: "rgb(255, 0, 0)"
80
+ };
81
+ return () => F("div", { style: i, onClick: e }, n());
82
+ }
83
+ class M {
84
+ instance;
85
+ disposers = /* @__PURE__ */ new Set();
86
+ providedMap = /* @__PURE__ */ new Map();
87
+ injectedMap = /* @__PURE__ */ new Map();
88
+ mountListeners = /* @__PURE__ */ new Set();
89
+ unmountedListeners = /* @__PURE__ */ new Set();
90
+ triggerMounted() {
91
+ this.mountListeners.forEach((e) => {
92
+ let n;
93
+ try {
94
+ n = e();
95
+ } catch (i) {
96
+ console.error(i, e);
97
+ }
98
+ typeof n == "function" && this.addDisposer(n);
99
+ }), this.mountListeners.clear();
100
+ }
101
+ triggerUnmounted() {
102
+ this.instance?.child != null && this.instance.child.context.triggerUnmounted(), this.unmountedListeners.forEach((e) => {
103
+ try {
104
+ e();
105
+ } catch (n) {
106
+ console.error(n, e);
107
+ }
108
+ }), this.instance?.sibling != null && this.instance.sibling.context.triggerUnmounted(), this.dispose();
109
+ }
110
+ onMounted(e) {
111
+ this.mountListeners.add(e);
112
+ }
113
+ onUnmounted(e) {
114
+ this.unmountedListeners.add(e);
115
+ }
116
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
117
+ provide(e, n) {
118
+ return this.providedMap.set(e, n), (i) => {
119
+ if (typeof i == "function") {
120
+ const o = this.providedMap.get(e), m = i;
121
+ this.providedMap.set(e, m(o));
122
+ return;
123
+ }
124
+ this.providedMap.set(e, i);
125
+ };
126
+ }
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ inject(e) {
129
+ const n = (o, m) => {
130
+ if (o && o.context) {
131
+ const a = o.context.providedMap.get(m);
132
+ if (a != null) return a;
133
+ if (o.parent) return n(o.parent, m);
134
+ }
135
+ };
136
+ if (!this.instance || !this.instance.parent)
137
+ return this.injectedMap.get(e);
138
+ const i = n(this.instance.parent, e);
139
+ return this.injectedMap.set(e, i), this.injectedMap.get(e);
140
+ }
141
+ addDisposer(...e) {
142
+ e.forEach((n) => {
143
+ this.disposers.add(n);
144
+ });
145
+ }
146
+ dispose() {
147
+ this.disposers.forEach(
148
+ (e) => {
149
+ try {
150
+ e();
151
+ } catch (n) {
152
+ console.error(n, e);
153
+ }
154
+ }
155
+ ), this.disposers.clear(), this.injectedMap.clear(), this.providedMap.clear(), this.mountListeners.clear(), this.unmountedListeners.clear();
156
+ }
157
+ /**
158
+ * 当 context 传递给外部消费时,隐藏内部实现,仅暴露接口定义的内容
159
+ * @returns 和 AirxComponentContext 接口完全一致的对象
160
+ */
161
+ getSafeContext() {
162
+ return {
163
+ inject: (e) => this.inject(e),
164
+ provide: (e, n) => this.provide(e, n),
165
+ onMounted: (e) => this.onMounted(e),
166
+ onUnmounted: (e) => this.onUnmounted(e)
167
+ };
168
+ }
169
+ }
170
+ function U(l, e, n) {
171
+ const i = O("reconcileChildren");
172
+ i.debug("reconcileChildren", e, n);
173
+ function o(s) {
174
+ return `airx-element-inner-key:${s}`;
175
+ }
176
+ function m(s) {
177
+ let c = 0, t = s;
178
+ const u = /* @__PURE__ */ new Map();
179
+ for (; t; )
180
+ t.element?.props.key != null ? u.set(t.element?.props.key, t) : u.set(o(c), t), t = t.sibling, c += 1;
181
+ return u;
182
+ }
183
+ const a = [], b = m(e.child);
184
+ function y(s, c) {
185
+ if (s.props.key != null) {
186
+ const d = s.props.key;
187
+ return [b.get(d) || null, () => b.delete(d)];
188
+ }
189
+ const t = o(c);
190
+ return [b.get(t) || null, () => b.delete(t)];
191
+ }
192
+ function g(s, c) {
193
+ for (const t of l.plugins)
194
+ if (typeof t.isReuseInstance == "function" && t.isReuseInstance(s, c) === !1)
195
+ return !1;
196
+ return !0;
197
+ }
198
+ function w(s) {
199
+ if (s.element != null) {
200
+ if (s.memoProps == null && (s.memoProps = {}), s.memoProps != null)
201
+ for (const c in s.memoProps)
202
+ delete s.memoProps[c];
203
+ for (const c in s.element.props) {
204
+ const t = s.element.props[c];
205
+ s.memoProps[c] = t;
206
+ }
207
+ }
208
+ }
209
+ function C(s) {
210
+ for (const c of l.plugins)
211
+ if (typeof c.isReRender == "function" && c.isReRender(s) === !0)
212
+ return !0;
213
+ return !1;
214
+ }
215
+ function v(s) {
216
+ const c = Object.keys(s.props).filter((t) => t === "xmlns" || t.startsWith("xmlns:")).sort((t, u) => t.length - u.length);
217
+ return c.length > 1 ? (console.log("airx currently does not support setting multiple xmlns"), "") : c.some((t) => t.startsWith("xmlns:")) ? (console.log("airx does not currently support setting named namespaces,only supports default"), "") : s.props[c[0]];
218
+ }
219
+ for (let s = 0; s < n.length; s++) {
220
+ const c = n[s], [t, u] = y(c, s);
221
+ if (t && g(t, c))
222
+ u(), a.push(t), t.beforeElement = t.element, t.element = c, w(t), t.needReRender !== !0 && typeof c.type == "function" && (t.needReRender = e.needReRender || C(t));
223
+ else {
224
+ const d = new M(), r = v(c), h = { element: c, context: d, elementNamespace: r };
225
+ a.push(h), d.instance = h, w(h), "ref" in h.memoProps && d.onMounted(() => {
226
+ const f = h.memoProps.ref;
227
+ if (h.domRef) {
228
+ if (Z(f))
229
+ return f.set(h.domRef), () => f.set(void 0);
230
+ if (typeof f == "function")
231
+ return f(h.domRef), () => f(void 0);
232
+ }
233
+ });
234
+ }
235
+ }
236
+ for (let s = 0; s < a.length; s++) {
237
+ const c = a[s];
238
+ c.parent = e, s === 0 && (e.child = c), s > 0 && (a[s - 1].sibling = c), s === a.length - 1 && delete c.sibling, !c.elementNamespace && c.parent?.elementNamespace && c.parent.element?.type !== "foreignObject" && (c.elementNamespace = c.parent.elementNamespace);
239
+ }
240
+ b.size > 0 && (e.deletions == null && (e.deletions = /* @__PURE__ */ new Set()), b.forEach((s) => {
241
+ e.deletions?.add(s);
242
+ })), i.debug("parentInstance", e);
243
+ }
244
+ function z(l, e, n) {
245
+ const i = e.element;
246
+ function o(a) {
247
+ const b = Array.isArray(a) ? a : [a];
248
+ function y(g) {
249
+ return g === "" || g == null || g === !1;
250
+ }
251
+ return b.flat(3).map((g) => {
252
+ if (T(g)) return g;
253
+ const w = y(g) ? "comment" : "text", C = g === "" ? "empty-string" : String(g);
254
+ return F(w, { textContent: C });
255
+ });
256
+ }
257
+ if (typeof i?.type == "function") {
258
+ if (e.componentReturnValue == null) {
259
+ const a = i.type, b = L.current;
260
+ L.current = e.context.getSafeContext();
261
+ let y;
262
+ try {
263
+ y = a(e.memoProps);
264
+ } catch (g) {
265
+ y = $(g);
266
+ }
267
+ if (L.current = b, e.componentReturnValue = y, T(y)) {
268
+ const g = o(y);
269
+ U(l, e, g);
270
+ }
271
+ if (typeof y == "function") {
272
+ if (e.signalWatcher == null) {
273
+ const C = J(async () => {
274
+ e.needReRender = !0, n?.(e), queueMicrotask(() => {
275
+ C.watch();
276
+ const v = C.getPending();
277
+ for (const s of v) s.get();
278
+ });
279
+ });
280
+ e.signalWatcher = C, e.context.addDisposer(() => C.unwatch());
281
+ }
282
+ const g = Y(() => {
283
+ try {
284
+ if (typeof y == "function")
285
+ return y();
286
+ } catch (C) {
287
+ return $(C)();
288
+ }
289
+ });
290
+ e.signalWatcher.watch(g);
291
+ const w = g.get();
292
+ U(l, e, o(w));
293
+ }
294
+ }
295
+ if (e.needReRender) {
296
+ let a;
297
+ try {
298
+ T(e.componentReturnValue) ? a = e.componentReturnValue : a = e.componentReturnValue();
299
+ } catch (b) {
300
+ a = $(b)();
301
+ }
302
+ U(l, e, o(a)), delete e.needReRender;
303
+ }
304
+ }
305
+ if (typeof i?.type == "string" && "children" in i.props && Array.isArray(i.props.children) && U(l, e, o(i.props.children)), e.child)
306
+ return e.child;
307
+ function m(a) {
308
+ return a.sibling ? a.sibling : a.parent ? m(a.parent) : null;
309
+ }
310
+ return m(e);
311
+ }
312
+ function Q(l) {
313
+ return l.replace(/([A-Z])/g, (e, n, i) => i === 0 ? n.toLowerCase() : "-" + n.toLowerCase());
314
+ }
315
+ class S {
316
+ constructor(e) {
317
+ this.nodeName = e, this.style = {}, this.content = "", this.children = [], this.className = "", this.attributes = /* @__PURE__ */ new Map();
318
+ }
319
+ static createTextNode(e) {
320
+ const n = new S("#text");
321
+ return n.content = e, n;
322
+ }
323
+ static createComment(e) {
324
+ const n = new S("#comment");
325
+ return n.content = e, n;
326
+ }
327
+ static createElement(e) {
328
+ return new S(e);
329
+ }
330
+ firstChild;
331
+ nextSibling;
332
+ parentNode;
333
+ className;
334
+ style;
335
+ content;
336
+ children;
337
+ attributes;
338
+ removeChild(e) {
339
+ const n = this.children.findIndex((i) => i === e);
340
+ n != -1 && this.children.splice(n, 1), this.firstChild = void 0, this.nextSibling = void 0, this.parentNode = void 0;
341
+ }
342
+ appendChild(e) {
343
+ e.parentNode = this, this.children.length > 0 && (this.children[this.children.length - 1].nextSibling = e), this.firstChild = this.children[0], this.children.push(e);
344
+ }
345
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
346
+ setAttribute(e, n) {
347
+ if (n === "") return this.attributes.delete(e);
348
+ if (e === "class") return this.className = n;
349
+ if (e === "style") return this.style = n;
350
+ this.attributes.set(e, n);
351
+ }
352
+ removeAttribute(e) {
353
+ this.attributes.delete(e);
354
+ }
355
+ toString() {
356
+ if (this.nodeName === "#text") return this.content;
357
+ if (this.nodeName === "#comment") return this.content;
358
+ const e = Object.entries(this.style).map(([o, m]) => `${Q(o)}:${m}`).join(";"), n = [...this.attributes.entries()];
359
+ e.length > 0 && n.push(["style", e]), this.className.length > 0 && n.push(["class", this.className]);
360
+ const i = n.map(([o, m]) => ` ${o}="${m}"`).join("");
361
+ return `<${this.nodeName}${i}>${this.children.map((o) => o.toString()).join("")}</${this.nodeName}>`;
362
+ }
363
+ }
364
+ function P(l, e, n) {
365
+ const i = {
366
+ domRef: S.createElement("div"),
367
+ context: new M()
368
+ };
369
+ i.context.instance = i;
370
+ const o = {
371
+ rootInstance: i,
372
+ nextUnitOfWork: null
373
+ }, m = {
374
+ element: e,
375
+ parent: o.rootInstance,
376
+ memoProps: { ...e.props },
377
+ context: new M()
378
+ };
379
+ m.context.instance = m, o.rootInstance.child = m, o.nextUnitOfWork = m;
380
+ function a(b, y) {
381
+ O("commitDom").debug("commitDom", b);
382
+ function w(t, u, d = {}) {
383
+ const r = (p) => p === "key", h = (p) => p === "ref", f = (p) => p === "style", R = (p) => p === "class", N = (p) => p.startsWith("on"), E = (p) => p === "children", k = (p, j) => (D) => !(D in j), _ = (p, j) => (D) => p[D] !== j[D], q = (p) => !E(p) && !N(p) && !f(p) && !R(p) && !r(p) && !h(p);
384
+ if (t.nodeName === "#text" || t.nodeName === "#comment") {
385
+ const p = t;
386
+ p.nodeValue !== u.textContent && (p.nodeValue = String(u.textContent));
387
+ return;
388
+ }
389
+ const V = d?.style;
390
+ typeof V == "object" && V != null && Object.keys(V).forEach((p) => {
391
+ delete t.style[p];
392
+ });
393
+ const W = u?.style;
394
+ typeof W == "object" && W != null && Object.keys(W).forEach((p) => {
395
+ const j = W?.[p];
396
+ t.style[p] = j ?? "";
397
+ }), t.className !== u?.class && (u?.class ? typeof u?.class == "string" && t.setAttribute("class", u?.class) : t.removeAttribute("class")), Object.keys(d).filter(q).filter(k(d, u)).forEach((p) => t.removeAttribute(p)), Object.keys(u).filter(q).filter(_(d, u)).forEach((p) => t.setAttribute(p, u[p]));
398
+ }
399
+ function C(t) {
400
+ if (t.parent?.domRef != null)
401
+ return t.parent.domRef;
402
+ if (t.parent)
403
+ return C(t.parent);
404
+ throw new Error("Cant find dom");
405
+ }
406
+ function v(t) {
407
+ const u = [], d = [t];
408
+ for (; d.length > 0; ) {
409
+ const r = d.pop();
410
+ r?.domRef != null && u.push(r.domRef), r?.domRef == null && r?.child != null && d.push(r.child), r?.sibling != null && d.push(r.sibling);
411
+ }
412
+ return u;
413
+ }
414
+ function s(t, u) {
415
+ if (t.deletions) {
416
+ for (const d of t.deletions) {
417
+ const r = v(d);
418
+ for (let h = 0; h < r.length; h++) {
419
+ const f = r[h];
420
+ f && f.parentNode && f.parentNode.removeChild(f);
421
+ }
422
+ d.context.triggerUnmounted();
423
+ }
424
+ t.deletions.clear();
425
+ }
426
+ if (t.domRef == null) {
427
+ if (t.element == null) throw new Error("???");
428
+ if (typeof t.element.type == "string")
429
+ if (t.element.type === "text") {
430
+ const d = t.element.props.textContent;
431
+ t.domRef = S.createTextNode(d);
432
+ } else if (t.element.type === "comment") {
433
+ const d = t.element.props.textContent;
434
+ t.domRef = S.createComment(d);
435
+ } else
436
+ t.domRef = S.createElement(t.element.type);
437
+ }
438
+ t.domRef != null && t.element != null && w(
439
+ t.domRef,
440
+ t.element.props,
441
+ t.beforeElement?.props
442
+ ), t.domRef != null && u !== t.domRef && (t.domRef.parentNode && t.domRef.parentNode.removeChild(t.domRef), C(t).appendChild(t.domRef));
443
+ }
444
+ function c(t, u) {
445
+ const d = [[t, u]];
446
+ for (; d.length > 0; ) {
447
+ const r = d.pop();
448
+ if (typeof r == "function") {
449
+ r();
450
+ continue;
451
+ }
452
+ const [h, f] = r;
453
+ if (s(h, f), d.push(() => h.context.triggerMounted()), h.sibling != null) {
454
+ const R = h.domRef ? h.domRef.nextSibling : f?.nextSibling;
455
+ d.push([h.sibling, R || void 0]);
456
+ }
457
+ if (h.child != null) {
458
+ const R = h.domRef ? h.domRef.firstChild : f;
459
+ d.push([h.child, R || void 0]);
460
+ }
461
+ }
462
+ }
463
+ c(b, y);
464
+ }
465
+ for (; o.nextUnitOfWork; )
466
+ o.nextUnitOfWork = z(
467
+ l,
468
+ o.nextUnitOfWork
469
+ );
470
+ a(
471
+ o.rootInstance.child,
472
+ o.rootInstance.domRef?.firstChild || void 0
473
+ ), n(o.rootInstance.domRef?.toString() || "");
474
+ }
475
+ function B() {
476
+ return {
477
+ didTimeout: !1,
478
+ timeRemaining: () => Number.MAX_SAFE_INTEGER
479
+ };
480
+ }
481
+ function I(l) {
482
+ if (typeof globalThis.requestIdleCallback == "function") {
483
+ globalThis.requestIdleCallback(l);
484
+ return;
485
+ }
486
+ globalThis.setTimeout(() => l(B()), 0);
487
+ }
488
+ function ee(l, e, n) {
489
+ const i = {
490
+ domRef: n,
491
+ context: new M()
492
+ };
493
+ i.context.instance = i;
494
+ const o = {
495
+ rootInstance: i,
496
+ nextUnitOfWork: null,
497
+ needCommitDom: !1,
498
+ isWorkLoopScheduled: !1
499
+ }, m = {
500
+ element: e,
501
+ parent: o.rootInstance,
502
+ memoProps: { ...e.props },
503
+ context: new M()
504
+ };
505
+ m.context.instance = m, o.rootInstance.child = m, o.nextUnitOfWork = m;
506
+ function a(w, C) {
507
+ O("commitDom").debug("commitDom", w);
508
+ function s(r, h, f = {}) {
509
+ for (const R of l.plugins)
510
+ R.updateDom && R.updateDom(r, h, f);
511
+ }
512
+ function c(r) {
513
+ if (r.parent?.domRef != null)
514
+ return r.parent.domRef;
515
+ if (r.parent)
516
+ return c(r.parent);
517
+ throw new Error("Cant find dom");
518
+ }
519
+ function t(r) {
520
+ const h = [], f = [r];
521
+ for (; f.length > 0; ) {
522
+ const R = f.pop();
523
+ R?.domRef != null && h.push(R.domRef), R?.domRef == null && R?.child != null && f.push(R.child), R?.sibling != null && f.push(R.sibling);
524
+ }
525
+ return h;
526
+ }
527
+ function u(r, h) {
528
+ if (r.deletions) {
529
+ for (const f of r.deletions) {
530
+ const R = t(f);
531
+ for (let N = 0; N < R.length; N++) {
532
+ const E = R[N];
533
+ E && E.parentNode && E.parentNode.removeChild(E);
534
+ }
535
+ f.context.triggerUnmounted();
536
+ }
537
+ r.deletions.clear();
538
+ }
539
+ if (r.domRef == null) {
540
+ if (r.element == null) throw new Error("???");
541
+ if (typeof r.element.type == "string") {
542
+ if (r.element.type === "text") {
543
+ const f = r.element.props.textContent;
544
+ r.domRef = document.createTextNode(f);
545
+ } else if (r.element.type === "comment") {
546
+ const f = r.element.props.textContent;
547
+ r.domRef = document.createComment(f);
548
+ } else
549
+ r.domRef = r.elementNamespace ? document.createElementNS(r.elementNamespace, r.element.type) : document.createElement(r.element.type);
550
+ r.domRef && (r.domRef.airxInstance = r);
551
+ }
552
+ }
553
+ r.domRef != null && r.element != null && s(
554
+ r.domRef,
555
+ r.element.props,
556
+ r.beforeElement?.props
557
+ ), r.domRef != null && h !== r.domRef && (r.domRef.parentNode && r.domRef.parentNode.removeChild(r.domRef), c(r).appendChild(r.domRef));
558
+ }
559
+ function d(r, h) {
560
+ const f = [[r, h]];
561
+ for (; f.length > 0; ) {
562
+ const R = f.pop();
563
+ if (typeof R == "function") {
564
+ R();
565
+ continue;
566
+ }
567
+ const [N, E] = R;
568
+ if (u(N, E), f.push(() => N.context.triggerMounted()), N.sibling != null) {
569
+ const k = N.domRef ? N.domRef.nextSibling : E?.nextSibling;
570
+ f.push([N.sibling, k || void 0]);
571
+ }
572
+ if (N.child != null) {
573
+ const k = N.domRef ? N.domRef.firstChild : E;
574
+ f.push([N.child, k || void 0]);
575
+ }
576
+ }
577
+ }
578
+ d(w, C);
579
+ }
580
+ function b() {
581
+ o.isWorkLoopScheduled || o.nextUnitOfWork == null || (o.isWorkLoopScheduled = !0, I((w) => {
582
+ o.isWorkLoopScheduled = !1, g(w);
583
+ }));
584
+ }
585
+ function y() {
586
+ o.nextUnitOfWork == null && o.rootInstance.child && (o.nextUnitOfWork = o.rootInstance.child), b();
587
+ }
588
+ function g(w = B()) {
589
+ let C = !1;
590
+ const v = O("workLoop");
591
+ for (; o.nextUnitOfWork && !C; )
592
+ v.debug("nextUnitOfWork", o.nextUnitOfWork), o.nextUnitOfWork = z(l, o.nextUnitOfWork, y), o.nextUnitOfWork == null && (o.needCommitDom = !0), w && (C = w.timeRemaining() < 1);
593
+ o.needCommitDom && o.rootInstance.child && (a(
594
+ o.rootInstance.child,
595
+ o.rootInstance.domRef?.firstChild || void 0
596
+ ), o.needCommitDom = !1), b();
597
+ }
598
+ return g(), o.rootInstance;
599
+ }
600
+ class te {
601
+ logger = O("basicLogicPlugin");
602
+ isSameProps(e, n) {
603
+ if (Object.is(n, e))
604
+ return !0;
605
+ if (typeof e != "object" || typeof n != "object" || e === null || n === null)
606
+ return this.logger.debug("props must be an object"), !1;
607
+ const i = Object.keys(e);
608
+ for (let o = 0; o < i.length; o++) {
609
+ const m = i[o];
610
+ if (m !== "children" && m !== "key" && (!Object.hasOwn(n, m) || !Object.is(e[m], n[m])))
611
+ return !1;
612
+ if (m === "children") {
613
+ const a = e.children, b = n.children;
614
+ if (a.length === 0 && b.length === 0) return !0;
615
+ for (let y = 0; y < a.length; y++) {
616
+ const g = a[y], w = b[y];
617
+ if (g !== w || typeof g != typeof w) return !1;
618
+ }
619
+ }
620
+ return !0;
621
+ }
622
+ return !1;
623
+ }
624
+ isReRender(e) {
625
+ const n = e.element?.props, i = e.beforeElement?.props;
626
+ if (!this.isSameProps(i, n)) return !0;
627
+ }
628
+ updateDom(e, n, i = {}) {
629
+ this.logger.debug("updateDom", e, n, i);
630
+ const o = (t) => t === "key", m = (t) => t === "ref", a = (t) => t === "style", b = (t) => t === "class", y = (t) => t.startsWith("on"), g = (t) => t === "children", w = (t, u) => (d) => !(d in u), C = (t, u) => (d) => t[d] !== u[d], v = (t) => !g(t) && !y(t) && !a(t) && !b(t) && !o(t) && !m(t);
631
+ if (e.nodeName === "#text" || e.nodeName === "#comment") {
632
+ const t = e;
633
+ t.nodeValue !== n.textContent && (t.nodeValue = String(n.textContent));
634
+ return;
635
+ }
636
+ const s = i?.style;
637
+ if (typeof s == "object" && s != null) {
638
+ if (!("style" in e) || !e.style) return;
639
+ Object.keys(s).forEach((t) => {
640
+ "style" in e && e.style && delete e.style[t];
641
+ });
642
+ }
643
+ const c = n?.style;
644
+ if (typeof c == "object" && c != null) {
645
+ if (!("style" in e) || !e.style) return;
646
+ Object.keys(c).forEach((t) => {
647
+ const u = c?.[t];
648
+ e.style[t] = u ?? "";
649
+ });
650
+ }
651
+ e.className !== n?.class && (n?.class ? typeof n?.class == "string" && e.setAttribute("class", n?.class) : e.removeAttribute("class")), Object.keys(i).filter(y).filter(
652
+ (t) => !(t in n) || C(i, n)(t)
653
+ ).forEach((t) => {
654
+ const u = t.toLowerCase().substring(2);
655
+ i[t] != null && (typeof i[t] != "function" ? console.error("EventListener is not a function") : e.removeEventListener(u, i[t]));
656
+ }), Object.keys(n).filter(y).filter(C(i, n)).forEach((t) => {
657
+ const u = t.toLowerCase().substring(2);
658
+ n[t] != null && (typeof n[t] != "function" ? console.error("EventListener is not a function") : e.addEventListener(u, n[t]));
659
+ }), Object.keys(i).filter(v).filter(w(i, n)).forEach((t) => e.removeAttribute(t)), Object.keys(n).filter(v).filter(C(i, n)).forEach((t) => e.setAttribute(t, n[t]));
660
+ }
661
+ isReuseInstance(e, n) {
662
+ if (e && e.element && e.element.type !== n.type)
663
+ return !1;
664
+ }
665
+ }
666
+ class ne {
667
+ getProvideValueForParent(e, n) {
668
+ if (e && e.context) {
669
+ const i = e.context.providedMap.get(n);
670
+ if (i != null) return i;
671
+ if (e.parent)
672
+ return this.getProvideValueForParent(e.parent, n);
673
+ }
674
+ }
675
+ isReuseInstance(e) {
676
+ const n = [...e.context.injectedMap.keys()];
677
+ for (let i = 0; i < n.length; i++) {
678
+ const o = n[i], m = e.context.injectedMap.get(o);
679
+ if (this.getProvideValueForParent(e.parent, o) !== m) return !1;
680
+ }
681
+ }
682
+ }
683
+ class oe {
684
+ plugins = [
685
+ new te(),
686
+ new ne()
687
+ ];
688
+ registerPlugin(...e) {
689
+ this.plugins.push(...e);
690
+ }
691
+ }
692
+ function fe(l) {
693
+ const e = new oe(), n = (o) => typeof o == "function" ? F(o, {}) : o, i = {
694
+ plugin: (...o) => (e.registerPlugin(...o), i),
695
+ mount: (o) => (o.innerHTML = "", ee(e, n(l), o), i),
696
+ renderToHTML: () => new Promise((o) => {
697
+ P(e, n(l), o);
698
+ })
699
+ };
700
+ return i;
701
+ }
702
+ export {
703
+ ce as Fragment,
704
+ ue as component,
705
+ fe as createApp,
706
+ F as createElement,
707
+ le as inject,
708
+ ie as onMounted,
709
+ re as onUnmounted,
710
+ se as provide
711
+ };