@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
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Type guard helpers.
3
+ *
4
+ * @module bquery/core/utils/type-guards
5
+ */
6
+
7
+ /**
8
+ * Checks if a value is a DOM Element.
9
+ *
10
+ * @param value - The value to check
11
+ * @returns True if the value is an Element
12
+ */
13
+ export function isElement(value: unknown): value is Element {
14
+ return typeof Element !== 'undefined' && value instanceof Element;
15
+ }
16
+
17
+ /**
18
+ * Checks if a value is a BQueryCollection-like object.
19
+ *
20
+ * @param value - The value to check
21
+ * @returns True if the value has an elements array property
22
+ */
23
+ export function isCollection(value: unknown): value is { elements: Element[] } {
24
+ return Boolean(value && typeof value === 'object' && 'elements' in (value as object));
25
+ }
26
+
27
+ /**
28
+ * Checks if a value is a function.
29
+ *
30
+ * @param value - The value to check
31
+ * @returns True if the value is a function
32
+ */
33
+ export function isFunction(value: unknown): value is (...args: unknown[]) => unknown {
34
+ return typeof value === 'function';
35
+ }
36
+
37
+ /**
38
+ * Checks if a value is a string.
39
+ *
40
+ * @param value - The value to check
41
+ * @returns True if the value is a string
42
+ */
43
+ export function isString(value: unknown): value is string {
44
+ return typeof value === 'string';
45
+ }
46
+
47
+ /**
48
+ * Checks if a value is a number (excluding NaN).
49
+ *
50
+ * @param value - The value to check
51
+ * @returns True if the value is a valid number
52
+ */
53
+ export function isNumber(value: unknown): value is number {
54
+ return typeof value === 'number' && !Number.isNaN(value);
55
+ }
56
+
57
+ /**
58
+ * Checks if a value is a boolean.
59
+ *
60
+ * @param value - The value to check
61
+ * @returns True if the value is a boolean
62
+ */
63
+ export function isBoolean(value: unknown): value is boolean {
64
+ return typeof value === 'boolean';
65
+ }
66
+
67
+ /**
68
+ * Checks if a value is an array.
69
+ *
70
+ * @template T - The type of array elements
71
+ * @param value - The value to check
72
+ * @returns True if the value is an array
73
+ */
74
+ export function isArray<T = unknown>(value: unknown): value is T[] {
75
+ return Array.isArray(value);
76
+ }
77
+
78
+ /**
79
+ * Checks if a value is a Date instance.
80
+ *
81
+ * @param value - The value to check
82
+ * @returns True if the value is a Date
83
+ */
84
+ export function isDate(value: unknown): value is Date {
85
+ return value instanceof Date;
86
+ }
87
+
88
+ /**
89
+ * Checks if a value is a Promise-like object.
90
+ *
91
+ * @param value - The value to check
92
+ * @returns True if the value is a Promise-like object
93
+ */
94
+ export function isPromise<T = unknown>(value: unknown): value is Promise<T> {
95
+ return Boolean(
96
+ value &&
97
+ (value instanceof Promise ||
98
+ (typeof value === 'object' &&
99
+ 'then' in (value as object) &&
100
+ typeof (value as { then?: unknown }).then === 'function'))
101
+ );
102
+ }
103
+
104
+ /**
105
+ * Checks if a value is a non-null object.
106
+ *
107
+ * @param value - The value to check
108
+ * @returns True if the value is an object
109
+ */
110
+ export function isObject(value: unknown): value is Record<string, unknown> {
111
+ return typeof value === 'object' && value !== null;
112
+ }
package/src/full.ts CHANGED
@@ -1,150 +1,187 @@
1
- /**
2
- * bQuery.js — Full Bundle
3
- *
4
- * This is the complete bundle containing all modules for CDN usage.
5
- * Use this when you want all features without tree-shaking concerns.
6
- *
7
- * @module bquery/full
8
- *
9
- * @example CDN Usage (ES Modules)
10
- * ```html
11
- * <script type="module">
12
- * import { $, signal, component } from 'https://unpkg.com/bquery@1/dist/full.es.mjs';
13
- *
14
- * const count = signal(0);
15
- * $('#counter').text(count.value);
16
- * </script>
17
- * ```
18
- *
19
- * @example CDN Usage (UMD/Global)
20
- * ```html
21
- * <script src="https://unpkg.com/bquery@1/dist/full.umd.js"></script>
22
- * <script>
23
- * const { $, signal } = bQuery;
24
- * const count = signal(0);
25
- * </script>
26
- * ```
27
- *
28
- * @example CDN Usage (IIFE)
29
- * ```html
30
- * <script src="https://unpkg.com/bquery@1/dist/full.iife.js"></script>
31
- * <script>
32
- * // bQuery is available as a global variable
33
- * const { $, $$ } = bQuery;
34
- * </script>
35
- * ```
36
- */
37
-
38
- // ============================================================================
39
- // Core Module: Selectors, DOM operations, events, utilities
40
- // ============================================================================
41
- export { $, $$, BQueryCollection, BQueryElement, utils } from './core/index';
42
-
43
- // ============================================================================
44
- // Reactive Module: Signals, computed values, effects, batching
45
- // ============================================================================
46
- export {
47
- Computed,
48
- Signal,
49
- batch,
50
- computed,
51
- effect,
52
- isComputed,
53
- isSignal,
54
- persistedSignal,
55
- readonly,
56
- signal,
57
- untrack,
58
- watch,
59
- } from './reactive/index';
60
- export type { CleanupFn, Observer, ReadonlySignal } from './reactive/index';
61
-
62
- // ============================================================================
63
- // Component Module: Web Components helper with Shadow DOM
64
- // ============================================================================
65
- export { component, html, safeHtml } from './component/index';
66
- export type { ComponentDefinition, PropDefinition } from './component/index';
67
-
68
- // ============================================================================
69
- // Motion Module: View transitions, FLIP animations, springs
70
- // ============================================================================
71
- export { capturePosition, flip, flipList, spring, springPresets, transition } from './motion/index';
72
- export type {
73
- ElementBounds,
74
- FlipOptions,
75
- Spring,
76
- SpringConfig,
77
- TransitionOptions,
78
- } from './motion/index';
79
-
80
- // ============================================================================
81
- // Security Module: Sanitization, CSP compatibility, Trusted Types
82
- // ============================================================================
83
- export {
84
- createTrustedHtml,
85
- escapeHtml,
86
- generateNonce,
87
- getTrustedTypesPolicy,
88
- hasCSPDirective,
89
- isTrustedTypesSupported,
90
- sanitize,
91
- sanitizeHtml,
92
- stripTags,
93
- } from './security/index';
94
- export type { SanitizeOptions } from './security/index';
95
-
96
- // ============================================================================
97
- // Platform Module: Storage, buckets, notifications, cache
98
- // ============================================================================
99
- export { buckets, cache, notifications, storage } from './platform/index';
100
- export type {
101
- Bucket,
102
- CacheHandle,
103
- IndexedDBOptions,
104
- NotificationOptions,
105
- StorageAdapter,
106
- } from './platform/index';
107
-
108
- // ============================================================================
109
- // Router Module: SPA routing, navigation guards, lazy loading
110
- // ============================================================================
111
- export {
112
- back,
113
- createRouter,
114
- currentRoute,
115
- forward,
116
- interceptLinks,
117
- isActive,
118
- isActiveSignal,
119
- link,
120
- navigate,
121
- resolve,
122
- } from './router/index';
123
- export type {
124
- NavigationGuard,
125
- Route,
126
- RouteDefinition,
127
- Router,
128
- RouterOptions,
129
- } from './router/index';
130
-
131
- // ============================================================================
132
- // Store Module: Signal-based state management
133
- // ============================================================================
134
- export {
135
- createPersistedStore,
136
- createStore,
137
- destroyStore,
138
- getStore,
139
- listStores,
140
- mapActions,
141
- mapState,
142
- registerPlugin,
143
- } from './store/index';
144
- export type { StateFactory, Store, StoreDefinition, StorePlugin } from './store/index';
145
-
146
- // ============================================================================
147
- // View Module: Declarative DOM bindings without compiler
148
- // ============================================================================
149
- export { createTemplate, mount } from './view/index';
150
- export type { BindingContext, MountOptions, View } from './view/index';
1
+ /**
2
+ * bQuery.js — Full Bundle
3
+ *
4
+ * This is the complete bundle containing all modules for CDN usage.
5
+ * Use this when you want all features without tree-shaking concerns.
6
+ *
7
+ * @module bquery/full
8
+ *
9
+ * @example CDN Usage (ES Modules)
10
+ * ```html
11
+ * <script type="module">
12
+ * import { $, signal, component } from 'https://unpkg.com/bquery@1/dist/full.es.mjs';
13
+ *
14
+ * const count = signal(0);
15
+ * $('#counter').text(count.value);
16
+ * </script>
17
+ * ```
18
+ *
19
+ * @example CDN Usage (UMD/Global)
20
+ * ```html
21
+ * <script src="https://unpkg.com/bquery@1/dist/full.umd.js"></script>
22
+ * <script>
23
+ * const { $, signal } = bQuery;
24
+ * const count = signal(0);
25
+ * </script>
26
+ * ```
27
+ *
28
+ * @example CDN Usage (IIFE)
29
+ * ```html
30
+ * <script src="https://unpkg.com/bquery@1/dist/full.iife.js"></script>
31
+ * <script>
32
+ * // bQuery is available as a global variable
33
+ * const { $, $$ } = bQuery;
34
+ * </script>
35
+ * ```
36
+ */
37
+
38
+ // ============================================================================
39
+ // Core Module: Selectors, DOM operations, events, utilities
40
+ // ============================================================================
41
+ export { $, $$, BQueryCollection, BQueryElement, utils } from './core/index';
42
+
43
+ // ============================================================================
44
+ // Reactive Module: Signals, computed values, effects, batching
45
+ // ============================================================================
46
+ export {
47
+ Computed,
48
+ Signal,
49
+ batch,
50
+ computed,
51
+ effect,
52
+ isComputed,
53
+ isSignal,
54
+ persistedSignal,
55
+ readonly,
56
+ signal,
57
+ untrack,
58
+ watch,
59
+ } from './reactive/index';
60
+ export type { CleanupFn, Observer, ReadonlySignal } from './reactive/index';
61
+
62
+ // ============================================================================
63
+ // Component Module: Web Components helper with Shadow DOM
64
+ // ============================================================================
65
+ export { component, html, safeHtml } from './component/index';
66
+ export type { ComponentDefinition, PropDefinition } from './component/index';
67
+
68
+ // ============================================================================
69
+ // Motion Module: View transitions, FLIP animations, springs
70
+ // ============================================================================
71
+ export {
72
+ animate,
73
+ capturePosition,
74
+ easeInCubic,
75
+ easeInOutCubic,
76
+ easeInOutQuad,
77
+ easeInQuad,
78
+ easeOutBack,
79
+ easeOutCubic,
80
+ easeOutExpo,
81
+ easeOutQuad,
82
+ easingPresets,
83
+ flip,
84
+ flipElements,
85
+ flipList,
86
+ keyframePresets,
87
+ linear,
88
+ prefersReducedMotion,
89
+ scrollAnimate,
90
+ sequence,
91
+ spring,
92
+ springPresets,
93
+ stagger,
94
+ timeline,
95
+ transition,
96
+ } from './motion/index';
97
+ export type {
98
+ AnimateOptions,
99
+ EasingFunction,
100
+ ElementBounds,
101
+ FlipGroupOptions,
102
+ FlipOptions,
103
+ ScrollAnimateCleanup,
104
+ ScrollAnimateOptions,
105
+ SequenceOptions,
106
+ SequenceStep,
107
+ Spring,
108
+ SpringConfig,
109
+ StaggerFunction,
110
+ StaggerOptions,
111
+ TimelineConfig,
112
+ TimelineControls,
113
+ TimelineStep,
114
+ TransitionOptions,
115
+ } from './motion/index';
116
+
117
+ // ============================================================================
118
+ // Security Module: Sanitization, CSP compatibility, Trusted Types
119
+ // ============================================================================
120
+ export {
121
+ createTrustedHtml,
122
+ escapeHtml,
123
+ generateNonce,
124
+ getTrustedTypesPolicy,
125
+ hasCSPDirective,
126
+ isTrustedTypesSupported,
127
+ sanitize,
128
+ sanitizeHtml,
129
+ stripTags,
130
+ } from './security/index';
131
+ export type { SanitizeOptions } from './security/index';
132
+
133
+ // ============================================================================
134
+ // Platform Module: Storage, buckets, notifications, cache
135
+ // ============================================================================
136
+ export { buckets, cache, notifications, storage } from './platform/index';
137
+ export type {
138
+ Bucket,
139
+ CacheHandle,
140
+ IndexedDBOptions,
141
+ NotificationOptions,
142
+ StorageAdapter,
143
+ } from './platform/index';
144
+
145
+ // ============================================================================
146
+ // Router Module: SPA routing, navigation guards, lazy loading
147
+ // ============================================================================
148
+ export {
149
+ back,
150
+ createRouter,
151
+ currentRoute,
152
+ forward,
153
+ interceptLinks,
154
+ isActive,
155
+ isActiveSignal,
156
+ link,
157
+ navigate,
158
+ resolve,
159
+ } from './router/index';
160
+ export type {
161
+ NavigationGuard,
162
+ Route,
163
+ RouteDefinition,
164
+ Router,
165
+ RouterOptions,
166
+ } from './router/index';
167
+
168
+ // ============================================================================
169
+ // Store Module: Signal-based state management
170
+ // ============================================================================
171
+ export {
172
+ createPersistedStore,
173
+ createStore,
174
+ destroyStore,
175
+ getStore,
176
+ listStores,
177
+ mapActions,
178
+ mapState,
179
+ registerPlugin,
180
+ } from './store/index';
181
+ export type { StateFactory, Store, StoreDefinition, StorePlugin } from './store/index';
182
+
183
+ // ============================================================================
184
+ // View Module: Declarative DOM bindings without compiler
185
+ // ============================================================================
186
+ export { createTemplate, mount } from './view/index';
187
+ export type { BindingContext, MountOptions, View } from './view/index';
package/src/index.ts CHANGED
@@ -1,36 +1,36 @@
1
- /**
2
- * bQuery.js — The jQuery for the Modern Web Platform
3
- *
4
- * A zero-build, TypeScript-first library that bridges vanilla JavaScript
5
- * and build-step frameworks with modern features.
6
- *
7
- * @module bquery
8
- * @see https://github.com/bquery/bquery
9
- */
10
-
11
- // Core module: selectors, DOM ops, events, utils
12
- export * from './core/index';
13
-
14
- // Reactive module: signals, computed, effects, binding
15
- export * from './reactive/index';
16
-
17
- // Component module: Web Components helper
18
- export * from './component/index';
19
-
20
- // Motion module: view transitions, FLIP, springs
21
- export * from './motion/index';
22
-
23
- // Security module: sanitizer, CSP, Trusted Types
24
- export * from './security/index';
25
-
26
- // Platform module: storage, buckets, notifications, cache
27
- export * from './platform/index';
28
-
29
- // Router module: SPA routing, navigation guards
30
- export * from './router/index';
31
-
32
- // Store module: state management with signals
33
- export * from './store/index';
34
-
35
- // View module: declarative DOM bindings
36
- export * from './view/index';
1
+ /**
2
+ * bQuery.js — The jQuery for the Modern Web Platform
3
+ *
4
+ * A zero-build, TypeScript-first library that bridges vanilla JavaScript
5
+ * and build-step frameworks with modern features.
6
+ *
7
+ * @module bquery
8
+ * @see https://github.com/bquery/bquery
9
+ */
10
+
11
+ // Core module: selectors, DOM ops, events, utils
12
+ export * from './core/index';
13
+
14
+ // Reactive module: signals, computed, effects, binding
15
+ export * from './reactive/index';
16
+
17
+ // Component module: Web Components helper
18
+ export * from './component/index';
19
+
20
+ // Motion module: view transitions, FLIP, springs
21
+ export * from './motion/index';
22
+
23
+ // Security module: sanitizer, CSP, Trusted Types
24
+ export * from './security/index';
25
+
26
+ // Platform module: storage, buckets, notifications, cache
27
+ export * from './platform/index';
28
+
29
+ // Router module: SPA routing, navigation guards
30
+ export * from './router/index';
31
+
32
+ // Store module: state management with signals
33
+ export * from './store/index';
34
+
35
+ // View module: declarative DOM bindings
36
+ export * from './view/index';
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Web Animations helpers.
3
+ *
4
+ * @module bquery/motion
5
+ */
6
+
7
+ import { prefersReducedMotion } from './reduced-motion';
8
+ import type { AnimateOptions } from './types';
9
+
10
+ /** @internal */
11
+ const isStyleValue = (value: unknown): value is string | number =>
12
+ typeof value === 'string' || typeof value === 'number';
13
+
14
+ /**
15
+ * Convert camelCase property names to kebab-case for CSS.
16
+ * @internal
17
+ */
18
+ const toKebabCase = (str: string): string => {
19
+ return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
20
+ };
21
+
22
+ /** @internal */
23
+ export const applyFinalKeyframeStyles = (
24
+ element: Element,
25
+ keyframes: Keyframe[] | PropertyIndexedKeyframes
26
+ ): void => {
27
+ const htmlElement = element as HTMLElement;
28
+ const style = htmlElement.style;
29
+
30
+ if (Array.isArray(keyframes)) {
31
+ const last = keyframes[keyframes.length - 1];
32
+ if (!last) return;
33
+ for (const [prop, value] of Object.entries(last)) {
34
+ if (prop === 'offset' || prop === 'easing' || prop === 'composite') continue;
35
+ if (isStyleValue(value)) {
36
+ // Convert camelCase to kebab-case for CSS properties
37
+ const cssProp = prop.startsWith('--') ? prop : toKebabCase(prop);
38
+ style.setProperty(cssProp, String(value));
39
+ }
40
+ }
41
+ return;
42
+ }
43
+
44
+ for (const [prop, value] of Object.entries(keyframes)) {
45
+ if (prop === 'offset' || prop === 'easing' || prop === 'composite') continue;
46
+ const finalValue = Array.isArray(value) ? value[value.length - 1] : value;
47
+ if (isStyleValue(finalValue)) {
48
+ // Convert camelCase to kebab-case for CSS properties
49
+ const cssProp = prop.startsWith('--') ? prop : toKebabCase(prop);
50
+ style.setProperty(cssProp, String(finalValue));
51
+ }
52
+ }
53
+ };
54
+
55
+ /**
56
+ * Animate an element using the Web Animations API with reduced-motion fallback.
57
+ *
58
+ * @param element - Element to animate
59
+ * @param config - Animation configuration
60
+ * @returns Promise that resolves when animation completes
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * await animate(element, {
65
+ * keyframes: [{ opacity: 0 }, { opacity: 1 }],
66
+ * options: { duration: 200, easing: 'ease-out' },
67
+ * });
68
+ * ```
69
+ */
70
+ export const animate = (element: Element, config: AnimateOptions): Promise<void> => {
71
+ const { keyframes, options, commitStyles = true, respectReducedMotion = true, onFinish } = config;
72
+
73
+ if (respectReducedMotion && prefersReducedMotion()) {
74
+ if (commitStyles) {
75
+ applyFinalKeyframeStyles(element, keyframes);
76
+ }
77
+ onFinish?.();
78
+ return Promise.resolve();
79
+ }
80
+
81
+ const htmlElement = element as HTMLElement;
82
+ if (typeof htmlElement.animate !== 'function') {
83
+ if (commitStyles) {
84
+ applyFinalKeyframeStyles(element, keyframes);
85
+ }
86
+ onFinish?.();
87
+ return Promise.resolve();
88
+ }
89
+
90
+ return new Promise((resolve) => {
91
+ const animation = htmlElement.animate(keyframes, options);
92
+ let finalized = false;
93
+ const finalize = () => {
94
+ if (finalized) return;
95
+ finalized = true;
96
+ if (commitStyles) {
97
+ if (typeof animation.commitStyles === 'function') {
98
+ animation.commitStyles();
99
+ } else {
100
+ applyFinalKeyframeStyles(element, keyframes);
101
+ }
102
+ }
103
+ animation.cancel();
104
+ onFinish?.();
105
+ resolve();
106
+ };
107
+
108
+ animation.onfinish = finalize;
109
+ if (animation.finished) {
110
+ animation.finished.then(finalize).catch(finalize);
111
+ }
112
+ });
113
+ };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Easing helpers.
3
+ *
4
+ * @module bquery/motion
5
+ */
6
+
7
+ import type { EasingFunction } from './types';
8
+
9
+ const clamp = (value: number) => Math.min(1, Math.max(0, value));
10
+
11
+ export const linear: EasingFunction = (t) => clamp(t);
12
+ export const easeInQuad: EasingFunction = (t) => clamp(t * t);
13
+ export const easeOutQuad: EasingFunction = (t) => clamp(1 - (1 - t) * (1 - t));
14
+ export const easeInOutQuad: EasingFunction = (t) =>
15
+ clamp(t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2);
16
+ export const easeInCubic: EasingFunction = (t) => clamp(t * t * t);
17
+ export const easeOutCubic: EasingFunction = (t) => clamp(1 - Math.pow(1 - t, 3));
18
+ export const easeInOutCubic: EasingFunction = (t) =>
19
+ clamp(t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);
20
+ export const easeOutBack: EasingFunction = (t) => {
21
+ const c1 = 1.70158;
22
+ const c3 = c1 + 1;
23
+ return clamp(1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2));
24
+ };
25
+ export const easeOutExpo: EasingFunction = (t) => clamp(t === 1 ? 1 : 1 - Math.pow(2, -10 * t));
26
+
27
+ /**
28
+ * Named easing presets.
29
+ */
30
+ export const easingPresets = {
31
+ linear,
32
+ easeInQuad,
33
+ easeOutQuad,
34
+ easeInOutQuad,
35
+ easeInCubic,
36
+ easeOutCubic,
37
+ easeInOutCubic,
38
+ easeOutBack,
39
+ easeOutExpo,
40
+ };