@elurjs/core 3.5.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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -0
  3. package/dist/lib/async.cjs +16 -0
  4. package/dist/lib/async.js +123 -0
  5. package/dist/lib/component.cjs +2 -0
  6. package/dist/lib/component.js +66 -0
  7. package/dist/lib/context.cjs +2 -0
  8. package/dist/lib/context.js +52 -0
  9. package/dist/lib/devtools.cjs +59 -0
  10. package/dist/lib/devtools.js +419 -0
  11. package/dist/lib/elur/async.cjs +16 -0
  12. package/dist/lib/elur/async.cjs.map +1 -0
  13. package/dist/lib/elur/async.d.cts +32 -0
  14. package/dist/lib/elur/async.d.ts +32 -0
  15. package/dist/lib/elur/async.js +123 -0
  16. package/dist/lib/elur/async.js.map +1 -0
  17. package/dist/lib/elur/component.cjs +2 -0
  18. package/dist/lib/elur/component.cjs.map +1 -0
  19. package/dist/lib/elur/component.d.cts +17 -0
  20. package/dist/lib/elur/component.d.ts +17 -0
  21. package/dist/lib/elur/component.js +66 -0
  22. package/dist/lib/elur/component.js.map +1 -0
  23. package/dist/lib/elur/context.cjs +2 -0
  24. package/dist/lib/elur/context.cjs.map +1 -0
  25. package/dist/lib/elur/context.d.cts +29 -0
  26. package/dist/lib/elur/context.d.ts +29 -0
  27. package/dist/lib/elur/context.js +52 -0
  28. package/dist/lib/elur/context.js.map +1 -0
  29. package/dist/lib/elur/devtools.cjs +59 -0
  30. package/dist/lib/elur/devtools.cjs.map +1 -0
  31. package/dist/lib/elur/devtools.d.cts +24 -0
  32. package/dist/lib/elur/devtools.d.ts +24 -0
  33. package/dist/lib/elur/devtools.js +419 -0
  34. package/dist/lib/elur/devtools.js.map +1 -0
  35. package/dist/lib/elur/form.cjs +2 -0
  36. package/dist/lib/elur/form.cjs.map +1 -0
  37. package/dist/lib/elur/form.d.cts +283 -0
  38. package/dist/lib/elur/form.d.ts +283 -0
  39. package/dist/lib/elur/form.js +315 -0
  40. package/dist/lib/elur/form.js.map +1 -0
  41. package/dist/lib/elur/hydrate/index.cjs +2 -0
  42. package/dist/lib/elur/hydrate/index.cjs.map +1 -0
  43. package/dist/lib/elur/hydrate/index.d.cts +13 -0
  44. package/dist/lib/elur/hydrate/index.d.ts +13 -0
  45. package/dist/lib/elur/hydrate/index.js +410 -0
  46. package/dist/lib/elur/hydrate/index.js.map +1 -0
  47. package/dist/lib/elur/index.d.cts +19 -0
  48. package/dist/lib/elur/index.d.ts +19 -0
  49. package/dist/lib/elur/lifecycle.cjs +2 -0
  50. package/dist/lib/elur/lifecycle.cjs.map +1 -0
  51. package/dist/lib/elur/lifecycle.d.cts +45 -0
  52. package/dist/lib/elur/lifecycle.d.ts +45 -0
  53. package/dist/lib/elur/lifecycle.js +39 -0
  54. package/dist/lib/elur/lifecycle.js.map +1 -0
  55. package/dist/lib/elur/plugins.cjs +2 -0
  56. package/dist/lib/elur/plugins.cjs.map +1 -0
  57. package/dist/lib/elur/plugins.d.cts +48 -0
  58. package/dist/lib/elur/plugins.d.ts +48 -0
  59. package/dist/lib/elur/plugins.js +59 -0
  60. package/dist/lib/elur/plugins.js.map +1 -0
  61. package/dist/lib/elur/reactivity.cjs +2 -0
  62. package/dist/lib/elur/reactivity.cjs.map +1 -0
  63. package/dist/lib/elur/reactivity.d.cts +60 -0
  64. package/dist/lib/elur/reactivity.d.ts +60 -0
  65. package/dist/lib/elur/reactivity.js +188 -0
  66. package/dist/lib/elur/reactivity.js.map +1 -0
  67. package/dist/lib/elur/router.cjs +12 -0
  68. package/dist/lib/elur/router.cjs.map +1 -0
  69. package/dist/lib/elur/router.d.cts +137 -0
  70. package/dist/lib/elur/router.d.ts +137 -0
  71. package/dist/lib/elur/router.js +513 -0
  72. package/dist/lib/elur/router.js.map +1 -0
  73. package/dist/lib/elur/server/index.cjs +2 -0
  74. package/dist/lib/elur/server/index.cjs.map +1 -0
  75. package/dist/lib/elur/server/index.d.cts +44 -0
  76. package/dist/lib/elur/server/index.d.ts +44 -0
  77. package/dist/lib/elur/server/index.js +307 -0
  78. package/dist/lib/elur/server/index.js.map +1 -0
  79. package/dist/lib/elur/store.cjs +2 -0
  80. package/dist/lib/elur/store.cjs.map +1 -0
  81. package/dist/lib/elur/store.d.cts +137 -0
  82. package/dist/lib/elur/store.d.ts +137 -0
  83. package/dist/lib/elur/store.js +143 -0
  84. package/dist/lib/elur/store.js.map +1 -0
  85. package/dist/lib/elur/template/bindings.cjs +2 -0
  86. package/dist/lib/elur/template/bindings.cjs.map +1 -0
  87. package/dist/lib/elur/template/bindings.d.cts +40 -0
  88. package/dist/lib/elur/template/bindings.d.ts +40 -0
  89. package/dist/lib/elur/template/bindings.js +214 -0
  90. package/dist/lib/elur/template/bindings.js.map +1 -0
  91. package/dist/lib/elur/template/dom-write.cjs +2 -0
  92. package/dist/lib/elur/template/dom-write.cjs.map +1 -0
  93. package/dist/lib/elur/template/dom-write.d.cts +5 -0
  94. package/dist/lib/elur/template/dom-write.d.ts +5 -0
  95. package/dist/lib/elur/template/dom-write.js +16 -0
  96. package/dist/lib/elur/template/dom-write.js.map +1 -0
  97. package/dist/lib/elur/template/error-boundary.cjs +2 -0
  98. package/dist/lib/elur/template/error-boundary.cjs.map +1 -0
  99. package/dist/lib/elur/template/error-boundary.d.cts +7 -0
  100. package/dist/lib/elur/template/error-boundary.d.ts +7 -0
  101. package/dist/lib/elur/template/error-boundary.js +90 -0
  102. package/dist/lib/elur/template/error-boundary.js.map +1 -0
  103. package/dist/lib/elur/template/html.cjs +2 -0
  104. package/dist/lib/elur/template/html.cjs.map +1 -0
  105. package/dist/lib/elur/template/html.d.cts +8 -0
  106. package/dist/lib/elur/template/html.d.ts +8 -0
  107. package/dist/lib/elur/template/html.js +104 -0
  108. package/dist/lib/elur/template/html.js.map +1 -0
  109. package/dist/lib/elur/template/index.cjs +1 -0
  110. package/dist/lib/elur/template/index.d.cts +15 -0
  111. package/dist/lib/elur/template/index.d.ts +15 -0
  112. package/dist/lib/elur/template/index.js +13 -0
  113. package/dist/lib/elur/template/keyed-diff.cjs +2 -0
  114. package/dist/lib/elur/template/keyed-diff.cjs.map +1 -0
  115. package/dist/lib/elur/template/keyed-diff.d.cts +32 -0
  116. package/dist/lib/elur/template/keyed-diff.d.ts +32 -0
  117. package/dist/lib/elur/template/keyed-diff.js +100 -0
  118. package/dist/lib/elur/template/keyed-diff.js.map +1 -0
  119. package/dist/lib/elur/template/keyed.cjs +2 -0
  120. package/dist/lib/elur/template/keyed.cjs.map +1 -0
  121. package/dist/lib/elur/template/keyed.d.cts +27 -0
  122. package/dist/lib/elur/template/keyed.d.ts +27 -0
  123. package/dist/lib/elur/template/keyed.js +52 -0
  124. package/dist/lib/elur/template/keyed.js.map +1 -0
  125. package/dist/lib/elur/template/mount-helpers.cjs +2 -0
  126. package/dist/lib/elur/template/mount-helpers.cjs.map +1 -0
  127. package/dist/lib/elur/template/mount-helpers.d.cts +29 -0
  128. package/dist/lib/elur/template/mount-helpers.d.ts +29 -0
  129. package/dist/lib/elur/template/mount-helpers.js +132 -0
  130. package/dist/lib/elur/template/mount-helpers.js.map +1 -0
  131. package/dist/lib/elur/template/node-binding.cjs +2 -0
  132. package/dist/lib/elur/template/node-binding.cjs.map +1 -0
  133. package/dist/lib/elur/template/node-binding.d.cts +6 -0
  134. package/dist/lib/elur/template/node-binding.d.ts +6 -0
  135. package/dist/lib/elur/template/node-binding.js +95 -0
  136. package/dist/lib/elur/template/node-binding.js.map +1 -0
  137. package/dist/lib/elur/template/portal.cjs +2 -0
  138. package/dist/lib/elur/template/portal.cjs.map +1 -0
  139. package/dist/lib/elur/template/portal.d.cts +19 -0
  140. package/dist/lib/elur/template/portal.d.ts +19 -0
  141. package/dist/lib/elur/template/portal.js +49 -0
  142. package/dist/lib/elur/template/portal.js.map +1 -0
  143. package/dist/lib/elur/template/raw.cjs +2 -0
  144. package/dist/lib/elur/template/raw.cjs.map +1 -0
  145. package/dist/lib/elur/template/raw.d.cts +9 -0
  146. package/dist/lib/elur/template/raw.d.ts +9 -0
  147. package/dist/lib/elur/template/raw.js +29 -0
  148. package/dist/lib/elur/template/raw.js.map +1 -0
  149. package/dist/lib/elur/template/sanitize.cjs +2 -0
  150. package/dist/lib/elur/template/sanitize.cjs.map +1 -0
  151. package/dist/lib/elur/template/sanitize.d.cts +16 -0
  152. package/dist/lib/elur/template/sanitize.d.ts +16 -0
  153. package/dist/lib/elur/template/sanitize.js +29 -0
  154. package/dist/lib/elur/template/sanitize.js.map +1 -0
  155. package/dist/lib/elur/template/transitions.cjs +2 -0
  156. package/dist/lib/elur/template/transitions.cjs.map +1 -0
  157. package/dist/lib/elur/template/transitions.d.cts +43 -0
  158. package/dist/lib/elur/template/transitions.d.ts +43 -0
  159. package/dist/lib/elur/template/transitions.js +96 -0
  160. package/dist/lib/elur/template/transitions.js.map +1 -0
  161. package/dist/lib/elur/template/types.cjs +2 -0
  162. package/dist/lib/elur/template/types.cjs.map +1 -0
  163. package/dist/lib/elur/template/types.d.cts +114 -0
  164. package/dist/lib/elur/template/types.d.ts +114 -0
  165. package/dist/lib/elur/template/types.js +23 -0
  166. package/dist/lib/elur/template/types.js.map +1 -0
  167. package/dist/lib/elur.cjs +1 -0
  168. package/dist/lib/elur.js +18 -0
  169. package/dist/lib/form.cjs +2 -0
  170. package/dist/lib/form.js +315 -0
  171. package/dist/lib/hydrate.cjs +2 -0
  172. package/dist/lib/hydrate.js +410 -0
  173. package/dist/lib/index.cjs +1 -0
  174. package/dist/lib/index.d.cts +2 -0
  175. package/dist/lib/index.d.ts +2 -0
  176. package/dist/lib/index.js +18 -0
  177. package/dist/lib/lifecycle.cjs +2 -0
  178. package/dist/lib/lifecycle.js +39 -0
  179. package/dist/lib/plugins.cjs +2 -0
  180. package/dist/lib/plugins.js +59 -0
  181. package/dist/lib/router.cjs +12 -0
  182. package/dist/lib/router.js +513 -0
  183. package/dist/lib/server.cjs +2 -0
  184. package/dist/lib/server.js +307 -0
  185. package/dist/lib/signals.cjs +2 -0
  186. package/dist/lib/signals.js +188 -0
  187. package/dist/lib/store.cjs +2 -0
  188. package/dist/lib/store.js +143 -0
  189. package/dist/lib/template.cjs +1 -0
  190. package/dist/lib/template.js +13 -0
  191. package/package.json +216 -0
