@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.
- package/LICENSE +21 -0
- package/README.md +343 -0
- package/dist/cdn/reactive.cjs +1 -0
- package/dist/cdn/reactive.d.ts +11 -0
- package/dist/cdn/reactive.d.ts.map +1 -0
- package/dist/cdn/reactive.global.js +1 -0
- package/dist/cdn/reactive.js +10 -0
- package/dist/cdn/reactive.mjs +1 -0
- package/dist/cdn/signal.cjs +1 -0
- package/dist/cdn/signal.d.ts +19 -0
- package/dist/cdn/signal.d.ts.map +1 -0
- package/dist/cdn/signal.global.js +1 -0
- package/dist/cdn/signal.js +18 -0
- package/dist/cdn/signal.mjs +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +1 -0
- package/dist/lib/index.cjs +1 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +4 -0
- package/dist/lib/index.mjs +1 -0
- package/dist/lib/observable/index.cjs +1 -0
- package/dist/lib/observable/index.d.ts +4 -0
- package/dist/lib/observable/index.d.ts.map +1 -0
- package/dist/lib/observable/index.js +3 -0
- package/dist/lib/observable/index.mjs +1 -0
- package/dist/lib/observable/observable.cjs +1 -0
- package/dist/lib/observable/observable.d.ts +383 -0
- package/dist/lib/observable/observable.d.ts.map +1 -0
- package/dist/lib/observable/observable.js +339 -0
- package/dist/lib/observable/observable.mjs +1 -0
- package/dist/lib/observable/subscription.cjs +1 -0
- package/dist/lib/observable/subscription.d.ts +70 -0
- package/dist/lib/observable/subscription.d.ts.map +1 -0
- package/dist/lib/observable/subscription.js +190 -0
- package/dist/lib/observable/subscription.mjs +1 -0
- package/dist/lib/observable/types.cjs +1 -0
- package/dist/lib/observable/types.d.ts +44 -0
- package/dist/lib/observable/types.d.ts.map +1 -0
- package/dist/lib/observable/types.js +1 -0
- package/dist/lib/observable/types.mjs +0 -0
- package/dist/lib/signal/cached-resource.cjs +1 -0
- package/dist/lib/signal/cached-resource.d.ts +94 -0
- package/dist/lib/signal/cached-resource.d.ts.map +1 -0
- package/dist/lib/signal/cached-resource.js +257 -0
- package/dist/lib/signal/cached-resource.mjs +1 -0
- package/dist/lib/signal/graph/children.cjs +1 -0
- package/dist/lib/signal/graph/children.d.ts +2 -0
- package/dist/lib/signal/graph/children.d.ts.map +1 -0
- package/dist/lib/signal/graph/children.js +30 -0
- package/dist/lib/signal/graph/children.mjs +1 -0
- package/dist/lib/signal/graph/compat.cjs +1 -0
- package/dist/lib/signal/graph/compat.d.ts +64 -0
- package/dist/lib/signal/graph/compat.d.ts.map +1 -0
- package/dist/lib/signal/graph/compat.js +178 -0
- package/dist/lib/signal/graph/compat.mjs +1 -0
- package/dist/lib/signal/graph/core.cjs +1 -0
- package/dist/lib/signal/graph/core.d.ts +95 -0
- package/dist/lib/signal/graph/core.d.ts.map +1 -0
- package/dist/lib/signal/graph/core.js +254 -0
- package/dist/lib/signal/graph/core.mjs +1 -0
- package/dist/lib/signal/graph/derived.cjs +1 -0
- package/dist/lib/signal/graph/derived.d.ts +14 -0
- package/dist/lib/signal/graph/derived.d.ts.map +1 -0
- package/dist/lib/signal/graph/derived.js +81 -0
- package/dist/lib/signal/graph/derived.mjs +1 -0
- package/dist/lib/signal/graph/detect.cjs +1 -0
- package/dist/lib/signal/graph/detect.d.ts +16 -0
- package/dist/lib/signal/graph/detect.d.ts.map +1 -0
- package/dist/lib/signal/graph/detect.js +36 -0
- package/dist/lib/signal/graph/detect.mjs +1 -0
- package/dist/lib/signal/graph/error-boundary.cjs +1 -0
- package/dist/lib/signal/graph/error-boundary.d.ts +16 -0
- package/dist/lib/signal/graph/error-boundary.d.ts.map +1 -0
- package/dist/lib/signal/graph/error-boundary.js +34 -0
- package/dist/lib/signal/graph/error-boundary.mjs +1 -0
- package/dist/lib/signal/graph/index.cjs +1 -0
- package/dist/lib/signal/graph/index.d.ts +21 -0
- package/dist/lib/signal/graph/index.d.ts.map +1 -0
- package/dist/lib/signal/graph/index.js +20 -0
- package/dist/lib/signal/graph/index.mjs +1 -0
- package/dist/lib/signal/graph/resource.cjs +1 -0
- package/dist/lib/signal/graph/resource.d.ts +36 -0
- package/dist/lib/signal/graph/resource.d.ts.map +1 -0
- package/dist/lib/signal/graph/resource.js +156 -0
- package/dist/lib/signal/graph/resource.mjs +1 -0
- package/dist/lib/signal/graph/runtime.cjs +1 -0
- package/dist/lib/signal/graph/runtime.d.ts +56 -0
- package/dist/lib/signal/graph/runtime.d.ts.map +1 -0
- package/dist/lib/signal/graph/runtime.js +277 -0
- package/dist/lib/signal/graph/runtime.mjs +1 -0
- package/dist/lib/signal/graph/signal-next.cjs +1 -0
- package/dist/lib/signal/graph/signal-next.d.ts +37 -0
- package/dist/lib/signal/graph/signal-next.d.ts.map +1 -0
- package/dist/lib/signal/graph/signal-next.js +41 -0
- package/dist/lib/signal/graph/signal-next.mjs +1 -0
- package/dist/lib/signal/graph/ssr-hooks.cjs +1 -0
- package/dist/lib/signal/graph/ssr-hooks.d.ts +28 -0
- package/dist/lib/signal/graph/ssr-hooks.d.ts.map +1 -0
- package/dist/lib/signal/graph/ssr-hooks.js +45 -0
- package/dist/lib/signal/graph/ssr-hooks.mjs +1 -0
- package/dist/lib/signal/graph/state.cjs +1 -0
- package/dist/lib/signal/graph/state.d.ts +43 -0
- package/dist/lib/signal/graph/state.d.ts.map +1 -0
- package/dist/lib/signal/graph/state.js +37 -0
- package/dist/lib/signal/graph/state.mjs +1 -0
- package/dist/lib/signal/graph/suspense.cjs +1 -0
- package/dist/lib/signal/graph/suspense.d.ts +13 -0
- package/dist/lib/signal/graph/suspense.d.ts.map +1 -0
- package/dist/lib/signal/graph/suspense.js +36 -0
- package/dist/lib/signal/graph/suspense.mjs +1 -0
- package/dist/lib/signal/index-legacy.cjs +1 -0
- package/dist/lib/signal/index-legacy.d.ts +12 -0
- package/dist/lib/signal/index-legacy.d.ts.map +1 -0
- package/dist/lib/signal/index-legacy.js +11 -0
- package/dist/lib/signal/index-legacy.mjs +1 -0
- package/dist/lib/signal/index.cjs +1 -0
- package/dist/lib/signal/index.d.ts +12 -0
- package/dist/lib/signal/index.d.ts.map +1 -0
- package/dist/lib/signal/index.js +11 -0
- package/dist/lib/signal/index.mjs +1 -0
- package/dist/lib/signal/list.cjs +1 -0
- package/dist/lib/signal/list.d.ts +39 -0
- package/dist/lib/signal/list.d.ts.map +1 -0
- package/dist/lib/signal/list.js +172 -0
- package/dist/lib/signal/list.mjs +1 -0
- package/dist/lib/signal/signal.cjs +1 -0
- package/dist/lib/signal/signal.d.ts +295 -0
- package/dist/lib/signal/signal.d.ts.map +1 -0
- package/dist/lib/signal/signal.js +1219 -0
- package/dist/lib/signal/signal.mjs +1 -0
- package/dist/lib/signal/types.cjs +1 -0
- package/dist/lib/signal/types.d.ts +133 -0
- package/dist/lib/signal/types.d.ts.map +1 -0
- package/dist/lib/signal/types.js +38 -0
- package/dist/lib/signal/types.mjs +1 -0
- package/dist/lib/signal/utilities.cjs +1 -0
- package/dist/lib/signal/utilities.d.ts +355 -0
- package/dist/lib/signal/utilities.d.ts.map +1 -0
- package/dist/lib/signal/utilities.js +504 -0
- package/dist/lib/signal/utilities.mjs +1 -0
- package/dist/lib/store/index.cjs +1 -0
- package/dist/lib/store/index.d.ts +14 -0
- package/dist/lib/store/index.d.ts.map +1 -0
- package/dist/lib/store/index.js +11 -0
- package/dist/lib/store/index.mjs +1 -0
- package/dist/lib/store/setter.types.cjs +1 -0
- package/dist/lib/store/setter.types.d.ts +79 -0
- package/dist/lib/store/setter.types.d.ts.map +1 -0
- package/dist/lib/store/setter.types.js +65 -0
- package/dist/lib/store/setter.types.mjs +0 -0
- package/dist/lib/store/store.cjs +1 -0
- package/dist/lib/store/store.d.ts +86 -0
- package/dist/lib/store/store.d.ts.map +1 -0
- package/dist/lib/store/store.js +442 -0
- package/dist/lib/store/store.mjs +1 -0
- package/dist/lib/store/types.cjs +1 -0
- package/dist/lib/store/types.d.ts +57 -0
- package/dist/lib/store/types.d.ts.map +1 -0
- package/dist/lib/store/types.js +1 -0
- package/dist/lib/store/types.mjs +0 -0
- package/dist/lib/store/utils.cjs +1 -0
- package/dist/lib/store/utils.d.ts +13 -0
- package/dist/lib/store/utils.d.ts.map +1 -0
- package/dist/lib/store/utils.js +29 -0
- package/dist/lib/store/utils.mjs +1 -0
- package/dist/lib/subject.cjs +1 -0
- package/dist/lib/subject.d.ts +14 -0
- package/dist/lib/subject.d.ts.map +1 -0
- package/dist/lib/subject.js +169 -0
- package/dist/lib/subject.mjs +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- 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)
|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
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);})();
|