@fias/arche-sdk 1.6.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/create-plugin.js +0 -0
- package/dist/hooks.d.ts +24 -11
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +142 -34
- package/dist/hooks.js.map +1 -1
- package/dist/hooks.test.js +190 -96
- package/dist/hooks.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +92 -20
- package/dist/theme.d.ts +1 -1
- package/dist/theme.js +1 -1
- package/dist/themes/fonts.d.ts +1 -1
- package/dist/themes/fonts.js +1 -1
- package/dist/themes/index.d.ts +1 -1
- package/dist/themes/index.js +1 -1
- package/dist/types.d.ts +20 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -4
- package/templates/default/AGENTS.md +104 -6
- package/templates/default/CLAUDE.md +104 -6
- package/templates/multi-step/README.md +13 -0
- package/templates/multi-step/fias-plugin.json +11 -0
- package/templates/multi-step/index.html +12 -0
- package/templates/multi-step/package.json +26 -0
- package/templates/multi-step/src/App.tsx +38 -0
- package/templates/multi-step/src/context/AppContext.tsx +36 -0
- package/templates/multi-step/src/index.tsx +12 -0
- package/templates/multi-step/src/steps/step-one/StepOne.tsx +43 -0
- package/templates/multi-step/src/steps/step-two/StepTwo.tsx +40 -0
- package/templates/multi-step/tsconfig.json +17 -0
- package/templates/multi-step/vite.config.ts +18 -0
|
File without changes
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FiasUser, FiasTheme, FiasStorageApi, EntityInvocationApi, ImageGenerationApi, FiasNavigationApi, StepNavigationApi, FiasDataStoreApi, FiasStoreApi } from './types';
|
|
1
|
+
import type { FiasUser, FiasTheme, FiasStorageApi, EntityInvocationApi, ImageGenerationApi, FiasNavigationApi, StepNavigationApi, StepNavigationOptions, FiasDataStoreApi, FiasStoreApi } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Access the current user's profile information.
|
|
4
4
|
* Requires the `user:profile:read` permission in fias-plugin.json.
|
|
@@ -25,7 +25,14 @@ export declare function useFiasStorage(): FiasStorageApi;
|
|
|
25
25
|
* Invoke platform entities (AI models, etc.) through the bridge.
|
|
26
26
|
* Requires the `entities:invoke` permission in fias-plugin.json.
|
|
27
27
|
*
|
|
28
|
-
*
|
|
28
|
+
* Rendering pattern: `streamingText` accumulates tokens during the call AND
|
|
29
|
+
* keeps the full text after `isLoading` flips to `false` — it is not cleared
|
|
30
|
+
* when the response completes. `result.output` also holds the full text once
|
|
31
|
+
* the promise resolves. **Render only one slot** (e.g.
|
|
32
|
+
* `{isLoading ? streamingText : result?.output}`) — rendering both prints the
|
|
33
|
+
* response twice once the stream completes.
|
|
34
|
+
*
|
|
35
|
+
* @returns Entity invocation API (invoke, isLoading, result, error, streamingText).
|
|
29
36
|
*/
|
|
30
37
|
export declare function useEntityInvocation(): EntityInvocationApi;
|
|
31
38
|
/**
|
|
@@ -44,14 +51,6 @@ export declare function useImageGeneration(): ImageGenerationApi;
|
|
|
44
51
|
* @returns Navigation API (navigateTo, currentPath).
|
|
45
52
|
*/
|
|
46
53
|
export declare function useFiasNavigation(): FiasNavigationApi;
|
|
47
|
-
/**
|
|
48
|
-
* Manage step navigation for multi-node plugins.
|
|
49
|
-
* Listens for step_navigate messages from the host to support
|
|
50
|
-
* external navigation (e.g., clicking graph nodes).
|
|
51
|
-
*
|
|
52
|
-
* @param initialStep - Optional initial step/node ID.
|
|
53
|
-
* @returns Step navigation API (currentStep, setCurrentStep).
|
|
54
|
-
*/
|
|
55
54
|
/**
|
|
56
55
|
* Like useState, but auto-persists to bridge storage.
|
|
57
56
|
* Survives preview rebuilds during development.
|
|
@@ -60,7 +59,21 @@ export declare function useFiasNavigation(): FiasNavigationApi;
|
|
|
60
59
|
* @param initialValue - Default value if nothing is stored
|
|
61
60
|
*/
|
|
62
61
|
export declare function usePersistentState<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void];
|
|
63
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Manage step navigation for multi-node plugins.
|
|
64
|
+
* Listens for step_navigate messages from the host to support
|
|
65
|
+
* external navigation (e.g., clicking graph nodes).
|
|
66
|
+
*
|
|
67
|
+
* Pass `{ persistKey }` to make the current step survive preview rebuilds.
|
|
68
|
+
* This is the correct way to persist step state — do NOT additionally wrap
|
|
69
|
+
* currentStep in `usePersistentState`, which creates two independent state
|
|
70
|
+
* sources and a bidirectional sync loop.
|
|
71
|
+
*
|
|
72
|
+
* @param initialStep - Optional initial step/node ID.
|
|
73
|
+
* @param options - Optional config; set `persistKey` to enable persistence.
|
|
74
|
+
* @returns Step navigation API (currentStep, setCurrentStep).
|
|
75
|
+
*/
|
|
76
|
+
export declare function useStepNavigation(initialStep?: string, options?: StepNavigationOptions): StepNavigationApi;
|
|
64
77
|
/**
|
|
65
78
|
* Access the Arche Data Store for structured, queryable data persistence.
|
|
66
79
|
* Requires the `data:store` permission in fias-plugin.json.
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EAGnB,kBAAkB,EAGlB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAIhB,YAAY,EAMb,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EAGnB,kBAAkB,EAGlB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAIhB,YAAY,EAMb,MAAM,SAAS,CAAC;AA4EjB;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAe7C;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAS/C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,cAAc,CAqC/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,CAoCzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,kBAAkB,CA2BvD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAgBrD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CA4C5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,iBAAiB,CAiEnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,CAyFnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAqG3C"}
|
package/dist/hooks.js
CHANGED
|
@@ -23,6 +23,55 @@ function useBridge() {
|
|
|
23
23
|
}
|
|
24
24
|
return bridge;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Trailing-edge debounce window for persistent-state writes. Rapid setter
|
|
28
|
+
* calls (e.g. per-frame updates from a requestAnimationFrame game loop) are
|
|
29
|
+
* coalesced so we don't trip the bridge's 50-in-5s runaway-loop detector or
|
|
30
|
+
* exhaust the 120/minute storage_write budget.
|
|
31
|
+
*/
|
|
32
|
+
const PERSIST_DEBOUNCE_WAIT_MS = 250;
|
|
33
|
+
const PERSIST_DEBOUNCE_MAX_WAIT_MS = 1000;
|
|
34
|
+
/**
|
|
35
|
+
* Create a debounced storage_write scheduler. Writes are coalesced to the
|
|
36
|
+
* last value seen within a 250ms idle window, capped at a 1s max-wait so
|
|
37
|
+
* continuous updates still persist at least once per second. Call `flush()`
|
|
38
|
+
* on unmount or before switching keys to avoid losing the pending value.
|
|
39
|
+
*
|
|
40
|
+
* If `schedule` is called with a different `path` than the currently pending
|
|
41
|
+
* write, the pending write flushes synchronously before the new one is
|
|
42
|
+
* queued — each path gets a write.
|
|
43
|
+
*/
|
|
44
|
+
function createDebouncedWriter(bridge) {
|
|
45
|
+
let pending = null;
|
|
46
|
+
function flush() {
|
|
47
|
+
if (!pending)
|
|
48
|
+
return;
|
|
49
|
+
const { path, content, timerId } = pending;
|
|
50
|
+
if (timerId !== null)
|
|
51
|
+
clearTimeout(timerId);
|
|
52
|
+
pending = null;
|
|
53
|
+
bridge.request('storage_write', { path, content }).catch(() => { });
|
|
54
|
+
}
|
|
55
|
+
function schedule(path, content) {
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
if (pending && pending.path !== path) {
|
|
58
|
+
flush();
|
|
59
|
+
}
|
|
60
|
+
if (!pending) {
|
|
61
|
+
pending = { path, content, timerId: null, firstScheduledAt: now };
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
pending.content = content;
|
|
65
|
+
}
|
|
66
|
+
if (pending.timerId !== null)
|
|
67
|
+
clearTimeout(pending.timerId);
|
|
68
|
+
const elapsed = now - pending.firstScheduledAt;
|
|
69
|
+
const remainingMax = Math.max(0, PERSIST_DEBOUNCE_MAX_WAIT_MS - elapsed);
|
|
70
|
+
const delay = Math.min(PERSIST_DEBOUNCE_WAIT_MS, remainingMax);
|
|
71
|
+
pending.timerId = setTimeout(flush, delay);
|
|
72
|
+
}
|
|
73
|
+
return { schedule, flush };
|
|
74
|
+
}
|
|
26
75
|
/**
|
|
27
76
|
* Access the current user's profile information.
|
|
28
77
|
* Requires the `user:profile:read` permission in fias-plugin.json.
|
|
@@ -87,7 +136,14 @@ function useFiasStorage() {
|
|
|
87
136
|
* Invoke platform entities (AI models, etc.) through the bridge.
|
|
88
137
|
* Requires the `entities:invoke` permission in fias-plugin.json.
|
|
89
138
|
*
|
|
90
|
-
*
|
|
139
|
+
* Rendering pattern: `streamingText` accumulates tokens during the call AND
|
|
140
|
+
* keeps the full text after `isLoading` flips to `false` — it is not cleared
|
|
141
|
+
* when the response completes. `result.output` also holds the full text once
|
|
142
|
+
* the promise resolves. **Render only one slot** (e.g.
|
|
143
|
+
* `{isLoading ? streamingText : result?.output}`) — rendering both prints the
|
|
144
|
+
* response twice once the stream completes.
|
|
145
|
+
*
|
|
146
|
+
* @returns Entity invocation API (invoke, isLoading, result, error, streamingText).
|
|
91
147
|
*/
|
|
92
148
|
function useEntityInvocation() {
|
|
93
149
|
const bridge = useBridge();
|
|
@@ -171,14 +227,6 @@ function useFiasNavigation() {
|
|
|
171
227
|
}, [bridge]);
|
|
172
228
|
return { navigateTo, currentPath };
|
|
173
229
|
}
|
|
174
|
-
/**
|
|
175
|
-
* Manage step navigation for multi-node plugins.
|
|
176
|
-
* Listens for step_navigate messages from the host to support
|
|
177
|
-
* external navigation (e.g., clicking graph nodes).
|
|
178
|
-
*
|
|
179
|
-
* @param initialStep - Optional initial step/node ID.
|
|
180
|
-
* @returns Step navigation API (currentStep, setCurrentStep).
|
|
181
|
-
*/
|
|
182
230
|
/**
|
|
183
231
|
* Like useState, but auto-persists to bridge storage.
|
|
184
232
|
* Survives preview rebuilds during development.
|
|
@@ -190,14 +238,19 @@ function usePersistentState(key, initialValue) {
|
|
|
190
238
|
const bridge = useBridge();
|
|
191
239
|
const [value, setValueInternal] = (0, react_1.useState)(initialValue);
|
|
192
240
|
const initializedRef = (0, react_1.useRef)(false);
|
|
193
|
-
|
|
241
|
+
const valueRef = (0, react_1.useRef)(initialValue);
|
|
242
|
+
const writer = (0, react_1.useMemo)(() => createDebouncedWriter(bridge), [bridge]);
|
|
243
|
+
// Load from storage on mount; flush any pending write on unmount/key change
|
|
244
|
+
// so rapid updates in a game loop never lose their last value.
|
|
194
245
|
(0, react_1.useEffect)(() => {
|
|
195
246
|
bridge
|
|
196
247
|
.request('storage_read', { path: `__state/${key}` })
|
|
197
248
|
.then((result) => {
|
|
198
249
|
if (result.exists && result.content !== null) {
|
|
199
250
|
try {
|
|
200
|
-
|
|
251
|
+
const parsed = JSON.parse(result.content);
|
|
252
|
+
valueRef.current = parsed;
|
|
253
|
+
setValueInternal(parsed);
|
|
201
254
|
}
|
|
202
255
|
catch {
|
|
203
256
|
// Corrupted data — use initial value
|
|
@@ -205,36 +258,91 @@ function usePersistentState(key, initialValue) {
|
|
|
205
258
|
}
|
|
206
259
|
initializedRef.current = true;
|
|
207
260
|
});
|
|
208
|
-
|
|
209
|
-
|
|
261
|
+
return () => {
|
|
262
|
+
writer.flush();
|
|
263
|
+
};
|
|
264
|
+
}, [bridge, key, writer]);
|
|
210
265
|
const setValue = (0, react_1.useCallback)((next) => {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
return prev; // Preserve referential identity to skip React re-render
|
|
217
|
-
}
|
|
218
|
-
// Fire-and-forget write to storage
|
|
219
|
-
bridge
|
|
220
|
-
.request('storage_write', {
|
|
221
|
-
path: `__state/${key}`,
|
|
222
|
-
content: serialized,
|
|
223
|
-
})
|
|
224
|
-
.catch(() => { });
|
|
225
|
-
return resolved;
|
|
226
|
-
});
|
|
227
|
-
}, [bridge, key]);
|
|
266
|
+
const resolved = typeof next === 'function' ? next(valueRef.current) : next;
|
|
267
|
+
valueRef.current = resolved;
|
|
268
|
+
setValueInternal(resolved);
|
|
269
|
+
writer.schedule(`__state/${key}`, JSON.stringify(resolved));
|
|
270
|
+
}, [key, writer]);
|
|
228
271
|
return [value, setValue];
|
|
229
272
|
}
|
|
230
|
-
|
|
273
|
+
/**
|
|
274
|
+
* Manage step navigation for multi-node plugins.
|
|
275
|
+
* Listens for step_navigate messages from the host to support
|
|
276
|
+
* external navigation (e.g., clicking graph nodes).
|
|
277
|
+
*
|
|
278
|
+
* Pass `{ persistKey }` to make the current step survive preview rebuilds.
|
|
279
|
+
* This is the correct way to persist step state — do NOT additionally wrap
|
|
280
|
+
* currentStep in `usePersistentState`, which creates two independent state
|
|
281
|
+
* sources and a bidirectional sync loop.
|
|
282
|
+
*
|
|
283
|
+
* @param initialStep - Optional initial step/node ID.
|
|
284
|
+
* @param options - Optional config; set `persistKey` to enable persistence.
|
|
285
|
+
* @returns Step navigation API (currentStep, setCurrentStep).
|
|
286
|
+
*/
|
|
287
|
+
function useStepNavigation(initialStep, options) {
|
|
231
288
|
const bridge = useBridge();
|
|
232
|
-
const
|
|
289
|
+
const persistKey = options?.persistKey;
|
|
290
|
+
const [currentStep, setCurrentStepInternal] = (0, react_1.useState)(initialStep ?? null);
|
|
291
|
+
const initializedRef = (0, react_1.useRef)(false);
|
|
292
|
+
const writer = (0, react_1.useMemo)(() => createDebouncedWriter(bridge), [bridge]);
|
|
293
|
+
// Load persisted value on mount when persistKey is provided; flush any
|
|
294
|
+
// pending write on unmount/key change so we don't lose the last nav.
|
|
295
|
+
(0, react_1.useEffect)(() => {
|
|
296
|
+
if (!persistKey) {
|
|
297
|
+
initializedRef.current = true;
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
let cancelled = false;
|
|
301
|
+
bridge
|
|
302
|
+
.request('storage_read', {
|
|
303
|
+
path: `__state/${persistKey}`,
|
|
304
|
+
})
|
|
305
|
+
.then((result) => {
|
|
306
|
+
// Don't clobber a user-initiated setCurrentStep that landed before this resolved.
|
|
307
|
+
if (cancelled || initializedRef.current)
|
|
308
|
+
return;
|
|
309
|
+
if (result.exists && result.content !== null) {
|
|
310
|
+
try {
|
|
311
|
+
const parsed = JSON.parse(result.content);
|
|
312
|
+
if (typeof parsed === 'string' || parsed === null) {
|
|
313
|
+
setCurrentStepInternal(parsed);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
// Corrupted data — keep initial value
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
initializedRef.current = true;
|
|
321
|
+
})
|
|
322
|
+
.catch(() => {
|
|
323
|
+
initializedRef.current = true;
|
|
324
|
+
});
|
|
325
|
+
return () => {
|
|
326
|
+
cancelled = true;
|
|
327
|
+
writer.flush();
|
|
328
|
+
};
|
|
329
|
+
}, [bridge, persistKey, writer]);
|
|
330
|
+
// Subscribe to host-driven step navigation.
|
|
233
331
|
(0, react_1.useEffect)(() => {
|
|
234
332
|
return bridge.onStepNavigationUpdate((nodeId) => {
|
|
235
|
-
|
|
333
|
+
setCurrentStepInternal(nodeId);
|
|
334
|
+
if (persistKey) {
|
|
335
|
+
writer.schedule(`__state/${persistKey}`, JSON.stringify(nodeId));
|
|
336
|
+
}
|
|
236
337
|
});
|
|
237
|
-
}, [bridge]);
|
|
338
|
+
}, [bridge, persistKey, writer]);
|
|
339
|
+
const setCurrentStep = (0, react_1.useCallback)((nodeId) => {
|
|
340
|
+
initializedRef.current = true;
|
|
341
|
+
setCurrentStepInternal(nodeId);
|
|
342
|
+
if (persistKey) {
|
|
343
|
+
writer.schedule(`__state/${persistKey}`, JSON.stringify(nodeId));
|
|
344
|
+
}
|
|
345
|
+
}, [persistKey, writer]);
|
|
238
346
|
return { currentStep, setCurrentStep };
|
|
239
347
|
}
|
|
240
348
|
/**
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":";;AA6CA,kCAeC;AASD,oCASC;AAQD,wCAqCC;AAQD,kDAoCC;AAWD,gDA2BC;AAOD,8CAgBC;AAiBD,gDAmDC;AAED,8CAWC;AA4BD,4CAyFC;AAWD,oCAqGC;AA1hBD,iCAAsF;AACtF,yCAAsC;AACtC,uCAA8C;AA0B9C;;GAEG;AACH,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,2BAAiB,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW;IACzB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAkB,IAAI,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,OAAO,CAAW,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACrD,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,KAAK,EAAE,IAAY,EAA0B,EAAE;QAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,cAAc,EACd,EAAE,IAAI,EAAE,CACT,CAAC;QACF,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,KAAK,EAAE,IAAY,EAAE,OAAe,EAAiB,EAAE;QACrD,MAAM,MAAM,CAAC,OAAO,CAAuB,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,KAAK,EAAE,MAAe,EAAqB,EAAE;QAC3C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAsB,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,OAAO,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1B,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,UAAU,GAAG,IAAA,mBAAW,EAC5B,KAAK,EAAE,IAAY,EAAiB,EAAE;QACpC,MAAM,MAAM,CAAC,OAAO,CAAuB,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB;IACjC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAgC,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,KAAK,EAAE,MAA8B,EAAmC,EAAE;QACxE,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAErB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvD,2DAA2D;gBAC3D,6DAA6D;gBAC7D,mDAAmD;gBACnD,IAAA,qBAAS,EAAC,GAAG,EAAE;oBACb,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,kBAAkB;IAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAA+B,IAAI,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,KAAK,EAAE,MAA6B,EAAkC,EAAE;QACtE,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAwB,gBAAgB,EAAE,MAAM,EAAE,MAAO,CAAC,CAAC;YAC3F,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAExE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,UAAU,GAAG,IAAA,mBAAW,EAC5B,CAAC,IAAY,EAAE,EAAE;QACf,MAAM,CAAC,OAAO,CAAO,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,GAAW,EACX,YAAe;IAEf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAI,YAAY,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAErC,6BAA6B;IAC7B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM;aACH,OAAO,CAGL,cAAc,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,CAAC;aAC7C,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACH,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;YACH,CAAC;YACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAElB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,CAAC,IAA0B,EAAE,EAAE;QAC7B,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAE,IAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpF,yEAAyE;YACzE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,UAAU,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC,CAAC,wDAAwD;YACvE,CAAC;YACD,mCAAmC;YACnC,MAAM;iBACH,OAAO,CAAO,eAAe,EAAE;gBAC9B,IAAI,EAAE,WAAW,GAAG,EAAE;gBACtB,OAAO,EAAE,UAAU;aACpB,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,EAAE,GAAG,CAAC,CACd,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,iBAAiB,CAAC,WAAoB;IACpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAgB,WAAW,IAAI,IAAI,CAAC,CAAC;IAEnF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9C,cAAc,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAClC,KAAK,EACH,IAAY,EACZ,OAA2C,EACb,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,wBAAwB,EACxB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,CAClD,CAAC;QACF,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAoC,EAAE;QAC7E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,uBAAuB,EACvB,EAAE,CACH,CAAC;QACF,OAAO,GAAG,CAAC,WAAW,CAAC;IACzB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAClC,KAAK,EAAE,IAAY,EAAiB,EAAE;QACpC,MAAM,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,GAAG,GAAG,IAAA,mBAAW,EACrB,KAAK,EACH,UAAkB,EAClB,GAAW,EACX,IAAO,EACQ,EAAE;QACjB,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,GAAG,GAAG,IAAA,mBAAW,EACrB,KAAK,EACH,UAAkB,EAClB,GAAW,EACQ,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAqB,UAAU,EAAE;YAC/D,UAAU;YACV,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,KAAK,GAAG,IAAA,mBAAW,EACvB,KAAK,EACH,UAAkB,EAClB,OAA+B,EACG,EAAE;QACpC,OAAO,MAAM,CAAC,OAAO,CAA0B,YAAY,EAAE;YAC3D,UAAU;YACV,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,KAAK,EAAE,UAAkB,EAAE,GAAW,EAAiB,EAAE;QACvD,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,IAAA,eAAO,EACZ,GAAG,EAAE,CAAC,CAAC;QACL,gBAAgB;QAChB,eAAe;QACf,gBAAgB;QAChB,GAAG;QACH,GAAG;QACH,KAAK;QACL,MAAM,EAAE,SAAS;KAClB,CAAC,EACF,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAClF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAiB,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAqB,EAAE,CAAC,CAAC;IACzE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAEjD,0CAA0C;IAC1C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC;YACV,MAAM,CAAC,OAAO,CAAiB,oBAAoB,EAAE,EAAE,CAAC;YACxD,MAAM,CAAC,OAAO,CAAqB,wBAAwB,EAAE,EAAE,CAAC;SACjE,CAAC;aACC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;YACtB,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,CAAC,KAAK,CAAC,CAAC;gBACnB,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtB,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,OAAO;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,KAAK,EACH,iBAAyB,EACzB,OAA8B,EACA,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAsB,gBAAgB,EAAE;YACzE,iBAAiB;YACjB,GAAG,OAAO;SACX,CAAC,CAAC;QAEH,wEAAwE;QACxE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,MAAM,CAAC,WAAY,CAAC,iBAAiB,CACrE,CAAC;gBACF,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;oBAClB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,WAAY,CAAC;oBACxC,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,WAAY,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,cAAc,GAAG,IAAA,mBAAW,EAChC,CAAC,iBAAyB,EAAW,EAAE;QACrC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,iBAAiB,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3F,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAA,mBAAW,EAAC,KAAK,IAA8B,EAAE;QAC1E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,4BAA4B,EAC5B,EAAE,CACH,CAAC;QACF,OAAO,GAAG,CAAC,SAAS,CAAC;IACvB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAiC,EAAE;QAC3E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAqB,eAAe,EAAE,EAAE,CAAC,CAAC;QAC/E,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,IAAA,eAAO,EACZ,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,cAAc;QACd,kBAAkB;QAClB,gBAAgB;QAChB,SAAS;KACV,CAAC,EACF;QACE,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,cAAc;QACd,kBAAkB;QAClB,gBAAgB;QAChB,SAAS;KACV,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":";;AA4GA,kCAeC;AASD,oCASC;AAQD,wCAqCC;AAeD,kDAoCC;AAWD,gDA2BC;AAOD,8CAgBC;AASD,gDA+CC;AAgBD,8CAoEC;AA4BD,4CAyFC;AAWD,oCAqGC;AA3pBD,iCAAsF;AACtF,yCAAsC;AACtC,uCAA8C;AA2B9C;;GAEG;AACH,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,2BAAiB,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAc1C;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAAC,MAAkB;IAC/C,IAAI,OAAO,GAAwB,IAAI,CAAC;IAExC,SAAS,KAAK;QACZ,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC3C,IAAI,OAAO,KAAK,IAAI;YAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,CAAC,OAAO,CAAO,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,SAAS,QAAQ,CAAC,IAAY,EAAE,OAAe;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACrC,KAAK,EAAE,CAAC;QACV,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;YAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,GAAG,OAAO,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;QAC/D,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW;IACzB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAkB,IAAI,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,OAAO,CAAW,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACrD,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,KAAK,EAAE,IAAY,EAA0B,EAAE;QAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,cAAc,EACd,EAAE,IAAI,EAAE,CACT,CAAC;QACF,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,KAAK,EAAE,IAAY,EAAE,OAAe,EAAiB,EAAE;QACrD,MAAM,MAAM,CAAC,OAAO,CAAuB,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,KAAK,EAAE,MAAe,EAAqB,EAAE;QAC3C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAsB,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,OAAO,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1B,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,UAAU,GAAG,IAAA,mBAAW,EAC5B,KAAK,EAAE,IAAY,EAAiB,EAAE;QACpC,MAAM,MAAM,CAAC,OAAO,CAAuB,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,mBAAmB;IACjC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAgC,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,KAAK,EAAE,MAA8B,EAAmC,EAAE;QACxE,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAErB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvD,2DAA2D;gBAC3D,6DAA6D;gBAC7D,mDAAmD;gBACnD,IAAA,qBAAS,EAAC,GAAG,EAAE;oBACb,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,kBAAkB;IAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAA+B,IAAI,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,KAAK,EAAE,MAA6B,EAAkC,EAAE;QACtE,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAwB,gBAAgB,EAAE,MAAM,EAAE,MAAO,CAAC,CAAC;YAC3F,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAExE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,UAAU,GAAG,IAAA,mBAAW,EAC5B,CAAC,IAAY,EAAE,EAAE;QACf,MAAM,CAAC,OAAO,CAAO,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,GAAW,EACX,YAAe;IAEf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAI,YAAY,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAI,YAAY,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtE,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM;aACH,OAAO,CAGL,cAAc,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,CAAC;aAC7C,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAM,CAAC;oBAC/C,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC;oBAC1B,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;YACH,CAAC;YACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,CAAC,IAA0B,EAAE,EAAE;QAC7B,MAAM,QAAQ,GACZ,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAE,IAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC5B,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC,EACD,CAAC,GAAG,EAAE,MAAM,CAAC,CACd,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,iBAAiB,CAC/B,WAAoB,EACpB,OAA+B;IAE/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACvC,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC,GAAG,IAAA,gBAAQ,EAAgB,WAAW,IAAI,IAAI,CAAC,CAAC;IAC3F,MAAM,cAAc,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtE,uEAAuE;IACvE,qEAAqE;IACrE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM;aACH,OAAO,CAA8C,cAAc,EAAE;YACpE,IAAI,EAAE,WAAW,UAAU,EAAE;SAC9B,CAAC;aACD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,kFAAkF;YAClF,IAAI,SAAS,IAAI,cAAc,CAAC,OAAO;gBAAE,OAAO;YAChD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;wBAClD,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,sCAAsC;gBACxC,CAAC;YACH,CAAC;YACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAEjC,4CAA4C;IAC5C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9C,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,QAAQ,CAAC,WAAW,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAEjC,MAAM,cAAc,GAAG,IAAA,mBAAW,EAChC,CAAC,MAAqB,EAAE,EAAE;QACxB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,WAAW,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,EACD,CAAC,UAAU,EAAE,MAAM,CAAC,CACrB,CAAC;IAEF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAClC,KAAK,EACH,IAAY,EACZ,OAA2C,EACb,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,wBAAwB,EACxB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,CAClD,CAAC;QACF,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAoC,EAAE;QAC7E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,uBAAuB,EACvB,EAAE,CACH,CAAC;QACF,OAAO,GAAG,CAAC,WAAW,CAAC;IACzB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAClC,KAAK,EAAE,IAAY,EAAiB,EAAE;QACpC,MAAM,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,GAAG,GAAG,IAAA,mBAAW,EACrB,KAAK,EACH,UAAkB,EAClB,GAAW,EACX,IAAO,EACQ,EAAE;QACjB,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,GAAG,GAAG,IAAA,mBAAW,EACrB,KAAK,EACH,UAAkB,EAClB,GAAW,EACQ,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAqB,UAAU,EAAE;YAC/D,UAAU;YACV,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,KAAK,GAAG,IAAA,mBAAW,EACvB,KAAK,EACH,UAAkB,EAClB,OAA+B,EACG,EAAE;QACpC,OAAO,MAAM,CAAC,OAAO,CAA0B,YAAY,EAAE;YAC3D,UAAU;YACV,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,KAAK,EAAE,UAAkB,EAAE,GAAW,EAAiB,EAAE;QACvD,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,IAAA,eAAO,EACZ,GAAG,EAAE,CAAC,CAAC;QACL,gBAAgB;QAChB,eAAe;QACf,gBAAgB;QAChB,GAAG;QACH,GAAG;QACH,KAAK;QACL,MAAM,EAAE,SAAS;KAClB,CAAC,EACF,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAClF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAiB,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAqB,EAAE,CAAC,CAAC;IACzE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAEjD,0CAA0C;IAC1C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC;YACV,MAAM,CAAC,OAAO,CAAiB,oBAAoB,EAAE,EAAE,CAAC;YACxD,MAAM,CAAC,OAAO,CAAqB,wBAAwB,EAAE,EAAE,CAAC;SACjE,CAAC;aACC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;YACtB,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,CAAC,KAAK,CAAC,CAAC;gBACnB,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtB,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,OAAO;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,KAAK,EACH,iBAAyB,EACzB,OAA8B,EACA,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAsB,gBAAgB,EAAE;YACzE,iBAAiB;YACjB,GAAG,OAAO;SACX,CAAC,CAAC;QAEH,wEAAwE;QACxE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,MAAM,CAAC,WAAY,CAAC,iBAAiB,CACrE,CAAC;gBACF,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;oBAClB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,WAAY,CAAC;oBACxC,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,WAAY,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,cAAc,GAAG,IAAA,mBAAW,EAChC,CAAC,iBAAyB,EAAW,EAAE;QACrC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,iBAAiB,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3F,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,MAAM,kBAAkB,GAAG,IAAA,mBAAW,EAAC,KAAK,IAA8B,EAAE;QAC1E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,4BAA4B,EAC5B,EAAE,CACH,CAAC;QACF,OAAO,GAAG,CAAC,SAAS,CAAC;IACvB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAiC,EAAE;QAC3E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAqB,eAAe,EAAE,EAAE,CAAC,CAAC;QAC/E,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,IAAA,eAAO,EACZ,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,cAAc;QACd,kBAAkB;QAClB,gBAAgB;QAChB,SAAS;KACV,CAAC,EACF;QACE,QAAQ;QACR,QAAQ;QACR,YAAY;QACZ,cAAc;QACd,kBAAkB;QAClB,gBAAgB;QAChB,SAAS;KACV,CACF,CAAC;AACJ,CAAC"}
|
package/dist/hooks.test.js
CHANGED
|
@@ -44,6 +44,7 @@ jest.mock('react', () => ({
|
|
|
44
44
|
}),
|
|
45
45
|
useCallback: jest.fn((fn) => fn),
|
|
46
46
|
useRef: jest.fn((initial) => ({ current: initial })),
|
|
47
|
+
useMemo: jest.fn((fn) => fn()),
|
|
47
48
|
}));
|
|
48
49
|
jest.mock('react-dom', () => ({
|
|
49
50
|
flushSync: jest.fn((fn) => fn()),
|
|
@@ -184,102 +185,6 @@ describe('SDK hooks', () => {
|
|
|
184
185
|
expect(capturedEffectCleanup).toBe(unsubscribe);
|
|
185
186
|
});
|
|
186
187
|
});
|
|
187
|
-
describe('usePersistentState', () => {
|
|
188
|
-
beforeEach(() => {
|
|
189
|
-
// Default mock for storage_read so the mount effect doesn't crash
|
|
190
|
-
mockBridge.request.mockResolvedValue({ exists: false, content: null });
|
|
191
|
-
});
|
|
192
|
-
it('loads persisted value from bridge storage on mount', () => {
|
|
193
|
-
mockBridge.request.mockResolvedValue({ exists: true, content: '"saved-value"' });
|
|
194
|
-
const { usePersistentState } = require('./hooks');
|
|
195
|
-
const [value] = usePersistentState('myKey', 'default');
|
|
196
|
-
// Initial render returns the default
|
|
197
|
-
expect(value).toBe('default');
|
|
198
|
-
// Effect fires storage_read
|
|
199
|
-
expect(mockBridge.request).toHaveBeenCalledWith('storage_read', {
|
|
200
|
-
path: '__state/myKey',
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
it('setValue fires storage_write for new values', () => {
|
|
204
|
-
// Track the updater function passed to setValueInternal
|
|
205
|
-
let capturedUpdater = null;
|
|
206
|
-
const mockSetValueInternal = jest.fn((fn) => {
|
|
207
|
-
capturedUpdater = fn;
|
|
208
|
-
});
|
|
209
|
-
const react = require('react');
|
|
210
|
-
react.useState.mockReturnValueOnce(['old-value', mockSetValueInternal]);
|
|
211
|
-
const { usePersistentState } = require('./hooks');
|
|
212
|
-
const [, setValue] = usePersistentState('myKey', 'old-value');
|
|
213
|
-
// Call setValue with a new value
|
|
214
|
-
setValue('new-value');
|
|
215
|
-
expect(mockSetValueInternal).toHaveBeenCalled();
|
|
216
|
-
// Execute the updater function — it should fire storage_write
|
|
217
|
-
mockBridge.request.mockClear();
|
|
218
|
-
mockBridge.request.mockResolvedValue(undefined);
|
|
219
|
-
const result = capturedUpdater('old-value');
|
|
220
|
-
expect(result).toBe('new-value');
|
|
221
|
-
expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
|
|
222
|
-
path: '__state/myKey',
|
|
223
|
-
content: '"new-value"',
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
it('setValue skips storage_write when value has not changed', () => {
|
|
227
|
-
let capturedUpdater = null;
|
|
228
|
-
const mockSetValueInternal = jest.fn((fn) => {
|
|
229
|
-
capturedUpdater = fn;
|
|
230
|
-
});
|
|
231
|
-
const react = require('react');
|
|
232
|
-
react.useState.mockReturnValueOnce(['same-value', mockSetValueInternal]);
|
|
233
|
-
const { usePersistentState } = require('./hooks');
|
|
234
|
-
const [, setValue] = usePersistentState('myKey', 'same-value');
|
|
235
|
-
setValue('same-value');
|
|
236
|
-
// Execute the updater — should return prev and NOT fire storage_write
|
|
237
|
-
mockBridge.request.mockClear();
|
|
238
|
-
const result = capturedUpdater('same-value');
|
|
239
|
-
expect(result).toBe('same-value');
|
|
240
|
-
// storage_write should NOT be called
|
|
241
|
-
expect(mockBridge.request).not.toHaveBeenCalled();
|
|
242
|
-
});
|
|
243
|
-
it('setValue skips storage_write for identical objects', () => {
|
|
244
|
-
let capturedUpdater = null;
|
|
245
|
-
const mockSetValueInternal = jest.fn((fn) => {
|
|
246
|
-
capturedUpdater = fn;
|
|
247
|
-
});
|
|
248
|
-
const react = require('react');
|
|
249
|
-
const prevObj = { a: 1, b: [2, 3] };
|
|
250
|
-
react.useState.mockReturnValueOnce([prevObj, mockSetValueInternal]);
|
|
251
|
-
const { usePersistentState } = require('./hooks');
|
|
252
|
-
const [, setValue] = usePersistentState('myKey', prevObj);
|
|
253
|
-
// Set a structurally identical but referentially different object
|
|
254
|
-
setValue({ a: 1, b: [2, 3] });
|
|
255
|
-
mockBridge.request.mockClear();
|
|
256
|
-
const result = capturedUpdater(prevObj);
|
|
257
|
-
// Should return the original prev object (preserving referential identity)
|
|
258
|
-
expect(result).toBe(prevObj);
|
|
259
|
-
// storage_write should NOT be called
|
|
260
|
-
expect(mockBridge.request).not.toHaveBeenCalled();
|
|
261
|
-
});
|
|
262
|
-
it('setValue supports functional updater form', () => {
|
|
263
|
-
let capturedUpdater = null;
|
|
264
|
-
const mockSetValueInternal = jest.fn((fn) => {
|
|
265
|
-
capturedUpdater = fn;
|
|
266
|
-
});
|
|
267
|
-
const react = require('react');
|
|
268
|
-
react.useState.mockReturnValueOnce([[1, 2], mockSetValueInternal]);
|
|
269
|
-
const { usePersistentState } = require('./hooks');
|
|
270
|
-
const [, setValue] = usePersistentState('myKey', [1, 2]);
|
|
271
|
-
// Use functional updater
|
|
272
|
-
setValue((prev) => [...prev, 3]);
|
|
273
|
-
mockBridge.request.mockClear();
|
|
274
|
-
mockBridge.request.mockResolvedValue(undefined);
|
|
275
|
-
const result = capturedUpdater([1, 2]);
|
|
276
|
-
expect(result).toEqual([1, 2, 3]);
|
|
277
|
-
expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
|
|
278
|
-
path: '__state/myKey',
|
|
279
|
-
content: '[1,2,3]',
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
188
|
describe('useStepNavigation', () => {
|
|
284
189
|
it('returns initial step and subscribes to updates', () => {
|
|
285
190
|
const { useStepNavigation } = require('./hooks');
|
|
@@ -300,6 +205,195 @@ describe('SDK hooks', () => {
|
|
|
300
205
|
useStepNavigation();
|
|
301
206
|
expect(capturedEffectCleanup).toBe(unsubscribe);
|
|
302
207
|
});
|
|
208
|
+
it('without persistKey, does not touch storage on mount or setCurrentStep', () => {
|
|
209
|
+
const { useStepNavigation } = require('./hooks');
|
|
210
|
+
const result = useStepNavigation('step-1');
|
|
211
|
+
expect(mockBridge.request).not.toHaveBeenCalledWith('storage_read', expect.anything());
|
|
212
|
+
result.setCurrentStep('step-2');
|
|
213
|
+
expect(mockBridge.request).not.toHaveBeenCalledWith('storage_write', expect.anything());
|
|
214
|
+
});
|
|
215
|
+
it('with persistKey, reads persisted value on mount', () => {
|
|
216
|
+
const { useStepNavigation } = require('./hooks');
|
|
217
|
+
useStepNavigation('step-1', { persistKey: 'currentStep' });
|
|
218
|
+
expect(mockBridge.request).toHaveBeenCalledWith('storage_read', {
|
|
219
|
+
path: '__state/currentStep',
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
it('with persistKey, writes on setCurrentStep (after debounce flush)', () => {
|
|
223
|
+
jest.useFakeTimers();
|
|
224
|
+
try {
|
|
225
|
+
const { useStepNavigation } = require('./hooks');
|
|
226
|
+
const result = useStepNavigation('step-1', { persistKey: 'currentStep' });
|
|
227
|
+
mockBridge.request.mockClear();
|
|
228
|
+
result.setCurrentStep('step-2');
|
|
229
|
+
expect(mockSetState).toHaveBeenCalledWith('step-2');
|
|
230
|
+
// Setter updates in-memory state immediately; the write is debounced.
|
|
231
|
+
expect(mockBridge.request).not.toHaveBeenCalledWith('storage_write', expect.anything());
|
|
232
|
+
jest.advanceTimersByTime(260);
|
|
233
|
+
expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
|
|
234
|
+
path: '__state/currentStep',
|
|
235
|
+
content: JSON.stringify('step-2'),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
finally {
|
|
239
|
+
jest.useRealTimers();
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
it('with persistKey, persists host step_navigate messages (after debounce flush)', () => {
|
|
243
|
+
jest.useFakeTimers();
|
|
244
|
+
try {
|
|
245
|
+
let hostCallback = null;
|
|
246
|
+
mockBridge.onStepNavigationUpdate.mockImplementation((cb) => {
|
|
247
|
+
hostCallback = cb;
|
|
248
|
+
return () => { };
|
|
249
|
+
});
|
|
250
|
+
const { useStepNavigation } = require('./hooks');
|
|
251
|
+
useStepNavigation('step-1', { persistKey: 'currentStep' });
|
|
252
|
+
mockBridge.request.mockClear();
|
|
253
|
+
expect(hostCallback).not.toBeNull();
|
|
254
|
+
hostCallback('step-from-host');
|
|
255
|
+
expect(mockSetState).toHaveBeenCalledWith('step-from-host');
|
|
256
|
+
jest.advanceTimersByTime(260);
|
|
257
|
+
expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
|
|
258
|
+
path: '__state/currentStep',
|
|
259
|
+
content: JSON.stringify('step-from-host'),
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
jest.useRealTimers();
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
it('with persistKey, persisted value wins over initialStep on mount', async () => {
|
|
267
|
+
mockBridge.request.mockResolvedValue({
|
|
268
|
+
content: JSON.stringify('step-persisted'),
|
|
269
|
+
exists: true,
|
|
270
|
+
});
|
|
271
|
+
const { useStepNavigation } = require('./hooks');
|
|
272
|
+
useStepNavigation('step-initial', { persistKey: 'currentStep' });
|
|
273
|
+
// Let the storage_read promise resolve
|
|
274
|
+
await Promise.resolve();
|
|
275
|
+
await Promise.resolve();
|
|
276
|
+
// After the read resolves, the internal setter is called with the persisted value
|
|
277
|
+
expect(mockSetState).toHaveBeenCalledWith('step-persisted');
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
describe('usePersistentState', () => {
|
|
281
|
+
function countStorageWrites(key) {
|
|
282
|
+
return mockBridge.request.mock.calls.filter((call) => call[0] === 'storage_write' && call[1].path === `__state/${key}`).length;
|
|
283
|
+
}
|
|
284
|
+
it('reads initial value from storage on mount', () => {
|
|
285
|
+
const { usePersistentState } = require('./hooks');
|
|
286
|
+
usePersistentState('counter', 0);
|
|
287
|
+
expect(mockBridge.request).toHaveBeenCalledWith('storage_read', {
|
|
288
|
+
path: '__state/counter',
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
it('applies persisted value after storage_read resolves', async () => {
|
|
292
|
+
mockBridge.request.mockResolvedValue({
|
|
293
|
+
content: JSON.stringify(42),
|
|
294
|
+
exists: true,
|
|
295
|
+
});
|
|
296
|
+
const { usePersistentState } = require('./hooks');
|
|
297
|
+
usePersistentState('counter', 0);
|
|
298
|
+
await Promise.resolve();
|
|
299
|
+
await Promise.resolve();
|
|
300
|
+
expect(mockSetState).toHaveBeenCalledWith(42);
|
|
301
|
+
});
|
|
302
|
+
it('setter updates in-memory value synchronously, defers write', () => {
|
|
303
|
+
jest.useFakeTimers();
|
|
304
|
+
try {
|
|
305
|
+
const { usePersistentState } = require('./hooks');
|
|
306
|
+
const [, setValue] = usePersistentState('counter', 0);
|
|
307
|
+
mockBridge.request.mockClear();
|
|
308
|
+
setValue(1);
|
|
309
|
+
// In-memory update fires immediately via functional updater
|
|
310
|
+
expect(mockSetState).toHaveBeenCalled();
|
|
311
|
+
// No write yet — it's debounced
|
|
312
|
+
expect(countStorageWrites('counter')).toBe(0);
|
|
313
|
+
jest.advanceTimersByTime(260);
|
|
314
|
+
expect(countStorageWrites('counter')).toBe(1);
|
|
315
|
+
expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
|
|
316
|
+
path: '__state/counter',
|
|
317
|
+
content: JSON.stringify(1),
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
finally {
|
|
321
|
+
jest.useRealTimers();
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
it('coalesces a rapid burst of setter calls into one write with the last value', () => {
|
|
325
|
+
jest.useFakeTimers();
|
|
326
|
+
try {
|
|
327
|
+
const { usePersistentState } = require('./hooks');
|
|
328
|
+
const [, setValue] = usePersistentState('counter', 0);
|
|
329
|
+
mockBridge.request.mockClear();
|
|
330
|
+
// Simulate a 60fps burst — 60 updates in ~1 second
|
|
331
|
+
for (let i = 1; i <= 60; i++) {
|
|
332
|
+
setValue(i);
|
|
333
|
+
jest.advanceTimersByTime(16);
|
|
334
|
+
}
|
|
335
|
+
// maxWait is 1000ms, so we'd get at most 1 write during the burst
|
|
336
|
+
const writesDuringBurst = countStorageWrites('counter');
|
|
337
|
+
expect(writesDuringBurst).toBeLessThanOrEqual(1);
|
|
338
|
+
// Let the trailing-edge flush fire
|
|
339
|
+
jest.advanceTimersByTime(260);
|
|
340
|
+
const writes = mockBridge.request.mock.calls.filter((call) => call[0] === 'storage_write');
|
|
341
|
+
// Total writes over the burst: at most 2 (one at maxWait, one trailing).
|
|
342
|
+
// Never 60. Final write contains the last value.
|
|
343
|
+
expect(writes.length).toBeGreaterThanOrEqual(1);
|
|
344
|
+
expect(writes.length).toBeLessThanOrEqual(2);
|
|
345
|
+
expect(writes[writes.length - 1][1]).toEqual({
|
|
346
|
+
path: '__state/counter',
|
|
347
|
+
content: JSON.stringify(60),
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
finally {
|
|
351
|
+
jest.useRealTimers();
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
it('enforces maxWait so continuous updates still persist at least once per second', () => {
|
|
355
|
+
jest.useFakeTimers();
|
|
356
|
+
try {
|
|
357
|
+
const { usePersistentState } = require('./hooks');
|
|
358
|
+
const [, setValue] = usePersistentState('counter', 0);
|
|
359
|
+
mockBridge.request.mockClear();
|
|
360
|
+
// Continuous updates every 50ms for 3 seconds — trailing-edge never fires
|
|
361
|
+
// because there's always another call within 250ms, so only the maxWait
|
|
362
|
+
// (1000ms) cap can trigger writes.
|
|
363
|
+
for (let t = 0; t < 3000; t += 50) {
|
|
364
|
+
setValue(t);
|
|
365
|
+
jest.advanceTimersByTime(50);
|
|
366
|
+
}
|
|
367
|
+
const writes = countStorageWrites('counter');
|
|
368
|
+
// Roughly 3 writes (one per 1000ms maxWait window) — allow a small jitter range
|
|
369
|
+
expect(writes).toBeGreaterThanOrEqual(2);
|
|
370
|
+
expect(writes).toBeLessThanOrEqual(4);
|
|
371
|
+
}
|
|
372
|
+
finally {
|
|
373
|
+
jest.useRealTimers();
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
it('flushes pending write on unmount', () => {
|
|
377
|
+
jest.useFakeTimers();
|
|
378
|
+
try {
|
|
379
|
+
const { usePersistentState } = require('./hooks');
|
|
380
|
+
const [, setValue] = usePersistentState('counter', 0);
|
|
381
|
+
mockBridge.request.mockClear();
|
|
382
|
+
setValue(7);
|
|
383
|
+
expect(countStorageWrites('counter')).toBe(0);
|
|
384
|
+
// Invoke the effect cleanup captured by the react mock — simulates unmount
|
|
385
|
+
expect(capturedEffectCleanup).not.toBeNull();
|
|
386
|
+
capturedEffectCleanup();
|
|
387
|
+
expect(countStorageWrites('counter')).toBe(1);
|
|
388
|
+
expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
|
|
389
|
+
path: '__state/counter',
|
|
390
|
+
content: JSON.stringify(7),
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
finally {
|
|
394
|
+
jest.useRealTimers();
|
|
395
|
+
}
|
|
396
|
+
});
|
|
303
397
|
});
|
|
304
398
|
});
|
|
305
399
|
//# sourceMappingURL=hooks.test.js.map
|