@bquery/bquery 1.2.0 → 1.4.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 (309) hide show
  1. package/README.md +127 -27
  2. package/dist/batch-x7b2eZST.js +13 -0
  3. package/dist/batch-x7b2eZST.js.map +1 -0
  4. package/dist/component/component.d.ts +69 -0
  5. package/dist/component/component.d.ts.map +1 -0
  6. package/dist/component/html.d.ts +35 -0
  7. package/dist/component/html.d.ts.map +1 -0
  8. package/dist/component/index.d.ts +3 -126
  9. package/dist/component/index.d.ts.map +1 -1
  10. package/dist/component/props.d.ts +18 -0
  11. package/dist/component/props.d.ts.map +1 -0
  12. package/dist/component/types.d.ts +77 -0
  13. package/dist/component/types.d.ts.map +1 -0
  14. package/dist/component.es.mjs +90 -59
  15. package/dist/component.es.mjs.map +1 -1
  16. package/dist/core/collection.d.ts +55 -3
  17. package/dist/core/collection.d.ts.map +1 -1
  18. package/dist/core/dom.d.ts +6 -0
  19. package/dist/core/dom.d.ts.map +1 -0
  20. package/dist/core/element.d.ts +31 -4
  21. package/dist/core/element.d.ts.map +1 -1
  22. package/dist/core/index.d.ts +2 -0
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/utils/array.d.ts +74 -0
  25. package/dist/core/utils/array.d.ts.map +1 -0
  26. package/dist/core/utils/function.d.ts +87 -0
  27. package/dist/core/utils/function.d.ts.map +1 -0
  28. package/dist/core/utils/index.d.ts +70 -0
  29. package/dist/core/utils/index.d.ts.map +1 -0
  30. package/dist/core/utils/misc.d.ts +63 -0
  31. package/dist/core/utils/misc.d.ts.map +1 -0
  32. package/dist/core/utils/number.d.ts +65 -0
  33. package/dist/core/utils/number.d.ts.map +1 -0
  34. package/dist/core/utils/object.d.ts +133 -0
  35. package/dist/core/utils/object.d.ts.map +1 -0
  36. package/dist/core/utils/string.d.ts +80 -0
  37. package/dist/core/utils/string.d.ts.map +1 -0
  38. package/dist/core/utils/type-guards.d.ts +79 -0
  39. package/dist/core/utils/type-guards.d.ts.map +1 -0
  40. package/dist/core-BhpuvPhy.js +170 -0
  41. package/dist/core-BhpuvPhy.js.map +1 -0
  42. package/dist/core.es.mjs +495 -489
  43. package/dist/core.es.mjs.map +1 -1
  44. package/dist/full.d.ts +2 -2
  45. package/dist/full.d.ts.map +1 -1
  46. package/dist/full.es.mjs +87 -64
  47. package/dist/full.es.mjs.map +1 -1
  48. package/dist/full.iife.js +2 -2
  49. package/dist/full.iife.js.map +1 -1
  50. package/dist/full.umd.js +2 -2
  51. package/dist/full.umd.js.map +1 -1
  52. package/dist/index.es.mjs +138 -68
  53. package/dist/index.es.mjs.map +1 -1
  54. package/dist/motion/animate.d.ts +25 -0
  55. package/dist/motion/animate.d.ts.map +1 -0
  56. package/dist/motion/easing.d.ts +30 -0
  57. package/dist/motion/easing.d.ts.map +1 -0
  58. package/dist/motion/flip.d.ts +55 -0
  59. package/dist/motion/flip.d.ts.map +1 -0
  60. package/dist/motion/index.d.ts +11 -138
  61. package/dist/motion/index.d.ts.map +1 -1
  62. package/dist/motion/keyframes.d.ts +21 -0
  63. package/dist/motion/keyframes.d.ts.map +1 -0
  64. package/dist/motion/reduced-motion.d.ts +12 -0
  65. package/dist/motion/reduced-motion.d.ts.map +1 -0
  66. package/dist/motion/scroll.d.ts +15 -0
  67. package/dist/motion/scroll.d.ts.map +1 -0
  68. package/dist/motion/spring.d.ts +42 -0
  69. package/dist/motion/spring.d.ts.map +1 -0
  70. package/dist/motion/stagger.d.ts +22 -0
  71. package/dist/motion/stagger.d.ts.map +1 -0
  72. package/dist/motion/timeline.d.ts +21 -0
  73. package/dist/motion/timeline.d.ts.map +1 -0
  74. package/dist/motion/transition.d.ts +22 -0
  75. package/dist/motion/transition.d.ts.map +1 -0
  76. package/dist/motion/types.d.ts +182 -0
  77. package/dist/motion/types.d.ts.map +1 -0
  78. package/dist/motion.es.mjs +320 -61
  79. package/dist/motion.es.mjs.map +1 -1
  80. package/dist/persisted-DHoi3uEs.js +278 -0
  81. package/dist/persisted-DHoi3uEs.js.map +1 -0
  82. package/dist/platform/storage.d.ts.map +1 -1
  83. package/dist/platform.es.mjs +12 -7
  84. package/dist/platform.es.mjs.map +1 -1
  85. package/dist/reactive/batch.d.ts +13 -0
  86. package/dist/reactive/batch.d.ts.map +1 -0
  87. package/dist/reactive/computed.d.ts +50 -0
  88. package/dist/reactive/computed.d.ts.map +1 -0
  89. package/dist/reactive/core.d.ts +72 -0
  90. package/dist/reactive/core.d.ts.map +1 -0
  91. package/dist/reactive/effect.d.ts +15 -0
  92. package/dist/reactive/effect.d.ts.map +1 -0
  93. package/dist/reactive/index.d.ts +2 -2
  94. package/dist/reactive/index.d.ts.map +1 -1
  95. package/dist/reactive/internals.d.ts +42 -0
  96. package/dist/reactive/internals.d.ts.map +1 -0
  97. package/dist/reactive/linked.d.ts +36 -0
  98. package/dist/reactive/linked.d.ts.map +1 -0
  99. package/dist/reactive/persisted.d.ts +14 -0
  100. package/dist/reactive/persisted.d.ts.map +1 -0
  101. package/dist/reactive/readonly.d.ts +26 -0
  102. package/dist/reactive/readonly.d.ts.map +1 -0
  103. package/dist/reactive/signal.d.ts +13 -312
  104. package/dist/reactive/signal.d.ts.map +1 -1
  105. package/dist/reactive/type-guards.d.ts +20 -0
  106. package/dist/reactive/type-guards.d.ts.map +1 -0
  107. package/dist/reactive/untrack.d.ts +29 -0
  108. package/dist/reactive/untrack.d.ts.map +1 -0
  109. package/dist/reactive/watch.d.ts +42 -0
  110. package/dist/reactive/watch.d.ts.map +1 -0
  111. package/dist/reactive.es.mjs +30 -163
  112. package/dist/reactive.es.mjs.map +1 -1
  113. package/dist/router/index.d.ts +6 -252
  114. package/dist/router/index.d.ts.map +1 -1
  115. package/dist/router/links.d.ts +44 -0
  116. package/dist/router/links.d.ts.map +1 -0
  117. package/dist/router/match.d.ts +20 -0
  118. package/dist/router/match.d.ts.map +1 -0
  119. package/dist/router/navigation.d.ts +45 -0
  120. package/dist/router/navigation.d.ts.map +1 -0
  121. package/dist/router/query.d.ts +16 -0
  122. package/dist/router/query.d.ts.map +1 -0
  123. package/dist/router/router.d.ts +34 -0
  124. package/dist/router/router.d.ts.map +1 -0
  125. package/dist/router/state.d.ts +27 -0
  126. package/dist/router/state.d.ts.map +1 -0
  127. package/dist/router/types.d.ts +88 -0
  128. package/dist/router/types.d.ts.map +1 -0
  129. package/dist/router/utils.d.ts +65 -0
  130. package/dist/router/utils.d.ts.map +1 -0
  131. package/dist/router.es.mjs +168 -132
  132. package/dist/router.es.mjs.map +1 -1
  133. package/dist/sanitize-Cxvxa-DX.js +283 -0
  134. package/dist/sanitize-Cxvxa-DX.js.map +1 -0
  135. package/dist/security/constants.d.ts +42 -0
  136. package/dist/security/constants.d.ts.map +1 -0
  137. package/dist/security/csp.d.ts +24 -0
  138. package/dist/security/csp.d.ts.map +1 -0
  139. package/dist/security/index.d.ts +4 -2
  140. package/dist/security/index.d.ts.map +1 -1
  141. package/dist/security/sanitize-core.d.ts +13 -0
  142. package/dist/security/sanitize-core.d.ts.map +1 -0
  143. package/dist/security/sanitize.d.ts +5 -57
  144. package/dist/security/sanitize.d.ts.map +1 -1
  145. package/dist/security/trusted-types.d.ts +25 -0
  146. package/dist/security/trusted-types.d.ts.map +1 -0
  147. package/dist/security/types.d.ts +36 -0
  148. package/dist/security/types.d.ts.map +1 -0
  149. package/dist/security.es.mjs +50 -277
  150. package/dist/security.es.mjs.map +1 -1
  151. package/dist/store/create-store.d.ts +15 -0
  152. package/dist/store/create-store.d.ts.map +1 -0
  153. package/dist/store/define-store.d.ts +28 -0
  154. package/dist/store/define-store.d.ts.map +1 -0
  155. package/dist/store/devtools.d.ts +22 -0
  156. package/dist/store/devtools.d.ts.map +1 -0
  157. package/dist/store/index.d.ts +10 -286
  158. package/dist/store/index.d.ts.map +1 -1
  159. package/dist/store/mapping.d.ts +28 -0
  160. package/dist/store/mapping.d.ts.map +1 -0
  161. package/dist/store/persisted.d.ts +13 -0
  162. package/dist/store/persisted.d.ts.map +1 -0
  163. package/dist/store/plugins.d.ts +13 -0
  164. package/dist/store/plugins.d.ts.map +1 -0
  165. package/dist/store/registry.d.ts +28 -0
  166. package/dist/store/registry.d.ts.map +1 -0
  167. package/dist/store/types.d.ts +71 -0
  168. package/dist/store/types.d.ts.map +1 -0
  169. package/dist/store/utils.d.ts +28 -0
  170. package/dist/store/utils.d.ts.map +1 -0
  171. package/dist/store/watch.d.ts +23 -0
  172. package/dist/store/watch.d.ts.map +1 -0
  173. package/dist/store.es.mjs +22 -224
  174. package/dist/store.es.mjs.map +1 -1
  175. package/dist/type-guards-BdKlYYlS.js +32 -0
  176. package/dist/type-guards-BdKlYYlS.js.map +1 -0
  177. package/dist/untrack-DNnnqdlR.js +6 -0
  178. package/dist/untrack-DNnnqdlR.js.map +1 -0
  179. package/dist/view/directives/bind.d.ts +7 -0
  180. package/dist/view/directives/bind.d.ts.map +1 -0
  181. package/dist/view/directives/class.d.ts +8 -0
  182. package/dist/view/directives/class.d.ts.map +1 -0
  183. package/dist/view/directives/for.d.ts +23 -0
  184. package/dist/view/directives/for.d.ts.map +1 -0
  185. package/dist/view/directives/html.d.ts +7 -0
  186. package/dist/view/directives/html.d.ts.map +1 -0
  187. package/dist/view/directives/if.d.ts +7 -0
  188. package/dist/view/directives/if.d.ts.map +1 -0
  189. package/dist/view/directives/index.d.ts +12 -0
  190. package/dist/view/directives/index.d.ts.map +1 -0
  191. package/dist/view/directives/model.d.ts +7 -0
  192. package/dist/view/directives/model.d.ts.map +1 -0
  193. package/dist/view/directives/on.d.ts +7 -0
  194. package/dist/view/directives/on.d.ts.map +1 -0
  195. package/dist/view/directives/ref.d.ts +7 -0
  196. package/dist/view/directives/ref.d.ts.map +1 -0
  197. package/dist/view/directives/show.d.ts +7 -0
  198. package/dist/view/directives/show.d.ts.map +1 -0
  199. package/dist/view/directives/style.d.ts +7 -0
  200. package/dist/view/directives/style.d.ts.map +1 -0
  201. package/dist/view/directives/text.d.ts +7 -0
  202. package/dist/view/directives/text.d.ts.map +1 -0
  203. package/dist/view/evaluate.d.ts +43 -0
  204. package/dist/view/evaluate.d.ts.map +1 -0
  205. package/dist/view/index.d.ts +3 -93
  206. package/dist/view/index.d.ts.map +1 -1
  207. package/dist/view/mount.d.ts +69 -0
  208. package/dist/view/mount.d.ts.map +1 -0
  209. package/dist/view/process.d.ts +26 -0
  210. package/dist/view/process.d.ts.map +1 -0
  211. package/dist/view/types.d.ts +36 -0
  212. package/dist/view/types.d.ts.map +1 -0
  213. package/dist/view.es.mjs +358 -251
  214. package/dist/view.es.mjs.map +1 -1
  215. package/dist/watch-DXXv3iAI.js +58 -0
  216. package/dist/watch-DXXv3iAI.js.map +1 -0
  217. package/package.json +14 -14
  218. package/src/component/component.ts +289 -0
  219. package/src/component/html.ts +53 -0
  220. package/src/component/index.ts +40 -414
  221. package/src/component/props.ts +116 -0
  222. package/src/component/types.ts +85 -0
  223. package/src/core/collection.ts +181 -7
  224. package/src/core/dom.ts +38 -0
  225. package/src/core/element.ts +59 -25
  226. package/src/core/index.ts +48 -4
  227. package/src/core/utils/array.ts +102 -0
  228. package/src/core/utils/function.ts +151 -0
  229. package/src/core/utils/index.ts +83 -0
  230. package/src/core/utils/misc.ts +82 -0
  231. package/src/core/utils/number.ts +78 -0
  232. package/src/core/utils/object.ts +206 -0
  233. package/src/core/utils/string.ts +112 -0
  234. package/src/core/utils/type-guards.ts +112 -0
  235. package/src/full.ts +187 -150
  236. package/src/index.ts +36 -36
  237. package/src/motion/animate.ts +113 -0
  238. package/src/motion/easing.ts +40 -0
  239. package/src/motion/flip.ts +176 -0
  240. package/src/motion/index.ts +41 -358
  241. package/src/motion/keyframes.ts +46 -0
  242. package/src/motion/reduced-motion.ts +17 -0
  243. package/src/motion/scroll.ts +57 -0
  244. package/src/motion/spring.ts +150 -0
  245. package/src/motion/stagger.ts +43 -0
  246. package/src/motion/timeline.ts +246 -0
  247. package/src/motion/transition.ts +51 -0
  248. package/src/motion/types.ts +198 -0
  249. package/src/platform/storage.ts +215 -208
  250. package/src/reactive/batch.ts +22 -0
  251. package/src/reactive/computed.ts +92 -0
  252. package/src/reactive/core.ts +114 -0
  253. package/src/reactive/effect.ts +54 -0
  254. package/src/reactive/index.ts +23 -22
  255. package/src/reactive/internals.ts +122 -0
  256. package/src/reactive/linked.ts +56 -0
  257. package/src/reactive/persisted.ts +74 -0
  258. package/src/reactive/readonly.ts +35 -0
  259. package/src/reactive/signal.ts +20 -520
  260. package/src/reactive/type-guards.ts +22 -0
  261. package/src/reactive/untrack.ts +31 -0
  262. package/src/reactive/watch.ts +73 -0
  263. package/src/router/index.ts +41 -718
  264. package/src/router/links.ts +130 -0
  265. package/src/router/match.ts +106 -0
  266. package/src/router/navigation.ts +71 -0
  267. package/src/router/query.ts +35 -0
  268. package/src/router/router.ts +211 -0
  269. package/src/router/state.ts +46 -0
  270. package/src/router/types.ts +93 -0
  271. package/src/router/utils.ts +116 -0
  272. package/src/security/constants.ts +209 -0
  273. package/src/security/csp.ts +77 -0
  274. package/src/security/index.ts +4 -12
  275. package/src/security/sanitize-core.ts +364 -0
  276. package/src/security/sanitize.ts +66 -625
  277. package/src/security/trusted-types.ts +69 -0
  278. package/src/security/types.ts +40 -0
  279. package/src/store/create-store.ts +329 -0
  280. package/src/store/define-store.ts +48 -0
  281. package/src/store/devtools.ts +45 -0
  282. package/src/store/index.ts +22 -848
  283. package/src/store/mapping.ts +73 -0
  284. package/src/store/persisted.ts +61 -0
  285. package/src/store/plugins.ts +32 -0
  286. package/src/store/registry.ts +51 -0
  287. package/src/store/types.ts +94 -0
  288. package/src/store/utils.ts +141 -0
  289. package/src/store/watch.ts +52 -0
  290. package/src/view/directives/bind.ts +23 -0
  291. package/src/view/directives/class.ts +70 -0
  292. package/src/view/directives/for.ts +275 -0
  293. package/src/view/directives/html.ts +19 -0
  294. package/src/view/directives/if.ts +30 -0
  295. package/src/view/directives/index.ts +11 -0
  296. package/src/view/directives/model.ts +56 -0
  297. package/src/view/directives/on.ts +41 -0
  298. package/src/view/directives/ref.ts +41 -0
  299. package/src/view/directives/show.ts +26 -0
  300. package/src/view/directives/style.ts +47 -0
  301. package/src/view/directives/text.ts +15 -0
  302. package/src/view/evaluate.ts +290 -0
  303. package/src/view/index.ts +112 -1041
  304. package/src/view/mount.ts +200 -0
  305. package/src/view/process.ts +92 -0
  306. package/src/view/types.ts +44 -0
  307. package/dist/core/utils.d.ts +0 -313
  308. package/dist/core/utils.d.ts.map +0 -1
  309. package/src/core/utils.ts +0 -444
