@bquery/bquery 1.4.0 → 1.6.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 (164) hide show
  1. package/README.md +586 -527
  2. package/dist/component/component.d.ts +13 -5
  3. package/dist/component/component.d.ts.map +1 -1
  4. package/dist/component/html.d.ts +40 -3
  5. package/dist/component/html.d.ts.map +1 -1
  6. package/dist/component/index.d.ts +4 -2
  7. package/dist/component/index.d.ts.map +1 -1
  8. package/dist/component/library.d.ts +34 -0
  9. package/dist/component/library.d.ts.map +1 -0
  10. package/dist/component/types.d.ts +132 -13
  11. package/dist/component/types.d.ts.map +1 -1
  12. package/dist/component-BEQgt5hl.js +600 -0
  13. package/dist/component-BEQgt5hl.js.map +1 -0
  14. package/dist/component.es.mjs +7 -184
  15. package/dist/config-DRmZZno3.js +40 -0
  16. package/dist/config-DRmZZno3.js.map +1 -0
  17. package/dist/core-BGQJVw0-.js +35 -0
  18. package/dist/core-BGQJVw0-.js.map +1 -0
  19. package/dist/core-CCEabVHl.js +648 -0
  20. package/dist/core-CCEabVHl.js.map +1 -0
  21. package/dist/core.es.mjs +45 -1261
  22. package/dist/effect-AFRW_Plg.js +84 -0
  23. package/dist/effect-AFRW_Plg.js.map +1 -0
  24. package/dist/full.d.ts +8 -8
  25. package/dist/full.d.ts.map +1 -1
  26. package/dist/full.es.mjs +101 -91
  27. package/dist/full.iife.js +173 -3
  28. package/dist/full.iife.js.map +1 -1
  29. package/dist/full.umd.js +173 -3
  30. package/dist/full.umd.js.map +1 -1
  31. package/dist/index.es.mjs +147 -139
  32. package/dist/motion/transition.d.ts +1 -1
  33. package/dist/motion/transition.d.ts.map +1 -1
  34. package/dist/motion/types.d.ts +11 -1
  35. package/dist/motion/types.d.ts.map +1 -1
  36. package/dist/motion-D9TcHxOF.js +415 -0
  37. package/dist/motion-D9TcHxOF.js.map +1 -0
  38. package/dist/motion.es.mjs +25 -361
  39. package/dist/object-qGpWr6-J.js +38 -0
  40. package/dist/object-qGpWr6-J.js.map +1 -0
  41. package/dist/platform/announcer.d.ts +59 -0
  42. package/dist/platform/announcer.d.ts.map +1 -0
  43. package/dist/platform/config.d.ts +92 -0
  44. package/dist/platform/config.d.ts.map +1 -0
  45. package/dist/platform/cookies.d.ts +45 -0
  46. package/dist/platform/cookies.d.ts.map +1 -0
  47. package/dist/platform/index.d.ts +8 -0
  48. package/dist/platform/index.d.ts.map +1 -1
  49. package/dist/platform/meta.d.ts +62 -0
  50. package/dist/platform/meta.d.ts.map +1 -0
  51. package/dist/platform-Dr9b6fsq.js +362 -0
  52. package/dist/platform-Dr9b6fsq.js.map +1 -0
  53. package/dist/platform.es.mjs +11 -248
  54. package/dist/reactive/async-data.d.ts +114 -0
  55. package/dist/reactive/async-data.d.ts.map +1 -0
  56. package/dist/reactive/index.d.ts +2 -2
  57. package/dist/reactive/index.d.ts.map +1 -1
  58. package/dist/reactive/signal.d.ts +2 -0
  59. package/dist/reactive/signal.d.ts.map +1 -1
  60. package/dist/reactive-DSkct0dO.js +254 -0
  61. package/dist/reactive-DSkct0dO.js.map +1 -0
  62. package/dist/reactive.es.mjs +18 -32
  63. package/dist/router-CbDhl8rS.js +188 -0
  64. package/dist/router-CbDhl8rS.js.map +1 -0
  65. package/dist/router.es.mjs +11 -200
  66. package/dist/sanitize-Bs2dkMby.js +313 -0
  67. package/dist/sanitize-Bs2dkMby.js.map +1 -0
  68. package/dist/security/constants.d.ts.map +1 -1
  69. package/dist/security/index.d.ts +4 -2
  70. package/dist/security/index.d.ts.map +1 -1
  71. package/dist/security/sanitize.d.ts +4 -1
  72. package/dist/security/sanitize.d.ts.map +1 -1
  73. package/dist/security/trusted-html.d.ts +53 -0
  74. package/dist/security/trusted-html.d.ts.map +1 -0
  75. package/dist/security.es.mjs +11 -56
  76. package/dist/store/define-store.d.ts +1 -1
  77. package/dist/store/define-store.d.ts.map +1 -1
  78. package/dist/store/mapping.d.ts +1 -1
  79. package/dist/store/mapping.d.ts.map +1 -1
  80. package/dist/store/persisted.d.ts +1 -1
  81. package/dist/store/persisted.d.ts.map +1 -1
  82. package/dist/store/types.d.ts +2 -2
  83. package/dist/store/types.d.ts.map +1 -1
  84. package/dist/store/watch.d.ts +1 -1
  85. package/dist/store/watch.d.ts.map +1 -1
  86. package/dist/store-BwDvI45q.js +263 -0
  87. package/dist/store-BwDvI45q.js.map +1 -0
  88. package/dist/store.es.mjs +12 -25
  89. package/dist/storybook/index.d.ts +37 -0
  90. package/dist/storybook/index.d.ts.map +1 -0
  91. package/dist/storybook.es.mjs +151 -0
  92. package/dist/storybook.es.mjs.map +1 -0
  93. package/dist/untrack-B0rVscTc.js +7 -0
  94. package/dist/untrack-B0rVscTc.js.map +1 -0
  95. package/dist/view-C70lA3vf.js +397 -0
  96. package/dist/view-C70lA3vf.js.map +1 -0
  97. package/dist/view.es.mjs +11 -430
  98. package/package.json +141 -132
  99. package/src/component/component.ts +524 -289
  100. package/src/component/html.ts +153 -53
  101. package/src/component/index.ts +50 -40
  102. package/src/component/library.ts +518 -0
  103. package/src/component/types.ts +256 -85
  104. package/src/core/collection.ts +628 -628
  105. package/src/core/element.ts +774 -774
  106. package/src/core/index.ts +48 -48
  107. package/src/core/utils/function.ts +151 -151
  108. package/src/full.ts +229 -187
  109. package/src/motion/animate.ts +113 -113
  110. package/src/motion/flip.ts +176 -176
  111. package/src/motion/scroll.ts +57 -57
  112. package/src/motion/spring.ts +150 -150
  113. package/src/motion/timeline.ts +246 -246
  114. package/src/motion/transition.ts +97 -51
  115. package/src/motion/types.ts +11 -1
  116. package/src/platform/announcer.ts +208 -0
  117. package/src/platform/config.ts +163 -0
  118. package/src/platform/cookies.ts +165 -0
  119. package/src/platform/index.ts +21 -0
  120. package/src/platform/meta.ts +168 -0
  121. package/src/platform/storage.ts +215 -215
  122. package/src/reactive/async-data.ts +486 -0
  123. package/src/reactive/core.ts +114 -114
  124. package/src/reactive/effect.ts +54 -54
  125. package/src/reactive/index.ts +15 -1
  126. package/src/reactive/internals.ts +122 -122
  127. package/src/reactive/signal.ts +9 -0
  128. package/src/security/constants.ts +3 -1
  129. package/src/security/index.ts +17 -10
  130. package/src/security/sanitize-core.ts +364 -364
  131. package/src/security/sanitize.ts +70 -66
  132. package/src/security/trusted-html.ts +71 -0
  133. package/src/store/define-store.ts +49 -48
  134. package/src/store/mapping.ts +74 -73
  135. package/src/store/persisted.ts +62 -61
  136. package/src/store/types.ts +92 -94
  137. package/src/store/watch.ts +53 -52
  138. package/src/storybook/index.ts +479 -0
  139. package/src/view/evaluate.ts +290 -290
  140. package/dist/batch-x7b2eZST.js +0 -13
  141. package/dist/batch-x7b2eZST.js.map +0 -1
  142. package/dist/component.es.mjs.map +0 -1
  143. package/dist/core-BhpuvPhy.js +0 -170
  144. package/dist/core-BhpuvPhy.js.map +0 -1
  145. package/dist/core.es.mjs.map +0 -1
  146. package/dist/full.es.mjs.map +0 -1
  147. package/dist/index.es.mjs.map +0 -1
  148. package/dist/motion.es.mjs.map +0 -1
  149. package/dist/persisted-DHoi3uEs.js +0 -278
  150. package/dist/persisted-DHoi3uEs.js.map +0 -1
  151. package/dist/platform.es.mjs.map +0 -1
  152. package/dist/reactive.es.mjs.map +0 -1
  153. package/dist/router.es.mjs.map +0 -1
  154. package/dist/sanitize-Cxvxa-DX.js +0 -283
  155. package/dist/sanitize-Cxvxa-DX.js.map +0 -1
  156. package/dist/security.es.mjs.map +0 -1
  157. package/dist/store.es.mjs.map +0 -1
  158. package/dist/type-guards-BdKlYYlS.js +0 -32
  159. package/dist/type-guards-BdKlYYlS.js.map +0 -1
  160. package/dist/untrack-DNnnqdlR.js +0 -6
  161. package/dist/untrack-DNnnqdlR.js.map +0 -1
  162. package/dist/view.es.mjs.map +0 -1
  163. package/dist/watch-DXXv3iAI.js +0 -58
  164. package/dist/watch-DXXv3iAI.js.map +0 -1
