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