@@ -0,0 +1,315 @@
1
+ import { batch as e, computed as t, effect as n, signal as r } from "./signals.js";
2
+ //#region src/elur/form.ts
3
+ function i(e = "Required") {
4
+ return (t) => t == null || t === "" || Array.isArray(t) && t.length === 0 ? e : null;
5
+ }
6
+ function a(e, t) {
7
+ return (n) => typeof n == "string" && n.length < e ? t ?? `Minimum ${e} characters` : null;
8
+ }
9
+ function o(e, t) {
10
+ return (n) => typeof n == "string" && n.length > e ? t ?? `Maximum ${e} characters` : null;
11
+ }
12
+ function s(e, t = "Invalid format") {
13
+ return (n) => typeof n == "string" && !e.test(n) ? t : null;
14
+ }
15
+ function c(e = "Invalid email") {
16
+ return s(/^[^\s@]+@[^\s@]+\.[^\s@]+$/, e);
17
+ }
18
+ function l(e, t) {
19
+ return (n) => typeof n == "number" && n < e ? t ?? `Minimum value is ${e}` : null;
20
+ }
21
+ function u(e, t) {
22
+ return (n) => typeof n == "number" && n > e ? t ?? `Maximum value is ${e}` : null;
23
+ }
24
+ function d(e) {
25
+ return e;
26
+ }
27
+ var f = {
28
+ required: i,
29
+ minLength: a,
30
+ maxLength: o,
31
+ email: c,
32
+ pattern: s,
33
+ min: l,
34
+ max: u
35
+ };
36
+ function p(e, t) {
37
+ return {
38
+ ...e,
39
+ ...t
40
+ };
41
+ }
42
+ function m(i, a = [], o = "blur", s) {
43
+ let c = r(i), l = r(!1), u = r(!1), d = r(null), f = r(!1), p = i, m = !0, h = n(() => {
44
+ if (c.value, m) {
45
+ m = !1;
46
+ return;
47
+ }
48
+ d.peek() !== null && (d.value = null);
49
+ }), g = t(() => {
50
+ if (d.value) return d.value;
51
+ let e = s?.();
52
+ for (let t of a) {
53
+ let n = t(c.value, e);
54
+ if (n) return n;
55
+ }
56
+ return null;
57
+ }), _ = t(() => (o === "input" ? u.value || l.value : o === "submit" ? f.value : l.value) ? g.value : null);
58
+ function v(e) {
59
+ return e.type === "checkbox" || e.type === "radio";
60
+ }
61
+ function y(e) {
62
+ if (!e || !("value" in e)) return i;
63
+ let t = e, n = t.value;
64
+ return typeof i == "boolean" ? t.checked === !0 ? !0 : v(t) ? !1 : n === "true" || n === "1" ? !0 : n === "false" || n === "0" || n === "" ? !1 : i : typeof i == "number" ? n === "" ? NaN : Number(n) : n;
65
+ }
66
+ let b = (e) => {
67
+ c.value = y(e.target), u.value = !0;
68
+ }, x = () => {
69
+ l.value = !0;
70
+ };
71
+ function S() {
72
+ e(() => {
73
+ c.value = p, l.value = !1, u.value = !1, d.value = null, f.value = !1;
74
+ });
75
+ }
76
+ function C(t, n = {}) {
77
+ let { shouldTouch: r = !1, shouldDirty: i = !0, shouldValidate: a = !0 } = n;
78
+ e(() => {
79
+ c.value = t, i && (u.value = !0), r && (l.value = !0), a && (f.value = !0);
80
+ });
81
+ }
82
+ function w(e) {
83
+ d.value = e, e && (l.value = !0);
84
+ }
85
+ function T() {
86
+ l.value = !0, f.value = !0;
87
+ }
88
+ function E(e) {
89
+ p = e;
90
+ }
91
+ function D() {
92
+ h(), _.dispose(), g.dispose();
93
+ }
94
+ return {
95
+ value: c,
96
+ error: _,
97
+ rawError: g,
98
+ touched: l,
99
+ dirty: u,
100
+ onInput: b,
101
+ onBlur: x,
102
+ reset: S,
103
+ setValue: C,
104
+ _setExternalError: w,
105
+ _forceVisible: T,
106
+ _setInitialValue: E,
107
+ _dispose: D
108
+ };
109
+ }
110
+ function h(e, n = {}, i = "blur") {
111
+ function a(e) {
112
+ let t = {};
113
+ for (let r in e) {
114
+ let a = n[r] ?? [];
115
+ t[r] = m(e[r], a, i);
116
+ }
117
+ return t;
118
+ }
119
+ let o = r(e.map(a)), s = e, c = t(() => o.value.length);
120
+ function l(e) {
121
+ o.value = [...o.value, a(e)];
122
+ }
123
+ function u(e) {
124
+ let t = o.value;
125
+ if (!(e < 0 || e >= t.length)) {
126
+ for (let n in t[e]) t[e][n]._dispose();
127
+ o.value = t.filter((t, n) => n !== e);
128
+ }
129
+ }
130
+ function d(e, t) {
131
+ let n = [...o.value];
132
+ if (e < 0 || e >= n.length || t < 0 || t >= n.length || e === t) return;
133
+ let [r] = n.splice(e, 1);
134
+ n.splice(t, 0, r), o.value = n;
135
+ }
136
+ function f(e, t) {
137
+ let n = [...o.value];
138
+ if (!(e < 0 || e >= n.length)) {
139
+ for (let t in n[e]) n[e][t]._dispose();
140
+ n[e] = a(t), o.value = n;
141
+ }
142
+ }
143
+ function p(e) {
144
+ for (let e of o.value) for (let t in e) e[t]._dispose();
145
+ o.value = e.map(a);
146
+ }
147
+ function h(e) {
148
+ let t = [...o.value];
149
+ for (let n = 0; n < e.length; n++) {
150
+ let r = e[n];
151
+ if (n >= t.length) {
152
+ t.push(a(r));
153
+ continue;
154
+ }
155
+ let i = t[n];
156
+ for (let [e, t] of Object.entries(r)) i[e] && i[e].setValue(t, {
157
+ shouldDirty: !1,
158
+ shouldTouch: !1,
159
+ shouldValidate: !1
160
+ });
161
+ }
162
+ o.value = t;
163
+ }
164
+ function g(e) {
165
+ e && (s = e);
166
+ for (let e of o.value) for (let t in e) e[t]._dispose();
167
+ o.value = s.map(a);
168
+ }
169
+ function _() {
170
+ for (let e of o.value) for (let t in e) e[t]._dispose();
171
+ c.dispose();
172
+ }
173
+ return {
174
+ fields: o,
175
+ append: l,
176
+ remove: u,
177
+ move: d,
178
+ replace: f,
179
+ length: c,
180
+ setValues: p,
181
+ patchValues: h,
182
+ reset: g,
183
+ _dispose: _
184
+ };
185
+ }
186
+ function g(e) {
187
+ return typeof e == "object" && !!e && !Array.isArray(e);
188
+ }
189
+ function _(e, t = "", n = []) {
190
+ for (let [r, i] of Object.entries(e)) {
191
+ let e = t ? `${t}.${r}` : r;
192
+ if (g(i) && Object.keys(i).length > 0) {
193
+ _(i, e, n);
194
+ continue;
195
+ }
196
+ n.push([e, i]);
197
+ }
198
+ return n;
199
+ }
200
+ function v(e, t, n) {
201
+ let r = t.split("."), i = e;
202
+ for (let e = 0; e < r.length - 1; e++) {
203
+ let t = r[e], n = i[t];
204
+ g(n) || (i[t] = {}), i = i[t];
205
+ }
206
+ i[r[r.length - 1]] = n;
207
+ }
208
+ function y(n, i = {}) {
209
+ let a = i.validateOn ?? "blur", o = {}, s = i.validators;
210
+ function c() {
211
+ let e = {};
212
+ for (let t in o) v(e, t, o[t].value.value);
213
+ return e;
214
+ }
215
+ for (let [e, t] of _(n)) o[e] = m(t, s?.[e] ?? [], a, c);
216
+ let l = r(!1), u = r(0), d = t(() => c()), f = t(() => {
217
+ let e = {};
218
+ for (let t in o) {
219
+ let n = o[t].error.value;
220
+ n && (e[t] = n);
221
+ }
222
+ return e;
223
+ }), p = t(() => {
224
+ for (let e in o) if (o[e].rawError.value) return !1;
225
+ return !0;
226
+ }), h = t(() => {
227
+ for (let e in o) if (o[e].error.value) return !1;
228
+ return !0;
229
+ }), g = t(() => {
230
+ for (let e in o) if (o[e].dirty.value) return !0;
231
+ return !1;
232
+ }), y = t(() => {
233
+ for (let e in o) if (o[e].touched.value) return !0;
234
+ return !1;
235
+ });
236
+ function b(e) {
237
+ for (let t in e) o[t]?._setExternalError(e[t] ?? null);
238
+ }
239
+ function x(e, t, n = {}) {
240
+ let r = o[e];
241
+ r && r.setValue(t, n);
242
+ }
243
+ function S(t, n = {}) {
244
+ let { keepDirty: r = !1, keepTouched: i = !1, keepErrors: a = !0 } = n;
245
+ e(() => {
246
+ for (let [e, n] of _(t)) {
247
+ let t = o[e];
248
+ t && (t.setValue(n, {
249
+ shouldDirty: !r,
250
+ shouldTouch: !1,
251
+ shouldValidate: !a
252
+ }), i || (t.touched.value = !1));
253
+ }
254
+ });
255
+ }
256
+ function C(e) {
257
+ if (e) for (let [t, n] of _(e)) {
258
+ let e = o[t];
259
+ e && e._setInitialValue(n);
260
+ }
261
+ for (let e in o) o[e].reset();
262
+ l.value = !1, u.value = 0;
263
+ }
264
+ function w() {
265
+ d.dispose(), f.dispose(), p.dispose(), h.dispose(), g.dispose(), y.dispose();
266
+ for (let e in o) o[e]._dispose();
267
+ }
268
+ function T(e) {
269
+ return (t) => {
270
+ t.preventDefault(), u.value++;
271
+ for (let e in o) o[e]._forceVisible();
272
+ let n = d.value;
273
+ if (i.validate) {
274
+ let e = i.validate(n);
275
+ if (e) {
276
+ let t = {}, n = !1;
277
+ for (let r in e) {
278
+ let i = e[r], a = Array.isArray(i) ? i[0] ?? null : i ?? null;
279
+ a && (t[r] = a, n = !0);
280
+ }
281
+ if (n) {
282
+ b(t);
283
+ return;
284
+ }
285
+ }
286
+ }
287
+ for (let e in o) if (o[e].rawError.value) return;
288
+ let r = e(n);
289
+ r instanceof Promise && (l.value = !0, r.finally(() => {
290
+ l.value = !1;
291
+ }).catch(() => {}));
292
+ };
293
+ }
294
+ return {
295
+ fields: o,
296
+ values: d,
297
+ errors: f,
298
+ canSubmit: p,
299
+ valid: h,
300
+ dirty: g,
301
+ touched: y,
302
+ isSubmitting: l,
303
+ submitCount: u,
304
+ handleSubmit: T,
305
+ reset: C,
306
+ setValue: x,
307
+ setValues: S,
308
+ setErrors: b,
309
+ dispose: w
310
+ };
311
+ }
312
+ //#endregion
313
+ export { y as createForm, d as createValidator, m as elurField, h as elurFieldArray, c as email, p as extendValidators, u as max, o as maxLength, l as min, a as minLength, s as pattern, i as required, f as validators };
314
+
315
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./signals.cjs`),t=require(`./elur/template/types.cjs`),n=require(`./lifecycle.cjs`),r=require(`./context.cjs`),i=require(`./elur/template/keyed.cjs`),a=require(`./elur/template/keyed-diff.cjs`),o=require(`./elur/template/sanitize.cjs`),s=require(`./elur/template/bindings.cjs`);function c(e,r,i={}){try{if(n.isElurComponent(e))return l(e,r,i);let a=e[t.ELUR_TEMPLATE_DESCRIPTOR];return a||S(i,-1,`descriptor`,`Template has no hydration descriptor`),{unmount:u(a,r,i)}}catch(t){if(i.mismatch===`throw`)throw t;return i.mismatch!==`remount`&&console.warn(`[elur] Hydration mismatch; remounting root:`,t),r.replaceChildren(),{unmount:n.isElurComponent(e)?e.render()._render(r,null):e._render(r,null)}}}function l(e,n,i){r._pushComponentContext();let a=()=>{};try{try{e.onInit?.()}catch(t){if(e.onError)e.onError(t);else throw t}let r=e.render()[t.ELUR_TEMPLATE_DESCRIPTOR];r||S(i,-1,`descriptor`,`Component template has no hydration descriptor`),a=u(r,n,i)}finally{r._popComponentContext()}let o=e.onMount?.();return{unmount(){e.onUnmount?.(),typeof o==`function`&&o(),a()}}}function u(e,t,n,r){let i=d(t,r),a=[];for(let t=0;t<e.contexts.length;t++){let r=e.contexts[t],o=e.values[t];if(r.type===`event`){let e=i.events.get(t);e||S(n,t,`event`,`Missing event marker ${t}`),e.removeAttribute(`data-elur-e-${t}`),a.push(p(e,r.eventName,r.modifiers,o));continue}if(r.type===`attr`){let e=i.attributes.get(t);e||S(n,t,`attribute`,`Missing attribute marker ${t}`),e.removeAttribute(`data-elur-a-${t}`),a.push(m(e,r.attrName,r.url===!0,o));continue}let s=i.nodes.get(t);s||S(n,t,`node`,`Missing node marker ${t}`);let c=h(s,o,n,i.keyed.get(t),i.arrayItems.get(t));c&&a.push(c)}return()=>{for(let e=a.length-1;e>=0;e--)a[e]()}}function d(e,t){let n=new Map,r=new Map,i=new Map,a=new Map,o=new Map,s=new Map,c=[],l=[],u=[],d=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_COMMENT),p;for(;p=d.nextNode();){if(t&&!f(p,t))continue;if(p.nodeType===Node.COMMENT_NODE){let e=p,t=/^elur-(\d+)$/.exec(e.data);if(t){let n=Number(t[1]);c.length===0&&r.set(n,e),c.push(n);continue}let i=/^elur-end-(\d+)$/.exec(e.data);if(i){let t=Number(i[1]);if(c.pop()===t&&c.length===0){let i=r.get(t);i&&n.set(t,{start:i,end:e})}continue}let a=/^elur-ki:(.+)$/.exec(e.data);if(a){let t=a[1];l.length===0&&c.length===1?l.push({start:e,serializedKey:t,parentIndex:c[c.length-1]}):l.push({start:e,serializedKey:t,parentIndex:-1});continue}if(e.data===`elur-ke`){let t=l.pop();if(t){if(t.parentIndex>=0){let n=o.get(t.parentIndex)??[];n.push({start:t.start,end:e,serializedKey:t.serializedKey}),o.set(t.parentIndex,n)}}else throw Error(`[elur] Hydration marker mismatch: orphan keyed end marker (elur-ke)`);continue}if(e.data===`elur-ai`){u.length===0&&c.length===1?u.push({start:e,parentIndex:c[c.length-1]}):u.push({start:e,parentIndex:-1});continue}if(e.data===`elur-aiend`){let t=u.pop();if(t&&t.parentIndex>=0){let n=s.get(t.parentIndex)??[];n.push({start:t.start,end:e}),s.set(t.parentIndex,n)}continue}continue}if(c.length>0)continue;let e=p;for(let t of Array.from(e.attributes)){let n=/^data-elur-e-(\d+)$/.exec(t.name);n&&a.set(Number(n[1]),e);let r=/^data-elur-a-(\d+)$/.exec(t.name);r&&i.set(Number(r[1]),e)}}return{nodes:n,attributes:i,events:a,keyed:o,arrayItems:s}}function f(e,t){let n=document.createRange();return n.setStartAfter(t.start),n.setEndBefore(t.end),n.intersectsNode(e)}function p(e,t,n,r){if(typeof r!=`function`)throw TypeError(`Event "${t}" requires a function`);let i=r;if(s.isDelegableEvent(t)&&!n.includes(`capture`)&&!n.includes(`once`)&&document.body.contains(e))return s.activateDelegatedEvent(e,t,n,i);let a={once:n.includes(`once`),capture:n.includes(`capture`),passive:n.includes(`passive`)},o=e=>{n.includes(`prevent`)&&e.preventDefault(),n.includes(`stop`)&&e.stopPropagation(),!(n.includes(`self`)&&e.target!==e.currentTarget)&&i(e)};return e.addEventListener(t,o,a),()=>e.removeEventListener(t,o,a)}function m(t,n,r,i){if(n===`ref`){let e=i;return e.el=t,()=>{e.el=null}}let a=(n===`value`||n===`checked`||n===`selected`)&&n in t,s=!0,c=!1,l=e=>{if(a)if(!s)t[n]=e??``;else{let r=t[n];if(String(r)!==String(e??``)&&!c){c=!0;let e=n===`checked`||n===`selected`?`change`:`input`;queueMicrotask(()=>{c=!1,t.dispatchEvent(new Event(e,{bubbles:!0}))})}}else if(e==null||e===!1)t.removeAttribute(n);else{let i=r?o.sanitizeUrl(String(e)):String(e);t.setAttribute(n,i)}s=!1};return typeof i==`function`?e.effect(()=>l(i())):(l(i),()=>{})}function h(n,i,o,s,c){if(typeof i!=`function`)return g(n,i,o,s,c);let l=!0,u,d=b(n),f=null,p=r._captureContextSnapshot(),m=a.createKeyedMount(p),h=e=>{console.warn(`[elur] repeat(): duplicate key "${e}". Keys must be unique; the previous entry leaks (orphaned nodes + live effects).`)},v=e.effect(()=>{let e=i();if(t.isKeyedList(e)){if(l&&!f){let t=_(e,s,o);f={state:t.state,prevOrder:t.prevOrder},u=t.cleanup,a.reconcileKeyedList({zoneStart:n.start,anchor:n.end,state:f.state,prevOrder:f.prevOrder,list:e,mount:m,ctxSnapshot:p,onDuplicateKey:h}),d=null,l=!1;return}f||(u?.(),x(n),f={state:new Map,prevOrder:[]},u=()=>{for(let e of f.state.values())e.cleanup()}),a.reconcileKeyedList({zoneStart:n.start,anchor:n.end,state:f.state,prevOrder:f.prevOrder,list:e,mount:m,ctxSnapshot:p,onDuplicateKey:h}),d=null,l=!1;return}f&&(u?.(),x(n),f=null,u=void 0),typeof e==`string`||typeof e==`number`||typeof e==`bigint`?d?d.nodeValue!==String(e)&&(d.nodeValue=String(e)):(d=document.createTextNode(String(e)),n.end.parentNode.insertBefore(d,n.end)):l?u=g(n,e,o,s,c):(u?.(),x(n),u=y(n,e),d=b(n)),l=!1});return()=>{v(),u?.()}}function g(e,i,o,s,c){if(t.isKeyedList(i)){let t=r._captureContextSnapshot(),n=_(i,s,o);return a.reconcileKeyedList({zoneStart:e.start,anchor:e.end,state:n.state,prevOrder:n.prevOrder,list:i,mount:a.createKeyedMount(t),ctxSnapshot:t,onDuplicateKey:e=>{console.warn(`[elur] repeat(): duplicate key "${e}". Keys must be unique; the previous entry leaks (orphaned nodes + live effects).`)}}),n.cleanup}if(Array.isArray(i)){let t=[],n=c!==void 0&&c.length>0;for(let r=0;r<i.length;r++){let a=i[r],s=c?.[r];if(n&&s){let e=g(s,a,o);e&&t.push(e)}else if(n){let n=y(e,a);n&&t.push(n)}else{let n=g(e,a,o);n&&t.push(n)}}return t.length?()=>{for(let e=t.length-1;e>=0;e--)t[e]()}:void 0}if(t.isElurTemplate(i)){let n=i[t.ELUR_TEMPLATE_DESCRIPTOR];return n||S(o,-1,`descriptor`,`Nested template has no hydration descriptor`),u(n,e.start.parentNode,o,e)}if(n.isElurComponent(i)){r._pushComponentContext();let n;try{try{i.onInit?.()}catch(e){if(i.onError)i.onError(e);else throw e}let r=i.render()[t.ELUR_TEMPLATE_DESCRIPTOR];r||S(o,-1,`descriptor`,`Nested component has no hydration descriptor`);let a=u(r,e.start.parentNode,o,e),s=i.onMount?.();n=()=>{i.onUnmount?.(),typeof s==`function`&&s(),a()}}finally{r._popComponentContext()}return n}if(typeof i==`object`&&i){let n=i[t.ELUR_RENDER_PROTOCOL];if(n?.hydrateDom)return n.hydrateDom({parent:e.start.parentNode,bounds:e,context:o.context,render:t=>g(e,t,o)})??void 0}}function _(e,t,n){let r=new Map,a=[];if(!t||t.length===0)return{state:r,prevOrder:a,cleanup:()=>{}};let o=new Map;for(let t=0;t<e.items.length;t++){let n=i.normalizeRepeatKey(e.keyFn(e.items[t],t),t),r=i.serializeRepeatKey(n);o.has(r)&&console.warn(`[elur] repeat(): duplicate client key "${n}" during hydration. Keys must be unique; entries after the first leak.`),o.set(r,t)}for(let s of t){let t=o.get(s.serializedKey);if(t===void 0){v(s);continue}let c=e.items[t],l=i.normalizeRepeatKey(e.keyFn(c,t),t);if(i.serializeRepeatKey(l)!==s.serializedKey&&console.warn(`[elur] repeat(): hydration key mismatch at index ${t} (${i.deserializeRepeatKey(s.serializedKey)} != ${l}). The SSR item is adopted by position.`),r.has(l)){console.warn(`[elur] repeat(): duplicate key "${l}" during hydration; removing duplicate SSR node.`),v(s);continue}let u=e.renderFn(c,t),d=g({start:s.start,end:s.end},u,n);r.set(l,{start:s.start,end:s.end,cleanup:d??(()=>{})}),a.push(l)}return{state:r,prevOrder:a,cleanup:()=>{for(let e of r.values())e.cleanup()}}}function v(e){let t=e.start.nextSibling;for(;t&&t!==e.end;){let e=t.nextSibling;t.parentNode?.removeChild(t),t=e}e.start.parentNode?.removeChild(e.start),e.end.parentNode?.removeChild(e.end)}function y(e,r){if(r==null||r===!1||r===!0)return;if(Array.isArray(r)){let t=[];for(let n of r){let r=y(e,n);r&&t.push(r)}return t.length?()=>{for(let e=t.length-1;e>=0;e--)t[e]()}:void 0}if(t.isElurTemplate(r))return r._render(e.end.parentNode,e.end);if(n.isElurComponent(r))return r.render()._render(e.end.parentNode,e.end);let i=document.createTextNode(String(r));return e.end.parentNode.insertBefore(i,e.end),()=>i.parentNode?.removeChild(i)}function b(e){let t=e.start.nextSibling;for(;t&&t!==e.end;){if(t.nodeType===Node.TEXT_NODE)return t;t=t.nextSibling}return null}function x(e){let t=e.start.nextSibling;for(;t&&t!==e.end;){let e=t.nextSibling;t.parentNode?.removeChild(t),t=e}}function S(e,t,n,r){let i={index:t,kind:n,message:r};e.onMismatch?.(i);let a=Error(`[elur] Hydration marker mismatch: ${r}`);throw Object.assign(a,{mismatch:i}),a}exports.hydrate=c;
2
+ //# sourceMappingURL=hydrate.cjs.map