@fluixi/reactive 1.0.0-alpha.53

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 (176) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +343 -0
  3. package/dist/cdn/reactive.cjs +1 -0
  4. package/dist/cdn/reactive.d.ts +11 -0
  5. package/dist/cdn/reactive.d.ts.map +1 -0
  6. package/dist/cdn/reactive.global.js +1 -0
  7. package/dist/cdn/reactive.js +10 -0
  8. package/dist/cdn/reactive.mjs +1 -0
  9. package/dist/cdn/signal.cjs +1 -0
  10. package/dist/cdn/signal.d.ts +19 -0
  11. package/dist/cdn/signal.d.ts.map +1 -0
  12. package/dist/cdn/signal.global.js +1 -0
  13. package/dist/cdn/signal.js +18 -0
  14. package/dist/cdn/signal.mjs +1 -0
  15. package/dist/index.cjs +1 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +1 -0
  19. package/dist/index.mjs +1 -0
  20. package/dist/lib/index.cjs +1 -0
  21. package/dist/lib/index.d.ts +5 -0
  22. package/dist/lib/index.d.ts.map +1 -0
  23. package/dist/lib/index.js +4 -0
  24. package/dist/lib/index.mjs +1 -0
  25. package/dist/lib/observable/index.cjs +1 -0
  26. package/dist/lib/observable/index.d.ts +4 -0
  27. package/dist/lib/observable/index.d.ts.map +1 -0
  28. package/dist/lib/observable/index.js +3 -0
  29. package/dist/lib/observable/index.mjs +1 -0
  30. package/dist/lib/observable/observable.cjs +1 -0
  31. package/dist/lib/observable/observable.d.ts +383 -0
  32. package/dist/lib/observable/observable.d.ts.map +1 -0
  33. package/dist/lib/observable/observable.js +339 -0
  34. package/dist/lib/observable/observable.mjs +1 -0
  35. package/dist/lib/observable/subscription.cjs +1 -0
  36. package/dist/lib/observable/subscription.d.ts +70 -0
  37. package/dist/lib/observable/subscription.d.ts.map +1 -0
  38. package/dist/lib/observable/subscription.js +190 -0
  39. package/dist/lib/observable/subscription.mjs +1 -0
  40. package/dist/lib/observable/types.cjs +1 -0
  41. package/dist/lib/observable/types.d.ts +44 -0
  42. package/dist/lib/observable/types.d.ts.map +1 -0
  43. package/dist/lib/observable/types.js +1 -0
  44. package/dist/lib/observable/types.mjs +0 -0
  45. package/dist/lib/signal/cached-resource.cjs +1 -0
  46. package/dist/lib/signal/cached-resource.d.ts +94 -0
  47. package/dist/lib/signal/cached-resource.d.ts.map +1 -0
  48. package/dist/lib/signal/cached-resource.js +257 -0
  49. package/dist/lib/signal/cached-resource.mjs +1 -0
  50. package/dist/lib/signal/graph/children.cjs +1 -0
  51. package/dist/lib/signal/graph/children.d.ts +2 -0
  52. package/dist/lib/signal/graph/children.d.ts.map +1 -0
  53. package/dist/lib/signal/graph/children.js +30 -0
  54. package/dist/lib/signal/graph/children.mjs +1 -0
  55. package/dist/lib/signal/graph/compat.cjs +1 -0
  56. package/dist/lib/signal/graph/compat.d.ts +64 -0
  57. package/dist/lib/signal/graph/compat.d.ts.map +1 -0
  58. package/dist/lib/signal/graph/compat.js +178 -0
  59. package/dist/lib/signal/graph/compat.mjs +1 -0
  60. package/dist/lib/signal/graph/core.cjs +1 -0
  61. package/dist/lib/signal/graph/core.d.ts +95 -0
  62. package/dist/lib/signal/graph/core.d.ts.map +1 -0
  63. package/dist/lib/signal/graph/core.js +254 -0
  64. package/dist/lib/signal/graph/core.mjs +1 -0
  65. package/dist/lib/signal/graph/derived.cjs +1 -0
  66. package/dist/lib/signal/graph/derived.d.ts +14 -0
  67. package/dist/lib/signal/graph/derived.d.ts.map +1 -0
  68. package/dist/lib/signal/graph/derived.js +81 -0
  69. package/dist/lib/signal/graph/derived.mjs +1 -0
  70. package/dist/lib/signal/graph/detect.cjs +1 -0
  71. package/dist/lib/signal/graph/detect.d.ts +16 -0
  72. package/dist/lib/signal/graph/detect.d.ts.map +1 -0
  73. package/dist/lib/signal/graph/detect.js +36 -0
  74. package/dist/lib/signal/graph/detect.mjs +1 -0
  75. package/dist/lib/signal/graph/error-boundary.cjs +1 -0
  76. package/dist/lib/signal/graph/error-boundary.d.ts +16 -0
  77. package/dist/lib/signal/graph/error-boundary.d.ts.map +1 -0
  78. package/dist/lib/signal/graph/error-boundary.js +34 -0
  79. package/dist/lib/signal/graph/error-boundary.mjs +1 -0
  80. package/dist/lib/signal/graph/index.cjs +1 -0
  81. package/dist/lib/signal/graph/index.d.ts +21 -0
  82. package/dist/lib/signal/graph/index.d.ts.map +1 -0
  83. package/dist/lib/signal/graph/index.js +20 -0
  84. package/dist/lib/signal/graph/index.mjs +1 -0
  85. package/dist/lib/signal/graph/resource.cjs +1 -0
  86. package/dist/lib/signal/graph/resource.d.ts +36 -0
  87. package/dist/lib/signal/graph/resource.d.ts.map +1 -0
  88. package/dist/lib/signal/graph/resource.js +156 -0
  89. package/dist/lib/signal/graph/resource.mjs +1 -0
  90. package/dist/lib/signal/graph/runtime.cjs +1 -0
  91. package/dist/lib/signal/graph/runtime.d.ts +56 -0
  92. package/dist/lib/signal/graph/runtime.d.ts.map +1 -0
  93. package/dist/lib/signal/graph/runtime.js +277 -0
  94. package/dist/lib/signal/graph/runtime.mjs +1 -0
  95. package/dist/lib/signal/graph/signal-next.cjs +1 -0
  96. package/dist/lib/signal/graph/signal-next.d.ts +37 -0
  97. package/dist/lib/signal/graph/signal-next.d.ts.map +1 -0
  98. package/dist/lib/signal/graph/signal-next.js +41 -0
  99. package/dist/lib/signal/graph/signal-next.mjs +1 -0
  100. package/dist/lib/signal/graph/ssr-hooks.cjs +1 -0
  101. package/dist/lib/signal/graph/ssr-hooks.d.ts +28 -0
  102. package/dist/lib/signal/graph/ssr-hooks.d.ts.map +1 -0
  103. package/dist/lib/signal/graph/ssr-hooks.js +45 -0
  104. package/dist/lib/signal/graph/ssr-hooks.mjs +1 -0
  105. package/dist/lib/signal/graph/state.cjs +1 -0
  106. package/dist/lib/signal/graph/state.d.ts +43 -0
  107. package/dist/lib/signal/graph/state.d.ts.map +1 -0
  108. package/dist/lib/signal/graph/state.js +37 -0
  109. package/dist/lib/signal/graph/state.mjs +1 -0
  110. package/dist/lib/signal/graph/suspense.cjs +1 -0
  111. package/dist/lib/signal/graph/suspense.d.ts +13 -0
  112. package/dist/lib/signal/graph/suspense.d.ts.map +1 -0
  113. package/dist/lib/signal/graph/suspense.js +36 -0
  114. package/dist/lib/signal/graph/suspense.mjs +1 -0
  115. package/dist/lib/signal/index-legacy.cjs +1 -0
  116. package/dist/lib/signal/index-legacy.d.ts +12 -0
  117. package/dist/lib/signal/index-legacy.d.ts.map +1 -0
  118. package/dist/lib/signal/index-legacy.js +11 -0
  119. package/dist/lib/signal/index-legacy.mjs +1 -0
  120. package/dist/lib/signal/index.cjs +1 -0
  121. package/dist/lib/signal/index.d.ts +12 -0
  122. package/dist/lib/signal/index.d.ts.map +1 -0
  123. package/dist/lib/signal/index.js +11 -0
  124. package/dist/lib/signal/index.mjs +1 -0
  125. package/dist/lib/signal/list.cjs +1 -0
  126. package/dist/lib/signal/list.d.ts +39 -0
  127. package/dist/lib/signal/list.d.ts.map +1 -0
  128. package/dist/lib/signal/list.js +172 -0
  129. package/dist/lib/signal/list.mjs +1 -0
  130. package/dist/lib/signal/signal.cjs +1 -0
  131. package/dist/lib/signal/signal.d.ts +295 -0
  132. package/dist/lib/signal/signal.d.ts.map +1 -0
  133. package/dist/lib/signal/signal.js +1219 -0
  134. package/dist/lib/signal/signal.mjs +1 -0
  135. package/dist/lib/signal/types.cjs +1 -0
  136. package/dist/lib/signal/types.d.ts +133 -0
  137. package/dist/lib/signal/types.d.ts.map +1 -0
  138. package/dist/lib/signal/types.js +38 -0
  139. package/dist/lib/signal/types.mjs +1 -0
  140. package/dist/lib/signal/utilities.cjs +1 -0
  141. package/dist/lib/signal/utilities.d.ts +355 -0
  142. package/dist/lib/signal/utilities.d.ts.map +1 -0
  143. package/dist/lib/signal/utilities.js +504 -0
  144. package/dist/lib/signal/utilities.mjs +1 -0
  145. package/dist/lib/store/index.cjs +1 -0
  146. package/dist/lib/store/index.d.ts +14 -0
  147. package/dist/lib/store/index.d.ts.map +1 -0
  148. package/dist/lib/store/index.js +11 -0
  149. package/dist/lib/store/index.mjs +1 -0
  150. package/dist/lib/store/setter.types.cjs +1 -0
  151. package/dist/lib/store/setter.types.d.ts +79 -0
  152. package/dist/lib/store/setter.types.d.ts.map +1 -0
  153. package/dist/lib/store/setter.types.js +65 -0
  154. package/dist/lib/store/setter.types.mjs +0 -0
  155. package/dist/lib/store/store.cjs +1 -0
  156. package/dist/lib/store/store.d.ts +86 -0
  157. package/dist/lib/store/store.d.ts.map +1 -0
  158. package/dist/lib/store/store.js +442 -0
  159. package/dist/lib/store/store.mjs +1 -0
  160. package/dist/lib/store/types.cjs +1 -0
  161. package/dist/lib/store/types.d.ts +57 -0
  162. package/dist/lib/store/types.d.ts.map +1 -0
  163. package/dist/lib/store/types.js +1 -0
  164. package/dist/lib/store/types.mjs +0 -0
  165. package/dist/lib/store/utils.cjs +1 -0
  166. package/dist/lib/store/utils.d.ts +13 -0
  167. package/dist/lib/store/utils.d.ts.map +1 -0
  168. package/dist/lib/store/utils.js +29 -0
  169. package/dist/lib/store/utils.mjs +1 -0
  170. package/dist/lib/subject.cjs +1 -0
  171. package/dist/lib/subject.d.ts +14 -0
  172. package/dist/lib/subject.d.ts.map +1 -0
  173. package/dist/lib/subject.js +169 -0
  174. package/dist/lib/subject.mjs +1 -0
  175. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  176. package/package.json +114 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Fluixi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,343 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/fluixi/assets/main/logos/128x128.png" alt="Fluixi" width="120" height="120" />
