@fluixi/reactive 1.0.0-alpha.76 → 1.0.0-alpha.77
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/README.md +153 -220
- package/dist/cdn/reactive.cjs +1 -1
- package/dist/cdn/reactive.global.js +1 -1
- package/dist/cdn/reactive.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.mjs +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/version.generated.cjs +1 -1
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.js +1 -1
- package/dist/version.generated.mjs +1 -1
- package/package.json +2 -8
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# @fluixi/reactive
|
|
6
6
|
|
|
7
|
-
**Fine-grained
|
|
7
|
+
**Fine-grained signals, memos, effects and stores on a TC39 Signals core — standalone, no framework required.**
|
|
8
8
|
|
|
9
9
|
[](./LICENSE)
|
|
10
10
|

|
|
@@ -13,32 +13,26 @@
|
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
A
|
|
16
|
+
A fine-grained reactive system built on the **TC39 Signals** graph: glitch-free, lazy,
|
|
17
|
+
push-pull. It has no DOM dependency and no framework dependency, so it works in the
|
|
18
|
+
browser, on the server, or on its own.
|
|
17
19
|
|
|
18
20
|
## Features
|
|
19
21
|
|
|
20
|
-
###
|
|
21
|
-
- **Signals**
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
|
|
26
|
-
###
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
-
- **
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
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
|
|
22
|
+
### Core
|
|
23
|
+
- **Signals, memos, effects** — fine-grained state, derived values, automatic tracking
|
|
24
|
+
- **Stores** — nested reactive objects where reading a property *is* the read
|
|
25
|
+
- **Resources** — async values that integrate with suspense
|
|
26
|
+
- **Batching** — `batch()` collects writes so dependents run once
|
|
27
|
+
|
|
28
|
+
### Beyond the basics
|
|
29
|
+
- **Transitions** — `startTransition` defers non-critical effects so the view stays interactive
|
|
30
|
+
- **Suspense and error boundaries** — as plain values, so any view layer can wrap them
|
|
31
|
+
- **Context** — provide a value for the duration of a call, without prop drilling
|
|
32
|
+
- **Owners** — explicit ownership and disposal, so a graph tears down completely
|
|
33
|
+
- **Debounced primitives** — signal, resource and function variants
|
|
34
|
+
- **Observable interop** — `Observable`/`Subject` for RxJS-shaped code
|
|
35
|
+
- **TypeScript** — full type safety and inference
|
|
42
36
|
|
|
43
37
|
## Installation
|
|
44
38
|
|
|
@@ -51,136 +45,129 @@ npm install @fluixi/reactive
|
|
|
51
45
|
### Basic Usage
|
|
52
46
|
|
|
53
47
|
```typescript
|
|
54
|
-
import {
|
|
48
|
+
import { signal, memo, effect, batch } from '@fluixi/reactive';
|
|
55
49
|
|
|
56
|
-
//
|
|
57
|
-
const
|
|
50
|
+
// Reactive state — call it to read, .set() to write
|
|
51
|
+
const count = signal(0);
|
|
58
52
|
|
|
59
53
|
// Derived state (cached)
|
|
60
|
-
const doubled =
|
|
54
|
+
const doubled = memo(() => count() * 2);
|
|
61
55
|
|
|
62
56
|
// Side effects (auto-tracking)
|
|
63
|
-
|
|
57
|
+
effect(() => {
|
|
64
58
|
console.log(`Count: ${count()}, Doubled: ${doubled()}`);
|
|
65
59
|
});
|
|
66
60
|
|
|
67
|
-
//
|
|
68
|
-
setCount(1); // Effect runs: "Count: 1, Doubled: 2"
|
|
61
|
+
count.set(1); // Effect runs: "Count: 1, Doubled: 2"
|
|
69
62
|
|
|
70
63
|
// Batch multiple updates
|
|
71
64
|
batch(() => {
|
|
72
|
-
|
|
73
|
-
|
|
65
|
+
count.set(2);
|
|
66
|
+
count.set(3);
|
|
74
67
|
}); // Effect runs once: "Count: 3, Doubled: 6"
|
|
75
68
|
```
|
|
76
69
|
|
|
77
|
-
###
|
|
70
|
+
### The tuple form
|
|
71
|
+
|
|
72
|
+
`createSignal` returns the same signal as a `[read, write]` pair, and `createMemo` /
|
|
73
|
+
`createEffect` are `memo` / `effect` under their original names:
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { createSignal, createMemo, createEffect } from '@fluixi/reactive';
|
|
77
|
+
|
|
78
|
+
const [count, setCount] = createSignal(0);
|
|
79
|
+
const doubled = createMemo(() => count() * 2);
|
|
80
|
+
createEffect(() => console.log(count(), doubled()));
|
|
81
|
+
setCount(1);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`signal` **is** the accessor `createSignal` returns with the setter attached, so a read is
|
|
85
|
+
the same call either way. They track each other and mix freely in one module — pick
|
|
86
|
+
whichever reads better, and keep the tuple when you want the halves apart.
|
|
87
|
+
|
|
88
|
+
### Stores and resources
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { store } from '@fluixi/reactive/store';
|
|
92
|
+
import { resource } from '@fluixi/reactive/signal';
|
|
93
|
+
|
|
94
|
+
const cart = store({ items: [], total: 0 });
|
|
95
|
+
cart.total; // reading a property IS the reactive read
|
|
96
|
+
cart.set('total', 42); // only readers of `total` re-run
|
|
97
|
+
|
|
98
|
+
const user = resource(() => fetch('/api/me').then((r) => r.json()));
|
|
99
|
+
user(); // the value — suspends under a Suspense boundary
|
|
100
|
+
user.loading; // boolean
|
|
101
|
+
user.refetch();
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Transitions, context and boundaries
|
|
78
105
|
|
|
79
106
|
```typescript
|
|
80
107
|
import {
|
|
81
|
-
startTransition,
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
trackPromise,
|
|
85
|
-
catchError,
|
|
86
|
-
createContext,
|
|
87
|
-
useContext
|
|
108
|
+
startTransition, useTransition,
|
|
109
|
+
createContext, useContext, provide,
|
|
110
|
+
createErrorBoundary, provideErrorBoundary,
|
|
88
111
|
} from '@fluixi/reactive';
|
|
89
112
|
|
|
90
|
-
// Non-blocking updates
|
|
113
|
+
// Non-blocking updates — `isPending` is a signal you can read while it runs
|
|
91
114
|
const [isPending, start] = useTransition();
|
|
92
|
-
start(() =>
|
|
93
|
-
setLargeDataSet(expensiveComputation());
|
|
94
|
-
});
|
|
115
|
+
start(() => setLargeDataSet(expensiveComputation()));
|
|
95
116
|
|
|
96
|
-
//
|
|
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
|
|
117
|
+
// Context: create it, provide a value for the duration of a call, consume inside
|
|
115
118
|
const ThemeContext = createContext({ mode: 'light' });
|
|
116
|
-
ThemeContext
|
|
117
|
-
|
|
118
|
-
children: () => <App />
|
|
119
|
+
provide(ThemeContext, { mode: 'dark' }, () => {
|
|
120
|
+
useContext(ThemeContext); // { mode: 'dark' }
|
|
119
121
|
});
|
|
120
122
|
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
+
// Boundaries are values here, not components. A view layer wraps these into
|
|
124
|
+
// <ErrorBoundary> / <Suspense>; on their own they are plain functions.
|
|
125
|
+
const boundary = createErrorBoundary();
|
|
126
|
+
provideErrorBoundary(boundary, () => risky());
|
|
127
|
+
boundary.error(); // the thrown value, or undefined
|
|
128
|
+
boundary.reset();
|
|
123
129
|
```
|
|
124
130
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
Updates are processed in optimal order:
|
|
131
|
+
### Debouncing
|
|
128
132
|
|
|
129
133
|
```typescript
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
import { createDebounce, createDebouncedSignal, createDebouncedResource } from '@fluixi/reactive';
|
|
135
|
+
|
|
136
|
+
const [term, setTerm, controls] = createDebouncedSignal('', 300);
|
|
137
|
+
term(); // settles 300ms after the last write
|
|
138
|
+
controls.immediate(); // the value as written — bind the input to this one
|
|
139
|
+
controls.pending(); // a write is waiting (not the same as a request in flight)
|
|
140
|
+
controls.flush(); // settle now
|
|
141
|
+
|
|
142
|
+
// Search-as-you-type as one primitive: the query debounces, the fetch follows it,
|
|
143
|
+
// and an empty query doesn't fetch at all.
|
|
144
|
+
const [results, search] = createDebouncedResource('', (q) => fetchResults(q), { delay: 300 });
|
|
145
|
+
search.setQuery('fluix');
|
|
146
|
+
results.loading;
|
|
147
|
+
|
|
148
|
+
// Or debounce any function
|
|
149
|
+
const save = createDebounce((draft) => persist(draft), 500);
|
|
137
150
|
```
|
|
138
151
|
|
|
139
|
-
##
|
|
152
|
+
## Batching
|
|
140
153
|
|
|
141
|
-
|
|
154
|
+
A write marks its dependents dirty and schedules them; memos stay lazy and recompute on
|
|
155
|
+
read, so the graph is glitch-free — nothing observes a half-applied update.
|
|
142
156
|
|
|
143
157
|
```typescript
|
|
144
158
|
batch(() => {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}); //
|
|
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
|
|
159
|
+
a.set(1);
|
|
160
|
+
b.set(2);
|
|
161
|
+
c.set(3);
|
|
162
|
+
}); // dependents run once, after the batch closes
|
|
157
163
|
|
|
158
|
-
|
|
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
|
|
164
|
+
await flush(); // await the pending queue — mostly useful in tests
|
|
182
165
|
```
|
|
183
166
|
|
|
167
|
+
`startTransition` is the other half: it runs `fn` synchronously and captures the non-pure
|
|
168
|
+
effects it would fire into a deferred queue, so an expensive update doesn't block the
|
|
169
|
+
current view. Pure computations still settle immediately.
|
|
170
|
+
|
|
184
171
|
## API Reference
|
|
185
172
|
|
|
186
173
|
### Core API
|
|
@@ -197,24 +184,22 @@ Suggestions:
|
|
|
197
184
|
- `startTransition(fn)` - Mark updates as low priority
|
|
198
185
|
- `useTransition()` - Track transition state
|
|
199
186
|
|
|
200
|
-
###
|
|
201
|
-
|
|
202
|
-
- `createSuspense(fn, fallback)` - Create async boundary
|
|
203
|
-
- `trackPromise(promise)` - Register promise with suspense
|
|
204
|
-
|
|
205
|
-
### Error Handling
|
|
187
|
+
### Boundaries
|
|
206
188
|
|
|
207
|
-
- `
|
|
189
|
+
- `createSuspenseBoundary()` / `provideSuspense(boundary, fn)` - Async boundary as a value
|
|
190
|
+
- `createErrorBoundary()` / `provideErrorBoundary(boundary, fn)` - Error boundary as a value
|
|
191
|
+
- `trackResourcePromise(promise)` - Register a promise with the enclosing suspense
|
|
208
192
|
|
|
209
193
|
### Context
|
|
210
194
|
|
|
211
195
|
- `createContext(defaultValue)` - Create context
|
|
196
|
+
- `provide(context, value, fn)` - Supply a value for the duration of a call
|
|
212
197
|
- `useContext(context)` - Consume context
|
|
213
198
|
|
|
214
|
-
###
|
|
199
|
+
### Other effects
|
|
215
200
|
|
|
216
|
-
- `createRenderEffect(fn)` -
|
|
217
|
-
- `
|
|
201
|
+
- `createRenderEffect(fn)` - Runs before paint, for DOM writes
|
|
202
|
+
- `createComputed(fn)` - Runs eagerly, unlike a memo
|
|
218
203
|
- `on(deps, fn, options?)` - Explicit dependencies
|
|
219
204
|
|
|
220
205
|
### Owner Management
|
|
@@ -222,97 +207,51 @@ Suggestions:
|
|
|
222
207
|
- `getOwner()` - Get current reactive owner
|
|
223
208
|
- `runWithOwner(owner, fn)` - Run with specific owner
|
|
224
209
|
|
|
225
|
-
###
|
|
210
|
+
### Lists
|
|
226
211
|
|
|
227
|
-
- `
|
|
228
|
-
- `
|
|
229
|
-
- `
|
|
230
|
-
- `enableDevMode()` - Enable dev mode features
|
|
212
|
+
- `mapArray(list, fn)` - Map keyed by identity; a row survives a reorder
|
|
213
|
+
- `indexArray(list, fn)` - Map keyed by index
|
|
214
|
+
- `keyArray(list, key, fn)` - Map keyed by an explicit key
|
|
231
215
|
|
|
232
216
|
### Utilities
|
|
233
217
|
|
|
234
|
-
- `
|
|
235
|
-
- `
|
|
236
|
-
- `
|
|
237
|
-
- `
|
|
238
|
-
- `
|
|
239
|
-
- `
|
|
240
|
-
- `
|
|
241
|
-
- `
|
|
242
|
-
- `createResource(fetcher, source?)` - Async resource
|
|
243
|
-
- `createStore(initialValue)` - Nested reactive object
|
|
218
|
+
- `createSelector(source, fn)` - Keyed selector; only the row that changed re-runs
|
|
219
|
+
- `createResource(fetcher, source?)` / `resource(...)` - Async resource
|
|
220
|
+
- `createStore(initial)` / `store(initial)` - Nested reactive object
|
|
221
|
+
- `createDeferred(source, options?)` - A value that trails behind under load
|
|
222
|
+
- `createDebounce(fn, ms)` / `createDebouncedSignal(initial, ms)` / `createDebouncedResource(...)`
|
|
223
|
+
- `flush()` - Await the pending effect queue
|
|
224
|
+
- `unwrap(store)` / `untrackStore(fn)` - Escape hatches out of a store proxy
|
|
225
|
+
- `onCleanup(fn)` / `disposeScope(owner)` - Teardown
|
|
244
226
|
|
|
245
227
|
## Documentation
|
|
246
228
|
|
|
247
|
-
|
|
248
|
-
- [
|
|
249
|
-
- [
|
|
250
|
-
- [
|
|
251
|
-
- [
|
|
252
|
-
- [
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
|
229
|
+
- [Signals](https://docs.fluixi.com/v1/en/signals) — state, reading and writing
|
|
230
|
+
- [Derived values](https://docs.fluixi.com/v1/en/derived-values) — memos and selectors
|
|
231
|
+
- [Effects](https://docs.fluixi.com/v1/en/effects) — side effects and cleanup
|
|
232
|
+
- [Stores](https://docs.fluixi.com/v1/en/stores) — nested reactive objects
|
|
233
|
+
- [Async](https://docs.fluixi.com/v1/en/async) — resources, suspense, transitions
|
|
234
|
+
- [TC39 Signals](https://docs.fluixi.com/v1/en/tc39-signals) — the model underneath
|
|
235
|
+
|
|
236
|
+
## Compiler intrinsics
|
|
237
|
+
|
|
238
|
+
Inside an app compiled by `@fluixi/compiler`, these primitives have `$`-prefixed twins that
|
|
239
|
+
need no import — `$signal`, `$memo`, `$effect`, `$store`, `$resource`. They compile to the
|
|
240
|
+
calls above, so there is one reactive graph and no difference in behaviour. This package
|
|
241
|
+
stays importable exactly as documented here, which is what a library that never runs the
|
|
242
|
+
compiler needs.
|
|
243
|
+
|
|
244
|
+
## Performance tips
|
|
245
|
+
|
|
246
|
+
1. **Batch related updates** — `batch(() => { a.set(1); b.set(2); })` runs dependents once.
|
|
247
|
+
2. **Transitions for expensive updates** — `startTransition(() => list.set(compute()))`
|
|
248
|
+
keeps the current view interactive while the next one is prepared.
|
|
249
|
+
3. **Memo the expensive part** — a memo costs a node; it pays for itself when the
|
|
250
|
+
computation is heavier than the bookkeeping.
|
|
251
|
+
4. **Read narrowly** — reading a whole object subscribes you to every write to it. Reach
|
|
252
|
+
for the property you need, or derive it.
|
|
253
|
+
5. **Key your lists** — `mapArray` keeps a row's nodes across a reorder; `indexArray`
|
|
254
|
+
rebuilds them.
|
|
316
255
|
|
|
317
256
|
## Building
|
|
318
257
|
|
|
@@ -332,12 +271,6 @@ MIT
|
|
|
332
271
|
|
|
333
272
|
## Credits
|
|
334
273
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
- [Vue 3](https://vuejs.org/) - Reactivity system design
|
|
339
|
-
|
|
340
|
-
---
|
|
341
|
-
|
|
342
|
-
**Version:** 3.2.0+
|
|
343
|
-
**Status:** ✅ Production Ready
|
|
274
|
+
The graph implements the **TC39 Signals** model. The ergonomics owe a lot to prior art —
|
|
275
|
+
SolidJS for fine-grained primitives and scheduling, React for transitions and suspense as
|
|
276
|
+
concepts, Vue 3 for reactivity design. None of that was invented here.
|
package/dist/cdn/reactive.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var we=Object.defineProperty;var ir=Object.getOwnPropertyDescriptor;var ar=Object.getOwnPropertyNames;var ur=Object.prototype.hasOwnProperty;var cr=(e,t)=>{for(var r in t)we(e,r,{get:t[r],enumerable:!0})},lr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ar(t))!ur.call(e,o)&&o!==r&&we(e,o,{get:()=>t[o],enumerable:!(n=ir(t,o))||n.enumerable});return e};var pr=e=>lr(we({},"__esModule",{value:!0}),e);var Ur={};cr(Ur,{$NAME:()=>Ht,$NODE:()=>D,$PROXY:()=>Er,$RAW:()=>ee,$SELF:()=>me,$SIGNAL:()=>_r,$STORE:()=>$t,$TRACK:()=>ve,Observable:()=>j,SafeSubscriber:()=>se,Signal:()=>Ct,Store:()=>_,StoreAPI:()=>tr,Subject:()=>ge,Subscriber:()=>U,Subscription:()=>I,SuspenseContext:()=>he,VERSION:()=>Ke,__DEV__:()=>ce,batch:()=>g,createChildOwner:()=>Je,createComputed:()=>ut,createComputedStore:()=>Wt,createContext:()=>N,createDebounce:()=>gt,createDebouncedResource:()=>At,createDebouncedSignal:()=>je,createDeferred:()=>Ot,createEffect:()=>O,createErrorBoundary:()=>Pt,createMemo:()=>S,createMutableStore:()=>He,createRenderEffect:()=>ct,createResource:()=>$,createRoot:()=>P,createSelector:()=>wt,createSignal:()=>f,createStore:()=>te,createStoreEffect:()=>zt,createStoreMemo:()=>Yt,createSuspenseBoundary:()=>_t,disposeScope:()=>Ze,effect:()=>Dr,flush:()=>pt,getNode:()=>Jt,getOwner:()=>Q,getServerData:()=>fe,getStoreNode:()=>Zt,indexArray:()=>xr,isComponent:()=>Tt,isMemo:()=>dt,isOwnerDisposed:()=>et,isProvider:()=>bt,isResource:()=>yt,isSignal:()=>le,isStore:()=>Qt,isStoreProxy:()=>xe,isSuspense:()=>ht,keyArray:()=>Sr,makeArrayFlat:()=>Pe,mapArray:()=>vr,memo:()=>Pr,modifiable:()=>er,nextResourceId:()=>de,on:()=>ft,onCleanup:()=>v,operate:()=>fr,produceUtil:()=>rr,provide:()=>M,provideErrorBoundary:()=>Dt,provideSuspense:()=>Et,readChildren:()=>Rt,reconcileUtil:()=>nr,reportResourceData:()=>ye,resource:()=>Ft,runWithOwner:()=>H,setOwner:()=>_e,setResourceDataSink:()=>xt,setResourceIdSource:()=>St,setResourceTracker:()=>mt,setServerDataGetter:()=>vt,signal:()=>kr,startTransition:()=>ke,store:()=>or,trackResourcePromise:()=>pe,untrack:()=>x,untrackStore:()=>$e,unwrap:()=>V,useContext:()=>tt,useTransition:()=>lt,wrap:()=>Xt});module.exports=pr(Ur);var Ke="1.0.0-alpha.76";var We=require("@fluixi/utils/object"),Oe=require("@fluixi/utils/functions"),I=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,Oe.isFunction)(n)&&!(n instanceof e))try{n()}catch(o){console.error("Error in unsubscribe function:",o)}else if((0,We.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,Oe.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 I{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())}},se=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 fr(e){return new U(e.next,e.error,e.complete)}var j=class extends I{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 se(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 ge=class extends j{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 j(n=>this.subscribe(n))}};var dr="__fluixi_signal_next_state__",yr=e=>{typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e)},a=globalThis[dr]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:yr,onSuspend:null,onError:null};var ze=0,Ye=1,W=2,ie=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))}},B=class extends ie{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);Ae(this)}}peek(){return this._value}},R=class extends ie{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===Ye&&this.sources){for(let r of this.sources)if(r.updateIfNecessary(),this.state===W)break}(this.state===W||!this._initialized)&&this.recompute(),this.state=ze}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);Ae(this)}}markDirty(r){if(this.state>=r)return;let n=this.state===ze;if(this.state=r,n){if(this.observers)for(let o of[...this.observers])o.markDirty(Ye);Ae(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function Ae(e){if(e.watchers)for(let t of[...e.watchers])t._notify(e)}var q=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 z(e){if(a.untracked)return e();a.untracked=!0;try{return e()}finally{a.untracked=!1}}function Xe(){return a.consumer}function Qe(e){return!!(e.observers&&e.observers.size)||!!(e.watchers&&e.watchers.size)}function Je(e){let t=X(e);return e&&(e.owned??=[]).push(t),t}function Ze(e,t=!0){Y(e,t)}function et(e){return!!e&&e.disposed===!0}function X(e){return{cleanups:null,owned:null,parent:e,contexts:null}}function N(e){let t=Symbol("context");return{id:t,defaultValue:e,Provider:n=>{let o=a.owner,s=X(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 tt(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 ae(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=X(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 rt(e){a.onSuspend=e}function nt(e){return a.onSuspend?(a.onSuspend(e,a.owner),!0):!1}function ot(e){a.onError=e}function Q(){return a.owner}function _e(e){let t=a.owner;return a.owner=e,t}function H(e,t){let r=a.owner;a.owner=e;try{return t()}finally{a.owner=r}}function v(e){if(a.owner){if(a.owner.disposed){e();return}(a.owner.cleanups??=[]).push(e)}}function Y(e,t=!0){if(!e.disposed){if(e.owned){for(let r=e.owned.length-1;r>=0;r--)Y(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}t&&(e.disposed=!0)}}function P(e){let t=X(a.owner);a.owner&&(a.owner.owned??=[]).push(t);let r=a.owner;a.owner=t;try{return e(()=>Y(t))}finally{a.owner=r}}function st(e){a.hostSchedule=e??(t=>{Promise.resolve().then(t)})}function Tr(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 t=a.queue;a.queue=[];for(let r of t)r.queued=!1,r.disposed||r.run()}}finally{a.flushing=!1}}function it(){a.batchDepth===0&&J()}function Ee(e){a.batchDepth++;try{return e()}finally{--a.batchDepth===0&&J()}}var Re=class{constructor(t){this.queued=!1;this.disposed=!1;this.owner=X(a.owner),a.owner&&(a.owner.cleanups??=[]).push(()=>this.dispose()),this.computed=new R(()=>{Y(this.owner,!1),H(this.owner,()=>{let r=t();typeof r=="function"&&(this.owner.cleanups??=[]).push(r)})}),this.watcher=new q(()=>Tr(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),Y(this.owner))}};function ue(e){let t=new Re(e);return()=>t.dispose()}function hr(e){return!!e&&typeof e.then=="function"}st(()=>{});var at=Symbol.for("signal"),br=Symbol.for("memo"),mr=Symbol.for("signal-node");function f(e,t){let r=new B(e,{equals:t?.equals}),n=(()=>r.get()),o=(s=>{let i=typeof s=="function"?s(r.peek()):s;return r.set(i),it(),i});return Object.defineProperty(n,at,{value:!0,enumerable:!0}),Object.defineProperty(n,mr,{value:{get value(){return r.peek()},get version(){return r.version}},enumerable:!1}),[n,o]}function S(e,t,r){let n=t,o=Q(),s=new R(()=>H(o,()=>{try{return n=e(n)}catch(c){if(hr(c))return nt(c),n;throw c}}),{equals:r?.equals}),i=(()=>s.get());return Object.defineProperty(i,at,{value:!0,enumerable:!0}),Object.defineProperty(i,br,{value:!0,enumerable:!0}),i}function O(e,t){let r=t;return ue(()=>{r=e(r)})}function ut(e,t){let r=t;ue(()=>{r=e(r)})}function ct(e,t){let r=t;return ue(()=>{r=e(r)})}function g(e){return Ee(e)}function x(e){return z(e)}function ke(e){return Ee(e),Promise.resolve()}function lt(){return[()=>!1,ke]}function pt(){return J(),Promise.resolve()}function ft(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=z(()=>t(c,o,i));return o=c,u}}function vr(e,t,r){let n=[];return v(()=>{for(let o of n)o.dispose();n=[]}),S(()=>{let o=e()||[];return x(()=>{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],T=s.get(p);if(T&&!c.has(T))T.setIndex(u),i.push(T),c.add(T);else{let l,d,h;P(b=>{h=b;let[C,G]=f(u);d=G,l=t(p,C)});let w={item:p,rendered:l,dispose:h,setIndex:d};i.push(w),c.add(w)}}for(let u of n)c.has(u)||u.dispose();return n=i,i.map(u=>u.rendered)})})}function Sr(e,t,r,n){let o=[],s=[];return v(()=>{for(let i of s)i.dispose();o=[],s=[]}),S(()=>{let i=e()||[];return x(()=>{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=[],T=new Set;for(let l=0;l<i.length;l++){let d=t(i[l]),h=c.get(d);if(h&&!T.has(d))h.setIndex(l),u.push(h);else{let w,b,C;P(G=>{C=G;let[E,K]=f(l);b=K;let re=S(F=>{let A=(e()||[])[E()];return A??F},i[l]);w=r(re,E)}),u.push({rendered:w,dispose:C,setIndex:b})}p.push(d),T.add(d)}for(let[l,d]of c)T.has(l)||d.dispose();return o=p,s=u,u.map(l=>l.rendered)})})}function xr(e,t,r){let n=[];return v(()=>{for(let o of n)o.dispose();n=[]}),S(()=>{let o=e()||[];return x(()=>{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,T,l,d=o[u];P(h=>{l=h;let[w,b]=f(d);T=b,p=t(w,u)}),n.push({rendered:p,setItem:T,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 ce=!1,wr=Symbol.for("signal"),Or=Symbol.for("memo"),gr=Symbol.for("resource");function le(e){return typeof e=="function"&&e[wr]===!0}function dt(e){return typeof e=="function"&&e[Or]===!0}function yt(e){return typeof e=="function"&&e[gr]===!0}function Tt(e){return typeof e=="function"&&e[Symbol.for("fluixi-component")]===!0}function ht(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 Pe(e){return Array.isArray(e)?e.length===2&&e[1]===" "?Array.isArray(e[0])?Pe(e[0]):(typeof e[0]=="function",e[0]):e.length===1&&typeof e[0]=="function"?e[0]:e:e}var De=null;function mt(e){De=e}function pe(e){De&&De(e)}var Ce=null;function vt(e){Ce=e}function fe(e){return Ce?Ce(e):void 0}var Fe=null;function St(e){Fe=e}function de(){return Fe?Fe():void 0}var Ie=null;function xt(e){Ie=e}function ye(e,t){Ie&&Ie(e,t)}function wt(e,t=(r,n)=>r===n){let r=new Map;return O(()=>{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 Ot(e,t){let[r,n]=f(e(),t);return O(()=>{let o=e();t?.timeoutMs?setTimeout(()=>n(()=>o),t.timeoutMs):typeof requestIdleCallback=="function"?requestIdleCallback(()=>n(()=>o)):Promise.resolve().then(()=>n(()=>o))}),r}function gt(e,t){let r,n=(...o)=>{r!==void 0&&clearTimeout(r),r=setTimeout(()=>{r=void 0,e(...o)},t)};return v(()=>{r!==void 0&&clearTimeout(r)}),n}function Ar(e){return!!e&&typeof e.then=="function"}var Ue=Symbol();function $(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=r.transport===!1?void 0:de(),i=s!==void 0?fe(s):void 0,c=i!==void 0,[u,p]=f(i!==void 0?i.value:r.initialValue,{equals:!1}),[T,l]=f(void 0,{equals:!1}),[d,h]=f(i!==void 0||r.initialValue!==void 0?"ready":"unresolved",{equals:!1}),[w,b]=f(void 0,{equals:!1}),[C,G]=f(void 0,{equals:!1}),E=Ue,K=!1;O(()=>{let m=n();if(C(),m===!1||m===null||m===void 0){E=Ue,g(()=>{h("unresolved"),b(void 0),l(void 0)});return}let A=K;if(K=!1,E!==Ue&&m===E&&!A)return;if(E=m,c){c=!1;return}let ne=!1;v(()=>ne=!0);let Ve=x(d),sr=x(u),Ge=Ve==="ready"||Ve==="refreshing";g(()=>{h(Ge?"refreshing":"pending"),l(void 0)});try{let k=o(m,{value:sr,refetching:Ge});Ar(k)?(b(k),pe(k),k.then(oe=>{ne||(s!==void 0&&ye(s,oe),g(()=>{p(()=>oe),h("ready"),b(void 0)}))},oe=>{ne||g(()=>{l(oe),h("errored"),b(void 0)})})):g(()=>{p(()=>k),h("ready"),b(void 0)})}catch(k){if(ne)return;g(()=>{l(k),h("errored"),b(void 0)})}});let re=()=>{let m=d();return m==="pending"||m==="refreshing"},F=(()=>{let m=T();if(m)throw m;if(re()){let A=w();if(A)throw A}return u()});return Object.defineProperties(F,{state:{get:d},loading:{get:re},error:{get:T},latest:{get:u}}),Object.defineProperty(F,Symbol.for("resource"),{value:!0,enumerable:!0}),Object.defineProperty(F,Symbol.for("signal"),{value:!0,enumerable:!0}),[F,{mutate:p,refetch:()=>{K=!0,G(void 0)}}]}function je(e,t=300){let[r,n]=f(e),[o,s]=f(e),[i,c]=f(!1),u,p=()=>{u!==void 0&&(clearTimeout(u),u=void 0)},T=()=>{p();let d=x(r);return s(()=>d),c(!1),d},l=(d=>{let h=typeof d=="function"?d(x(r)):d;return n(()=>h),c(!0),p(),u=setTimeout(T,t),h});return v(p),[o,l,{immediate:r,pending:i,flush:T,cancel:()=>{p(),c(!1)}}]}function Rr(e){return e!=null&&e!==""}function At(e,t,r={}){let{delay:n=300,initialValue:o,shouldFetch:s=Rr}=r,[i,c,u]=je(e,n),p=()=>s(i())?i():!1,[T,{refetch:l}]=$(p,t,o===void 0?{}:{initialValue:o});return[T,{...u,query:i,setQuery:c,refetch:l}]}function Te(e){if(typeof e=="function"&&!e.length){let t=e();return le(t)?t:Te(t)}if(Array.isArray(e)){let t=[];for(let r=0;r<e.length;r++){let n=Te(e[r]);Array.isArray(n)?t.push.apply(t,n):t.push(n)}return t}return e}function Rt(e){let t=S(e);return S(()=>Te(t()))}var he=N();rt((e,t)=>{let r=ae(t,he);r&&(r.increment(),e.finally(()=>r.decrement()))});function _t(){let[e,t]=f(0),r=0;return{increment:()=>t(r+=1),decrement:()=>t(r-=1),inFallback:()=>e()>0}}function Et(e,t){return M(he,e,t)}var kt=N();ot((e,t)=>{let r=ae(t,kt);return r?(r.setError(e),!0):!1});function Pt(){let[e,t]=f(void 0,{equals:!1});return{error:e,reset:()=>t(()=>{}),setError:n=>t(()=>n)}}function Dt(e,t){return M(kt,e,t)}var Ct={State:B,Computed:R,subtle:{Watcher:q,untrack:z,currentComputed:Xe,hasSinks:Qe}};var _r=Symbol.for("signal"),Er=Symbol.for("fluixi-proxy");function kr(e,t){let[r,n]=f(e,t);return Object.assign(r,{set:n})}function Pr(e,t,r){return S(e,t,r)}function Dr(e,t){return O(e,t)}function Ft(...e){let[t,r]=$(...e);return Object.assign(t,r)}var y=require("@fluixi/reactive/signal"),ee=Symbol("store-raw"),D=Symbol("store-node"),It=Symbol("store-has"),me=Symbol("store-self"),ve=Symbol("store-track"),Ht=Symbol("store-name"),$t=Symbol("store-store"),Ut=new WeakMap,jt=new WeakMap;function Lt(e){let[t,r]=(0,y.createSignal)(e),n=t;return n.$=r,n}function Se(e){let t=Ut.get(e);return t||Ut.set(e,t={keys:new Map}),t}function Bt(e,t,r){let n=e.keys.get(t);return n||e.keys.set(t,n=Lt(r)),n}function qt(e){let t=Se(e);(t.all||(t.all=Lt()))()}function Nt(e,t){e.$(typeof t=="function"?()=>t:t)}function Vt(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 be(e){if(!Vt(e))return e;let t=jt.get(e);if(t)return t;let r=new Proxy(e,Cr);return jt.set(e,r),r}var Cr={get(e,t,r){if(t===ee||t===D)return e;if(t===y.$PROXY)return r;if(t===It)return i=>i in e;if(t==="__proxy")return!0;if(t===ve||t===me)return qt(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=Bt(Se(e),t,n)();return Vt(s)?be(s):s},set(){return!0},deleteProperty(e,t){return t in e&&Z(e,t,void 0),!0},has(e,t){return t===ee||t===y.$PROXY||t===D||t===It||t===me||t===ve?!0:(Bt(Se(e),t,e[t])(),t in e)},ownKeys(e){return qt(e),Reflect.ownKeys(e)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e,t)}};function Z(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=Se(e),c=i.keys.get(t);if(c&&Nt(c,r),o&&e.length!==s){let u=i.keys.get("length");u&&Nt(u,e.length)}i.all&&i.all.$(void 0)}function Mt(e,t){return typeof e=="function"?e(t):e}function qe(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)?qe(o,n):Z(e,r,n)}}function Me(e){let t=[],r=e.replace(/\[([^\]]*)\]/g,".$1");for(let n of r.split("."))n.length&&t.push(n);return t}function Gt(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++)Gt(e[p],u,r);return}let c=e[i];(c==null||typeof c!="object")&&(c=/^\d+$/.test(t[s+1])?[]:{},Z(e,i,c)),e=c}let o=t[n];if(o==="*"){if(Array.isArray(e))for(let s=0;s<e.length;s++)Z(e,s,Mt(r,e[s]));return}Z(e,o,Mt(r,e[o]))}function Be(e,t,r){Gt(e,Me(t),r)}function Fr(e,t){let r=t[0];if(typeof r=="function"&&t.length===1){let n=r(e);n&&n!==e&&qe(e,n);return}if(Array.isArray(r)&&t.length===1){for(let n of r)Array.isArray(n)&&Be(e,n[0],n[1]);return}if(r&&typeof r=="object"&&!Array.isArray(r)&&t.length===1){qe(e,r);return}if(Array.isArray(t[1])&&t.length>=3){Be(e,`${r}.${t[1].join(".")}`,t[2]);return}Be(e,String(r),t[1])}function Ne(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Ne);let t={};for(let r of Object.keys(e))t[r]=Ne(e[r]);return t}function L(e,t){let r=e;for(let n of Me(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,y.batch)(()=>Fr(this.root,n)))}get state(){return be(this.root)}get proxy(){return be(this.root)}get accessor(){return(()=>be(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 Me(t)){if(r==null)return;r=r[n]}return V(r)}select(t){return(0,y.createMemo)(()=>t(this.state))}subscribe(t){return(0,y.createEffect)(()=>t(this.state))}watch(t,r){let n;return(0,y.createEffect)(()=>{let o=t(this.state);Object.is(o,n)||(r(o,n),n=o)})}reactive(t){return(0,y.createMemo)(()=>this.state[t])}produce(t){this.set((r=>{let n=Ne(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,y.createSignal)(this.state);return t.toObservable()}dispose(){}},Ir=["get","select","watch","subscribe","produce","reconcile","push","pop","shift","splice","insert","removeAt","unwrap","toObservable"];function Kt(e,t){for(let r of Ir)e[r]=t[r].bind(t);e.$=t.reactive.bind(t)}function te(e,t={immutable:!0}){let r=new _(e,t);return Kt(r.set,r),[r.proxy,r.set]}function He(e,t={}){return new _(e,{...t,immutable:!1})}function Wt(e,t={}){let r=new _(e(),t);return(0,y.createEffect)(()=>r.set(e())),r}function zt(e,t,r){return(0,y.createEffect)(()=>r(t(e)))}function Yt(e,t,r){return(0,y.createMemo)(()=>t(e),void 0,r)}function Xt(e,t={}){let r=new _(e,t),n=(()=>r.proxy);return Kt(n,r),n}function V(e){if(e==null||typeof e!="object")return e;let t=e[ee];return t!==void 0?t:e}function $e(e){return(0,y.untrack)(()=>V(e))}function Qt(e){return xe(e)}function Jt(e){return xe(e)?e[D]:null}function Zt(e){return e&&typeof e=="object"&&D in e?e[D]:null}function xe(e){return!!e&&typeof e=="object"&&(y.$PROXY in e||e.__proxy===!0)}function er(e){return e}var tr=Object.freeze({createStore:te,createMutableStore:He,batch:y.batch,unwrap:V,untrackStore:$e});function Le(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Le);let t={};for(let r of Object.keys(e))t[r]=Le(e[r]);return t}function rr(e){return t=>{let r=Le(t);return e(r),r}}function nr(e,t={}){return()=>e}function or(e,t){let[r,n]=te(e,t);return new Proxy(r,{get:(o,s)=>s==="set"?n:o[s],has:(o,s)=>s==="set"||Reflect.has(o,s)})}
|
|
1
|
+
"use strict";var we=Object.defineProperty;var ir=Object.getOwnPropertyDescriptor;var ar=Object.getOwnPropertyNames;var ur=Object.prototype.hasOwnProperty;var cr=(e,t)=>{for(var r in t)we(e,r,{get:t[r],enumerable:!0})},lr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ar(t))!ur.call(e,o)&&o!==r&&we(e,o,{get:()=>t[o],enumerable:!(n=ir(t,o))||n.enumerable});return e};var pr=e=>lr(we({},"__esModule",{value:!0}),e);var Ur={};cr(Ur,{$NAME:()=>Ht,$NODE:()=>D,$PROXY:()=>Er,$RAW:()=>ee,$SELF:()=>me,$SIGNAL:()=>_r,$STORE:()=>$t,$TRACK:()=>ve,Observable:()=>j,SafeSubscriber:()=>se,Signal:()=>Ct,Store:()=>_,StoreAPI:()=>tr,Subject:()=>ge,Subscriber:()=>U,Subscription:()=>I,SuspenseContext:()=>he,VERSION:()=>Ke,__DEV__:()=>ce,batch:()=>g,createChildOwner:()=>Je,createComputed:()=>ut,createComputedStore:()=>Wt,createContext:()=>N,createDebounce:()=>gt,createDebouncedResource:()=>At,createDebouncedSignal:()=>je,createDeferred:()=>Ot,createEffect:()=>O,createErrorBoundary:()=>Pt,createMemo:()=>S,createMutableStore:()=>He,createRenderEffect:()=>ct,createResource:()=>$,createRoot:()=>P,createSelector:()=>wt,createSignal:()=>f,createStore:()=>te,createStoreEffect:()=>zt,createStoreMemo:()=>Yt,createSuspenseBoundary:()=>_t,disposeScope:()=>Ze,effect:()=>Dr,flush:()=>pt,getNode:()=>Jt,getOwner:()=>Q,getServerData:()=>fe,getStoreNode:()=>Zt,indexArray:()=>xr,isComponent:()=>Tt,isMemo:()=>dt,isOwnerDisposed:()=>et,isProvider:()=>bt,isResource:()=>yt,isSignal:()=>le,isStore:()=>Qt,isStoreProxy:()=>xe,isSuspense:()=>ht,keyArray:()=>Sr,makeArrayFlat:()=>Pe,mapArray:()=>vr,memo:()=>Pr,modifiable:()=>er,nextResourceId:()=>de,on:()=>ft,onCleanup:()=>v,operate:()=>fr,produceUtil:()=>rr,provide:()=>M,provideErrorBoundary:()=>Dt,provideSuspense:()=>Et,readChildren:()=>Rt,reconcileUtil:()=>nr,reportResourceData:()=>ye,resource:()=>Ft,runWithOwner:()=>H,setOwner:()=>_e,setResourceDataSink:()=>xt,setResourceIdSource:()=>St,setResourceTracker:()=>mt,setServerDataGetter:()=>vt,signal:()=>kr,startTransition:()=>ke,store:()=>or,trackResourcePromise:()=>pe,untrack:()=>x,untrackStore:()=>$e,unwrap:()=>V,useContext:()=>tt,useTransition:()=>lt,wrap:()=>Xt});module.exports=pr(Ur);var Ke="1.0.0-alpha.77";var We=require("@fluixi/utils/object"),Oe=require("@fluixi/utils/functions"),I=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,Oe.isFunction)(n)&&!(n instanceof e))try{n()}catch(o){console.error("Error in unsubscribe function:",o)}else if((0,We.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,Oe.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 I{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())}},se=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 fr(e){return new U(e.next,e.error,e.complete)}var j=class extends I{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 se(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 ge=class extends j{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 j(n=>this.subscribe(n))}};var dr="__fluixi_signal_next_state__",yr=e=>{typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e)},a=globalThis[dr]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:yr,onSuspend:null,onError:null};var ze=0,Ye=1,W=2,ie=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))}},B=class extends ie{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);Ae(this)}}peek(){return this._value}},R=class extends ie{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===Ye&&this.sources){for(let r of this.sources)if(r.updateIfNecessary(),this.state===W)break}(this.state===W||!this._initialized)&&this.recompute(),this.state=ze}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);Ae(this)}}markDirty(r){if(this.state>=r)return;let n=this.state===ze;if(this.state=r,n){if(this.observers)for(let o of[...this.observers])o.markDirty(Ye);Ae(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function Ae(e){if(e.watchers)for(let t of[...e.watchers])t._notify(e)}var q=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 z(e){if(a.untracked)return e();a.untracked=!0;try{return e()}finally{a.untracked=!1}}function Xe(){return a.consumer}function Qe(e){return!!(e.observers&&e.observers.size)||!!(e.watchers&&e.watchers.size)}function Je(e){let t=X(e);return e&&(e.owned??=[]).push(t),t}function Ze(e,t=!0){Y(e,t)}function et(e){return!!e&&e.disposed===!0}function X(e){return{cleanups:null,owned:null,parent:e,contexts:null}}function N(e){let t=Symbol("context");return{id:t,defaultValue:e,Provider:n=>{let o=a.owner,s=X(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 tt(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 ae(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=X(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 rt(e){a.onSuspend=e}function nt(e){return a.onSuspend?(a.onSuspend(e,a.owner),!0):!1}function ot(e){a.onError=e}function Q(){return a.owner}function _e(e){let t=a.owner;return a.owner=e,t}function H(e,t){let r=a.owner;a.owner=e;try{return t()}finally{a.owner=r}}function v(e){if(a.owner){if(a.owner.disposed){e();return}(a.owner.cleanups??=[]).push(e)}}function Y(e,t=!0){if(!e.disposed){if(e.owned){for(let r=e.owned.length-1;r>=0;r--)Y(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}t&&(e.disposed=!0)}}function P(e){let t=X(a.owner);a.owner&&(a.owner.owned??=[]).push(t);let r=a.owner;a.owner=t;try{return e(()=>Y(t))}finally{a.owner=r}}function st(e){a.hostSchedule=e??(t=>{Promise.resolve().then(t)})}function Tr(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 t=a.queue;a.queue=[];for(let r of t)r.queued=!1,r.disposed||r.run()}}finally{a.flushing=!1}}function it(){a.batchDepth===0&&J()}function Ee(e){a.batchDepth++;try{return e()}finally{--a.batchDepth===0&&J()}}var Re=class{constructor(t){this.queued=!1;this.disposed=!1;this.owner=X(a.owner),a.owner&&(a.owner.cleanups??=[]).push(()=>this.dispose()),this.computed=new R(()=>{Y(this.owner,!1),H(this.owner,()=>{let r=t();typeof r=="function"&&(this.owner.cleanups??=[]).push(r)})}),this.watcher=new q(()=>Tr(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),Y(this.owner))}};function ue(e){let t=new Re(e);return()=>t.dispose()}function hr(e){return!!e&&typeof e.then=="function"}st(()=>{});var at=Symbol.for("signal"),br=Symbol.for("memo"),mr=Symbol.for("signal-node");function f(e,t){let r=new B(e,{equals:t?.equals}),n=(()=>r.get()),o=(s=>{let i=typeof s=="function"?s(r.peek()):s;return r.set(i),it(),i});return Object.defineProperty(n,at,{value:!0,enumerable:!0}),Object.defineProperty(n,mr,{value:{get value(){return r.peek()},get version(){return r.version}},enumerable:!1}),[n,o]}function S(e,t,r){let n=t,o=Q(),s=new R(()=>H(o,()=>{try{return n=e(n)}catch(c){if(hr(c))return nt(c),n;throw c}}),{equals:r?.equals}),i=(()=>s.get());return Object.defineProperty(i,at,{value:!0,enumerable:!0}),Object.defineProperty(i,br,{value:!0,enumerable:!0}),i}function O(e,t){let r=t;return ue(()=>{r=e(r)})}function ut(e,t){let r=t;ue(()=>{r=e(r)})}function ct(e,t){let r=t;return ue(()=>{r=e(r)})}function g(e){return Ee(e)}function x(e){return z(e)}function ke(e){return Ee(e),Promise.resolve()}function lt(){return[()=>!1,ke]}function pt(){return J(),Promise.resolve()}function ft(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=z(()=>t(c,o,i));return o=c,u}}function vr(e,t,r){let n=[];return v(()=>{for(let o of n)o.dispose();n=[]}),S(()=>{let o=e()||[];return x(()=>{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],T=s.get(p);if(T&&!c.has(T))T.setIndex(u),i.push(T),c.add(T);else{let l,d,h;P(b=>{h=b;let[C,G]=f(u);d=G,l=t(p,C)});let w={item:p,rendered:l,dispose:h,setIndex:d};i.push(w),c.add(w)}}for(let u of n)c.has(u)||u.dispose();return n=i,i.map(u=>u.rendered)})})}function Sr(e,t,r,n){let o=[],s=[];return v(()=>{for(let i of s)i.dispose();o=[],s=[]}),S(()=>{let i=e()||[];return x(()=>{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=[],T=new Set;for(let l=0;l<i.length;l++){let d=t(i[l]),h=c.get(d);if(h&&!T.has(d))h.setIndex(l),u.push(h);else{let w,b,C;P(G=>{C=G;let[E,K]=f(l);b=K;let re=S(F=>{let A=(e()||[])[E()];return A??F},i[l]);w=r(re,E)}),u.push({rendered:w,dispose:C,setIndex:b})}p.push(d),T.add(d)}for(let[l,d]of c)T.has(l)||d.dispose();return o=p,s=u,u.map(l=>l.rendered)})})}function xr(e,t,r){let n=[];return v(()=>{for(let o of n)o.dispose();n=[]}),S(()=>{let o=e()||[];return x(()=>{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,T,l,d=o[u];P(h=>{l=h;let[w,b]=f(d);T=b,p=t(w,u)}),n.push({rendered:p,setItem:T,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 ce=!1,wr=Symbol.for("signal"),Or=Symbol.for("memo"),gr=Symbol.for("resource");function le(e){return typeof e=="function"&&e[wr]===!0}function dt(e){return typeof e=="function"&&e[Or]===!0}function yt(e){return typeof e=="function"&&e[gr]===!0}function Tt(e){return typeof e=="function"&&e[Symbol.for("fluixi-component")]===!0}function ht(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 Pe(e){return Array.isArray(e)?e.length===2&&e[1]===" "?Array.isArray(e[0])?Pe(e[0]):(typeof e[0]=="function",e[0]):e.length===1&&typeof e[0]=="function"?e[0]:e:e}var De=null;function mt(e){De=e}function pe(e){De&&De(e)}var Ce=null;function vt(e){Ce=e}function fe(e){return Ce?Ce(e):void 0}var Fe=null;function St(e){Fe=e}function de(){return Fe?Fe():void 0}var Ie=null;function xt(e){Ie=e}function ye(e,t){Ie&&Ie(e,t)}function wt(e,t=(r,n)=>r===n){let r=new Map;return O(()=>{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 Ot(e,t){let[r,n]=f(e(),t);return O(()=>{let o=e();t?.timeoutMs?setTimeout(()=>n(()=>o),t.timeoutMs):typeof requestIdleCallback=="function"?requestIdleCallback(()=>n(()=>o)):Promise.resolve().then(()=>n(()=>o))}),r}function gt(e,t){let r,n=(...o)=>{r!==void 0&&clearTimeout(r),r=setTimeout(()=>{r=void 0,e(...o)},t)};return v(()=>{r!==void 0&&clearTimeout(r)}),n}function Ar(e){return!!e&&typeof e.then=="function"}var Ue=Symbol();function $(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=r.transport===!1?void 0:de(),i=s!==void 0?fe(s):void 0,c=i!==void 0,[u,p]=f(i!==void 0?i.value:r.initialValue,{equals:!1}),[T,l]=f(void 0,{equals:!1}),[d,h]=f(i!==void 0||r.initialValue!==void 0?"ready":"unresolved",{equals:!1}),[w,b]=f(void 0,{equals:!1}),[C,G]=f(void 0,{equals:!1}),E=Ue,K=!1;O(()=>{let m=n();if(C(),m===!1||m===null||m===void 0){E=Ue,g(()=>{h("unresolved"),b(void 0),l(void 0)});return}let A=K;if(K=!1,E!==Ue&&m===E&&!A)return;if(E=m,c){c=!1;return}let ne=!1;v(()=>ne=!0);let Ve=x(d),sr=x(u),Ge=Ve==="ready"||Ve==="refreshing";g(()=>{h(Ge?"refreshing":"pending"),l(void 0)});try{let k=o(m,{value:sr,refetching:Ge});Ar(k)?(b(k),pe(k),k.then(oe=>{ne||(s!==void 0&&ye(s,oe),g(()=>{p(()=>oe),h("ready"),b(void 0)}))},oe=>{ne||g(()=>{l(oe),h("errored"),b(void 0)})})):g(()=>{p(()=>k),h("ready"),b(void 0)})}catch(k){if(ne)return;g(()=>{l(k),h("errored"),b(void 0)})}});let re=()=>{let m=d();return m==="pending"||m==="refreshing"},F=(()=>{let m=T();if(m)throw m;if(re()){let A=w();if(A)throw A}return u()});return Object.defineProperties(F,{state:{get:d},loading:{get:re},error:{get:T},latest:{get:u}}),Object.defineProperty(F,Symbol.for("resource"),{value:!0,enumerable:!0}),Object.defineProperty(F,Symbol.for("signal"),{value:!0,enumerable:!0}),[F,{mutate:p,refetch:()=>{K=!0,G(void 0)}}]}function je(e,t=300){let[r,n]=f(e),[o,s]=f(e),[i,c]=f(!1),u,p=()=>{u!==void 0&&(clearTimeout(u),u=void 0)},T=()=>{p();let d=x(r);return s(()=>d),c(!1),d},l=(d=>{let h=typeof d=="function"?d(x(r)):d;return n(()=>h),c(!0),p(),u=setTimeout(T,t),h});return v(p),[o,l,{immediate:r,pending:i,flush:T,cancel:()=>{p(),c(!1)}}]}function Rr(e){return e!=null&&e!==""}function At(e,t,r={}){let{delay:n=300,initialValue:o,shouldFetch:s=Rr}=r,[i,c,u]=je(e,n),p=()=>s(i())?i():!1,[T,{refetch:l}]=$(p,t,o===void 0?{}:{initialValue:o});return[T,{...u,query:i,setQuery:c,refetch:l}]}function Te(e){if(typeof e=="function"&&!e.length){let t=e();return le(t)?t:Te(t)}if(Array.isArray(e)){let t=[];for(let r=0;r<e.length;r++){let n=Te(e[r]);Array.isArray(n)?t.push.apply(t,n):t.push(n)}return t}return e}function Rt(e){let t=S(e);return S(()=>Te(t()))}var he=N();rt((e,t)=>{let r=ae(t,he);r&&(r.increment(),e.finally(()=>r.decrement()))});function _t(){let[e,t]=f(0),r=0;return{increment:()=>t(r+=1),decrement:()=>t(r-=1),inFallback:()=>e()>0}}function Et(e,t){return M(he,e,t)}var kt=N();ot((e,t)=>{let r=ae(t,kt);return r?(r.setError(e),!0):!1});function Pt(){let[e,t]=f(void 0,{equals:!1});return{error:e,reset:()=>t(()=>{}),setError:n=>t(()=>n)}}function Dt(e,t){return M(kt,e,t)}var Ct={State:B,Computed:R,subtle:{Watcher:q,untrack:z,currentComputed:Xe,hasSinks:Qe}};var _r=Symbol.for("signal"),Er=Symbol.for("fluixi-proxy");function kr(e,t){let[r,n]=f(e,t);return Object.assign(r,{set:n})}function Pr(e,t,r){return S(e,t,r)}function Dr(e,t){return O(e,t)}function Ft(...e){let[t,r]=$(...e);return Object.assign(t,r)}var y=require("@fluixi/reactive/signal"),ee=Symbol("store-raw"),D=Symbol("store-node"),It=Symbol("store-has"),me=Symbol("store-self"),ve=Symbol("store-track"),Ht=Symbol("store-name"),$t=Symbol("store-store"),Ut=new WeakMap,jt=new WeakMap;function Lt(e){let[t,r]=(0,y.createSignal)(e),n=t;return n.$=r,n}function Se(e){let t=Ut.get(e);return t||Ut.set(e,t={keys:new Map}),t}function Bt(e,t,r){let n=e.keys.get(t);return n||e.keys.set(t,n=Lt(r)),n}function qt(e){let t=Se(e);(t.all||(t.all=Lt()))()}function Nt(e,t){e.$(typeof t=="function"?()=>t:t)}function Vt(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 be(e){if(!Vt(e))return e;let t=jt.get(e);if(t)return t;let r=new Proxy(e,Cr);return jt.set(e,r),r}var Cr={get(e,t,r){if(t===ee||t===D)return e;if(t===y.$PROXY)return r;if(t===It)return i=>i in e;if(t==="__proxy")return!0;if(t===ve||t===me)return qt(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=Bt(Se(e),t,n)();return Vt(s)?be(s):s},set(){return!0},deleteProperty(e,t){return t in e&&Z(e,t,void 0),!0},has(e,t){return t===ee||t===y.$PROXY||t===D||t===It||t===me||t===ve?!0:(Bt(Se(e),t,e[t])(),t in e)},ownKeys(e){return qt(e),Reflect.ownKeys(e)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e,t)}};function Z(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=Se(e),c=i.keys.get(t);if(c&&Nt(c,r),o&&e.length!==s){let u=i.keys.get("length");u&&Nt(u,e.length)}i.all&&i.all.$(void 0)}function Mt(e,t){return typeof e=="function"?e(t):e}function qe(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)?qe(o,n):Z(e,r,n)}}function Me(e){let t=[],r=e.replace(/\[([^\]]*)\]/g,".$1");for(let n of r.split("."))n.length&&t.push(n);return t}function Gt(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++)Gt(e[p],u,r);return}let c=e[i];(c==null||typeof c!="object")&&(c=/^\d+$/.test(t[s+1])?[]:{},Z(e,i,c)),e=c}let o=t[n];if(o==="*"){if(Array.isArray(e))for(let s=0;s<e.length;s++)Z(e,s,Mt(r,e[s]));return}Z(e,o,Mt(r,e[o]))}function Be(e,t,r){Gt(e,Me(t),r)}function Fr(e,t){let r=t[0];if(typeof r=="function"&&t.length===1){let n=r(e);n&&n!==e&&qe(e,n);return}if(Array.isArray(r)&&t.length===1){for(let n of r)Array.isArray(n)&&Be(e,n[0],n[1]);return}if(r&&typeof r=="object"&&!Array.isArray(r)&&t.length===1){qe(e,r);return}if(Array.isArray(t[1])&&t.length>=3){Be(e,`${r}.${t[1].join(".")}`,t[2]);return}Be(e,String(r),t[1])}function Ne(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Ne);let t={};for(let r of Object.keys(e))t[r]=Ne(e[r]);return t}function L(e,t){let r=e;for(let n of Me(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,y.batch)(()=>Fr(this.root,n)))}get state(){return be(this.root)}get proxy(){return be(this.root)}get accessor(){return(()=>be(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 Me(t)){if(r==null)return;r=r[n]}return V(r)}select(t){return(0,y.createMemo)(()=>t(this.state))}subscribe(t){return(0,y.createEffect)(()=>t(this.state))}watch(t,r){let n;return(0,y.createEffect)(()=>{let o=t(this.state);Object.is(o,n)||(r(o,n),n=o)})}reactive(t){return(0,y.createMemo)(()=>this.state[t])}produce(t){this.set((r=>{let n=Ne(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,y.createSignal)(this.state);return t.toObservable()}dispose(){}},Ir=["get","select","watch","subscribe","produce","reconcile","push","pop","shift","splice","insert","removeAt","unwrap","toObservable"];function Kt(e,t){for(let r of Ir)e[r]=t[r].bind(t);e.$=t.reactive.bind(t)}function te(e,t={immutable:!0}){let r=new _(e,t);return Kt(r.set,r),[r.proxy,r.set]}function He(e,t={}){return new _(e,{...t,immutable:!1})}function Wt(e,t={}){let r=new _(e(),t);return(0,y.createEffect)(()=>r.set(e())),r}function zt(e,t,r){return(0,y.createEffect)(()=>r(t(e)))}function Yt(e,t,r){return(0,y.createMemo)(()=>t(e),void 0,r)}function Xt(e,t={}){let r=new _(e,t),n=(()=>r.proxy);return Kt(n,r),n}function V(e){if(e==null||typeof e!="object")return e;let t=e[ee];return t!==void 0?t:e}function $e(e){return(0,y.untrack)(()=>V(e))}function Qt(e){return xe(e)}function Jt(e){return xe(e)?e[D]:null}function Zt(e){return e&&typeof e=="object"&&D in e?e[D]:null}function xe(e){return!!e&&typeof e=="object"&&(y.$PROXY in e||e.__proxy===!0)}function er(e){return e}var tr=Object.freeze({createStore:te,createMutableStore:He,batch:y.batch,unwrap:V,untrackStore:$e});function Le(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Le);let t={};for(let r of Object.keys(e))t[r]=Le(e[r]);return t}function rr(e){return t=>{let r=Le(t);return e(r),r}}function nr(e,t={}){return()=>e}function or(e,t){let[r,n]=te(e,t);return new Proxy(r,{get:(o,s)=>s==="set"?n:o[s],has:(o,s)=>s==="set"||Reflect.has(o,s)})}
|