package/dist/view.es.mjs CHANGED
@@ -1,325 +1,432 @@
1
- import { effect as w, isSignal as M, isComputed as W } from "./reactive.es.mjs";
2
- import { batch as oe, computed as ce, signal as le } from "./reactive.es.mjs";
3
- import { sanitize as F } from "./security.es.mjs";
4
- const v = (n, t) => {
1
+ import { a as z, i as V, e as E } from "./type-guards-BdKlYYlS.js";
2
+ import { s as P } from "./core-BhpuvPhy.js";
3
+ import { c as ye } from "./core-BhpuvPhy.js";
4
+ import { s as Z } from "./sanitize-Cxvxa-DX.js";
5
+ import { b as ge } from "./batch-x7b2eZST.js";
6
+ const N = 500;
7
+ class D {
8
+ constructor(e) {
9
+ this.cache = /* @__PURE__ */ new Map(), this.maxSize = e;
10
+ }
11
+ get(e) {
12
+ const s = this.cache.get(e);
13
+ return s !== void 0 && (this.cache.delete(e), this.cache.set(e, s)), s;
14
+ }
15
+ set(e, s) {
16
+ if (this.cache.has(e))
17
+ this.cache.delete(e);
18
+ else if (this.cache.size >= this.maxSize) {
19
+ const r = this.cache.keys().next().value;
20
+ r !== void 0 && this.cache.delete(r);
21
+ }
22
+ this.cache.set(e, s);
23
+ }
24
+ clear() {
25
+ this.cache.clear();
26
+ }
27
+ get size() {
28
+ return this.cache.size;
29
+ }
30
+ }
31
+ const I = new D(N), O = new D(N), de = () => {
32
+ I.clear(), O.clear();
33
+ }, U = (n) => new Proxy(n, {
34
+ get(e, s) {
35
+ if (typeof s != "string")
36
+ return Reflect.get(e, s);
37
+ const r = e[s];
38
+ return z(r) || V(r) ? r.value : r;
39
+ },
40
+ has(e, s) {
41
+ return typeof s != "string" ? Reflect.has(e, s) : s in e;
42
+ }
43
+ }), y = (n, e) => {
5
44
  try {
6
- const r = Object.keys(t), l = r.map((i) => {
7
- const s = t[i];
8
- return M(s) || W(s) ? s.value : s;
9
- });
10
- return new Function(...r, `return (${n})`)(...l);
11
- } catch (r) {
12
- console.error(`bQuery view: Error evaluating "${n}"`, r);
45
+ const s = U(e);
46
+ let r = I.get(n);
47
+ return r || (r = new Function("$ctx", `with($ctx) { return (${n}); }`), I.set(n, r)), r(s);
48
+ } catch (s) {
49
+ console.error(`bQuery view: Error evaluating "${n}"`, s);
13
50
  return;
14
51
  }
15
- }, j = (n, t) => {
52
+ }, M = (n, e) => {
16
53
  try {
17
- const r = Object.keys(t), l = r.map((i) => t[i]);
18
- return new Function(...r, `return (${n})`)(...l);
19
- } catch (r) {
20
- console.error(`bQuery view: Error evaluating "${n}"`, r);
54
+ let s = O.get(n);
55
+ return s || (s = new Function("$ctx", `with($ctx) { return (${n}); }`), O.set(n, s)), s(e);
56
+ } catch (s) {
57
+ console.error(`bQuery view: Error evaluating "${n}"`, s);
21
58
  return;
22
59
  }
23
- }, q = (n) => {
24
- const t = {}, r = n.trim().replace(/^\{|\}$/g, "").trim();
25
- if (!r) return t;
26
- const l = [];
27
- let e = "", i = 0, s = null;
28
- for (let c = 0; c < r.length; c++) {
29
- const o = r[c], a = c > 0 ? r[c - 1] : "";
30
- if ((o === '"' || o === "'" || o === "`") && a !== "\\") {
31
- s === null ? s = o : s === o && (s = null), e += o;
60
+ }, _ = (n) => {
61
+ const e = {}, s = n.trim().replace(/^\{|\}$/g, "").trim();
62
+ if (!s) return e;
63
+ const r = [];
64
+ let t = "", l = 0, i = null;
65
+ for (let c = 0; c < s.length; c++) {
66
+ const o = s[c];
67
+ if (o === '"' || o === "'" || o === "`") {
68
+ let a = 0, u = c - 1;
69
+ for (; u >= 0 && s[u] === "\\"; )
70
+ a++, u--;
71
+ a % 2 === 0 && (i === null ? i = o : i === o && (i = null)), t += o;
32
72
  continue;
33
73
  }
34
- if (s !== null) {
35
- e += o;
74
+ if (i !== null) {
75
+ t += o;
36
76
  continue;
37
77
  }
38
- o === "(" || o === "[" || o === "{" ? (i++, e += o) : o === ")" || o === "]" || o === "}" ? (i--, e += o) : o === "," && i === 0 ? (l.push(e.trim()), e = "") : e += o;
78
+ o === "(" || o === "[" || o === "{" ? (l++, t += o) : o === ")" || o === "]" || o === "}" ? (l--, t += o) : o === "," && l === 0 ? (r.push(t.trim()), t = "") : t += o;
39
79
  }
40
- e.trim() && l.push(e.trim());
41
- for (const c of l) {
42
- let o = -1, a = 0, f = null;
43
- for (let m = 0; m < c.length; m++) {
44
- const u = c[m], A = m > 0 ? c[m - 1] : "";
45
- if ((u === '"' || u === "'" || u === "`") && A !== "\\") {
46
- f === null ? f = u : f === u && (f = null);
80
+ t.trim() && r.push(t.trim());
81
+ for (const c of r) {
82
+ let o = -1, a = 0, u = null;
83
+ for (let h = 0; h < c.length; h++) {
84
+ const f = c[h];
85
+ if (f === '"' || f === "'" || f === "`") {
86
+ let q = 0, S = h - 1;
87
+ for (; S >= 0 && c[S] === "\\"; )
88
+ q++, S--;
89
+ q % 2 === 0 && (u === null ? u = f : u === f && (u = null));
47
90
  continue;
48
91
  }
49
- if (f === null) {
50
- if (u === "(" || u === "[" || u === "{")
92
+ if (u === null) {
93
+ if (f === "(" || f === "[" || f === "{")
51
94
  a++;
52
- else if (u === ")" || u === "]" || u === "}")
95
+ else if (f === ")" || f === "]" || f === "}")
53
96
  a--;
54
- else if (u === ":" && a === 0) {
55
- o = m;
97
+ else if (f === ":" && a === 0) {
98
+ o = h;
56
99
  break;
57
100
  }
58
101
  }
59
102
  }
60
103
  if (o > -1) {
61
- const m = c.slice(0, o).trim().replace(/^['"]|['"]$/g, ""), u = c.slice(o + 1).trim();
62
- t[m] = u;
104
+ const h = c.slice(0, o).trim().replace(/^['"]|['"]$/g, ""), f = c.slice(o + 1).trim();
105
+ e[h] = f;
63
106
  }
64
107
  }
65
- return t;
66
- }, B = (n, t, r, l) => {
67
- const e = w(() => {
68
- const i = v(t, r);
69
- n.textContent = String(i ?? "");
70
- });
71
- l.push(e);
72
- }, H = (n) => (t, r, l, e) => {
73
- const i = w(() => {
74
- const s = v(r, l), c = String(s ?? "");
75
- t.innerHTML = n ? F(c) : c;
76
- });
77
- e.push(i);
78
- }, Z = (n, t, r, l) => {
79
- const e = n.parentNode, i = document.createComment(`bq-if: ${t}`);
80
- let s = !0;
81
- const c = w(() => {
82
- const o = v(t, r);
83
- o && !s ? (e?.replaceChild(n, i), s = !0) : !o && s && (e?.replaceChild(i, n), s = !1);
108
+ return e;
109
+ }, X = (n) => (e, s, r, t) => {
110
+ const l = E(() => {
111
+ const i = y(s, r);
112
+ i == null || i === !1 ? e.removeAttribute(n) : i === !0 ? e.setAttribute(n, "") : e.setAttribute(n, String(i));
84
113
  });
85
- l.push(c);
86
- }, K = (n, t, r, l) => {
87
- const e = n, i = e.style.display, s = w(() => {
88
- const c = v(t, r);
89
- e.style.display = c ? i : "none";
90
- });
91
- l.push(s);
92
- }, D = (n, t, r, l) => {
93
- let e = /* @__PURE__ */ new Set();
94
- const i = w(() => {
95
- const s = /* @__PURE__ */ new Set();
96
- if (t.startsWith("{")) {
97
- const c = q(t);
114
+ t.push(l);
115
+ }, G = (n, e, s, r) => {
116
+ let t = /* @__PURE__ */ new Set();
117
+ const l = E(() => {
118
+ const i = /* @__PURE__ */ new Set();
119
+ if (e.trimStart().startsWith("{")) {
120
+ const c = _(e);
98
121
  for (const [o, a] of Object.entries(c)) {
99
- const f = v(a, r);
100
- n.classList.toggle(o, !!f), s.add(o);
122
+ const u = y(a, s);
123
+ n.classList.toggle(o, !!u), i.add(o);
101
124
  }
102
- } else if (t.includes("[")) {
103
- const c = v(t, r);
125
+ } else if (/^\s*\[/.test(e)) {
126
+ const c = y(e, s);
104
127
  if (Array.isArray(c))
105
128
  for (const o of c)
106
- o && (n.classList.add(o), s.add(o));
129
+ o && (n.classList.add(o), i.add(o));
107
130
  } else {
108
- const c = v(t, r);
131
+ const c = y(e, s);
109
132
  typeof c == "string" ? c.split(/\s+/).forEach((o) => {
110
- o && (n.classList.add(o), s.add(o));
133
+ o && (n.classList.add(o), i.add(o));
111
134
  }) : Array.isArray(c) && c.forEach((o) => {
112
- o && (n.classList.add(o), s.add(o));
135
+ o && (n.classList.add(o), i.add(o));
113
136
  });
114
137
  }
115
- if (!t.startsWith("{"))
116
- for (const c of e)
117
- s.has(c) || n.classList.remove(c);
118
- e = s;
138
+ for (const c of t)
139
+ i.has(c) || n.classList.remove(c);
140
+ t = i;
119
141
  });
120
- l.push(i);
121
- }, V = (n, t, r, l) => {
122
- const e = n, i = w(() => {
123
- if (t.startsWith("{")) {
124
- const s = q(t);
125
- for (const [c, o] of Object.entries(s)) {
126
- const a = v(o, r), f = c.replace(/([A-Z])/g, "-$1").toLowerCase();
127
- e.style.setProperty(f, String(a ?? ""));
128
- }
129
- } else {
130
- const s = v(t, r);
131
- if (s && typeof s == "object")
132
- for (const [c, o] of Object.entries(s)) {
133
- const a = c.replace(/([A-Z])/g, "-$1").toLowerCase();
134
- e.style.setProperty(a, String(o ?? ""));
135
- }
142
+ r.push(l);
143
+ }, J = (n, e, s, r, t, l) => {
144
+ if (!s)
145
+ return e;
146
+ const i = {
147
+ ...l,
148
+ [r]: n
149
+ };
150
+ return t && (i[t] = e), y(s, i);
151
+ }, Y = (n) => {
152
+ const { prefix: e, processElement: s, processChildren: r } = n;
153
+ return (t, l, i, c) => {
154
+ const o = t.parentNode;
155
+ if (!o) return;
156
+ const a = l.match(/^\(?(\w+)(?:\s*,\s*(\w+))?\)?\s+in\s+(\S.*)$/);
157
+ if (!a) {
158
+ console.error(`bQuery view: Invalid bq-for expression "${l}"`);
159
+ return;
136
160
  }
161
+ const [, u, h, f] = a, q = t.getAttribute(":key") || t.getAttribute(`${e}-key`), S = t.cloneNode(!0);
162
+ S.removeAttribute(`${e}-for`), S.removeAttribute(":key"), S.removeAttribute(`${e}-key`);
163
+ const Q = document.createComment(`bq-for: ${l}`);
164
+ o.replaceChild(Q, t);
165
+ let C = /* @__PURE__ */ new Map(), j = [];
166
+ const F = (d, p, w) => {
167
+ const A = S.cloneNode(!0), k = [], L = P(d), $ = h ? P(p) : null, m = {
168
+ ...i,
169
+ [u]: L
170
+ };
171
+ return h && $ && (m[h] = $), s(A, m, e, k), r(A, m, e, k), {
172
+ key: w,
173
+ element: A,
174
+ cleanups: k,
175
+ item: d,
176
+ index: p,
177
+ itemSignal: L,
178
+ indexSignal: $
179
+ };
180
+ }, R = (d) => {
181
+ for (const p of d.cleanups)
182
+ p();
183
+ d.element.remove();
184
+ }, K = (d, p, w) => {
185
+ Object.is(d.item, p) || (d.item = p, d.itemSignal.value = p), d.index !== w && (d.index = w, d.indexSignal && (d.indexSignal.value = w));
186
+ }, B = E(() => {
187
+ const d = y(f, i);
188
+ if (!Array.isArray(d)) {
189
+ for (const m of C.values())
190
+ R(m);
191
+ C.clear(), j = [];
192
+ return;
193
+ }
194
+ const p = [], w = /* @__PURE__ */ new Map(), A = /* @__PURE__ */ new Set();
195
+ d.forEach((m, v) => {
196
+ let b = J(m, v, q, u, h, i);
197
+ A.has(b) && (console.warn(
198
+ `bq-for: Duplicate key "${String(b)}" detected at index ${v}. Falling back to index-based key for this item. Ensure :key expressions produce unique values for each item.`
199
+ ), b = { __bqDuplicateKey: b, __bqIndex: v }), A.add(b), p.push(b), w.set(b, { item: m, index: v });
200
+ });
201
+ const k = [];
202
+ for (const m of j)
203
+ w.has(m) || k.push(m);
204
+ for (const m of k) {
205
+ const v = C.get(m);
206
+ v && (R(v), C.delete(m));
207
+ }
208
+ const L = /* @__PURE__ */ new Map();
209
+ let $ = Q;
210
+ for (let m = 0; m < p.length; m++) {
211
+ const v = p[m], { item: b, index: H } = w.get(v);
212
+ let g = C.get(v);
213
+ g ? (K(g, b, H), L.set(v, g), $.nextSibling !== g.element && $.after(g.element), $ = g.element) : (g = F(b, H, v), L.set(v, g), $.after(g.element), $ = g.element);
214
+ }
215
+ C = L, j = p;
216
+ });
217
+ c.push(() => {
218
+ B();
219
+ for (const d of C.values())
220
+ for (const p of d.cleanups)
221
+ p();
222
+ C.clear();
223
+ });
224
+ };
225
+ }, x = (n) => (e, s, r, t) => {
226
+ const l = E(() => {
227
+ const i = y(s, r), c = String(i ?? "");
228
+ e.innerHTML = n ? Z(c) : c;
229
+ });
230
+ t.push(l);
231
+ }, ee = (n, e, s, r) => {
232
+ const t = document.createComment(`bq-if: ${e}`);
233
+ let l = !0;
234
+ const i = E(() => {
235
+ const c = y(e, s);
236
+ c && !l ? (t.replaceWith(n), l = !0) : !c && l && (n.replaceWith(t), l = !1);
137
237
  });
138
- l.push(i);
139
- }, _ = (n, t, r, l) => {
140
- const e = n, i = j(t, r);
141
- if (!M(i)) {
142
- console.warn(`bQuery view: bq-model requires a signal, got "${t}"`);
238
+ r.push(i);
239
+ }, te = (n, e, s, r) => {
240
+ const t = n, l = M(e, s);
241
+ if (!z(l)) {
242
+ console.warn(`bQuery view: bq-model requires a signal, got "${e}"`);
143
243
  return;
144
244
  }
145
- const s = i, c = e.type === "checkbox", o = e.type === "radio", a = () => {
146
- c ? e.checked = !!s.value : o ? e.checked = s.value === e.value : e.value = String(s.value ?? "");
147
- }, f = w(() => {
245
+ const i = l, c = t.type === "checkbox", o = t.type === "radio", a = () => {
246
+ c ? t.checked = !!i.value : o ? t.checked = i.value === t.value : t.value = String(i.value ?? "");
247
+ }, u = E(() => {
148
248
  a();
149
249
  });
150
- l.push(f);
151
- const m = e.tagName === "SELECT" ? "change" : "input", u = () => {
152
- c ? s.value = e.checked : o ? e.checked && (s.value = e.value) : s.value = e.value;
250
+ r.push(u);
251
+ const h = t.tagName === "SELECT" ? "change" : "input", f = () => {
252
+ c ? i.value = t.checked : o ? t.checked && (i.value = t.value) : i.value = t.value;
153
253
  };
154
- e.addEventListener(m, u), l.push(() => e.removeEventListener(m, u));
155
- }, z = (n) => (t, r, l, e) => {
156
- const i = w(() => {
157
- const s = v(r, l);
158
- s == null || s === !1 ? t.removeAttribute(n) : s === !0 ? t.setAttribute(n, "") : t.setAttribute(n, String(s));
159
- });
160
- e.push(i);
161
- }, G = (n) => (t, r, l, e) => {
162
- const i = (s) => {
163
- const c = { ...l, $event: s, $el: t };
164
- if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(r.trim())) {
165
- const a = j(r, c);
254
+ t.addEventListener(h, f), r.push(() => t.removeEventListener(h, f));
255
+ }, ne = (n) => (e, s, r, t) => {
256
+ const l = (i) => {
257
+ const c = { ...r, $event: i, $el: e };
258
+ if (!s.includes("(")) {
259
+ const a = M(s, c);
166
260
  if (typeof a == "function") {
167
- a(s);
261
+ a(i);
168
262
  return;
169
263
  }
264
+ return;
170
265
  }
171
- v(r, c);
172
- };
173
- t.addEventListener(n, i), e.push(() => t.removeEventListener(n, i));
174
- }, J = (n, t, r, l, e, i) => {
175
- if (!r)
176
- return t;
177
- const s = {
178
- ...i,
179
- [l]: n
266
+ M(s, c);
180
267
  };
181
- return e && (s[e] = t), v(r, s);
182
- }, U = (n, t) => (r, l, e, i) => {
183
- const s = r.parentNode;
184
- if (!s) return;
185
- const c = l.match(/^\(?(\w+)(?:\s*,\s*(\w+))?\)?\s+in\s+(\S.*)$/);
186
- if (!c) {
187
- console.error(`bQuery view: Invalid bq-for expression "${l}"`);
188
- return;
268
+ e.addEventListener(n, l), t.push(() => e.removeEventListener(n, l));
269
+ };
270
+ function se(n) {
271
+ const e = Object.getOwnPropertyDescriptor(n, "value");
272
+ return e ? "value" in e ? e.writable === !0 : typeof e.set == "function" : !1;
273
+ }
274
+ const re = (n, e, s, r) => {
275
+ const t = M(
276
+ e,
277
+ s
278
+ );
279
+ z(t) ? (t.value = n, r.push(() => {
280
+ t.value = null;
281
+ })) : typeof t == "object" && t !== null && se(t) && (t.value = n, r.push(() => {
282
+ t.value = null;
283
+ }));
284
+ }, oe = (n, e, s, r) => {
285
+ const t = n;
286
+ let l = t.style.display;
287
+ if (!l || l === "none") {
288
+ const c = t.ownerDocument.defaultView?.getComputedStyle(t).display ?? "";
289
+ l = c !== "none" ? c : "";
189
290
  }
190
- const [, o, a, f] = c, m = r.getAttribute(":key") || r.getAttribute(`${n}-key`), u = r.cloneNode(!0);
191
- u.removeAttribute(`${n}-for`), u.removeAttribute(":key"), u.removeAttribute(`${n}-key`);
192
- const A = document.createComment(`bq-for: ${l}`);
193
- s.replaceChild(A, r);
194
- let E = /* @__PURE__ */ new Map(), I = [];
195
- const R = (p, d, k) => {
196
- const $ = u.cloneNode(!0), C = [], b = {
197
- ...e,
198
- [o]: p
199
- };
200
- return a && (b[a] = d), L($, b, n, t, C), O($, b, n, t, C), {
201
- key: k,
202
- element: $,
203
- cleanups: C,
204
- item: p,
205
- index: d
206
- };
207
- }, N = (p) => {
208
- for (const d of p.cleanups)
209
- d();
210
- p.element.remove();
211
- }, P = (p, d) => {
212
- p.index !== d && a && (p.index = d);
213
- }, Q = w(() => {
214
- const p = v(f, e);
215
- if (!Array.isArray(p)) {
216
- for (const h of E.values())
217
- N(h);
218
- E.clear(), I = [];
219
- return;
220
- }
221
- const d = [], k = /* @__PURE__ */ new Map();
222
- p.forEach((h, y) => {
223
- const S = J(h, y, m, o, a, e);
224
- d.push(S), k.set(S, { item: h, index: y });
225
- });
226
- const $ = [];
227
- for (const h of I)
228
- k.has(h) || $.push(h);
229
- for (const h of $) {
230
- const y = E.get(h);
231
- y && (N(y), E.delete(h));
232
- }
233
- const C = /* @__PURE__ */ new Map();
234
- let b = A;
235
- for (let h = 0; h < d.length; h++) {
236
- const y = d[h], { item: S, index: T } = k.get(y);
237
- let g = E.get(y);
238
- g ? (P(g, T), C.set(y, g), b.nextSibling !== g.element && b.after(g.element), b = g.element) : (g = R(S, T, y), C.set(y, g), b.after(g.element), b = g.element);
291
+ const i = E(() => {
292
+ const c = y(e, s);
293
+ t.style.display = c ? l : "none";
294
+ });
295
+ r.push(i);
296
+ }, ie = (n, e, s, r) => {
297
+ const t = n;
298
+ let l = /* @__PURE__ */ new Set();
299
+ const i = E(() => {
300
+ const c = /* @__PURE__ */ new Set();
301
+ if (e.trimStart().startsWith("{")) {
302
+ const o = _(e);
303
+ for (const [a, u] of Object.entries(o)) {
304
+ const h = y(u, s), f = a.replace(/([A-Z])/g, "-$1").toLowerCase();
305
+ t.style.setProperty(f, String(h ?? "")), c.add(f);
306
+ }
307
+ } else {
308
+ const o = y(e, s);
309
+ if (o && typeof o == "object")
310
+ for (const [a, u] of Object.entries(o)) {
311
+ const h = a.replace(/([A-Z])/g, "-$1").toLowerCase();
312
+ t.style.setProperty(h, String(u ?? "")), c.add(h);
313
+ }
239
314
  }
240
- E = C, I = d;
315
+ for (const o of l)
316
+ c.has(o) || t.style.removeProperty(o);
317
+ l = c;
241
318
  });
242
- i.push(() => {
243
- Q();
244
- for (const p of E.values())
245
- for (const d of p.cleanups)
246
- d();
247
- E.clear();
319
+ r.push(i);
320
+ }, ce = (n, e, s, r) => {
321
+ const t = E(() => {
322
+ const l = y(e, s);
323
+ n.textContent = String(l ?? "");
248
324
  });
249
- }, X = (n, t, r, l) => {
250
- const e = j(t, r);
251
- M(e) ? (e.value = n, l.push(() => {
252
- e.value = null;
253
- })) : typeof r[t] == "object" && r[t] !== null && (r[t].value = n);
254
- }, L = (n, t, r, l, e) => {
255
- const i = Array.from(n.attributes);
256
- for (const s of i) {
257
- const { name: c, value: o } = s;
258
- if (!c.startsWith(r)) continue;
259
- const a = c.slice(r.length + 1);
325
+ r.push(t);
326
+ }, W = (n, e, s, r, t) => {
327
+ const l = Array.from(n.attributes);
328
+ for (const i of l) {
329
+ const { name: c, value: o } = i;
330
+ if (!c.startsWith(`${s}-`)) continue;
331
+ const a = c.slice(s.length + 1);
260
332
  if (a === "for") {
261
- U(r, l)(n, o, t, e);
333
+ t.for(n, o, e, r);
262
334
  return;
263
335
  }
264
336
  if (a === "text")
265
- B(n, o, t, e);
337
+ t.text(n, o, e, r);
266
338
  else if (a === "html")
267
- H(l)(n, o, t, e);
339
+ t.html(n, o, e, r);
268
340
  else if (a === "if")
269
- Z(n, o, t, e);
341
+ t.if(n, o, e, r);
270
342
  else if (a === "show")
271
- K(n, o, t, e);
343
+ t.show(n, o, e, r);
272
344
  else if (a === "class")
273
- D(n, o, t, e);
345
+ t.class(n, o, e, r);
274
346
  else if (a === "style")
275
- V(n, o, t, e);
347
+ t.style(n, o, e, r);
276
348
  else if (a === "model")
277
- _(n, o, t, e);
349
+ t.model(n, o, e, r);
278
350
  else if (a === "ref")
279
- X(n, o, t, e);
351
+ t.ref(n, o, e, r);
280
352
  else if (a.startsWith("bind:")) {
281
- const f = a.slice(5);
282
- z(f)(n, o, t, e);
353
+ const u = a.slice(5);
354
+ t.bind(u)(n, o, e, r);
283
355
  } else if (a.startsWith("on:")) {
284
- const f = a.slice(3);
285
- G(f)(n, o, t, e);
356
+ const u = a.slice(3);
357
+ t.on(u)(n, o, e, r);
286
358
  }
287
359
  }
288
- }, O = (n, t, r, l, e) => {
289
- const i = Array.from(n.children);
290
- for (const s of i)
291
- s.hasAttribute(`${r}-for`) ? L(s, t, r, l, e) : (L(s, t, r, l, e), O(s, t, r, l, e));
292
- }, Y = (n, t, r = {}) => {
293
- const { prefix: l = "bq", sanitize: e = !0 } = r, i = typeof n == "string" ? document.querySelector(n) : n;
294
- if (!i)
360
+ }, T = (n, e, s, r, t) => {
361
+ const l = Array.from(n.children);
362
+ for (const i of l)
363
+ i.hasAttribute(`${s}-for`) ? W(i, e, s, r, t) : (W(i, e, s, r, t), T(i, e, s, r, t));
364
+ }, le = (n, e, s = {}) => {
365
+ const { prefix: r = "bq", sanitize: t = !0 } = s, l = typeof n == "string" ? document.querySelector(n) : n;
366
+ if (!l)
295
367
  throw new Error(`bQuery view: Element "${n}" not found.`);
296
- const s = [];
297
- return L(i, t, l, e, s), O(i, t, l, e, s), {
298
- el: i,
299
- context: t,
300
- update: (c) => {
301
- Object.assign(t, c);
368
+ if (l.hasAttribute(`${r}-for`))
369
+ throw new Error(
370
+ `bQuery view: Cannot mount on element with ${r}-for directive. Wrap the ${r}-for element in a container instead.`
371
+ );
372
+ const i = [], c = {
373
+ text: ce,
374
+ html: x(t),
375
+ if: ee,
376
+ show: oe,
377
+ class: G,
378
+ style: ie,
379
+ model: te,
380
+ ref: re,
381
+ for: Y({
382
+ prefix: r,
383
+ processElement: (a, u, h, f) => W(a, u, h, f, c),
384
+ processChildren: (a, u, h, f) => T(a, u, h, f, c)
385
+ }),
386
+ bind: X,
387
+ on: ne
388
+ };
389
+ return ((a, u, h) => {
390
+ const f = a.hasAttribute(`${r}-for`);
391
+ W(a, u, r, h, c), f || T(a, u, r, h, c);
392
+ })(l, e, i), {
393
+ el: l,
394
+ context: e,
395
+ update: (a) => {
396
+ Object.assign(e, a);
302
397
  },
303
398
  destroy: () => {
304
- for (const c of s)
305
- c();
306
- s.length = 0;
399
+ for (const a of i)
400
+ a();
401
+ i.length = 0;
307
402
  }
308
403
  };
309
- }, ne = (n, t = {}) => (r) => {
310
- const l = document.createElement("div");
311
- l.innerHTML = n.trim();
312
- const e = l.firstElementChild;
313
- if (!e)
404
+ }, me = (n, e = {}) => (s) => {
405
+ const r = document.createElement("div");
406
+ r.innerHTML = n.trim();
407
+ const t = r.firstElementChild;
408
+ if (!t)
314
409
  throw new Error("bQuery view: Template must contain a single root element.");
315
- return Y(e, r, t);
410
+ if (r.childElementCount > 1)
411
+ throw new Error(
412
+ `bQuery view: Template must contain exactly one root element, found ${r.childElementCount}.`
413
+ );
414
+ const { prefix: l = "bq" } = e;
415
+ if (t.hasAttribute(`${l}-for`) || t.hasAttribute(`${l}-if`)) {
416
+ const i = t.hasAttribute(`${l}-for`) ? "for" : "if";
417
+ throw new Error(
418
+ `bQuery view: Template root element cannot have ${l}-${i} directive. Wrap the ${l}-${i} element in a container instead.`
419
+ );
420
+ }
421
+ return le(t, s, e);
316
422
  };
317
423
  export {
318
- oe as batch,
319
- ce as computed,
320
- ne as createTemplate,
321
- w as effect,
322
- Y as mount,
323
- le as signal
424
+ ge as batch,
425
+ de as clearExpressionCache,
426
+ ye as computed,
427
+ me as createTemplate,
428
+ E as effect,
429
+ le as mount,
430
+ P as signal
324
431
  };
325
432
  //# sourceMappingURL=view.es.mjs.map