3
+ </p>
4
+
5
+ # @fluixi/reactive
6
+
7
+ **Fine-grained reactive signals, memos, effects, stores and an RxJS-style observable layer.**
8
+
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-22c55e.svg)](./LICENSE)
10
+ ![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6?logo=typescript&logoColor=white)
11
+ ![Registry](https://img.shields.io/badge/registry-GitHub%20Packages-181717?logo=github)
12
+ ![Inspired by SolidJS](https://img.shields.io/badge/inspired%20by-SolidJS-2c4f7c)
13
+
14
+ ---
15
+
16
+ A powerful, fine-grained reactive system with SolidJS-inspired features for building high-performance applications.
17
+
18
+ ## Features
19
+
20
+ ### 🎯 Core Reactivity
21
+ - **Signals** - Fine-grained reactive primitives
22
+ - **Effects** - Automatic dependency tracking
23
+ - **Memos** - Cached computed values
24
+ - **Batch Updates** - SolidJS-style batching with `runUpdates()`
25
+
26
+ ### ⚡ Advanced Features
27
+ - **Priority-Based Scheduling** - Optimal update ordering (RENDER → COMPUTE → EFFECT → TRANSITION)
28
+ - **Transitions** - Non-blocking updates for better UX
29
+ - **Suspense Boundaries** - Declarative async data loading
30
+ - **Error Boundaries** - Graceful error handling
31
+ - **Context API** - State sharing without prop drilling
32
+ - **Render Effects** - Synchronous DOM updates
33
+ - **Reactions** - Manual dependency tracking
34
+ - **Owner Management** - Advanced lifecycle control
35
+
36
+ ### 🔍 Developer Experience
37
+ - **Enhanced Debugging** - Detailed warnings with dependency chains and performance metrics
38
+ - **Memory Leak Detection** - Find potential issues early
39
+ - **Node Statistics** - Monitor reactive graph performance
40
+ - **TypeScript** - Full type safety and inference
41
+ - **RxJS Integration** - Seamless Observable interop
42
+
43
+ ## Installation
44
+
45
+ ```bash
46
+ npm install @fluixi/reactive
47
+ ```
48
+
49
+ ## Quick Start
50
+
51
+ ### Basic Usage
52
+
53
+ ```typescript
54
+ import { createSignal, createEffect, createMemo, batch } from '@fluixi/reactive';
55
+
56
+ // Create reactive state
57
+ const [count, setCount] = createSignal(0);
58
+
59
+ // Derived state (cached)
60
+ const doubled = createMemo(() => count() * 2);
61
+
62
+ // Side effects (auto-tracking)
63
+ createEffect(() => {
64
+ console.log(`Count: ${count()}, Doubled: ${doubled()}`);
65
+ });
66
+
67
+ // Update state
68
+ setCount(1); // Effect runs: "Count: 1, Doubled: 2"
69
+
70
+ // Batch multiple updates
71
+ batch(() => {
72
+ setCount(2);
73
+ setCount(3);
74
+ }); // Effect runs once: "Count: 3, Doubled: 6"
75
+ ```
76
+
77
+ ### Advanced Usage
78
+
79
+ ```typescript
80
+ import {
81
+ startTransition,
82
+ useTransition,
83
+ createSuspense,
84
+ trackPromise,
85
+ catchError,
86
+ createContext,
87
+ useContext
88
+ } from '@fluixi/reactive';
89
+
90
+ // Non-blocking updates
91
+ const [isPending, start] = useTransition();
92
+ start(() => {
93
+ setLargeDataSet(expensiveComputation());
94
+ });
95
+
96
+ // Async data with suspense
97
+ const UserProfile = createSuspense(
98
+ () => {
99
+ const data = trackPromise(fetchUser(userId()));
100
+ return <Profile data={data} />;
101
+ },
102
+ <ProfileSkeleton />
103
+ );
104
+
105
+ // Error handling
106
+ const safeData = catchError(
107
+ () => parseData(input()),
108
+ (error) => {
109
+ console.error(error);
110
+ return fallbackValue;
111
+ }
112
+ );
113
+
114
+ // Context for state sharing
115
+ const ThemeContext = createContext({ mode: 'light' });
116
+ ThemeContext.Provider({
117
+ value: { mode: 'dark' },
118
+ children: () => <App />
119
+ });
120
+
121
+ // Consume context
122
+ const theme = useContext(ThemeContext);
123
+ ```
124
+
125
+ ## Priority-Based Scheduling
126
+
127
+ Updates are processed in optimal order:
128
+
129
+ ```typescript
130
+ enum UpdatePriority {
131
+ IMMEDIATE = 0, // Immediate synchronous updates
132
+ RENDER = 1, // DOM updates (highest priority)
133
+ COMPUTE = 2, // Memos and computed values
134
+ EFFECT = 3, // Side effects
135
+ TRANSITION = 4, // Low-priority updates (lowest)
136
+ }
137
+ ```
138
+
139
+ ## Batch & Update Queue
140
+
141
+ SolidJS-inspired batching with `runUpdates()`:
142
+
143
+ ```typescript
144
+ batch(() => {
145
+ setA(1);
146
+ setB(2);
147
+ setC(3);
148
+ }); // All effects run once in priority order
149
+
150
+ // Internal mechanism:
151
+ // 1. Updates queued in updateQueue
152
+ // 2. runUpdates() processes queue
153
+ // 3. Flushes in priority order: renders → computations → effects
154
+ ```
155
+
156
+ ## Enhanced Debugging
157
+
158
+ Automatic warnings for performance issues:
159
+
160
+ ```
161
+ ⚠️ [Reactivity Warning] Coarse Dependency Detected
162
+
163
+ Node Information:
164
+ ┌─────────────┬──────────────────┐
165
+ │ Node Name │ userData │
166
+ │ Observers │ 18 │
167
+ └─────────────┴──────────────────┘
168
+
169
+ Reason:
170
+ Reading large object (23 keys) - consider using
171
+ derived signals for specific properties
172
+
173
+ Performance Metrics:
174
+ ┌───────────────────┬──────────┐
175
+ │ Updates │ 45 │
176
+ │ Avg Frequency │ 120ms │
177
+ └───────────────────┴──────────┘
178
+
179
+ Suggestions:
180
+ • Use derived signals for specific properties
181
+ • Consider breaking into smaller signals
182
+ ```
183
+
184
+ ## API Reference
185
+
186
+ ### Core API
187
+
188
+ - `createSignal(initialValue, options?)` - Create reactive state
189
+ - `createEffect(fn, options?)` - Run side effects
190
+ - `createMemo(fn, initialValue?, options?)` - Create derived state
191
+ - `batch(fn)` - Batch multiple updates
192
+ - `untrack(fn)` - Read signals without tracking
193
+ - `createRoot(fn)` - Create disposal root
194
+
195
+ ### Transitions
196
+
197
+ - `startTransition(fn)` - Mark updates as low priority
198
+ - `useTransition()` - Track transition state
199
+
200
+ ### Suspense
201
+
202
+ - `createSuspense(fn, fallback)` - Create async boundary
203
+ - `trackPromise(promise)` - Register promise with suspense
204
+
205
+ ### Error Handling
206
+
207
+ - `catchError(fn, handler)` - Handle errors gracefully
208
+
209
+ ### Context
210
+
211
+ - `createContext(defaultValue)` - Create context
212
+ - `useContext(context)` - Consume context
213
+
214
+ ### Enhanced Effects
215
+
216
+ - `createRenderEffect(fn)` - Synchronous DOM updates
217
+ - `createReaction(onInvalidate)` - Manual dependency tracking
218
+ - `on(deps, fn, options?)` - Explicit dependencies
219
+
220
+ ### Owner Management
221
+
222
+ - `getOwner()` - Get current reactive owner
223
+ - `runWithOwner(owner, fn)` - Run with specific owner
224
+
225
+ ### Debugging
226
+
227
+ - `warnCoarseRead(node, reason)` - Enhanced warnings
228
+ - `getNodeStats()` - Get reactive graph statistics
229
+ - `findPotentialLeaks()` - Find memory leaks
230
+ - `enableDevMode()` - Enable dev mode features
231
+
232
+ ### Utilities
233
+
234
+ - `createEnhancedSignal(initialValue)` - Signal with extras
235
+ - `createAsyncSignal(asyncFn)` - Async signal
236
+ - `createLazySignal(fn)` - Lazy-evaluated signal
237
+ - `createSignalWithHistory(initialValue)` - Signal with undo/redo
238
+ - `createThrottledSignal(signal, delay)` - Throttled updates
239
+ - `createDebouncedSignal(signal, delay)` - Debounced updates
240
+ - `createTrigger()` - Manual trigger
241
+ - `createSelector(source, fn)` - Keyed selector
242
+ - `createResource(fetcher, source?)` - Async resource
243
+ - `createStore(initialValue)` - Nested reactive object
244
+
245
+ ## Documentation
246
+
247
+ Complete documentation available at:
248
+ - [Overview](../../my-docusaurus-app/docs/signal/overview.md) - Introduction and concepts
249
+ - [Core API](../../my-docusaurus-app/docs/signal/signal.md) - Complete API reference
250
+ - [SolidJS Features](../../my-docusaurus-app/docs/signal/solidjs-features.md) - Advanced features guide
251
+ - [Advanced Patterns](../../my-docusaurus-app/docs/signal/advanced-patterns.md) - Complex patterns
252
+ - [Quick Reference](../../my-docusaurus-app/docs/signal/quick-reference.md) - Quick lookup
253
+ - [What's New](../../my-docusaurus-app/docs/signal/whats-new.md) - Latest enhancements
254
+
255
+ ## What's New (v3.2.0+)
256
+
257
+ ### Major Enhancements
258
+
259
+ ✨ **Priority-Based Scheduling** - Updates execute in optimal order
260
+ ✨ **SolidJS-Style Batching** - New `runUpdates()` mechanism
261
+ ✨ **Transitions API** - Non-blocking updates with `startTransition()`
262
+ ✨ **Suspense Boundaries** - Declarative async with `createSuspense()`
263
+ ✨ **Error Boundaries** - Graceful error handling with `catchError()`
264
+ ✨ **Context API** - State sharing with `createContext()`
265
+ ✨ **Enhanced Debugging** - Detailed warnings and performance metrics
266
+ ✨ **Transition State Tracking** - Automatic priority in computations
267
+
268
+ ### Breaking Changes
269
+
270
+ **None!** All enhancements are 100% backward compatible.
271
+
272
+ ## Performance Tips
273
+
274
+ 1. **Use transitions for expensive updates**
275
+ ```typescript
276
+ startTransition(() => setLargeList(compute()));
277
+ ```
278
+
279
+ 2. **Batch related updates**
280
+ ```typescript
281
+ batch(() => { setA(1); setB(2); });
282
+ ```
283
+
284
+ 3. **Use memos for expensive computations**
285
+ ```typescript
286
+ const result = createMemo(() => expensive(signal()));
287
+ ```
288
+
289
+ 4. **Leverage suspense for async**
290
+ ```typescript
291
+ createSuspense(() => trackPromise(fetch()), <Loading />);
292
+ ```
293
+
294
+ 5. **Monitor with debugging tools**
295
+ ```typescript
296
+ const stats = getNodeStats();
297
+ const leaks = findPotentialLeaks();
298
+ ```
299
+
300
+ ## Best Practices
301
+
302
+ ### ✅ Do
303
+
304
+ - Use `batch()` for multiple related updates
305
+ - Use `startTransition()` for non-urgent updates
306
+ - Add error boundaries with `catchError()`
307
+ - Use context instead of prop drilling
308
+ - Monitor performance with debugging tools
309
+
310
+ ### ❌ Don't
311
+
312
+ - Update signals without batching when multiple updates needed
313
+ - Block UI with expensive synchronous computations
314
+ - Ignore errors in reactive code
315
+ - Prop drill when context would work better
316
+
317
+ ## Building
318
+
319
+ ```bash
320
+ nx build reactive
321
+ ```
322
+
323
+ ## Running Tests
324
+
325
+ ```bash
326
+ nx test reactive
327
+ ```
328
+
329
+ ## License
330
+
331
+ MIT
332
+
333
+ ## Credits
334
+
335
+ Inspired by:
336
+ - [SolidJS](https://www.solidjs.com/) - Reactivity primitives and scheduling
337
+ - [React](https://react.dev/) - Transitions and Suspense concepts
338
+ - [Vue 3](https://vuejs.org/) - Reactivity system design
339
+
340
+ ---
341
+
342
+ **Version:** 3.2.0+
343
+ **Status:** ✅ Production Ready
@@ -0,0 +1 @@
1
+ "use strict";var Se=Object.defineProperty;var Qt=Object.getOwnPropertyDescriptor;var Zt=Object.getOwnPropertyNames;var er=Object.prototype.hasOwnProperty;var tr=(e,t)=>{for(var r in t)Se(e,r,{get:t[r],enumerable:!0})},rr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Zt(t))!er.call(e,o)&&o!==r&&Se(e,o,{get:()=>t[o],enumerable:!(n=Qt(t,o))||n.enumerable});return e};var nr=e=>rr(Se({},"__esModule",{value:!0}),e);var Or={};tr(Or,{$NAME:()=>Dt,$NODE:()=>F,$PROXY:()=>vr,$RAW:()=>J,$SELF:()=>be,$SIGNAL:()=>mr,$STORE:()=>Ut,$TRACK:()=>Te,Observable:()=>B,SafeSubscriber:()=>te,Signal:()=>_t,Store:()=>_,StoreAPI:()=>zt,Subject:()=>we,Subscriber:()=>U,Subscription:()=>D,SuspenseContext:()=>ye,__DEV__:()=>ae,batch:()=>w,createComputed:()=>rt,createComputedStore:()=>Mt,createContext:()=>q,createDebounce:()=>mt,createDeferred:()=>Tt,createEffect:()=>P,createErrorBoundary:()=>gt,createMemo:()=>S,createMutableStore:()=>qe,createRenderEffect:()=>nt,createResource:()=>St,createRoot:()=>k,createSelector:()=>bt,createSignal:()=>d,createStore:()=>Ne,createStoreEffect:()=>$t,createStoreMemo:()=>Lt,createSuspenseBoundary:()=>xt,flush:()=>st,getNode:()=>Gt,getOwner:()=>z,getServerData:()=>le,getStoreNode:()=>Wt,indexArray:()=>dr,isComponent:()=>ct,isMemo:()=>at,isProvider:()=>pt,isResource:()=>ut,isSignal:()=>ue,isStore:()=>Kt,isStoreProxy:()=>ve,isSuspense:()=>lt,keyArray:()=>fr,makeArrayFlat:()=>Ee,mapArray:()=>pr,modifiable:()=>Ht,nextResourceId:()=>pe,on:()=>it,onCleanup:()=>v,operate:()=>or,produceUtil:()=>Yt,provide:()=>M,provideErrorBoundary:()=>At,provideSuspense:()=>wt,readChildren:()=>vt,reconcileUtil:()=>Xt,reportResourceData:()=>fe,runWithOwner:()=>$,setOwner:()=>Ae,setResourceDataSink:()=>ht,setResourceIdSource:()=>yt,setResourceTracker:()=>ft,setServerDataGetter:()=>dt,startTransition:()=>Re,trackResourcePromise:()=>ce,untrack:()=>O,untrackStore:()=>Me,unwrap:()=>V,useContext:()=>Ye,useTransition:()=>ot,wrap:()=>Vt});module.exports=nr(Or);var Ke=require("@fluixi/utils/object"),xe=require("@fluixi/utils/functions"),D=class e{constructor(t){this._closed=!1;this._parentOrParents=null;this._subscriptions=null;t&&(this._subscriptions=[t])}get closed(){return this._closed}unsubscribe(){if(this._closed)return;this._closed=!0;let{_parentOrParents:t,_subscriptions:r}=this;if(t instanceof e)t.remove(this);else if(t!==null)for(let n of t)n.remove(this);if(r){for(let n of r)if((0,xe.isFunction)(n)&&!(n instanceof e))try{n()}catch(o){console.error("Error in unsubscribe function:",o)}else if((0,Ke.isObject)(n)&&typeof n.unsubscribe=="function")try{n.unsubscribe()}catch(o){console.error("Error unsubscribing child:",o)}this._subscriptions=null}}add(t){if(!t||t===this)return this;if(t.closed)return this;let{_closed:r,_subscriptions:n}=this;if(r){if((0,xe.isFunction)(t))try{t()}catch(o){console.error("Error in unsubscribe function:",o)}else if(t.unsubscribe)try{t.unsubscribe()}catch(o){console.error("Error unsubscribing:",o)}return this}return n||(this._subscriptions=[]),this._subscriptions.push(t),t instanceof e&&t._addParent(this),this}remove(t){let{_subscriptions:r}=this;if(!r)return;let n=r.indexOf(t);n!==-1&&(r.splice(n,1),t._removeParent(this))}_addParent(t){let{_parentOrParents:r}=this;r?Array.isArray(r)?r.push(t):this._parentOrParents=[r,t]:this._parentOrParents=t}_removeParent(t){let{_parentOrParents:r}=this;if(r===t)this._parentOrParents=null;else if(Array.isArray(r)){let n=r.indexOf(t);n!==-1&&(r.splice(n,1),r.length===1&&(this._parentOrParents=r[0]))}}};var U=class extends D{constructor(r,n,o){super();this.isStopped=!1;let s;r?typeof r=="object"?s=r:s={next:r,error:n,complete:o}:s={},this.destination=s}next(r){if(!this.isStopped&&this.destination.next)try{this.destination.next(r)}catch(n){this.error(n)}}error(r){if(!this.isStopped){if(this.isStopped=!0,this.destination.error)try{this.destination.error(r)}catch(n){throw n}else throw r;this.unsubscribe()}}complete(){if(!this.isStopped){if(this.isStopped=!0,this.destination.complete)try{this.destination.complete()}catch(r){this.error(r);return}this.unsubscribe()}}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}},te=class extends U{constructor(r,n,o,s){super(r,n,o);this._isUnsubscribing=!1;this._parentSubscriber=null;this._parentSubscriber=s||null}next(r){if(!this.isStopped&&!this._isUnsubscribing)try{super.next(r)}catch(n){this.error(n)}}error(r){if(!this.isStopped&&!this._isUnsubscribing){this._isUnsubscribing=!0;try{super.error(r)}finally{this._isUnsubscribing=!1}}}complete(){if(!this.isStopped&&!this._isUnsubscribing){this._isUnsubscribing=!0;try{super.complete()}finally{this._isUnsubscribing=!1}}}unsubscribe(){this.closed||(this._isUnsubscribing=!0,super.unsubscribe(),this._isUnsubscribing=!1)}};function or(e){return new U(e.next,e.error,e.complete)}var B=class extends D{constructor(t){if(super(),t)this._subscribe=t;else throw new TypeError("Observable constructor requires a subscribe function")}subscribe(t,r,n){let o;t instanceof U?o=t:o=new te(t,r,n);let{_subscribe:s}=this;try{let i=s.call(this,o);i&&(typeof i=="function"||typeof i.unsubscribe=="function")&&o.add(i)}catch(i){o.error(i)}return o}pipe(...t){return t.length===0?this:t.reduce((r,n)=>n(r),this)}toPromise(){return new Promise((t,r)=>{let n;this.subscribe({next:o=>n=o,error:r,complete:()=>t(n)})})}};var we=class extends B{constructor(){super(r=>{if(this.closed)throw new Error("Subject has been closed");if(this.hasError)r.error(this.thrownError);else if(this.isStopped)r.complete();else return this.observers.push(r),()=>{let n=this.observers.indexOf(r);n!==-1&&this.observers.splice(n,1)}});this.observers=[];this.isStopped=!1;this.hasError=!1;this.thrownError=null}next(r){if(this.isStopped)return;let{observers:n}=this,o=n.length,s=n.slice();for(let i=0;i<o;i++)s[i].next?.(r)}error(r){if(this.isStopped)return;this.hasError=!0,this.thrownError=r,this.isStopped=!0;let{observers:n}=this;this.observers=[];let o=n.length,s=n.slice();for(let i=0;i<o;i++)s[i].error?.(r)}complete(){if(this.isStopped)return;this.isStopped=!0;let{observers:r}=this;this.observers=[];let n=r.length,o=r.slice();for(let s=0;s<n;s++)o[s].complete?.()}unsubscribe(){this.isStopped=!0,this.observers=[]}asObservable(){return new B(n=>this.subscribe(n))}};var sr="__fluixi_signal_next_state__",ir=e=>{typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e)},a=globalThis[sr]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:ir,onSuspend:null,onError:null};var Ge=0,We=1,W=2,re=class{constructor(){this.observers=null;this.watchers=null;this.version=0}updateIfNecessary(){}track(){if(a.untracked)return;let t=a.consumer;t&&((this.observers??=new Set).add(t),(t.sources??=new Set).add(this))}},j=class extends re{constructor(t,r){super(),this._value=t,this._equals=r?.equals===!1?()=>!1:r?.equals??Object.is}get(){return this.track(),this._value}set(t){if(!this._equals(this._value,t)){if(this._value=t,this.version++,this.observers)for(let r of[...this.observers])r.markDirty(W);Oe(this)}}peek(){return this._value}},A=class extends re{constructor(r,n){super();this._threw=!1;this._initialized=!1;this.state=W;this.sources=null;this._fn=r,this._equals=n?.equals===!1?()=>!1:n?.equals??Object.is}get(){if(a.consumer===this)throw new Error("Signal.Computed cannot read itself");if(this.track(),this.updateIfNecessary(),this._threw)throw this._error;return this._value}updateIfNecessary(){if(this.state===We&&this.sources){for(let r of this.sources)if(r.updateIfNecessary(),this.state===W)break}(this.state===W||!this._initialized)&&this.recompute(),this.state=Ge}recompute(){if(this.sources){for(let u of this.sources)u.observers?.delete(this);this.sources.clear()}let r=a.consumer,n=a.untracked;a.consumer=this,a.untracked=!1;let o,s=!1,i;try{o=this._fn()}catch(u){s=!0,i=u,o=this._value}finally{a.consumer=r,a.untracked=n}let c=!this._initialized||this._threw!==s||(s?i!==this._error:!this._equals(this._value,o));if(this._initialized=!0,this._threw=s,this._error=i,this._value=o,c){if(this.version++,this.observers)for(let u of[...this.observers])u.markDirty(W);Oe(this)}}markDirty(r){if(this.state>=r)return;let n=this.state===Ge;if(this.state=r,n){if(this.observers)for(let o of[...this.observers])o.markDirty(We);Oe(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function Oe(e){if(e.watchers)for(let t of[...e.watchers])t._notify(e)}var N=class{constructor(t){this._watched=new Set;this._pending=new Set;this._notifyFn=t}watch(...t){for(let r of t)this._watched.add(r),(r.watchers??=new Set).add(this)}unwatch(...t){for(let r of t)this._watched.delete(r),r.watchers?.delete(this),this._pending.delete(r)}getPending(){let t=[...this._pending];return this._pending.clear(),t}_notify(t){if(!this._watched.has(t)||this._pending.has(t))return;let r=this._pending.size===0;this._pending.add(t),r&&this._notifyFn()}};function H(e){if(a.untracked)return e();a.untracked=!0;try{return e()}finally{a.untracked=!1}}function He(){return a.consumer}function ze(e){return!!(e.observers&&e.observers.size)||!!(e.watchers&&e.watchers.size)}function oe(e){return{cleanups:null,owned:null,parent:e,contexts:null}}function q(e){let t=Symbol("context");return{id:t,defaultValue:e,Provider:n=>{let o=a.owner,s=oe(o);(s.contexts=new Map).set(t,n.value),o&&(o.owned??=[]).push(s),a.owner=s;try{return n.children}finally{a.owner=o}}}}function Ye(e){let t=a.owner;for(;t;){if(t.contexts&&t.contexts.has(e.id))return t.contexts.get(e.id);t=t.parent}return e.defaultValue}function se(e,t){let r=e;for(;r;){if(r.contexts&&r.contexts.has(t.id))return r.contexts.get(t.id);r=r.parent}return t.defaultValue}function M(e,t,r){let n=oe(a.owner);(n.contexts=new Map).set(e.id,t),a.owner&&(a.owner.owned??=[]).push(n);let o=a.owner;a.owner=n;try{return r()}finally{a.owner=o}}function Xe(e){a.onSuspend=e}function Je(e){return a.onSuspend?(a.onSuspend(e,a.owner),!0):!1}function Qe(e){a.onError=e}function z(){return a.owner}function Ae(e){let t=a.owner;return a.owner=e,t}function $(e,t){let r=a.owner;a.owner=e;try{return t()}finally{a.owner=r}}function v(e){a.owner&&(a.owner.cleanups??=[]).push(e)}function ne(e){if(e.owned){for(let t=e.owned.length-1;t>=0;t--)ne(e.owned[t]);e.owned=null}if(e.cleanups){for(let t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}}function k(e){let t=oe(a.owner);a.owner&&(a.owner.owned??=[]).push(t);let r=a.owner;a.owner=t;try{return e(()=>ne(t))}finally{a.owner=r}}function Ze(e){a.hostSchedule=e??(t=>{Promise.resolve().then(t)})}function ar(e){e.queued||(e.queued=!0,a.queue.push(e),!a.scheduled&&a.batchDepth===0&&(a.scheduled=!0,a.hostSchedule(Y)))}function Y(){if(a.scheduled=!1,a.flushing)return;a.flushing=!0;let e=0;try{for(;a.queue.length;){if(++e>1e5)throw new Error("[fluixi] effect flush did not settle (cycle?)");let t=a.queue;a.queue=[];for(let r of t)r.queued=!1,r.disposed||r.run()}}finally{a.flushing=!1}}function et(){a.batchDepth===0&&Y()}function _e(e){a.batchDepth++;try{return e()}finally{--a.batchDepth===0&&Y()}}var ge=class{constructor(t){this.queued=!1;this.disposed=!1;this.owner=oe(a.owner),a.owner&&(a.owner.cleanups??=[]).push(()=>this.dispose()),this.computed=new A(()=>{ne(this.owner),$(this.owner,()=>{let r=t();typeof r=="function"&&(this.owner.cleanups??=[]).push(r)})}),this.watcher=new N(()=>ar(this)),this.run(),this.watcher.watch(this.computed)}run(){if(!this.disposed){this.watcher.getPending();try{this.computed.get()}catch(t){if(t&&typeof t.then=="function"&&a.onSuspend){a.onSuspend(t,this.owner);return}if(a.onError&&a.onError(t,this.owner))return;throw t}}}dispose(){this.disposed||(this.disposed=!0,this.watcher.unwatch(this.computed),ne(this.owner))}};function ie(e){let t=new ge(e);return()=>t.dispose()}function ur(e){return!!e&&typeof e.then=="function"}Ze(()=>{});var tt=Symbol.for("signal"),cr=Symbol.for("memo"),lr=Symbol.for("signal-node");function d(e,t){let r=new j(e,{equals:t?.equals}),n=(()=>r.get()),o=(s=>{let i=typeof s=="function"?s(r.peek()):s;return r.set(i),et(),i});return Object.defineProperty(n,tt,{value:!0,enumerable:!0}),Object.defineProperty(n,lr,{value:{get value(){return r.peek()},get version(){return r.version}},enumerable:!1}),[n,o]}function S(e,t,r){let n=t,o=z(),s=new A(()=>$(o,()=>{try{return n=e(n)}catch(c){if(ur(c))return Je(c),n;throw c}}),{equals:r?.equals}),i=(()=>s.get());return Object.defineProperty(i,tt,{value:!0,enumerable:!0}),Object.defineProperty(i,cr,{value:!0,enumerable:!0}),i}function P(e,t){let r=t;return ie(()=>{r=e(r)})}function rt(e,t){let r=t;ie(()=>{r=e(r)})}function nt(e,t){let r=t;return ie(()=>{r=e(r)})}function w(e){return _e(e)}function O(e){return H(e)}function Re(e){return _e(e),Promise.resolve()}function ot(){return[()=>!1,Re]}function st(){return Y(),Promise.resolve()}function it(e,t,r){let n=Array.isArray(e),o,s=r?.defer??!1;return i=>{let c=n?e.map(f=>f()):e();if(s){s=!1,o=c;return}let u=H(()=>t(c,o,i));return o=c,u}}function pr(e,t,r){let n=[];return v(()=>{for(let o of n)o.dispose();n=[]}),S(()=>{let o=e()||[];return O(()=>{if(o.length===0){for(let u of n)u.dispose();return n=[],r?.fallback?r.fallback():[]}let s=new Map;for(let u of n)s.has(u.item)||s.set(u.item,u);let i=[],c=new Set;for(let u=0;u<o.length;u++){let f=o[u],y=s.get(f);if(y&&!c.has(y))y.setIndex(u),i.push(y),c.add(y);else{let l,h,b;k(T=>{b=T;let[C,K]=d(u);h=K,l=t(f,C)});let x={item:f,rendered:l,dispose:b,setIndex:h};i.push(x),c.add(x)}}for(let u of n)c.has(u)||u.dispose();return n=i,i.map(u=>u.rendered)})})}function fr(e,t,r,n){let o=[],s=[];return v(()=>{for(let i of s)i.dispose();o=[],s=[]}),S(()=>{let i=e()||[];return O(()=>{if(i.length===0){for(let l of s)l.dispose();return o=[],s=[],n?.fallback?n.fallback():[]}let c=new Map;for(let l=0;l<o.length;l++)c.set(o[l],s[l]);let u=[],f=[],y=new Set;for(let l=0;l<i.length;l++){let h=t(i[l]),b=c.get(h);if(b&&!y.has(h))b.setIndex(l),u.push(b);else{let x,T,C;k(K=>{C=K;let[R,G]=d(l);T=G;let Q=S(I=>{let g=(e()||[])[R()];return g??I},i[l]);x=r(Q,R)}),u.push({rendered:x,dispose:C,setIndex:T})}f.push(h),y.add(h)}for(let[l,h]of c)y.has(l)||h.dispose();return o=f,s=u,u.map(l=>l.rendered)})})}function dr(e,t,r){let n=[];return v(()=>{for(let o of n)o.dispose();n=[]}),S(()=>{let o=e()||[];return O(()=>{if(o.length===0){for(let u of n)u.dispose();return n=[],r?.fallback?r.fallback():[]}let s=n.length,i=o.length;for(let u=s;u<i;u++){let f,y,l,h=o[u];k(b=>{l=b;let[x,T]=d(h);y=T,f=t(x,u)}),n.push({rendered:f,setItem:y,dispose:l})}for(let u=i;u<s;u++)n[u].dispose();i<s&&(n=n.slice(0,i));let c=Math.min(s,i);for(let u=0;u<c;u++)n[u].setItem(o[u]);return n.map(u=>u.rendered)})})}var ae=!1,yr=Symbol.for("signal"),hr=Symbol.for("memo"),br=Symbol.for("resource");function ue(e){return typeof e=="function"&&e[yr]===!0}function at(e){return typeof e=="function"&&e[hr]===!0}function ut(e){return typeof e=="function"&&e[br]===!0}function ct(e){return typeof e=="function"&&e[Symbol.for("fluixi-component")]===!0}function lt(e){return typeof e=="function"&&e[Symbol.for("fluixi-suspense")]===!0}function pt(e){return typeof e=="function"&&e[Symbol.for("fluixi-provider")]===!0}function Ee(e){return Array.isArray(e)?e.length===2&&e[1]===" "?Array.isArray(e[0])?Ee(e[0]):(typeof e[0]=="function",e[0]):e.length===1&&typeof e[0]=="function"?e[0]:e:e}var ke=null;function ft(e){ke=e}function ce(e){ke&&ke(e)}var Pe=null;function dt(e){Pe=e}function le(e){return Pe?Pe(e):void 0}var Fe=null;function yt(e){Fe=e}function pe(){return Fe?Fe():void 0}var Ce=null;function ht(e){Ce=e}function fe(e,t){Ce&&Ce(e,t)}function bt(e,t=(r,n)=>r===n){let r=new Map;return P(()=>{let n=e();for(let[o,s]of r){let[i,c]=s,u=t(o,n);i()!==u&&c(u)}}),n=>{let o=r.get(n);if(!o){let[s,i]=d(!1);o=[s,i],r.set(n,o);let c=e();i(t(n,c))}return o[0]()}}function Tt(e,t){let[r,n]=d(e(),t);return P(()=>{let o=e();t?.timeoutMs?setTimeout(()=>n(()=>o),t.timeoutMs):typeof requestIdleCallback=="function"?requestIdleCallback(()=>n(()=>o)):Promise.resolve().then(()=>n(()=>o))}),r}function mt(e,t){let r,n=(...o)=>{r!==void 0&&clearTimeout(r),r=setTimeout(()=>{if(r=void 0,o.length>0){let s=o[o.length-1];typeof s=="object"&&s&&!s.tagName&&s.target&&s.target.tagName&&(s=s.target),s&&typeof s=="object"&&s.tagName&&(s.tagName.toLowerCase()==="input"||s.tagName.toLowerCase()==="textarea")&&s.focus()}e(...o)},t)};return v(()=>{r!==void 0&&clearTimeout(r)}),n}function de(e){if(typeof e=="function"&&!e.length){let t=e();return ue(t)?t:de(t)}if(Array.isArray(e)){let t=[];for(let r=0;r<e.length;r++){let n=de(e[r]);Array.isArray(n)?t.push.apply(t,n):t.push(n)}return t}return e}function vt(e){let t=S(e);return S(()=>de(t()))}function Tr(e){return!!e&&typeof e.then=="function"}var Ie=Symbol();function St(e,t,r={}){let n,o;typeof t=="function"?(n=typeof e=="function"?e:()=>e,o=t):(n=()=>!0,o=e,t&&typeof t=="object"&&(r=t));let s=pe(),i=s!==void 0?le(s):void 0,c=i!==void 0,[u,f]=d(i!==void 0?i.value:r.initialValue,{equals:!1}),[y,l]=d(void 0,{equals:!1}),[h,b]=d(i!==void 0||r.initialValue!==void 0?"ready":"unresolved",{equals:!1}),[x,T]=d(void 0,{equals:!1}),[C,K]=d(void 0,{equals:!1}),R=Ie,G=!1;P(()=>{let m=n();if(C(),m===!1||m===null||m===void 0){R=Ie,w(()=>{b("unresolved"),T(void 0),l(void 0)});return}let g=G;if(G=!1,R!==Ie&&m===R&&!g)return;if(R=m,c){c=!1;return}let Z=!1;v(()=>Z=!0);let Le=O(h),Jt=O(u),Ve=Le==="ready"||Le==="refreshing";w(()=>{b(Ve?"refreshing":"pending"),l(void 0)});try{let E=o(m,{value:Jt,refetching:Ve});Tr(E)?(T(E),ce(E),E.then(ee=>{Z||(s!==void 0&&fe(s,ee),w(()=>{f(()=>ee),b("ready"),T(void 0)}))},ee=>{Z||w(()=>{l(ee),b("errored"),T(void 0)})})):w(()=>{f(()=>E),b("ready"),T(void 0)})}catch(E){if(Z)return;w(()=>{l(E),b("errored"),T(void 0)})}});let Q=()=>{let m=h();return m==="pending"||m==="refreshing"},I=(()=>{let m=y();if(m)throw m;if(Q()){let g=x();if(g)throw g}return u()});return Object.defineProperties(I,{state:{get:h},loading:{get:Q},error:{get:y},latest:{get:u}}),Object.defineProperty(I,Symbol.for("resource"),{value:!0,enumerable:!0}),Object.defineProperty(I,Symbol.for("signal"),{value:!0,enumerable:!0}),[I,{mutate:f,refetch:()=>{G=!0,K(void 0)}}]}var ye=q();Xe((e,t)=>{let r=se(t,ye);r&&(r.increment(),e.finally(()=>r.decrement()))});function xt(){let[e,t]=d(0),r=0;return{increment:()=>t(r+=1),decrement:()=>t(r-=1),inFallback:()=>e()>0}}function wt(e,t){return M(ye,e,t)}var Ot=q();Qe((e,t)=>{let r=se(t,Ot);return r?(r.setError(e),!0):!1});function gt(){let[e,t]=d(void 0,{equals:!1});return{error:e,reset:()=>t(()=>{}),setError:n=>t(()=>n)}}function At(e,t){return M(Ot,e,t)}var _t={State:j,Computed:A,subtle:{Watcher:N,untrack:H,currentComputed:He,hasSinks:ze}};var mr=Symbol.for("signal"),vr=Symbol.for("fluixi-proxy");var p=require("@fluixi/reactive/signal"),J=Symbol("store-raw"),F=Symbol("store-node"),Rt=Symbol("store-has"),be=Symbol("store-self"),Te=Symbol("store-track"),Dt=Symbol("store-name"),Ut=Symbol("store-store"),Et=new WeakMap,kt=new WeakMap;function Bt(e){let[t,r]=(0,p.createSignal)(e),n=t;return n.$=r,n}function me(e){let t=Et.get(e);return t||Et.set(e,t={keys:new Map}),t}function Pt(e,t,r){let n=e.keys.get(t);return n||e.keys.set(t,n=Bt(r)),n}function Ft(e){let t=me(e);(t.all||(t.all=Bt()))()}function Ct(e,t){e.$(typeof t=="function"?()=>t:t)}function jt(e){if(e==null||typeof e!="object")return!1;if(Array.isArray(e))return!0;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function he(e){if(!jt(e))return e;let t=kt.get(e);if(t)return t;let r=new Proxy(e,Sr);return kt.set(e,r),r}var Sr={get(e,t,r){if(t===J||t===F)return e;if(t===p.$PROXY)return r;if(t===Rt)return i=>i in e;if(t==="__proxy")return!0;if(t===Te||t===be)return Ft(e),r;let n=e[t];if(typeof n=="function"&&!Object.prototype.hasOwnProperty.call(e,t))return n;let o=Object.getOwnPropertyDescriptor(e,t);if(o&&o.get)return o.get.call(r);let s=Pt(me(e),t,n)();return jt(s)?he(s):s},set(){return!0},deleteProperty(e,t){return t in e&&X(e,t,void 0),!0},has(e,t){return t===J||t===p.$PROXY||t===F||t===Rt||t===be||t===Te?!0:(Pt(me(e),t,e[t])(),t in e)},ownKeys(e){return Ft(e),Reflect.ownKeys(e)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e,t)}};function X(e,t,r){if(e[t]===r&&(r!==void 0||t in e))return;let o=Array.isArray(e),s=o?e.length:0;r===void 0?delete e[t]:e[t]=r;let i=me(e),c=i.keys.get(t);if(c&&Ct(c,r),o&&e.length!==s){let u=i.keys.get("length");u&&Ct(u,e.length)}i.all&&i.all.$(void 0)}function It(e,t){return typeof e=="function"?e(t):e}function Ue(e,t){for(let r of Object.keys(t)){let n=t[r],o=e[r];n&&typeof n=="object"&&!Array.isArray(n)&&o&&typeof o=="object"&&!Array.isArray(o)?Ue(o,n):X(e,r,n)}}function je(e){let t=[],r=e.replace(/\[([^\]]*)\]/g,".$1");for(let n of r.split("."))n.length&&t.push(n);return t}function Nt(e,t,r){let n=t.length-1;for(let s=0;s<n;s++){let i=t[s];if(i==="*"){let u=t.slice(s+1);if(Array.isArray(e))for(let f=0;f<e.length;f++)Nt(e[f],u,r);return}let c=e[i];(c==null||typeof c!="object")&&(c=/^\d+$/.test(t[s+1])?[]:{},X(e,i,c)),e=c}let o=t[n];if(o==="*"){if(Array.isArray(e))for(let s=0;s<e.length;s++)X(e,s,It(r,e[s]));return}X(e,o,It(r,e[o]))}function De(e,t,r){Nt(e,je(t),r)}function xr(e,t){let r=t[0];if(typeof r=="function"&&t.length===1){let n=r(e);n&&n!==e&&Ue(e,n);return}if(Array.isArray(r)&&t.length===1){for(let n of r)Array.isArray(n)&&De(e,n[0],n[1]);return}if(r&&typeof r=="object"&&!Array.isArray(r)&&t.length===1){Ue(e,r);return}if(Array.isArray(t[1])&&t.length>=3){De(e,`${r}.${t[1].join(".")}`,t[2]);return}De(e,String(r),t[1])}function Be(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Be);let t={};for(let r of Object.keys(e))t[r]=Be(e[r]);return t}function L(e,t){let r=e;for(let n of je(t)){if(r==null)return;r=r[n]}return r}var _=class{constructor(t,r={immutable:!0}){this.options=r;this.root=t,this.set=((...n)=>(0,p.batch)(()=>xr(this.root,n)))}get state(){return he(this.root)}get proxy(){return he(this.root)}get accessor(){return(()=>he(this.root))}unwrap(){return this.root}getNode(t){return this.root&&this.root[t]}get(t){if(t==null||t==="")return V(this.state);let r=this.state;for(let n of je(t)){if(r==null)return;r=r[n]}return V(r)}select(t){return(0,p.createMemo)(()=>t(this.state))}subscribe(t){return(0,p.createEffect)(()=>t(this.state))}watch(t,r){let n;return(0,p.createEffect)(()=>{let o=t(this.state);Object.is(o,n)||(r(o,n),n=o)})}reactive(t){return(0,p.createMemo)(()=>this.state[t])}produce(t){this.set((r=>{let n=Be(r);return t(n),n}))}reconcile(t,r={}){this.set(t)}push(t,...r){let n=L(this.root,t);this.set(t,n.concat(r))}pop(t){let r=L(this.root,t).slice(),n=r.pop();return this.set(t,r),n}shift(t){let r=L(this.root,t).slice(),n=r.shift();return this.set(t,r),n}splice(t,r,n,...o){let s=L(this.root,t).slice(),i=s.splice(r,n,...o);return this.set(t,s),i}insert(t,r,n){let o=L(this.root,t).slice();o.splice(r,0,n),this.set(t,o)}removeAt(t,r){let n=L(this.root,t).slice(),o=n.splice(r,1);return this.set(t,n),o}toObservable(){let[t]=(0,p.createSignal)(this.state);return t.toObservable()}dispose(){}},wr=["get","select","watch","subscribe","produce","reconcile","push","pop","shift","splice","insert","removeAt","unwrap","toObservable"];function qt(e,t){for(let r of wr)e[r]=t[r].bind(t);e.$=t.reactive.bind(t)}function Ne(e,t={immutable:!0}){let r=new _(e,t);return qt(r.set,r),[r.proxy,r.set]}function qe(e,t={}){return new _(e,{...t,immutable:!1})}function Mt(e,t={}){let r=new _(e(),t);return(0,p.createEffect)(()=>r.set(e())),r}function $t(e,t,r){return(0,p.createEffect)(()=>r(t(e)))}function Lt(e,t,r){return(0,p.createMemo)(()=>t(e),void 0,r)}function Vt(e,t={}){let r=new _(e,t),n=(()=>r.proxy);return qt(n,r),n}function V(e){if(e==null||typeof e!="object")return e;let t=e[J];return t!==void 0?t:e}function Me(e){return(0,p.untrack)(()=>V(e))}function Kt(e){return ve(e)}function Gt(e){return ve(e)?e[F]:null}function Wt(e){return e&&typeof e=="object"&&F in e?e[F]:null}function ve(e){return!!e&&typeof e=="object"&&(p.$PROXY in e||e.__proxy===!0)}function Ht(e){return e}var zt=Object.freeze({createStore:Ne,createMutableStore:qe,batch:p.batch,unwrap:V,untrackStore:Me});function $e(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map($e);let t={};for(let r of Object.keys(e))t[r]=$e(e[r]);return t}function Yt(e){return t=>{let r=$e(t);return e(r),r}}function Xt(e,t={}){return()=>e}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CDN entry: the full reactive API as a browser global.
3
+ *
4
+ * <script src="https://.../@fluixi/reactive/reactive.global.js"></script>
5
+ * const [count, setCount] = Fluixi.createSignal(0); // window.Fluixi.*
6
+ *
7
+ * Everything the `@fluixi/reactive` entry exposes (signal + store + observable),
8
+ * running on the TC39 graph.
9
+ */
10
+ export * from '../lib/index.js';
11
+ //# sourceMappingURL=reactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../../src/cdn/reactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var Fluixi=(()=>{var Oe=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var mt=Object.getOwnPropertyNames;var At=Object.prototype.hasOwnProperty;var wt=(e,r)=>{for(var t in r)Oe(e,t,{get:r[t],enumerable:!0})},St=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of mt(r))!At.call(e,o)&&o!==t&&Oe(e,o,{get:()=>r[o],enumerable:!(n=vt(r,o))||n.enumerable});return e};var Tt=e=>St(Oe({},"__esModule",{value:!0}),e);var fn={};wt(fn,{$NAME:()=>et,$NODE:()=>E,$PROXY:()=>qt,$RAW:()=>Q,$SELF:()=>Ae,$SIGNAL:()=>Nt,$STORE:()=>rt,$TRACK:()=>we,Observable:()=>F,SafeSubscriber:()=>ne,Signal:()=>Fr,Store:()=>k,StoreAPI:()=>yt,Subject:()=>ke,Subscriber:()=>D,Subscription:()=>I,SuspenseContext:()=>ge,__DEV__:()=>le,batch:()=>S,createComputed:()=>pr,createComputedStore:()=>st,createContext:()=>q,createDebounce:()=>_r,createDeferred:()=>jr,createEffect:()=>$,createErrorBoundary:()=>Ir,createMemo:()=>A,createMutableStore:()=>He,createRenderEffect:()=>dr,createResource:()=>$r,createRoot:()=>P,createSelector:()=>kr,createSignal:()=>d,createStore:()=>Ge,createStoreEffect:()=>at,createStoreMemo:()=>ut,createSuspenseBoundary:()=>Er,flush:()=>hr,getNode:()=>ct,getOwner:()=>H,getServerData:()=>pe,getStoreNode:()=>pt,indexArray:()=>Ct,isComponent:()=>mr,isMemo:()=>br,isProvider:()=>wr,isResource:()=>vr,isSignal:()=>fe,isStore:()=>ft,isStoreProxy:()=>Te,isSuspense:()=>Ar,keyArray:()=>Rt,makeArrayFlat:()=>Re,mapArray:()=>Et,modifiable:()=>dt,nextResourceId:()=>de,on:()=>gr,onCleanup:()=>m,operate:()=>Ot,produceUtil:()=>ht,provide:()=>U,provideErrorBoundary:()=>Dr,provideSuspense:()=>Rr,readChildren:()=>Pr,reconcileUtil:()=>gt,reportResourceData:()=>ye,runWithOwner:()=>B,setOwner:()=>Pe,setResourceDataSink:()=>xr,setResourceIdSource:()=>Or,setResourceTracker:()=>Sr,setServerDataGetter:()=>Tr,startTransition:()=>Ee,trackResourcePromise:()=>ce,untrack:()=>T,untrackStore:()=>Je,unwrap:()=>V,useContext:()=>ir,useTransition:()=>yr,wrap:()=>lt});function xe(e){return typeof e=="function"&&!Qe(e)}var er=e=>e==null||Array.isArray(e)||typeof e=="function"||e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof Error?!1:typeof e=="object";function Qe(e){return typeof e=="function"&&/^class\s/.test(Function.prototype.toString.call(e))}var I=class e{constructor(r){this._closed=!1;this._parentOrParents=null;this._subscriptions=null;r&&(this._subscriptions=[r])}get closed(){return this._closed}unsubscribe(){if(this._closed)return;this._closed=!0;let{_parentOrParents:r,_subscriptions:t}=this;if(r instanceof e)r.remove(this);else if(r!==null)for(let n of r)n.remove(this);if(t){for(let n of t)if(xe(n)&&!(n instanceof e))try{n()}catch(o){console.error("Error in unsubscribe function:",o)}else if(er(n)&&typeof n.unsubscribe=="function")try{n.unsubscribe()}catch(o){console.error("Error unsubscribing child:",o)}this._subscriptions=null}}add(r){if(!r||r===this)return this;if(r.closed)return this;let{_closed:t,_subscriptions:n}=this;if(t){if(xe(r))try{r()}catch(o){console.error("Error in unsubscribe function:",o)}else if(r.unsubscribe)try{r.unsubscribe()}catch(o){console.error("Error unsubscribing:",o)}return this}return n||(this._subscriptions=[]),this._subscriptions.push(r),r instanceof e&&r._addParent(this),this}remove(r){let{_subscriptions:t}=this;if(!t)return;let n=t.indexOf(r);n!==-1&&(t.splice(n,1),r._removeParent(this))}_addParent(r){let{_parentOrParents:t}=this;t?Array.isArray(t)?t.push(r):this._parentOrParents=[t,r]:this._parentOrParents=r}_removeParent(r){let{_parentOrParents:t}=this;if(t===r)this._parentOrParents=null;else if(Array.isArray(t)){let n=t.indexOf(r);n!==-1&&(t.splice(n,1),t.length===1&&(this._parentOrParents=t[0]))}}};var D=class extends I{constructor(t,n,o){super();this.isStopped=!1;let i;t?typeof t=="object"?i=t:i={next:t,error:n,complete:o}:i={},this.destination=i}next(t){if(!this.isStopped&&this.destination.next)try{this.destination.next(t)}catch(n){this.error(n)}}error(t){if(!this.isStopped){if(this.isStopped=!0,this.destination.error)try{this.destination.error(t)}catch(n){throw n}else throw t;this.unsubscribe()}}complete(){if(!this.isStopped){if(this.isStopped=!0,this.destination.complete)try{this.destination.complete()}catch(t){this.error(t);return}this.unsubscribe()}}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}},ne=class extends D{constructor(t,n,o,i){super(t,n,o);this._isUnsubscribing=!1;this._parentSubscriber=null;this._parentSubscriber=i||null}next(t){if(!this.isStopped&&!this._isUnsubscribing)try{super.next(t)}catch(n){this.error(n)}}error(t){if(!this.isStopped&&!this._isUnsubscribing){this._isUnsubscribing=!0;try{super.error(t)}finally{this._isUnsubscribing=!1}}}complete(){if(!this.isStopped&&!this._isUnsubscribing){this._isUnsubscribing=!0;try{super.complete()}finally{this._isUnsubscribing=!1}}}unsubscribe(){this.closed||(this._isUnsubscribing=!0,super.unsubscribe(),this._isUnsubscribing=!1)}};function Ot(e){return new D(e.next,e.error,e.complete)}var F=class extends I{constructor(r){if(super(),r)this._subscribe=r;else throw new TypeError("Observable constructor requires a subscribe function")}subscribe(r,t,n){let o;r instanceof D?o=r:o=new ne(r,t,n);let{_subscribe:i}=this;try{let s=i.call(this,o);s&&(typeof s=="function"||typeof s.unsubscribe=="function")&&o.add(s)}catch(s){o.error(s)}return o}pipe(...r){return r.length===0?this:r.reduce((t,n)=>n(t),this)}toPromise(){return new Promise((r,t)=>{let n;this.subscribe({next:o=>n=o,error:t,complete:()=>r(n)})})}};var ke=class extends F{constructor(){super(t=>{if(this.closed)throw new Error("Subject has been closed");if(this.hasError)t.error(this.thrownError);else if(this.isStopped)t.complete();else return this.observers.push(t),()=>{let n=this.observers.indexOf(t);n!==-1&&this.observers.splice(n,1)}});this.observers=[];this.isStopped=!1;this.hasError=!1;this.thrownError=null}next(t){if(this.isStopped)return;let{observers:n}=this,o=n.length,i=n.slice();for(let s=0;s<o;s++)i[s].next?.(t)}error(t){if(this.isStopped)return;this.hasError=!0,this.thrownError=t,this.isStopped=!0;let{observers:n}=this;this.observers=[];let o=n.length,i=n.slice();for(let s=0;s<o;s++)i[s].error?.(t)}complete(){if(this.isStopped)return;this.isStopped=!0;let{observers:t}=this;this.observers=[];let n=t.length,o=t.slice();for(let i=0;i<n;i++)o[i].complete?.()}unsubscribe(){this.isStopped=!0,this.observers=[]}asObservable(){return new F(n=>this.subscribe(n))}};var xt="__fluixi_signal_next_state__",kt=e=>{typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e)},a=globalThis[xt]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:kt,onSuspend:null,onError:null};var rr=0,tr=1,z=2,oe=class{constructor(){this.observers=null;this.watchers=null;this.version=0}updateIfNecessary(){}track(){if(a.untracked)return;let r=a.consumer;r&&((this.observers??=new Set).add(r),(r.sources??=new Set).add(this))}},M=class extends oe{constructor(r,t){super(),this._value=r,this._equals=t?.equals===!1?()=>!1:t?.equals??Object.is}get(){return this.track(),this._value}set(r){if(!this._equals(this._value,r)){if(this._value=r,this.version++,this.observers)for(let t of[...this.observers])t.markDirty(z);je(this)}}peek(){return this._value}},x=class extends oe{constructor(t,n){super();this._threw=!1;this._initialized=!1;this.state=z;this.sources=null;this._fn=t,this._equals=n?.equals===!1?()=>!1:n?.equals??Object.is}get(){if(a.consumer===this)throw new Error("Signal.Computed cannot read itself");if(this.track(),this.updateIfNecessary(),this._threw)throw this._error;return this._value}updateIfNecessary(){if(this.state===tr&&this.sources){for(let t of this.sources)if(t.updateIfNecessary(),this.state===z)break}(this.state===z||!this._initialized)&&this.recompute(),this.state=rr}recompute(){if(this.sources){for(let u of this.sources)u.observers?.delete(this);this.sources.clear()}let t=a.consumer,n=a.untracked;a.consumer=this,a.untracked=!1;let o,i=!1,s;try{o=this._fn()}catch(u){i=!0,s=u,o=this._value}finally{a.consumer=t,a.untracked=n}let f=!this._initialized||this._threw!==i||(i?s!==this._error:!this._equals(this._value,o));if(this._initialized=!0,this._threw=i,this._error=s,this._value=o,f){if(this.version++,this.observers)for(let u of[...this.observers])u.markDirty(z);je(this)}}markDirty(t){if(this.state>=t)return;let n=this.state===rr;if(this.state=t,n){if(this.observers)for(let o of[...this.observers])o.markDirty(tr);je(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function je(e){if(e.watchers)for(let r of[...e.watchers])r._notify(e)}var N=class{constructor(r){this._watched=new Set;this._pending=new Set;this._notifyFn=r}watch(...r){for(let t of r)this._watched.add(t),(t.watchers??=new Set).add(this)}unwatch(...r){for(let t of r)this._watched.delete(t),t.watchers?.delete(this),this._pending.delete(t)}getPending(){let r=[...this._pending];return this._pending.clear(),r}_notify(r){if(!this._watched.has(r)||this._pending.has(r))return;let t=this._pending.size===0;this._pending.add(r),t&&this._notifyFn()}};function G(e){if(a.untracked)return e();a.untracked=!0;try{return e()}finally{a.untracked=!1}}function nr(){return a.consumer}function or(e){return!!(e.observers&&e.observers.size)||!!(e.watchers&&e.watchers.size)}function se(e){return{cleanups:null,owned:null,parent:e,contexts:null}}function q(e){let r=Symbol("context");return{id:r,defaultValue:e,Provider:n=>{let o=a.owner,i=se(o);(i.contexts=new Map).set(r,n.value),o&&(o.owned??=[]).push(i),a.owner=i;try{return n.children}finally{a.owner=o}}}}function ir(e){let r=a.owner;for(;r;){if(r.contexts&&r.contexts.has(e.id))return r.contexts.get(e.id);r=r.parent}return e.defaultValue}function ae(e,r){let t=e;for(;t;){if(t.contexts&&t.contexts.has(r.id))return t.contexts.get(r.id);t=t.parent}return r.defaultValue}function U(e,r,t){let n=se(a.owner);(n.contexts=new Map).set(e.id,r),a.owner&&(a.owner.owned??=[]).push(n);let o=a.owner;a.owner=n;try{return t()}finally{a.owner=o}}function sr(e){a.onSuspend=e}function ar(e){return a.onSuspend?(a.onSuspend(e,a.owner),!0):!1}function ur(e){a.onError=e}function H(){return a.owner}function Pe(e){let r=a.owner;return a.owner=e,r}function B(e,r){let t=a.owner;a.owner=e;try{return r()}finally{a.owner=t}}function m(e){a.owner&&(a.owner.cleanups??=[]).push(e)}function ie(e){if(e.owned){for(let r=e.owned.length-1;r>=0;r--)ie(e.owned[r]);e.owned=null}if(e.cleanups){for(let r=e.cleanups.length-1;r>=0;r--)e.cleanups[r]();e.cleanups=null}}function P(e){let r=se(a.owner);a.owner&&(a.owner.owned??=[]).push(r);let t=a.owner;a.owner=r;try{return e(()=>ie(r))}finally{a.owner=t}}function lr(e){a.hostSchedule=e??(r=>{Promise.resolve().then(r)})}function jt(e){e.queued||(e.queued=!0,a.queue.push(e),!a.scheduled&&a.batchDepth===0&&(a.scheduled=!0,a.hostSchedule(J)))}function J(){if(a.scheduled=!1,a.flushing)return;a.flushing=!0;let e=0;try{for(;a.queue.length;){if(++e>1e5)throw new Error("[fluixi] effect flush did not settle (cycle?)");let r=a.queue;a.queue=[];for(let t of r)t.queued=!1,t.disposed||t.run()}}finally{a.flushing=!1}}function fr(){a.batchDepth===0&&J()}function $e(e){a.batchDepth++;try{return e()}finally{--a.batchDepth===0&&J()}}var _e=class{constructor(r){this.queued=!1;this.disposed=!1;this.owner=se(a.owner),a.owner&&(a.owner.cleanups??=[]).push(()=>this.dispose()),this.computed=new x(()=>{ie(this.owner),B(this.owner,()=>{let t=r();typeof t=="function"&&(this.owner.cleanups??=[]).push(t)})}),this.watcher=new N(()=>jt(this)),this.run(),this.watcher.watch(this.computed)}run(){if(!this.disposed){this.watcher.getPending();try{this.computed.get()}catch(r){if(r&&typeof r.then=="function"&&a.onSuspend){a.onSuspend(r,this.owner);return}if(a.onError&&a.onError(r,this.owner))return;throw r}}}dispose(){this.disposed||(this.disposed=!0,this.watcher.unwatch(this.computed),ie(this.owner))}};function ue(e){let r=new _e(e);return()=>r.dispose()}function _t(e){return!!e&&typeof e.then=="function"}lr(()=>{});var cr=Symbol.for("signal"),Pt=Symbol.for("memo"),$t=Symbol.for("signal-node");function d(e,r){let t=new M(e,{equals:r?.equals}),n=(()=>t.get()),o=(i=>{let s=typeof i=="function"?i(t.peek()):i;return t.set(s),fr(),s});return Object.defineProperty(n,cr,{value:!0,enumerable:!0}),Object.defineProperty(n,$t,{value:{get value(){return t.peek()},get version(){return t.version}},enumerable:!1}),[n,o]}function A(e,r,t){let n=r,o=H(),i=new x(()=>B(o,()=>{try{return n=e(n)}catch(f){if(_t(f))return ar(f),n;throw f}}),{equals:t?.equals}),s=(()=>i.get());return Object.defineProperty(s,cr,{value:!0,enumerable:!0}),Object.defineProperty(s,Pt,{value:!0,enumerable:!0}),s}function $(e,r){let t=r;return ue(()=>{t=e(t)})}function pr(e,r){let t=r;ue(()=>{t=e(t)})}function dr(e,r){let t=r;return ue(()=>{t=e(t)})}function S(e){return $e(e)}function T(e){return G(e)}function Ee(e){return $e(e),Promise.resolve()}function yr(){return[()=>!1,Ee]}function hr(){return J(),Promise.resolve()}function gr(e,r,t){let n=Array.isArray(e),o,i=t?.defer??!1;return s=>{let f=n?e.map(p=>p()):e();if(i){i=!1,o=f;return}let u=G(()=>r(f,o,s));return o=f,u}}function Et(e,r,t){let n=[];return m(()=>{for(let o of n)o.dispose();n=[]}),A(()=>{let o=e()||[];return T(()=>{if(o.length===0){for(let u of n)u.dispose();return n=[],t?.fallback?t.fallback():[]}let i=new Map;for(let u of n)i.has(u.item)||i.set(u.item,u);let s=[],f=new Set;for(let u=0;u<o.length;u++){let p=o[u],y=i.get(p);if(y&&!f.has(y))y.setIndex(u),s.push(y),f.add(y);else{let c,h,g;P(b=>{g=b;let[R,L]=d(u);h=L,c=r(p,R)});let w={item:p,rendered:c,dispose:g,setIndex:h};s.push(w),f.add(w)}}for(let u of n)f.has(u)||u.dispose();return n=s,s.map(u=>u.rendered)})})}function Rt(e,r,t,n){let o=[],i=[];return m(()=>{for(let s of i)s.dispose();o=[],i=[]}),A(()=>{let s=e()||[];return T(()=>{if(s.length===0){for(let c of i)c.dispose();return o=[],i=[],n?.fallback?n.fallback():[]}let f=new Map;for(let c=0;c<o.length;c++)f.set(o[c],i[c]);let u=[],p=[],y=new Set;for(let c=0;c<s.length;c++){let h=r(s[c]),g=f.get(h);if(g&&!y.has(h))g.setIndex(c),u.push(g);else{let w,b,R;P(L=>{R=L;let[j,K]=d(c);b=K;let ee=A(C=>{let O=(e()||[])[j()];return O??C},s[c]);w=t(ee,j)}),u.push({rendered:w,dispose:R,setIndex:b})}p.push(h),y.add(h)}for(let[c,h]of f)y.has(c)||h.dispose();return o=p,i=u,u.map(c=>c.rendered)})})}function Ct(e,r,t){let n=[];return m(()=>{for(let o of n)o.dispose();n=[]}),A(()=>{let o=e()||[];return T(()=>{if(o.length===0){for(let u of n)u.dispose();return n=[],t?.fallback?t.fallback():[]}let i=n.length,s=o.length;for(let u=i;u<s;u++){let p,y,c,h=o[u];P(g=>{c=g;let[w,b]=d(h);y=b,p=r(w,u)}),n.push({rendered:p,setItem:y,dispose:c})}for(let u=s;u<i;u++)n[u].dispose();s<i&&(n=n.slice(0,s));let f=Math.min(i,s);for(let u=0;u<f;u++)n[u].setItem(o[u]);return n.map(u=>u.rendered)})})}var le=!1,It=Symbol.for("signal"),Dt=Symbol.for("memo"),Ft=Symbol.for("resource");function fe(e){return typeof e=="function"&&e[It]===!0}function br(e){return typeof e=="function"&&e[Dt]===!0}function vr(e){return typeof e=="function"&&e[Ft]===!0}function mr(e){return typeof e=="function"&&e[Symbol.for("fluixi-component")]===!0}function Ar(e){return typeof e=="function"&&e[Symbol.for("fluixi-suspense")]===!0}function wr(e){return typeof e=="function"&&e[Symbol.for("fluixi-provider")]===!0}function Re(e){return Array.isArray(e)?e.length===2&&e[1]===" "?Array.isArray(e[0])?Re(e[0]):(typeof e[0]=="function",e[0]):e.length===1&&typeof e[0]=="function"?e[0]:e:e}var Ce=null;function Sr(e){Ce=e}function ce(e){Ce&&Ce(e)}var Ie=null;function Tr(e){Ie=e}function pe(e){return Ie?Ie(e):void 0}var De=null;function Or(e){De=e}function de(){return De?De():void 0}var Fe=null;function xr(e){Fe=e}function ye(e,r){Fe&&Fe(e,r)}function kr(e,r=(t,n)=>t===n){let t=new Map;return $(()=>{let n=e();for(let[o,i]of t){let[s,f]=i,u=r(o,n);s()!==u&&f(u)}}),n=>{let o=t.get(n);if(!o){let[i,s]=d(!1);o=[i,s],t.set(n,o);let f=e();s(r(n,f))}return o[0]()}}function jr(e,r){let[t,n]=d(e(),r);return $(()=>{let o=e();r?.timeoutMs?setTimeout(()=>n(()=>o),r.timeoutMs):typeof requestIdleCallback=="function"?requestIdleCallback(()=>n(()=>o)):Promise.resolve().then(()=>n(()=>o))}),t}function _r(e,r){let t,n=(...o)=>{t!==void 0&&clearTimeout(t),t=setTimeout(()=>{if(t=void 0,o.length>0){let i=o[o.length-1];typeof i=="object"&&i&&!i.tagName&&i.target&&i.target.tagName&&(i=i.target),i&&typeof i=="object"&&i.tagName&&(i.tagName.toLowerCase()==="input"||i.tagName.toLowerCase()==="textarea")&&i.focus()}e(...o)},r)};return m(()=>{t!==void 0&&clearTimeout(t)}),n}function he(e){if(typeof e=="function"&&!e.length){let r=e();return fe(r)?r:he(r)}if(Array.isArray(e)){let r=[];for(let t=0;t<e.length;t++){let n=he(e[t]);Array.isArray(n)?r.push.apply(r,n):r.push(n)}return r}return e}function Pr(e){let r=A(e);return A(()=>he(r()))}function Mt(e){return!!e&&typeof e.then=="function"}var Me=Symbol();function $r(e,r,t={}){let n,o;typeof r=="function"?(n=typeof e=="function"?e:()=>e,o=r):(n=()=>!0,o=e,r&&typeof r=="object"&&(t=r));let i=de(),s=i!==void 0?pe(i):void 0,f=s!==void 0,[u,p]=d(s!==void 0?s.value:t.initialValue,{equals:!1}),[y,c]=d(void 0,{equals:!1}),[h,g]=d(s!==void 0||t.initialValue!==void 0?"ready":"unresolved",{equals:!1}),[w,b]=d(void 0,{equals:!1}),[R,L]=d(void 0,{equals:!1}),j=Me,K=!1;$(()=>{let v=n();if(R(),v===!1||v===null||v===void 0){j=Me,S(()=>{g("unresolved"),b(void 0),c(void 0)});return}let O=K;if(K=!1,j!==Me&&v===j&&!O)return;if(j=v,f){f=!1;return}let re=!1;m(()=>re=!0);let Ye=T(h),bt=T(u),Xe=Ye==="ready"||Ye==="refreshing";S(()=>{g(Xe?"refreshing":"pending"),c(void 0)});try{let _=o(v,{value:bt,refetching:Xe});Mt(_)?(b(_),ce(_),_.then(te=>{re||(i!==void 0&&ye(i,te),S(()=>{p(()=>te),g("ready"),b(void 0)}))},te=>{re||S(()=>{c(te),g("errored"),b(void 0)})})):S(()=>{p(()=>_),g("ready"),b(void 0)})}catch(_){if(re)return;S(()=>{c(_),g("errored"),b(void 0)})}});let ee=()=>{let v=h();return v==="pending"||v==="refreshing"},C=(()=>{let v=y();if(v)throw v;if(ee()){let O=w();if(O)throw O}return u()});return Object.defineProperties(C,{state:{get:h},loading:{get:ee},error:{get:y},latest:{get:u}}),Object.defineProperty(C,Symbol.for("resource"),{value:!0,enumerable:!0}),Object.defineProperty(C,Symbol.for("signal"),{value:!0,enumerable:!0}),[C,{mutate:p,refetch:()=>{K=!0,L(void 0)}}]}var ge=q();sr((e,r)=>{let t=ae(r,ge);t&&(t.increment(),e.finally(()=>t.decrement()))});function Er(){let[e,r]=d(0),t=0;return{increment:()=>r(t+=1),decrement:()=>r(t-=1),inFallback:()=>e()>0}}function Rr(e,r){return U(ge,e,r)}var Cr=q();ur((e,r)=>{let t=ae(r,Cr);return t?(t.setError(e),!0):!1});function Ir(){let[e,r]=d(void 0,{equals:!1});return{error:e,reset:()=>r(()=>{}),setError:n=>r(()=>n)}}function Dr(e,r){return U(Cr,e,r)}var Fr={State:M,Computed:x,subtle:{Watcher:N,untrack:G,currentComputed:nr,hasSinks:or}};var Nt=Symbol.for("signal"),qt=Symbol.for("fluixi-proxy");var Ut="__fluixi_signal_next_state__",Bt=e=>{typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e)},l=globalThis[Ut]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:Bt,onSuspend:null,onError:null},Mr=0,Nr=1,Z=2,qr=class{constructor(){this.observers=null,this.watchers=null,this.version=0}updateIfNecessary(){}track(){if(l.untracked)return;let e=l.consumer;e&&((this.observers??=new Set).add(e),(e.sources??=new Set).add(this))}},Wt=class extends qr{constructor(e,r){super(),this._value=e,this._equals=r?.equals===!1?()=>!1:r?.equals??Object.is}get(){return this.track(),this._value}set(e){if(!this._equals(this._value,e)){if(this._value=e,this.version++,this.observers)for(let r of[...this.observers])r.markDirty(Z);Ne(this)}}peek(){return this._value}},Ur=class extends qr{constructor(e,r){super(),this._threw=!1,this._initialized=!1,this.state=Z,this.sources=null,this._fn=e,this._equals=r?.equals===!1?()=>!1:r?.equals??Object.is}get(){if(l.consumer===this)throw new Error("Signal.Computed cannot read itself");if(this.track(),this.updateIfNecessary(),this._threw)throw this._error;return this._value}updateIfNecessary(){if(this.state===Nr&&this.sources){for(let e of this.sources)if(e.updateIfNecessary(),this.state===Z)break}(this.state===Z||!this._initialized)&&this.recompute(),this.state=Mr}recompute(){if(this.sources){for(let s of this.sources)s.observers?.delete(this);this.sources.clear()}let e=l.consumer,r=l.untracked;l.consumer=this,l.untracked=!1;let t,n=!1,o;try{t=this._fn()}catch(s){n=!0,o=s,t=this._value}finally{l.consumer=e,l.untracked=r}let i=!this._initialized||this._threw!==n||(n?o!==this._error:!this._equals(this._value,t));if(this._initialized=!0,this._threw=n,this._error=o,this._value=t,i){if(this.version++,this.observers)for(let s of[...this.observers])s.markDirty(Z);Ne(this)}}markDirty(e){if(this.state>=e)return;let r=this.state===Mr;if(this.state=e,r){if(this.observers)for(let t of[...this.observers])t.markDirty(Nr);Ne(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function Ne(e){if(e.watchers)for(let r of[...e.watchers])r._notify(e)}var Vt=class{constructor(e){this._watched=new Set,this._pending=new Set,this._notifyFn=e}watch(...e){for(let r of e)this._watched.add(r),(r.watchers??=new Set).add(this)}unwatch(...e){for(let r of e)this._watched.delete(r),r.watchers?.delete(this),this._pending.delete(r)}getPending(){let e=[...this._pending];return this._pending.clear(),e}_notify(e){if(!this._watched.has(e)||this._pending.has(e))return;let r=this._pending.size===0;this._pending.add(e),r&&this._notifyFn()}};function Lt(e){if(l.untracked)return e();l.untracked=!0;try{return e()}finally{l.untracked=!1}}function Br(e){return{cleanups:null,owned:null,parent:e,contexts:null}}function Wr(e){let r=Symbol("context");return{id:r,defaultValue:e,Provider:t=>{let n=l.owner,o=Br(n);(o.contexts=new Map).set(r,t.value),n&&(n.owned??=[]).push(o),l.owner=o;try{return t.children}finally{l.owner=n}}}}function Vr(e,r){let t=e;for(;t;){if(t.contexts&&t.contexts.has(r.id))return t.contexts.get(r.id);t=t.parent}return r.defaultValue}function Kt(e){l.onSuspend=e}function zt(e){return l.onSuspend?(l.onSuspend(e,l.owner),!0):!1}function Gt(e){l.onError=e}function Ht(){return l.owner}function Lr(e,r){let t=l.owner;l.owner=e;try{return r()}finally{l.owner=t}}function qe(e){if(e.owned){for(let r=e.owned.length-1;r>=0;r--)qe(e.owned[r]);e.owned=null}if(e.cleanups){for(let r=e.cleanups.length-1;r>=0;r--)e.cleanups[r]();e.cleanups=null}}function Jt(e){l.hostSchedule=e??(r=>{Promise.resolve().then(r)})}function Zt(e){e.queued||(e.queued=!0,l.queue.push(e),!l.scheduled&&l.batchDepth===0&&(l.scheduled=!0,l.hostSchedule(Ue)))}function Ue(){if(l.scheduled=!1,l.flushing)return;l.flushing=!0;let e=0;try{for(;l.queue.length;){if(++e>1e5)throw new Error("[fluixi] effect flush did not settle (cycle?)");let r=l.queue;l.queue=[];for(let t of r)t.queued=!1,t.disposed||t.run()}}finally{l.flushing=!1}}function Yt(){l.batchDepth===0&&Ue()}function Xt(e){l.batchDepth++;try{return e()}finally{--l.batchDepth===0&&Ue()}}var Qt=class{constructor(e){this.queued=!1,this.disposed=!1,this.owner=Br(l.owner),l.owner&&(l.owner.cleanups??=[]).push(()=>this.dispose()),this.computed=new Ur(()=>{qe(this.owner),Lr(this.owner,()=>{let r=e();typeof r=="function"&&(this.owner.cleanups??=[]).push(r)})}),this.watcher=new Vt(()=>Zt(this)),this.run(),this.watcher.watch(this.computed)}run(){if(!this.disposed){this.watcher.getPending();try{this.computed.get()}catch(e){if(e&&typeof e.then=="function"&&l.onSuspend){l.onSuspend(e,this.owner);return}if(l.onError&&l.onError(e,this.owner))return;throw e}}}dispose(){this.disposed||(this.disposed=!0,this.watcher.unwatch(this.computed),qe(this.owner))}};function en(e){let r=new Qt(e);return()=>r.dispose()}function rn(e){return!!e&&typeof e.then=="function"}Jt(()=>{});var Kr=Symbol.for("signal"),tn=Symbol.for("memo"),nn=Symbol.for("signal-node");function Be(e,r){let t=new Wt(e,{equals:r?.equals}),n=(()=>t.get()),o=(i=>{let s=typeof i=="function"?i(t.peek()):i;return t.set(s),Yt(),s});return Object.defineProperty(n,Kr,{value:!0,enumerable:!0}),Object.defineProperty(n,nn,{value:{get value(){return t.peek()},get version(){return t.version}},enumerable:!1}),[n,o]}function be(e,r,t){let n=r,o=Ht(),i=new Ur(()=>Lr(o,()=>{try{return n=e(n)}catch(f){if(rn(f))return zt(f),n;throw f}}),{equals:t?.equals}),s=(()=>i.get());return Object.defineProperty(s,Kr,{value:!0,enumerable:!0}),Object.defineProperty(s,tn,{value:!0,enumerable:!0}),s}function Y(e,r){let t=r;return en(()=>{t=e(t)})}function We(e){return Xt(e)}function zr(e){return Lt(e)}var on=Wr();Kt((e,r)=>{let t=Vr(r,on);t&&(t.increment(),e.finally(()=>t.decrement()))});var sn=Wr();Gt((e,r)=>{let t=Vr(r,sn);return t?(t.setError(e),!0):!1});var ve=Symbol.for("fluixi-proxy");var Q=Symbol("store-raw"),E=Symbol("store-node"),Gr=Symbol("store-has"),Ae=Symbol("store-self"),we=Symbol("store-track"),et=Symbol("store-name"),rt=Symbol("store-store"),Hr=new WeakMap,Jr=new WeakMap;function tt(e){let[r,t]=Be(e),n=r;return n.$=t,n}function Se(e){let r=Hr.get(e);return r||Hr.set(e,r={keys:new Map}),r}function Zr(e,r,t){let n=e.keys.get(r);return n||e.keys.set(r,n=tt(t)),n}function Yr(e){let r=Se(e);(r.all||(r.all=tt()))()}function Xr(e,r){e.$(typeof r=="function"?()=>r:r)}function nt(e){if(e==null||typeof e!="object")return!1;if(Array.isArray(e))return!0;let r=Object.getPrototypeOf(e);return r===Object.prototype||r===null}function me(e){if(!nt(e))return e;let r=Jr.get(e);if(r)return r;let t=new Proxy(e,an);return Jr.set(e,t),t}var an={get(e,r,t){if(r===Q||r===E)return e;if(r===ve)return t;if(r===Gr)return s=>s in e;if(r==="__proxy")return!0;if(r===we||r===Ae)return Yr(e),t;let n=e[r];if(typeof n=="function"&&!Object.prototype.hasOwnProperty.call(e,r))return n;let o=Object.getOwnPropertyDescriptor(e,r);if(o&&o.get)return o.get.call(t);let i=Zr(Se(e),r,n)();return nt(i)?me(i):i},set(){return!0},deleteProperty(e,r){return r in e&&X(e,r,void 0),!0},has(e,r){return r===Q||r===ve||r===E||r===Gr||r===Ae||r===we?!0:(Zr(Se(e),r,e[r])(),r in e)},ownKeys(e){return Yr(e),Reflect.ownKeys(e)},getOwnPropertyDescriptor(e,r){return Reflect.getOwnPropertyDescriptor(e,r)}};function X(e,r,t){if(e[r]===t&&(t!==void 0||r in e))return;let o=Array.isArray(e),i=o?e.length:0;t===void 0?delete e[r]:e[r]=t;let s=Se(e),f=s.keys.get(r);if(f&&Xr(f,t),o&&e.length!==i){let u=s.keys.get("length");u&&Xr(u,e.length)}s.all&&s.all.$(void 0)}function Qr(e,r){return typeof e=="function"?e(r):e}function Le(e,r){for(let t of Object.keys(r)){let n=r[t],o=e[t];n&&typeof n=="object"&&!Array.isArray(n)&&o&&typeof o=="object"&&!Array.isArray(o)?Le(o,n):X(e,t,n)}}function ze(e){let r=[],t=e.replace(/\[([^\]]*)\]/g,".$1");for(let n of t.split("."))n.length&&r.push(n);return r}function ot(e,r,t){let n=r.length-1;for(let i=0;i<n;i++){let s=r[i];if(s==="*"){let u=r.slice(i+1);if(Array.isArray(e))for(let p=0;p<e.length;p++)ot(e[p],u,t);return}let f=e[s];(f==null||typeof f!="object")&&(f=/^\d+$/.test(r[i+1])?[]:{},X(e,s,f)),e=f}let o=r[n];if(o==="*"){if(Array.isArray(e))for(let i=0;i<e.length;i++)X(e,i,Qr(t,e[i]));return}X(e,o,Qr(t,e[o]))}function Ve(e,r,t){ot(e,ze(r),t)}function un(e,r){let t=r[0];if(typeof t=="function"&&r.length===1){let n=t(e);n&&n!==e&&Le(e,n);return}if(Array.isArray(t)&&r.length===1){for(let n of t)Array.isArray(n)&&Ve(e,n[0],n[1]);return}if(t&&typeof t=="object"&&!Array.isArray(t)&&r.length===1){Le(e,t);return}if(Array.isArray(r[1])&&r.length>=3){Ve(e,`${t}.${r[1].join(".")}`,r[2]);return}Ve(e,String(t),r[1])}function Ke(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Ke);let r={};for(let t of Object.keys(e))r[t]=Ke(e[t]);return r}function W(e,r){let t=e;for(let n of ze(r)){if(t==null)return;t=t[n]}return t}var k=class{constructor(r,t={immutable:!0}){this.options=t;this.root=r,this.set=((...n)=>We(()=>un(this.root,n)))}get state(){return me(this.root)}get proxy(){return me(this.root)}get accessor(){return(()=>me(this.root))}unwrap(){return this.root}getNode(r){return this.root&&this.root[r]}get(r){if(r==null||r==="")return V(this.state);let t=this.state;for(let n of ze(r)){if(t==null)return;t=t[n]}return V(t)}select(r){return be(()=>r(this.state))}subscribe(r){return Y(()=>r(this.state))}watch(r,t){let n;return Y(()=>{let o=r(this.state);Object.is(o,n)||(t(o,n),n=o)})}reactive(r){return be(()=>this.state[r])}produce(r){this.set((t=>{let n=Ke(t);return r(n),n}))}reconcile(r,t={}){this.set(r)}push(r,...t){let n=W(this.root,r);this.set(r,n.concat(t))}pop(r){let t=W(this.root,r).slice(),n=t.pop();return this.set(r,t),n}shift(r){let t=W(this.root,r).slice(),n=t.shift();return this.set(r,t),n}splice(r,t,n,...o){let i=W(this.root,r).slice(),s=i.splice(t,n,...o);return this.set(r,i),s}insert(r,t,n){let o=W(this.root,r).slice();o.splice(t,0,n),this.set(r,o)}removeAt(r,t){let n=W(this.root,r).slice(),o=n.splice(t,1);return this.set(r,n),o}toObservable(){let[r]=Be(this.state);return r.toObservable()}dispose(){}},ln=["get","select","watch","subscribe","produce","reconcile","push","pop","shift","splice","insert","removeAt","unwrap","toObservable"];function it(e,r){for(let t of ln)e[t]=r[t].bind(r);e.$=r.reactive.bind(r)}function Ge(e,r={immutable:!0}){let t=new k(e,r);return it(t.set,t),[t.proxy,t.set]}function He(e,r={}){return new k(e,{...r,immutable:!1})}function st(e,r={}){let t=new k(e(),r);return Y(()=>t.set(e())),t}function at(e,r,t){return Y(()=>t(r(e)))}function ut(e,r,t){return be(()=>r(e),void 0,t)}function lt(e,r={}){let t=new k(e,r),n=(()=>t.proxy);return it(n,t),n}function V(e){if(e==null||typeof e!="object")return e;let r=e[Q];return r!==void 0?r:e}function Je(e){return zr(()=>V(e))}function ft(e){return Te(e)}function ct(e){return Te(e)?e[E]:null}function pt(e){return e&&typeof e=="object"&&E in e?e[E]:null}function Te(e){return!!e&&typeof e=="object"&&(ve in e||e.__proxy===!0)}function dt(e){return e}var yt=Object.freeze({createStore:Ge,createMutableStore:He,batch:We,unwrap:V,untrackStore:Je});function Ze(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Ze);let r={};for(let t of Object.keys(e))r[t]=Ze(e[t]);return r}function ht(e){return r=>{let t=Ze(r);return e(t),t}}function gt(e,r={}){return()=>e}return Tt(fn);})();
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CDN entry: the full reactive API as a browser global.
3
+ *
4
+ * <script src="https://.../@fluixi/reactive/reactive.global.js"></script>
5
+ * const [count, setCount] = Fluixi.createSignal(0); // window.Fluixi.*
6
+ *
7
+ * Everything the `@fluixi/reactive` entry exposes (signal + store + observable),
8
+ * running on the TC39 graph.
9
+ */
10
+ export * from '../lib/index.js';
@@ -0,0 +1 @@
1
+ import{isObject as bt}from"@fluixi/utils/object";import{isFunction as je}from"@fluixi/utils/functions";var N=class e{constructor(t){this._closed=!1;this._parentOrParents=null;this._subscriptions=null;t&&(this._subscriptions=[t])}get closed(){return this._closed}unsubscribe(){if(this._closed)return;this._closed=!0;let{_parentOrParents:t,_subscriptions:r}=this;if(t instanceof e)t.remove(this);else if(t!==null)for(let n of t)n.remove(this);if(r){for(let n of r)if(je(n)&&!(n instanceof e))try{n()}catch(o){console.error("Error in unsubscribe function:",o)}else if(bt(n)&&typeof n.unsubscribe=="function")try{n.unsubscribe()}catch(o){console.error("Error unsubscribing child:",o)}this._subscriptions=null}}add(t){if(!t||t===this)return this;if(t.closed)return this;let{_closed:r,_subscriptions:n}=this;if(r){if(je(t))try{t()}catch(o){console.error("Error in unsubscribe function:",o)}else if(t.unsubscribe)try{t.unsubscribe()}catch(o){console.error("Error unsubscribing:",o)}return this}return n||(this._subscriptions=[]),this._subscriptions.push(t),t instanceof e&&t._addParent(this),this}remove(t){let{_subscriptions:r}=this;if(!r)return;let n=r.indexOf(t);n!==-1&&(r.splice(n,1),t._removeParent(this))}_addParent(t){let{_parentOrParents:r}=this;r?Array.isArray(r)?r.push(t):this._parentOrParents=[r,t]:this._parentOrParents=t}_removeParent(t){let{_parentOrParents:r}=this;if(r===t)this._parentOrParents=null;else if(Array.isArray(r)){let n=r.indexOf(t);n!==-1&&(r.splice(n,1),r.length===1&&(this._parentOrParents=r[0]))}}};var q=class extends N{constructor(r,n,o){super();this.isStopped=!1;let s;r?typeof r=="object"?s=r:s={next:r,error:n,complete:o}:s={},this.destination=s}next(r){if(!this.isStopped&&this.destination.next)try{this.destination.next(r)}catch(n){this.error(n)}}error(r){if(!this.isStopped){if(this.isStopped=!0,this.destination.error)try{this.destination.error(r)}catch(n){throw n}else throw r;this.unsubscribe()}}complete(){if(!this.isStopped){if(this.isStopped=!0,this.destination.complete)try{this.destination.complete()}catch(r){this.error(r);return}this.unsubscribe()}}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}},ce=class extends q{constructor(r,n,o,s){super(r,n,o);this._isUnsubscribing=!1;this._parentSubscriber=null;this._parentSubscriber=s||null}next(r){if(!this.isStopped&&!this._isUnsubscribing)try{super.next(r)}catch(n){this.error(n)}}error(r){if(!this.isStopped&&!this._isUnsubscribing){this._isUnsubscribing=!0;try{super.error(r)}finally{this._isUnsubscribing=!1}}}complete(){if(!this.isStopped&&!this._isUnsubscribing){this._isUnsubscribing=!0;try{super.complete()}finally{this._isUnsubscribing=!1}}}unsubscribe(){this.closed||(this._isUnsubscribing=!0,super.unsubscribe(),this._isUnsubscribing=!1)}};function vr(e){return new q(e.next,e.error,e.complete)}var M=class extends N{constructor(t){if(super(),t)this._subscribe=t;else throw new TypeError("Observable constructor requires a subscribe function")}subscribe(t,r,n){let o;t instanceof q?o=t:o=new ce(t,r,n);let{_subscribe:s}=this;try{let i=s.call(this,o);i&&(typeof i=="function"||typeof i.unsubscribe=="function")&&o.add(i)}catch(i){o.error(i)}return o}pipe(...t){return t.length===0?this:t.reduce((r,n)=>n(r),this)}toPromise(){return new Promise((t,r)=>{let n;this.subscribe({next:o=>n=o,error:r,complete:()=>t(n)})})}};var Ne=class extends M{constructor(){super(r=>{if(this.closed)throw new Error("Subject has been closed");if(this.hasError)r.error(this.thrownError);else if(this.isStopped)r.complete();else return this.observers.push(r),()=>{let n=this.observers.indexOf(r);n!==-1&&this.observers.splice(n,1)}});this.observers=[];this.isStopped=!1;this.hasError=!1;this.thrownError=null}next(r){if(this.isStopped)return;let{observers:n}=this,o=n.length,s=n.slice();for(let i=0;i<o;i++)s[i].next?.(r)}error(r){if(this.isStopped)return;this.hasError=!0,this.thrownError=r,this.isStopped=!0;let{observers:n}=this;this.observers=[];let o=n.length,s=n.slice();for(let i=0;i<o;i++)s[i].error?.(r)}complete(){if(this.isStopped)return;this.isStopped=!0;let{observers:r}=this;this.observers=[];let n=r.length,o=r.slice();for(let s=0;s<n;s++)o[s].complete?.()}unsubscribe(){this.isStopped=!0,this.observers=[]}asObservable(){return new M(n=>this.subscribe(n))}};var Tt="__fluixi_signal_next_state__",mt=e=>{typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e)},a=globalThis[Tt]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:mt,onSuspend:null,onError:null};var qe=0,Me=1,$=2,Q=class{constructor(){this.observers=null;this.watchers=null;this.version=0}updateIfNecessary(){}track(){if(a.untracked)return;let t=a.consumer;t&&((this.observers??=new Set).add(t),(t.sources??=new Set).add(this))}},P=class extends Q{constructor(t,r){super(),this._value=t,this._equals=r?.equals===!1?()=>!1:r?.equals??Object.is}get(){return this.track(),this._value}set(t){if(!this._equals(this._value,t)){if(this._value=t,this.version++,this.observers)for(let r of[...this.observers])r.markDirty($);le(this)}}peek(){return this._value}},w=class extends Q{constructor(r,n){super();this._threw=!1;this._initialized=!1;this.state=$;this.sources=null;this._fn=r,this._equals=n?.equals===!1?()=>!1:n?.equals??Object.is}get(){if(a.consumer===this)throw new Error("Signal.Computed cannot read itself");if(this.track(),this.updateIfNecessary(),this._threw)throw this._error;return this._value}updateIfNecessary(){if(this.state===Me&&this.sources){for(let r of this.sources)if(r.updateIfNecessary(),this.state===$)break}(this.state===$||!this._initialized)&&this.recompute(),this.state=qe}recompute(){if(this.sources){for(let u of this.sources)u.observers?.delete(this);this.sources.clear()}let r=a.consumer,n=a.untracked;a.consumer=this,a.untracked=!1;let o,s=!1,i;try{o=this._fn()}catch(u){s=!0,i=u,o=this._value}finally{a.consumer=r,a.untracked=n}let c=!this._initialized||this._threw!==s||(s?i!==this._error:!this._equals(this._value,o));if(this._initialized=!0,this._threw=s,this._error=i,this._value=o,c){if(this.version++,this.observers)for(let u of[...this.observers])u.markDirty($);le(this)}}markDirty(r){if(this.state>=r)return;let n=this.state===qe;if(this.state=r,n){if(this.observers)for(let o of[...this.observers])o.markDirty(Me);le(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function le(e){if(e.watchers)for(let t of[...e.watchers])t._notify(e)}var F=class{constructor(t){this._watched=new Set;this._pending=new Set;this._notifyFn=t}watch(...t){for(let r of t)this._watched.add(r),(r.watchers??=new Set).add(this)}unwatch(...t){for(let r of t)this._watched.delete(r),r.watchers?.delete(this),this._pending.delete(r)}getPending(){let t=[...this._pending];return this._pending.clear(),t}_notify(t){if(!this._watched.has(t)||this._pending.has(t))return;let r=this._pending.size===0;this._pending.add(t),r&&this._notifyFn()}};function L(e){if(a.untracked)return e();a.untracked=!0;try{return e()}finally{a.untracked=!1}}function $e(){return a.consumer}function Le(e){return!!(e.observers&&e.observers.size)||!!(e.watchers&&e.watchers.size)}function ee(e){return{cleanups:null,owned:null,parent:e,contexts:null}}function V(e){let t=Symbol("context");return{id:t,defaultValue:e,Provider:n=>{let o=a.owner,s=ee(o);(s.contexts=new Map).set(t,n.value),o&&(o.owned??=[]).push(s),a.owner=s;try{return n.children}finally{a.owner=o}}}}function vt(e){let t=a.owner;for(;t;){if(t.contexts&&t.contexts.has(e.id))return t.contexts.get(e.id);t=t.parent}return e.defaultValue}function te(e,t){let r=e;for(;r;){if(r.contexts&&r.contexts.has(t.id))return r.contexts.get(t.id);r=r.parent}return t.defaultValue}function K(e,t,r){let n=ee(a.owner);(n.contexts=new Map).set(e.id,t),a.owner&&(a.owner.owned??=[]).push(n);let o=a.owner;a.owner=n;try{return r()}finally{a.owner=o}}function Ve(e){a.onSuspend=e}function Ke(e){return a.onSuspend?(a.onSuspend(e,a.owner),!0):!1}function Ge(e){a.onError=e}function re(){return a.owner}function We(e){let t=a.owner;return a.owner=e,t}function G(e,t){let r=a.owner;a.owner=e;try{return t()}finally{a.owner=r}}function m(e){a.owner&&(a.owner.cleanups??=[]).push(e)}function Z(e){if(e.owned){for(let t=e.owned.length-1;t>=0;t--)Z(e.owned[t]);e.owned=null}if(e.cleanups){for(let t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}}function C(e){let t=ee(a.owner);a.owner&&(a.owner.owned??=[]).push(t);let r=a.owner;a.owner=t;try{return e(()=>Z(t))}finally{a.owner=r}}function He(e){a.hostSchedule=e??(t=>{Promise.resolve().then(t)})}function St(e){e.queued||(e.queued=!0,a.queue.push(e),!a.scheduled&&a.batchDepth===0&&(a.scheduled=!0,a.hostSchedule(W)))}function W(){if(a.scheduled=!1,a.flushing)return;a.flushing=!0;let e=0;try{for(;a.queue.length;){if(++e>1e5)throw new Error("[fluixi] effect flush did not settle (cycle?)");let t=a.queue;a.queue=[];for(let r of t)r.queued=!1,r.disposed||r.run()}}finally{a.flushing=!1}}function ze(){a.batchDepth===0&&W()}function fe(e){a.batchDepth++;try{return e()}finally{--a.batchDepth===0&&W()}}var pe=class{constructor(t){this.queued=!1;this.disposed=!1;this.owner=ee(a.owner),a.owner&&(a.owner.cleanups??=[]).push(()=>this.dispose()),this.computed=new w(()=>{Z(this.owner),G(this.owner,()=>{let r=t();typeof r=="function"&&(this.owner.cleanups??=[]).push(r)})}),this.watcher=new F(()=>St(this)),this.run(),this.watcher.watch(this.computed)}run(){if(!this.disposed){this.watcher.getPending();try{this.computed.get()}catch(t){if(t&&typeof t.then=="function"&&a.onSuspend){a.onSuspend(t,this.owner);return}if(a.onError&&a.onError(t,this.owner))return;throw t}}}dispose(){this.disposed||(this.disposed=!0,this.watcher.unwatch(this.computed),Z(this.owner))}};function ne(e){let t=new pe(e);return()=>t.dispose()}function xt(e){return!!e&&typeof e.then=="function"}He(()=>{});var Ye=Symbol.for("signal"),wt=Symbol.for("memo"),Ot=Symbol.for("signal-node");function f(e,t){let r=new P(e,{equals:t?.equals}),n=(()=>r.get()),o=(s=>{let i=typeof s=="function"?s(r.peek()):s;return r.set(i),ze(),i});return Object.defineProperty(n,Ye,{value:!0,enumerable:!0}),Object.defineProperty(n,Ot,{value:{get value(){return r.peek()},get version(){return r.version}},enumerable:!1}),[n,o]}function v(e,t,r){let n=t,o=re(),s=new w(()=>G(o,()=>{try{return n=e(n)}catch(c){if(xt(c))return Ke(c),n;throw c}}),{equals:r?.equals}),i=(()=>s.get());return Object.defineProperty(i,Ye,{value:!0,enumerable:!0}),Object.defineProperty(i,wt,{value:!0,enumerable:!0}),i}function I(e,t){let r=t;return ne(()=>{r=e(r)})}function gt(e,t){let r=t;ne(()=>{r=e(r)})}function At(e,t){let r=t;return ne(()=>{r=e(r)})}function O(e){return fe(e)}function g(e){return L(e)}function Xe(e){return fe(e),Promise.resolve()}function _t(){return[()=>!1,Xe]}function Rt(){return W(),Promise.resolve()}function Et(e,t,r){let n=Array.isArray(e),o,s=r?.defer??!1;return i=>{let c=n?e.map(p=>p()):e();if(s){s=!1,o=c;return}let u=L(()=>t(c,o,i));return o=c,u}}function Dr(e,t,r){let n=[];return m(()=>{for(let o of n)o.dispose();n=[]}),v(()=>{let o=e()||[];return g(()=>{if(o.length===0){for(let u of n)u.dispose();return n=[],r?.fallback?r.fallback():[]}let s=new Map;for(let u of n)s.has(u.item)||s.set(u.item,u);let i=[],c=new Set;for(let u=0;u<o.length;u++){let p=o[u],d=s.get(p);if(d&&!c.has(d))d.setIndex(u),i.push(d),c.add(d);else{let l,y,h;C(b=>{h=b;let[E,B]=f(u);y=B,l=t(p,E)});let S={item:p,rendered:l,dispose:h,setIndex:y};i.push(S),c.add(S)}}for(let u of n)c.has(u)||u.dispose();return n=i,i.map(u=>u.rendered)})})}function Ur(e,t,r,n){let o=[],s=[];return m(()=>{for(let i of s)i.dispose();o=[],s=[]}),v(()=>{let i=e()||[];return g(()=>{if(i.length===0){for(let l of s)l.dispose();return o=[],s=[],n?.fallback?n.fallback():[]}let c=new Map;for(let l=0;l<o.length;l++)c.set(o[l],s[l]);let u=[],p=[],d=new Set;for(let l=0;l<i.length;l++){let y=t(i[l]),h=c.get(y);if(h&&!d.has(y))h.setIndex(l),u.push(h);else{let S,b,E;C(B=>{E=B;let[A,j]=f(l);b=j;let Y=v(k=>{let x=(e()||[])[A()];return x??k},i[l]);S=r(Y,A)}),u.push({rendered:S,dispose:E,setIndex:b})}p.push(y),d.add(y)}for(let[l,y]of c)d.has(l)||y.dispose();return o=p,s=u,u.map(l=>l.rendered)})})}function Br(e,t,r){let n=[];return m(()=>{for(let o of n)o.dispose();n=[]}),v(()=>{let o=e()||[];return g(()=>{if(o.length===0){for(let u of n)u.dispose();return n=[],r?.fallback?r.fallback():[]}let s=n.length,i=o.length;for(let u=s;u<i;u++){let p,d,l,y=o[u];C(h=>{l=h;let[S,b]=f(y);d=b,p=t(S,u)}),n.push({rendered:p,setItem:d,dispose:l})}for(let u=i;u<s;u++)n[u].dispose();i<s&&(n=n.slice(0,i));let c=Math.min(s,i);for(let u=0;u<c;u++)n[u].setItem(o[u]);return n.map(u=>u.rendered)})})}var de=!1,kt=Symbol.for("signal"),Pt=Symbol.for("memo"),Ft=Symbol.for("resource");function ye(e){return typeof e=="function"&&e[kt]===!0}function Ct(e){return typeof e=="function"&&e[Pt]===!0}function It(e){return typeof e=="function"&&e[Ft]===!0}function Dt(e){return typeof e=="function"&&e[Symbol.for("fluixi-component")]===!0}function Ut(e){return typeof e=="function"&&e[Symbol.for("fluixi-suspense")]===!0}function Bt(e){return typeof e=="function"&&e[Symbol.for("fluixi-provider")]===!0}function Je(e){return Array.isArray(e)?e.length===2&&e[1]===" "?Array.isArray(e[0])?Je(e[0]):(typeof e[0]=="function",e[0]):e.length===1&&typeof e[0]=="function"?e[0]:e:e}var he=null;function jt(e){he=e}function ve(e){he&&he(e)}var be=null;function Nt(e){be=e}function Se(e){return be?be(e):void 0}var Te=null;function qt(e){Te=e}function xe(){return Te?Te():void 0}var me=null;function Mt(e){me=e}function we(e,t){me&&me(e,t)}function $t(e,t=(r,n)=>r===n){let r=new Map;return I(()=>{let n=e();for(let[o,s]of r){let[i,c]=s,u=t(o,n);i()!==u&&c(u)}}),n=>{let o=r.get(n);if(!o){let[s,i]=f(!1);o=[s,i],r.set(n,o);let c=e();i(t(n,c))}return o[0]()}}function Lt(e,t){let[r,n]=f(e(),t);return I(()=>{let o=e();t?.timeoutMs?setTimeout(()=>n(()=>o),t.timeoutMs):typeof requestIdleCallback=="function"?requestIdleCallback(()=>n(()=>o)):Promise.resolve().then(()=>n(()=>o))}),r}function Vt(e,t){let r,n=(...o)=>{r!==void 0&&clearTimeout(r),r=setTimeout(()=>{if(r=void 0,o.length>0){let s=o[o.length-1];typeof s=="object"&&s&&!s.tagName&&s.target&&s.target.tagName&&(s=s.target),s&&typeof s=="object"&&s.tagName&&(s.tagName.toLowerCase()==="input"||s.tagName.toLowerCase()==="textarea")&&s.focus()}e(...o)},t)};return m(()=>{r!==void 0&&clearTimeout(r)}),n}function oe(e){if(typeof e=="function"&&!e.length){let t=e();return ye(t)?t:oe(t)}if(Array.isArray(e)){let t=[];for(let r=0;r<e.length;r++){let n=oe(e[r]);Array.isArray(n)?t.push.apply(t,n):t.push(n)}return t}return e}function Kt(e){let t=v(e);return v(()=>oe(t()))}function Gt(e){return!!e&&typeof e.then=="function"}var Oe=Symbol();function Wt(e,t,r={}){let n,o;typeof t=="function"?(n=typeof e=="function"?e:()=>e,o=t):(n=()=>!0,o=e,t&&typeof t=="object"&&(r=t));let s=xe(),i=s!==void 0?Se(s):void 0,c=i!==void 0,[u,p]=f(i!==void 0?i.value:r.initialValue,{equals:!1}),[d,l]=f(void 0,{equals:!1}),[y,h]=f(i!==void 0||r.initialValue!==void 0?"ready":"unresolved",{equals:!1}),[S,b]=f(void 0,{equals:!1}),[E,B]=f(void 0,{equals:!1}),A=Oe,j=!1;I(()=>{let T=n();if(E(),T===!1||T===null||T===void 0){A=Oe,O(()=>{h("unresolved"),b(void 0),l(void 0)});return}let x=j;if(j=!1,A!==Oe&&T===A&&!x)return;if(A=T,c){c=!1;return}let X=!1;m(()=>X=!0);let Ue=g(y),ht=g(u),Be=Ue==="ready"||Ue==="refreshing";O(()=>{h(Be?"refreshing":"pending"),l(void 0)});try{let _=o(T,{value:ht,refetching:Be});Gt(_)?(b(_),ve(_),_.then(J=>{X||(s!==void 0&&we(s,J),O(()=>{p(()=>J),h("ready"),b(void 0)}))},J=>{X||O(()=>{l(J),h("errored"),b(void 0)})})):O(()=>{p(()=>_),h("ready"),b(void 0)})}catch(_){if(X)return;O(()=>{l(_),h("errored"),b(void 0)})}});let Y=()=>{let T=y();return T==="pending"||T==="refreshing"},k=(()=>{let T=d();if(T)throw T;if(Y()){let x=S();if(x)throw x}return u()});return Object.defineProperties(k,{state:{get:y},loading:{get:Y},error:{get:d},latest:{get:u}}),Object.defineProperty(k,Symbol.for("resource"),{value:!0,enumerable:!0}),Object.defineProperty(k,Symbol.for("signal"),{value:!0,enumerable:!0}),[k,{mutate:p,refetch:()=>{j=!0,B(void 0)}}]}var ge=V();Ve((e,t)=>{let r=te(t,ge);r&&(r.increment(),e.finally(()=>r.decrement()))});function Ht(){let[e,t]=f(0),r=0;return{increment:()=>t(r+=1),decrement:()=>t(r-=1),inFallback:()=>e()>0}}function zt(e,t){return K(ge,e,t)}var Qe=V();Ge((e,t)=>{let r=te(t,Qe);return r?(r.setError(e),!0):!1});function Yt(){let[e,t]=f(void 0,{equals:!1});return{error:e,reset:()=>t(()=>{}),setError:n=>t(()=>n)}}function Xt(e,t){return K(Qe,e,t)}var Jt={State:P,Computed:w,subtle:{Watcher:F,untrack:L,currentComputed:$e,hasSinks:Le}};var rn=Symbol.for("signal"),nn=Symbol.for("fluixi-proxy");import{$PROXY as _e,batch as it,createEffect as ie,createMemo as Re,createSignal as at,untrack as Qt}from"@fluixi/reactive/signal";var ae=Symbol("store-raw"),U=Symbol("store-node"),Ze=Symbol("store-has"),Ee=Symbol("store-self"),ke=Symbol("store-track"),Zt=Symbol("store-name"),er=Symbol("store-store"),et=new WeakMap,tt=new WeakMap;function ut(e){let[t,r]=at(e),n=t;return n.$=r,n}function ue(e){let t=et.get(e);return t||et.set(e,t={keys:new Map}),t}function rt(e,t,r){let n=e.keys.get(t);return n||e.keys.set(t,n=ut(r)),n}function nt(e){let t=ue(e);(t.all||(t.all=ut()))()}function ot(e,t){e.$(typeof t=="function"?()=>t:t)}function ct(e){if(e==null||typeof e!="object")return!1;if(Array.isArray(e))return!0;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function se(e){if(!ct(e))return e;let t=tt.get(e);if(t)return t;let r=new Proxy(e,tr);return tt.set(e,r),r}var tr={get(e,t,r){if(t===ae||t===U)return e;if(t===_e)return r;if(t===Ze)return i=>i in e;if(t==="__proxy")return!0;if(t===ke||t===Ee)return nt(e),r;let n=e[t];if(typeof n=="function"&&!Object.prototype.hasOwnProperty.call(e,t))return n;let o=Object.getOwnPropertyDescriptor(e,t);if(o&&o.get)return o.get.call(r);let s=rt(ue(e),t,n)();return ct(s)?se(s):s},set(){return!0},deleteProperty(e,t){return t in e&&H(e,t,void 0),!0},has(e,t){return t===ae||t===_e||t===U||t===Ze||t===Ee||t===ke?!0:(rt(ue(e),t,e[t])(),t in e)},ownKeys(e){return nt(e),Reflect.ownKeys(e)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e,t)}};function H(e,t,r){if(e[t]===r&&(r!==void 0||t in e))return;let o=Array.isArray(e),s=o?e.length:0;r===void 0?delete e[t]:e[t]=r;let i=ue(e),c=i.keys.get(t);if(c&&ot(c,r),o&&e.length!==s){let u=i.keys.get("length");u&&ot(u,e.length)}i.all&&i.all.$(void 0)}function st(e,t){return typeof e=="function"?e(t):e}function Pe(e,t){for(let r of Object.keys(t)){let n=t[r],o=e[r];n&&typeof n=="object"&&!Array.isArray(n)&&o&&typeof o=="object"&&!Array.isArray(o)?Pe(o,n):H(e,r,n)}}function Ce(e){let t=[],r=e.replace(/\[([^\]]*)\]/g,".$1");for(let n of r.split("."))n.length&&t.push(n);return t}function lt(e,t,r){let n=t.length-1;for(let s=0;s<n;s++){let i=t[s];if(i==="*"){let u=t.slice(s+1);if(Array.isArray(e))for(let p=0;p<e.length;p++)lt(e[p],u,r);return}let c=e[i];(c==null||typeof c!="object")&&(c=/^\d+$/.test(t[s+1])?[]:{},H(e,i,c)),e=c}let o=t[n];if(o==="*"){if(Array.isArray(e))for(let s=0;s<e.length;s++)H(e,s,st(r,e[s]));return}H(e,o,st(r,e[o]))}function Ae(e,t,r){lt(e,Ce(t),r)}function rr(e,t){let r=t[0];if(typeof r=="function"&&t.length===1){let n=r(e);n&&n!==e&&Pe(e,n);return}if(Array.isArray(r)&&t.length===1){for(let n of r)Array.isArray(n)&&Ae(e,n[0],n[1]);return}if(r&&typeof r=="object"&&!Array.isArray(r)&&t.length===1){Pe(e,r);return}if(Array.isArray(t[1])&&t.length>=3){Ae(e,`${r}.${t[1].join(".")}`,t[2]);return}Ae(e,String(r),t[1])}function Fe(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Fe);let t={};for(let r of Object.keys(e))t[r]=Fe(e[r]);return t}function D(e,t){let r=e;for(let n of Ce(t)){if(r==null)return;r=r[n]}return r}var R=class{constructor(t,r={immutable:!0}){this.options=r;this.root=t,this.set=((...n)=>it(()=>rr(this.root,n)))}get state(){return se(this.root)}get proxy(){return se(this.root)}get accessor(){return(()=>se(this.root))}unwrap(){return this.root}getNode(t){return this.root&&this.root[t]}get(t){if(t==null||t==="")return z(this.state);let r=this.state;for(let n of Ce(t)){if(r==null)return;r=r[n]}return z(r)}select(t){return Re(()=>t(this.state))}subscribe(t){return ie(()=>t(this.state))}watch(t,r){let n;return ie(()=>{let o=t(this.state);Object.is(o,n)||(r(o,n),n=o)})}reactive(t){return Re(()=>this.state[t])}produce(t){this.set((r=>{let n=Fe(r);return t(n),n}))}reconcile(t,r={}){this.set(t)}push(t,...r){let n=D(this.root,t);this.set(t,n.concat(r))}pop(t){let r=D(this.root,t).slice(),n=r.pop();return this.set(t,r),n}shift(t){let r=D(this.root,t).slice(),n=r.shift();return this.set(t,r),n}splice(t,r,n,...o){let s=D(this.root,t).slice(),i=s.splice(r,n,...o);return this.set(t,s),i}insert(t,r,n){let o=D(this.root,t).slice();o.splice(r,0,n),this.set(t,o)}removeAt(t,r){let n=D(this.root,t).slice(),o=n.splice(r,1);return this.set(t,n),o}toObservable(){let[t]=at(this.state);return t.toObservable()}dispose(){}},nr=["get","select","watch","subscribe","produce","reconcile","push","pop","shift","splice","insert","removeAt","unwrap","toObservable"];function pt(e,t){for(let r of nr)e[r]=t[r].bind(t);e.$=t.reactive.bind(t)}function ft(e,t={immutable:!0}){let r=new R(e,t);return pt(r.set,r),[r.proxy,r.set]}function dt(e,t={}){return new R(e,{...t,immutable:!1})}function or(e,t={}){let r=new R(e(),t);return ie(()=>r.set(e())),r}function sr(e,t,r){return ie(()=>r(t(e)))}function ir(e,t,r){return Re(()=>t(e),void 0,r)}function ar(e,t={}){let r=new R(e,t),n=(()=>r.proxy);return pt(n,r),n}function z(e){if(e==null||typeof e!="object")return e;let t=e[ae];return t!==void 0?t:e}function yt(e){return Qt(()=>z(e))}function ur(e){return Ie(e)}function cr(e){return Ie(e)?e[U]:null}function lr(e){return e&&typeof e=="object"&&U in e?e[U]:null}function Ie(e){return!!e&&typeof e=="object"&&(_e in e||e.__proxy===!0)}function pr(e){return e}var fr=Object.freeze({createStore:ft,createMutableStore:dt,batch:it,unwrap:z,untrackStore:yt});function De(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(De);let t={};for(let r of Object.keys(e))t[r]=De(e[r]);return t}function dr(e){return t=>{let r=De(t);return e(r),r}}function yr(e,t={}){return()=>e}export{Zt as $NAME,U as $NODE,nn as $PROXY,ae as $RAW,Ee as $SELF,rn as $SIGNAL,er as $STORE,ke as $TRACK,M as Observable,ce as SafeSubscriber,Jt as Signal,R as Store,fr as StoreAPI,Ne as Subject,q as Subscriber,N as Subscription,ge as SuspenseContext,de as __DEV__,O as batch,gt as createComputed,or as createComputedStore,V as createContext,Vt as createDebounce,Lt as createDeferred,I as createEffect,Yt as createErrorBoundary,v as createMemo,dt as createMutableStore,At as createRenderEffect,Wt as createResource,C as createRoot,$t as createSelector,f as createSignal,ft as createStore,sr as createStoreEffect,ir as createStoreMemo,Ht as createSuspenseBoundary,Rt as flush,cr as getNode,re as getOwner,Se as getServerData,lr as getStoreNode,Br as indexArray,Dt as isComponent,Ct as isMemo,Bt as isProvider,It as isResource,ye as isSignal,ur as isStore,Ie as isStoreProxy,Ut as isSuspense,Ur as keyArray,Je as makeArrayFlat,Dr as mapArray,pr as modifiable,xe as nextResourceId,Et as on,m as onCleanup,vr as operate,dr as produceUtil,K as provide,Xt as provideErrorBoundary,zt as provideSuspense,Kt as readChildren,yr as reconcileUtil,we as reportResourceData,G as runWithOwner,We as setOwner,Mt as setResourceDataSink,qt as setResourceIdSource,jt as setResourceTracker,Nt as setServerDataGetter,Xe as startTransition,ve as trackResourcePromise,g as untrack,yt as untrackStore,z as unwrap,vt as useContext,_t as useTransition,ar as wrap};
@@ -0,0 +1 @@
1
+ "use strict";var p=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var q=(s,e)=>{for(var t in e)p(s,t,{get:e[t],enumerable:!0})},x=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of T(e))!g.call(s,o)&&o!==t&&p(s,o,{get:()=>e[o],enumerable:!(i=S(e,o))||i.enumerable});return s};var C=s=>x(p({},"__esModule",{value:!0}),s);var z={};q(z,{Computed:()=>l,State:()=>c,subtle:()=>D});module.exports=C(z);var N="__fluixi_signal_next_state__",E=s=>{typeof queueMicrotask=="function"?queueMicrotask(s):Promise.resolve().then(s)},r=globalThis[N]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:E,onSuspend:null,onError:null};var _=0,w=1,a=2,h=class{constructor(){this.observers=null;this.watchers=null;this.version=0}updateIfNecessary(){}track(){if(r.untracked)return;let e=r.consumer;e&&((this.observers??=new Set).add(e),(e.sources??=new Set).add(this))}},c=class extends h{constructor(e,t){super(),this._value=e,this._equals=t?.equals===!1?()=>!1:t?.equals??Object.is}get(){return this.track(),this._value}set(e){if(!this._equals(this._value,e)){if(this._value=e,this.version++,this.observers)for(let t of[...this.observers])t.markDirty(a);v(this)}}peek(){return this._value}},l=class extends h{constructor(t,i){super();this._threw=!1;this._initialized=!1;this.state=a;this.sources=null;this._fn=t,this._equals=i?.equals===!1?()=>!1:i?.equals??Object.is}get(){if(r.consumer===this)throw new Error("Signal.Computed cannot read itself");if(this.track(),this.updateIfNecessary(),this._threw)throw this._error;return this._value}updateIfNecessary(){if(this.state===w&&this.sources){for(let t of this.sources)if(t.updateIfNecessary(),this.state===a)break}(this.state===a||!this._initialized)&&this.recompute(),this.state=_}recompute(){if(this.sources){for(let n of this.sources)n.observers?.delete(this);this.sources.clear()}let t=r.consumer,i=r.untracked;r.consumer=this,r.untracked=!1;let o,u=!1,f;try{o=this._fn()}catch(n){u=!0,f=n,o=this._value}finally{r.consumer=t,r.untracked=i}let m=!this._initialized||this._threw!==u||(u?f!==this._error:!this._equals(this._value,o));if(this._initialized=!0,this._threw=u,this._error=f,this._value=o,m){if(this.version++,this.observers)for(let n of[...this.observers])n.markDirty(a);v(this)}}markDirty(t){if(this.state>=t)return;let i=this.state===_;if(this.state=t,i){if(this.observers)for(let o of[...this.observers])o.markDirty(w);v(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function v(s){if(s.watchers)for(let e of[...s.watchers])e._notify(s)}var d=class{constructor(e){this._watched=new Set;this._pending=new Set;this._notifyFn=e}watch(...e){for(let t of e)this._watched.add(t),(t.watchers??=new Set).add(this)}unwatch(...e){for(let t of e)this._watched.delete(t),t.watchers?.delete(this),this._pending.delete(t)}getPending(){let e=[...this._pending];return this._pending.clear(),e}_notify(e){if(!this._watched.has(e)||this._pending.has(e))return;let t=this._pending.size===0;this._pending.add(e),t&&this._notifyFn()}};function y(s){if(r.untracked)return s();r.untracked=!0;try{return s()}finally{r.untracked=!1}}function b(){return r.consumer}function k(s){return!!(s.observers&&s.observers.size)||!!(s.watchers&&s.watchers.size)}var D={Watcher:d,untrack:y,currentComputed:b,hasSinks:k};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * CDN entry: the raw TC39 Signal core as a browser global.
3
+ *
4
+ * <script src="https://.../@fluixi/reactive/signal.global.js"></script>
5
+ * const c = new Signal.State(0); // window.Signal.State / .Computed / .subtle
6
+ *
7
+ * Exports the flat TC39 shape (State/Computed/subtle) as named bindings so the iife
8
+ * global is `window.Signal = { State, Computed, subtle }` — matching the future native
9
+ * globalThis.Signal, not a nested `Signal.Signal`.
10
+ */
11
+ import { Watcher, untrack, currentComputed, hasSinks } from '../lib/signal/graph/core.js';
12
+ export { State, Computed } from '../lib/signal/graph/core.js';
13
+ export declare const subtle: {
14
+ Watcher: typeof Watcher;
15
+ untrack: typeof untrack;
16
+ currentComputed: typeof currentComputed;
17
+ hasSinks: typeof hasSinks;
18
+ };
19
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/cdn/signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE1F,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE9D,eAAO,MAAM,MAAM;;;;;CAKlB,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var Signal=(()=>{var p=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var q=(s,e)=>{for(var t in e)p(s,t,{get:e[t],enumerable:!0})},x=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of T(e))!g.call(s,o)&&o!==t&&p(s,o,{get:()=>e[o],enumerable:!(i=S(e,o))||i.enumerable});return s};var C=s=>x(p({},"__esModule",{value:!0}),s);var z={};q(z,{Computed:()=>l,State:()=>c,subtle:()=>D});var N="__fluixi_signal_next_state__",E=s=>{typeof queueMicrotask=="function"?queueMicrotask(s):Promise.resolve().then(s)},r=globalThis[N]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:E,onSuspend:null,onError:null};var _=0,w=1,a=2,h=class{constructor(){this.observers=null;this.watchers=null;this.version=0}updateIfNecessary(){}track(){if(r.untracked)return;let e=r.consumer;e&&((this.observers??=new Set).add(e),(e.sources??=new Set).add(this))}},c=class extends h{constructor(e,t){super(),this._value=e,this._equals=t?.equals===!1?()=>!1:t?.equals??Object.is}get(){return this.track(),this._value}set(e){if(!this._equals(this._value,e)){if(this._value=e,this.version++,this.observers)for(let t of[...this.observers])t.markDirty(a);v(this)}}peek(){return this._value}},l=class extends h{constructor(t,i){super();this._threw=!1;this._initialized=!1;this.state=a;this.sources=null;this._fn=t,this._equals=i?.equals===!1?()=>!1:i?.equals??Object.is}get(){if(r.consumer===this)throw new Error("Signal.Computed cannot read itself");if(this.track(),this.updateIfNecessary(),this._threw)throw this._error;return this._value}updateIfNecessary(){if(this.state===w&&this.sources){for(let t of this.sources)if(t.updateIfNecessary(),this.state===a)break}(this.state===a||!this._initialized)&&this.recompute(),this.state=_}recompute(){if(this.sources){for(let n of this.sources)n.observers?.delete(this);this.sources.clear()}let t=r.consumer,i=r.untracked;r.consumer=this,r.untracked=!1;let o,u=!1,f;try{o=this._fn()}catch(n){u=!0,f=n,o=this._value}finally{r.consumer=t,r.untracked=i}let m=!this._initialized||this._threw!==u||(u?f!==this._error:!this._equals(this._value,o));if(this._initialized=!0,this._threw=u,this._error=f,this._value=o,m){if(this.version++,this.observers)for(let n of[...this.observers])n.markDirty(a);v(this)}}markDirty(t){if(this.state>=t)return;let i=this.state===_;if(this.state=t,i){if(this.observers)for(let o of[...this.observers])o.markDirty(w);v(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function v(s){if(s.watchers)for(let e of[...s.watchers])e._notify(s)}var d=class{constructor(e){this._watched=new Set;this._pending=new Set;this._notifyFn=e}watch(...e){for(let t of e)this._watched.add(t),(t.watchers??=new Set).add(this)}unwatch(...e){for(let t of e)this._watched.delete(t),t.watchers?.delete(this),this._pending.delete(t)}getPending(){let e=[...this._pending];return this._pending.clear(),e}_notify(e){if(!this._watched.has(e)||this._pending.has(e))return;let t=this._pending.size===0;this._pending.add(e),t&&this._notifyFn()}};function y(s){if(r.untracked)return s();r.untracked=!0;try{return s()}finally{r.untracked=!1}}function b(){return r.consumer}function k(s){return!!(s.observers&&s.observers.size)||!!(s.watchers&&s.watchers.size)}var D={Watcher:d,untrack:y,currentComputed:b,hasSinks:k};return C(z);})();