@bquery/bquery 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +139 -120
  2. package/dist/component/component.d.ts.map +1 -1
  3. package/dist/component/index.d.ts +2 -0
  4. package/dist/component/index.d.ts.map +1 -1
  5. package/dist/component/library.d.ts +34 -0
  6. package/dist/component/library.d.ts.map +1 -0
  7. package/dist/component/types.d.ts +10 -6
  8. package/dist/component/types.d.ts.map +1 -1
  9. package/dist/component-CY5MVoYN.js +531 -0
  10. package/dist/component-CY5MVoYN.js.map +1 -0
  11. package/dist/component.es.mjs +6 -184
  12. package/dist/config-DRmZZno3.js +40 -0
  13. package/dist/config-DRmZZno3.js.map +1 -0
  14. package/dist/core-CK2Mfpf4.js +648 -0
  15. package/dist/core-CK2Mfpf4.js.map +1 -0
  16. package/dist/core-DPdbItcq.js +112 -0
  17. package/dist/core-DPdbItcq.js.map +1 -0
  18. package/dist/core.es.mjs +45 -1261
  19. package/dist/full.d.ts +6 -6
  20. package/dist/full.d.ts.map +1 -1
  21. package/dist/full.es.mjs +98 -92
  22. package/dist/full.iife.js +173 -3
  23. package/dist/full.iife.js.map +1 -1
  24. package/dist/full.umd.js +173 -3
  25. package/dist/full.umd.js.map +1 -1
  26. package/dist/index.es.mjs +143 -139
  27. package/dist/motion/transition.d.ts +1 -1
  28. package/dist/motion/transition.d.ts.map +1 -1
  29. package/dist/motion/types.d.ts +11 -1
  30. package/dist/motion/types.d.ts.map +1 -1
  31. package/dist/motion-C5DRdPnO.js +415 -0
  32. package/dist/motion-C5DRdPnO.js.map +1 -0
  33. package/dist/motion.es.mjs +25 -361
  34. package/dist/object-qGpWr6-J.js +38 -0
  35. package/dist/object-qGpWr6-J.js.map +1 -0
  36. package/dist/platform/announcer.d.ts +59 -0
  37. package/dist/platform/announcer.d.ts.map +1 -0
  38. package/dist/platform/config.d.ts +92 -0
  39. package/dist/platform/config.d.ts.map +1 -0
  40. package/dist/platform/cookies.d.ts +45 -0
  41. package/dist/platform/cookies.d.ts.map +1 -0
  42. package/dist/platform/index.d.ts +8 -0
  43. package/dist/platform/index.d.ts.map +1 -1
  44. package/dist/platform/meta.d.ts +62 -0
  45. package/dist/platform/meta.d.ts.map +1 -0
  46. package/dist/platform-B7JhGBc7.js +361 -0
  47. package/dist/platform-B7JhGBc7.js.map +1 -0
  48. package/dist/platform.es.mjs +11 -248
  49. package/dist/reactive/async-data.d.ts +114 -0
  50. package/dist/reactive/async-data.d.ts.map +1 -0
  51. package/dist/reactive/index.d.ts +2 -2
  52. package/dist/reactive/index.d.ts.map +1 -1
  53. package/dist/reactive/signal.d.ts +2 -0
  54. package/dist/reactive/signal.d.ts.map +1 -1
  55. package/dist/reactive-BDya-ia8.js +253 -0
  56. package/dist/reactive-BDya-ia8.js.map +1 -0
  57. package/dist/reactive.es.mjs +18 -34
  58. package/dist/router-CijiICxt.js +188 -0
  59. package/dist/router-CijiICxt.js.map +1 -0
  60. package/dist/router.es.mjs +11 -200
  61. package/dist/sanitize-jyJ2ryE2.js +302 -0
  62. package/dist/sanitize-jyJ2ryE2.js.map +1 -0
  63. package/dist/security/constants.d.ts.map +1 -1
  64. package/dist/security.es.mjs +10 -56
  65. package/dist/store-CPK9E62U.js +262 -0
  66. package/dist/store-CPK9E62U.js.map +1 -0
  67. package/dist/store.es.mjs +12 -25
  68. package/dist/view-Cdi0g-qo.js +396 -0
  69. package/dist/view-Cdi0g-qo.js.map +1 -0
  70. package/dist/view.es.mjs +10 -430
  71. package/package.json +15 -11
  72. package/src/component/component.ts +319 -289
  73. package/src/component/index.ts +42 -40
  74. package/src/component/library.ts +504 -0
  75. package/src/component/types.ts +91 -85
  76. package/src/core/collection.ts +628 -628
  77. package/src/core/element.ts +774 -774
  78. package/src/core/index.ts +48 -48
  79. package/src/core/utils/function.ts +151 -151
  80. package/src/full.ts +223 -187
  81. package/src/motion/animate.ts +113 -113
  82. package/src/motion/flip.ts +176 -176
  83. package/src/motion/scroll.ts +57 -57
  84. package/src/motion/spring.ts +150 -150
  85. package/src/motion/timeline.ts +246 -246
  86. package/src/motion/transition.ts +53 -7
  87. package/src/motion/types.ts +208 -198
  88. package/src/platform/announcer.ts +208 -0
  89. package/src/platform/config.ts +163 -0
  90. package/src/platform/cookies.ts +165 -0
  91. package/src/platform/index.ts +39 -18
  92. package/src/platform/meta.ts +168 -0
  93. package/src/platform/storage.ts +215 -215
  94. package/src/reactive/async-data.ts +486 -0
  95. package/src/reactive/core.ts +114 -114
  96. package/src/reactive/effect.ts +54 -54
  97. package/src/reactive/index.ts +37 -23
  98. package/src/reactive/internals.ts +122 -122
  99. package/src/reactive/signal.ts +29 -20
  100. package/src/security/constants.ts +211 -209
  101. package/src/security/sanitize-core.ts +364 -364
  102. package/src/view/evaluate.ts +290 -290
  103. package/dist/batch-x7b2eZST.js +0 -13
  104. package/dist/batch-x7b2eZST.js.map +0 -1
  105. package/dist/component.es.mjs.map +0 -1
  106. package/dist/core-BhpuvPhy.js +0 -170
  107. package/dist/core-BhpuvPhy.js.map +0 -1
  108. package/dist/core.es.mjs.map +0 -1
  109. package/dist/full.es.mjs.map +0 -1
  110. package/dist/index.es.mjs.map +0 -1
  111. package/dist/motion.es.mjs.map +0 -1
  112. package/dist/persisted-DHoi3uEs.js +0 -278
  113. package/dist/persisted-DHoi3uEs.js.map +0 -1
  114. package/dist/platform.es.mjs.map +0 -1
  115. package/dist/reactive.es.mjs.map +0 -1
  116. package/dist/router.es.mjs.map +0 -1
  117. package/dist/sanitize-Cxvxa-DX.js +0 -283
  118. package/dist/sanitize-Cxvxa-DX.js.map +0 -1
  119. package/dist/security.es.mjs.map +0 -1
  120. package/dist/store.es.mjs.map +0 -1
  121. package/dist/type-guards-BdKlYYlS.js +0 -32
  122. package/dist/type-guards-BdKlYYlS.js.map +0 -1
  123. package/dist/untrack-DNnnqdlR.js +0 -6
  124. package/dist/untrack-DNnnqdlR.js.map +0 -1
  125. package/dist/view.es.mjs.map +0 -1
  126. package/dist/watch-DXXv3iAI.js +0 -58
  127. package/dist/watch-DXXv3iAI.js.map +0 -1