@@ -1,85 +1,256 @@
1
- /**
2
- * Component types and render context definitions.
3
- *
4
- * @module bquery/component
5
- */
6
-
7
- /**
8
- * Defines a single prop's type and configuration.
9
- *
10
- * @template T - The TypeScript type of the prop value
11
- *
12
- * @example
13
- * ```ts
14
- * const myProp: PropDefinition<number> = {
15
- * type: Number,
16
- * required: false,
17
- * default: 0,
18
- * };
19
- * ```
20
- */
21
- export type PropDefinition<T = unknown> = {
22
- /** Constructor or converter function for the prop type */
23
- type:
24
- | StringConstructor
25
- | NumberConstructor
26
- | BooleanConstructor
27
- | ObjectConstructor
28
- | ArrayConstructor
29
- | { new (value: unknown): T }
30
- | ((value: unknown) => T);
31
- /** Whether the prop must be provided */
32
- required?: boolean;
33
- /** Default value when prop is not provided */
34
- default?: T;
35
- /** Optional validator function to validate prop values */
36
- validator?: (value: T) => boolean;
37
- /**
38
- * Explicitly control whether to invoke `type` with `new` (constructor) or as a plain function.
39
- * - `true`: Always use `new type(value)` (for class constructors, Date, etc.)
40
- * - `false`: Always call `type(value)` (for converter functions)
41
- * - `undefined` (default): Auto-detect based on heuristics with fallback
42
- */
43
- construct?: boolean;
44
- };
45
-
46
- /**
47
- * Render context passed into a component render function.
48
- */
49
- export type ComponentRenderContext<TProps extends Record<string, unknown>> = {
50
- /** Typed props object populated from attributes */
51
- props: TProps;
52
- /** Internal mutable state object */
53
- state: Record<string, unknown>;
54
- /** Emit a custom event from the component */
55
- emit: (event: string, detail?: unknown) => void;
56
- };
57
-
58
- /**
59
- * Complete component definition including props, state, styles, and lifecycle.
60
- *
61
- * @template TProps - Type of the component's props
62
- */
63
- export type ComponentDefinition<TProps extends Record<string, unknown> = Record<string, unknown>> =
64
- {
65
- /** Prop definitions with types and defaults */
66
- props?: Record<keyof TProps, PropDefinition>;
67
- /** Initial internal state */
68
- state?: Record<string, unknown>;
69
- /** CSS styles scoped to the component's shadow DOM */
70
- styles?: string;
71
- /** Lifecycle hook called before the component mounts (before first render) */
72
- beforeMount?: () => void;
73
- /** Lifecycle hook called when component is added to DOM */
74
- connected?: () => void;
75
- /** Lifecycle hook called when component is removed from DOM */
76
- disconnected?: () => void;
77
- /** Lifecycle hook called before an update render; return false to prevent */
78
- beforeUpdate?: (props: TProps) => boolean | void;
79
- /** Lifecycle hook called after reactive updates trigger a render */
80
- updated?: () => void;
81
- /** Error handler for errors during rendering or lifecycle */
82
- onError?: (error: Error) => void;
83
- /** Render function returning HTML string */
84
- render: (context: ComponentRenderContext<TProps>) => string;
85
- };
1
+ /**
2
+ * Component types and render context definitions.
3
+ *
4
+ * @module bquery/component
5
+ */
6
+
7
+ import type { SanitizeOptions } from '../security/types';
8
+
9
+ /**
10
+ * Defines a single prop's type and configuration.
11
+ *
12
+ * @template T - The TypeScript type of the prop value
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const myProp: PropDefinition<number> = {
17
+ * type: Number,
18
+ * required: false,
19
+ * default: 0,
20
+ * };
21
+ * ```
22
+ */
23
+ export type PropDefinition<T = unknown> = {
24
+ /** Constructor or converter function for the prop type */
25
+ type:
26
+ | StringConstructor
27
+ | NumberConstructor
28
+ | BooleanConstructor
29
+ | ObjectConstructor
30
+ | ArrayConstructor
31
+ | { new (value: unknown): T }
32
+ | ((value: unknown) => T);
33
+ /** Whether the prop must be provided */
34
+ required?: boolean;
35
+ /** Default value when prop is not provided */
36
+ default?: T;
37
+ /** Optional validator function to validate prop values */
38
+ validator?: (value: T) => boolean;
39
+ /**
40
+ * Explicitly control whether to invoke `type` with `new` (constructor) or as a plain function.
41
+ * - `true`: Always use `new type(value)` (for class constructors, Date, etc.)
42
+ * - `false`: Always call `type(value)` (for converter functions)
43
+ * - `undefined` (default): Auto-detect based on heuristics with fallback
44
+ */
45
+ construct?: boolean;
46
+ };
47
+
48
+ /**
49
+ * Resolves the concrete runtime state shape exposed by component APIs.
50
+ *
51
+ * When no explicit state generic is provided, component state falls back to
52
+ * an untyped string-keyed record for backwards compatibility.
53
+ */
54
+ export type ComponentStateShape<
55
+ TState extends Record<string, unknown> | undefined = undefined,
56
+ > = TState extends Record<string, unknown> ? TState : Record<string, unknown>;
57
+
58
+ /**
59
+ * Component state keys are string-based because runtime state access is backed
60
+ * by plain object properties.
61
+ */
62
+ export type ComponentStateKey<
63
+ TState extends Record<string, unknown> | undefined = undefined,
64
+ > =
65
+ keyof ComponentStateShape<TState> & string;
66
+
67
+ /**
68
+ * Public component element instance shape exposed by lifecycle hooks and
69
+ * `defineComponent()` return values.
70
+ */
71
+ export type ComponentElement<
72
+ TState extends Record<string, unknown> | undefined = undefined,
73
+ > = HTMLElement & {
74
+ /**
75
+ * Updates a state property and triggers a re-render.
76
+ *
77
+ * @param key - The state property key
78
+ * @param value - The new value
79
+ */
80
+ setState<TKey extends ComponentStateKey<TState>>(
81
+ key: TKey,
82
+ value: ComponentStateShape<TState>[TKey]
83
+ ): void;
84
+ /**
85
+ * Gets a state property value.
86
+ *
87
+ * @param key - The state property key
88
+ * @returns The current value
89
+ */
90
+ getState<TKey extends ComponentStateKey<TState>>(
91
+ key: TKey
92
+ ): ComponentStateShape<TState>[TKey];
93
+ /**
94
+ * Gets a state property value with an explicit cast for backwards
95
+ * compatibility with the pre-typed-state API.
96
+ *
97
+ * @param key - The state property key
98
+ * @returns The current value cast to `TResult`
99
+ */
100
+ getState<TResult = unknown>(key: string): TResult;
101
+ };
102
+
103
+ /**
104
+ * Constructor returned by `defineComponent()`.
105
+ */
106
+ export type ComponentClass<TState extends Record<string, unknown> | undefined = undefined> =
107
+ CustomElementConstructor & {
108
+ new (): ComponentElement<TState>;
109
+ prototype: ComponentElement<TState>;
110
+ readonly observedAttributes: string[];
111
+ };
112
+
113
+ /**
114
+ * Minimal reactive source shape supported by component `signals`.
115
+ *
116
+ * @template T - Value exposed by the signal-like source
117
+ */
118
+ export type ComponentSignalLike<T = unknown> = {
119
+ /** Gets the current reactive value */
120
+ readonly value: T;
121
+ /** Gets the current value without dependency tracking */
122
+ peek(): T;
123
+ };
124
+
125
+ /**
126
+ * Named reactive sources that can drive component re-renders.
127
+ */
128
+ export type ComponentSignals = Record<string, ComponentSignalLike<unknown>>;
129
+
130
+ /**
131
+ * Render context passed into a component render function.
132
+ *
133
+ * @template TProps - Type of the component's props
134
+ * @template TState - Type of the component's internal state
135
+ * @template TSignals - Declared reactive sources available during render
136
+ */
137
+ export type ComponentRenderContext<
138
+ TProps extends Record<string, unknown>,
139
+ TState extends Record<string, unknown> | undefined = undefined,
140
+ TSignals extends ComponentSignals = Record<string, never>,
141
+ > = {
142
+ /** Typed props object populated from attributes */
143
+ props: TProps;
144
+ /** Internal mutable state object */
145
+ state: ComponentStateShape<TState>;
146
+ /** External reactive sources subscribed for re-rendering */
147
+ signals: TSignals;
148
+ /** Emit a custom event from the component */
149
+ emit: (event: string, detail?: unknown) => void;
150
+ };
151
+
152
+ /**
153
+ * Describes an observed attribute change that triggered a component update.
154
+ */
155
+ export type AttributeChange = {
156
+ /** The observed attribute name */
157
+ name: string;
158
+ /** The previous serialized attribute value */
159
+ oldValue: string | null;
160
+ /** The next serialized attribute value */
161
+ newValue: string | null;
162
+ };
163
+
164
+ /**
165
+ * Complete component definition including props, state, styles, and lifecycle.
166
+ *
167
+ * @template TProps - Type of the component's props
168
+ * @template TState - Type of the component's internal state
169
+ */
170
+ /*
171
+ * Lifecycle hooks use dynamic `this` when declared with method/function syntax.
172
+ * Arrow functions capture outer scope, so component APIs like `this.getState()`
173
+ * are only available from method/function syntax.
174
+ */
175
+ type ComponentSanitizeOptions = Pick<SanitizeOptions, 'allowTags' | 'allowAttributes'>;
176
+ type ComponentHook<
177
+ TState extends Record<string, unknown> | undefined = undefined,
178
+ TResult = void,
179
+ > = {
180
+ (this: ComponentElement<TState>): TResult;
181
+ (): TResult;
182
+ };
183
+ type ComponentHookWithProps<
184
+ TProps extends Record<string, unknown>,
185
+ TState extends Record<string, unknown> | undefined = undefined,
186
+ TResult = void,
187
+ > = {
188
+ (this: ComponentElement<TState>, newProps: TProps, oldProps: TProps): TResult;
189
+ (newProps: TProps, oldProps: TProps): TResult;
190
+ };
191
+ type ComponentUpdatedHook<
192
+ TState extends Record<string, unknown> | undefined = undefined,
193
+ TResult = void,
194
+ > = {
195
+ (this: ComponentElement<TState>, change?: AttributeChange): TResult;
196
+ (change?: AttributeChange): TResult;
197
+ };
198
+ type ComponentErrorHook<TState extends Record<string, unknown> | undefined = undefined> = {
199
+ (this: ComponentElement<TState>, error: Error): void;
200
+ (error: Error): void;
201
+ };
202
+
203
+ type ComponentStateDefinition<TState extends Record<string, unknown> | undefined = undefined> =
204
+ TState extends Record<string, unknown>
205
+ ? {
206
+ /** Initial internal state */
207
+ state: TState;
208
+ }
209
+ : {
210
+ /** Initial internal state */
211
+ state?: Record<string, unknown>;
212
+ };
213
+
214
+ type ComponentSignalsDefinition<TSignals extends ComponentSignals = Record<string, never>> =
215
+ TSignals extends Record<string, never>
216
+ ? {
217
+ /** External signals/computed values that should trigger re-renders */
218
+ signals?: TSignals;
219
+ }
220
+ : {
221
+ /** External signals/computed values that should trigger re-renders */
222
+ signals: TSignals;
223
+ };
224
+
225
+ export type ComponentDefinition<
226
+ TProps extends Record<string, unknown> = Record<string, unknown>,
227
+ TState extends Record<string, unknown> | undefined = undefined,
228
+ TSignals extends ComponentSignals = Record<string, never>,
229
+ > = ComponentStateDefinition<TState> &
230
+ ComponentSignalsDefinition<TSignals> & {
231
+ /** Prop definitions with types and defaults */
232
+ props?: Record<keyof TProps, PropDefinition>;
233
+ /** CSS styles scoped to the component's shadow DOM */
234
+ styles?: string;
235
+ /**
236
+ * Extra sanitizer options merged with the framework base allowlist during render.
237
+ * Only opt in attributes/tags whose values you control or validate. Sensitive
238
+ * attributes such as `style` are not value-sanitized and can reintroduce XSS
239
+ * or UI-redressing risks if used with untrusted input.
240
+ */
241
+ sanitize?: ComponentSanitizeOptions;
242
+ /** Lifecycle hook called before the component mounts (before first render) */
243
+ beforeMount?: ComponentHook<TState>;
244
+ /** Lifecycle hook called when component is added to DOM */
245
+ connected?: ComponentHook<TState>;
246
+ /** Lifecycle hook called when component is removed from DOM */
247
+ disconnected?: ComponentHook<TState>;
248
+ /** Lifecycle hook called before an update render; return false to prevent */
249
+ beforeUpdate?: ComponentHookWithProps<TProps, TState, boolean | void>;
250
+ /** Lifecycle hook called after update renders; receives attribute change info when applicable */
251
+ updated?: ComponentUpdatedHook<TState>;
252
+ /** Error handler for errors during rendering or lifecycle */
253
+ onError?: ComponentErrorHook<TState>;
254
+ /** Render function returning HTML string */
255
+ render: (context: ComponentRenderContext<TProps, TState, TSignals>) => string;
256
+ };