@@ -1,150 +1,150 @@
1
- /**
2
- * Spring physics helpers.
3
- *
4
- * @module bquery/motion
5
- */
6
-
7
- import type { Spring, SpringConfig } from './types';
8
-
9
- /**
10
- * Default spring configuration values.
11
- */
12
- const DEFAULT_SPRING_CONFIG: Required<SpringConfig> = {
13
- stiffness: 100,
14
- damping: 10,
15
- mass: 1,
16
- precision: 0.01,
17
- };
18
-
19
- /**
20
- * Create a spring-based animation for smooth, physics-based motion.
21
- *
22
- * Uses variable frame rate timing based on `requestAnimationFrame` timestamps
23
- * to ensure consistent animation speed across different devices and frame rates.
24
- * Large time deltas (e.g., from tab backgrounding) are clamped to maintain
25
- * simulation stability.
26
- *
27
- * @param initialValue - Starting value for the spring
28
- * @param config - Spring physics configuration
29
- * @returns Spring instance for controlling the animation
30
- *
31
- * @example
32
- * ```ts
33
- * const x = spring(0, { stiffness: 120, damping: 14 });
34
- * x.onChange((value) => {
35
- * element.style.transform = `translateX(${value}px)`;
36
- * });
37
- * await x.to(100);
38
- * ```
39
- */
40
- export const spring = (initialValue: number, config: SpringConfig = {}): Spring => {
41
- const { stiffness, damping, mass, precision } = {
42
- ...DEFAULT_SPRING_CONFIG,
43
- ...config,
44
- };
45
-
46
- let current = initialValue;
47
- let velocity = 0;
48
- let target = initialValue;
49
- let animationFrame: number | null = null;
50
- let resolvePromise: (() => void) | null = null;
51
- let lastTime: number | null = null;
52
- const listeners = new Set<(value: number) => void>();
53
-
54
- const notifyListeners = () => {
55
- for (const listener of listeners) {
56
- listener(current);
57
- }
58
- };
59
-
60
- const step = (timestamp: number) => {
61
- // Calculate time delta (in seconds) from last frame
62
- // If this is the first frame, use a sensible default (1/60s)
63
- // This ensures the animation speed is independent of frame rate
64
- const deltaTime = lastTime !== null ? (timestamp - lastTime) / 1000 : 1 / 60;
65
- // Clamp large deltas to prevent instability (e.g. tab backgrounding)
66
- // Maximum delta of 1/30s (~33ms) keeps simulation stable
67
- const clampedDelta = Math.min(deltaTime, 1 / 30);
68
- lastTime = timestamp;
69
-
70
- // Spring physics calculation
71
- const displacement = current - target;
72
- const springForce = -stiffness * displacement;
73
- const dampingForce = -damping * velocity;
74
- const acceleration = (springForce + dampingForce) / mass;
75
-
76
- velocity += acceleration * clampedDelta;
77
- current += velocity * clampedDelta;
78
-
79
- notifyListeners();
80
-
81
- // Check if spring has settled
82
- if (Math.abs(velocity) < precision && Math.abs(displacement) < precision) {
83
- current = target;
84
- velocity = 0;
85
- animationFrame = null;
86
- notifyListeners();
87
- resolvePromise?.();
88
- resolvePromise = null;
89
- return;
90
- }
91
-
92
- animationFrame = requestAnimationFrame(step);
93
- };
94
-
95
- return {
96
- to(newTarget: number): Promise<void> {
97
- target = newTarget;
98
-
99
- if (animationFrame !== null) {
100
- cancelAnimationFrame(animationFrame);
101
- }
102
-
103
- // Resolve any pending promise from a previous to() call
104
- // This ensures all returned promises eventually settle
105
- resolvePromise?.();
106
-
107
- // Reset lastTime to ensure clean start for new animation
108
- lastTime = null;
109
-
110
- return new Promise((resolve) => {
111
- resolvePromise = resolve;
112
- animationFrame = requestAnimationFrame(step);
113
- });
114
- },
115
-
116
- current(): number {
117
- return current;
118
- },
119
-
120
- stop(): void {
121
- if (animationFrame !== null) {
122
- cancelAnimationFrame(animationFrame);
123
- animationFrame = null;
124
- }
125
- velocity = 0;
126
- lastTime = null;
127
- resolvePromise?.();
128
- resolvePromise = null;
129
- },
130
-
131
- onChange(callback: (value: number) => void): () => void {
132
- listeners.add(callback);
133
- return () => listeners.delete(callback);
134
- },
135
- };
136
- };
137
-
138
- /**
139
- * Preset spring configurations for common use cases.
140
- */
141
- export const springPresets = {
142
- /** Gentle, slow-settling spring */
143
- gentle: { stiffness: 80, damping: 15 } as SpringConfig,
144
- /** Responsive, snappy spring */
145
- snappy: { stiffness: 200, damping: 20 } as SpringConfig,
146
- /** Bouncy, playful spring */
147
- bouncy: { stiffness: 300, damping: 8 } as SpringConfig,
148
- /** Stiff, quick spring with minimal overshoot */
149
- stiff: { stiffness: 400, damping: 30 } as SpringConfig,
150
- };
1
+ /**
2
+ * Spring physics helpers.
3
+ *
4
+ * @module bquery/motion
5
+ */
6
+
7
+ import type { Spring, SpringConfig } from './types';
8
+
9
+ /**
10
+ * Default spring configuration values.
11
+ */
12
+ const DEFAULT_SPRING_CONFIG: Required<SpringConfig> = {
13
+ stiffness: 100,
14
+ damping: 10,
15
+ mass: 1,
16
+ precision: 0.01,
17
+ };
18
+
19
+ /**
20
+ * Create a spring-based animation for smooth, physics-based motion.
21
+ *
22
+ * Uses variable frame rate timing based on `requestAnimationFrame` timestamps
23
+ * to ensure consistent animation speed across different devices and frame rates.
24
+ * Large time deltas (e.g., from tab backgrounding) are clamped to maintain
25
+ * simulation stability.
26
+ *
27
+ * @param initialValue - Starting value for the spring
28
+ * @param config - Spring physics configuration
29
+ * @returns Spring instance for controlling the animation
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const x = spring(0, { stiffness: 120, damping: 14 });
34
+ * x.onChange((value) => {
35
+ * element.style.transform = `translateX(${value}px)`;
36
+ * });
37
+ * await x.to(100);
38
+ * ```
39
+ */
40
+ export const spring = (initialValue: number, config: SpringConfig = {}): Spring => {
41
+ const { stiffness, damping, mass, precision } = {
42
+ ...DEFAULT_SPRING_CONFIG,
43
+ ...config,
44
+ };
45
+
46
+ let current = initialValue;
47
+ let velocity = 0;
48
+ let target = initialValue;
49
+ let animationFrame: number | null = null;
50
+ let resolvePromise: (() => void) | null = null;
51
+ let lastTime: number | null = null;
52
+ const listeners = new Set<(value: number) => void>();
53
+
54
+ const notifyListeners = () => {
55
+ for (const listener of listeners) {
56
+ listener(current);
57
+ }
58
+ };
59
+
60
+ const step = (timestamp: number) => {
61
+ // Calculate time delta (in seconds) from last frame
62
+ // If this is the first frame, use a sensible default (1/60s)
63
+ // This ensures the animation speed is independent of frame rate
64
+ const deltaTime = lastTime !== null ? (timestamp - lastTime) / 1000 : 1 / 60;
65
+ // Clamp large deltas to prevent instability (e.g. tab backgrounding)
66
+ // Maximum delta of 1/30s (~33ms) keeps simulation stable
67
+ const clampedDelta = Math.min(deltaTime, 1 / 30);
68
+ lastTime = timestamp;
69
+
70
+ // Spring physics calculation
71
+ const displacement = current - target;
72
+ const springForce = -stiffness * displacement;
73
+ const dampingForce = -damping * velocity;
74
+ const acceleration = (springForce + dampingForce) / mass;
75
+
76
+ velocity += acceleration * clampedDelta;
77
+ current += velocity * clampedDelta;
78
+
79
+ notifyListeners();
80
+
81
+ // Check if spring has settled
82
+ if (Math.abs(velocity) < precision && Math.abs(displacement) < precision) {
83
+ current = target;
84
+ velocity = 0;
85
+ animationFrame = null;
86
+ notifyListeners();
87
+ resolvePromise?.();
88
+ resolvePromise = null;
89
+ return;
90
+ }
91
+
92
+ animationFrame = requestAnimationFrame(step);
93
+ };
94
+
95
+ return {
96
+ to(newTarget: number): Promise<void> {
97
+ target = newTarget;
98
+
99
+ if (animationFrame !== null) {
100
+ cancelAnimationFrame(animationFrame);
101
+ }
102
+
103
+ // Resolve any pending promise from a previous to() call
104
+ // This ensures all returned promises eventually settle
105
+ resolvePromise?.();
106
+
107
+ // Reset lastTime to ensure clean start for new animation
108
+ lastTime = null;
109
+
110
+ return new Promise((resolve) => {
111
+ resolvePromise = resolve;
112
+ animationFrame = requestAnimationFrame(step);
113
+ });
114
+ },
115
+
116
+ current(): number {
117
+ return current;
118
+ },
119
+
120
+ stop(): void {
121
+ if (animationFrame !== null) {
122
+ cancelAnimationFrame(animationFrame);
123
+ animationFrame = null;
124
+ }
125
+ velocity = 0;
126
+ lastTime = null;
127
+ resolvePromise?.();
128
+ resolvePromise = null;
129
+ },
130
+
131
+ onChange(callback: (value: number) => void): () => void {
132
+ listeners.add(callback);
133
+ return () => listeners.delete(callback);
134
+ },
135
+ };
136
+ };
137
+
138
+ /**
139
+ * Preset spring configurations for common use cases.
140
+ */
141
+ export const springPresets = {
142
+ /** Gentle, slow-settling spring */
143
+ gentle: { stiffness: 80, damping: 15 } as SpringConfig,
144
+ /** Responsive, snappy spring */
145
+ snappy: { stiffness: 200, damping: 20 } as SpringConfig,
146
+ /** Bouncy, playful spring */
147
+ bouncy: { stiffness: 300, damping: 8 } as SpringConfig,
148
+ /** Stiff, quick spring with minimal overshoot */
149
+ stiff: { stiffness: 400, damping: 30 } as SpringConfig,
150
+ };