@chenzy-design/core 0.2.1 → 0.4.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/ai-chat-dialogue.d.ts +300 -0
- package/dist/ai-chat-dialogue.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.js +699 -0
- package/dist/ai-chat-dialogue.js.map +1 -0
- package/dist/ai-chat-dialogue.test.d.ts +2 -0
- package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.test.js +338 -0
- package/dist/ai-chat-dialogue.test.js.map +1 -0
- package/dist/ai-chat-input.d.ts +191 -0
- package/dist/ai-chat-input.d.ts.map +1 -0
- package/dist/ai-chat-input.js +274 -0
- package/dist/ai-chat-input.js.map +1 -0
- package/dist/ai-chat-input.test.d.ts +2 -0
- package/dist/ai-chat-input.test.d.ts.map +1 -0
- package/dist/ai-chat-input.test.js +339 -0
- package/dist/ai-chat-input.test.js.map +1 -0
- package/dist/audio-player.d.ts +154 -0
- package/dist/audio-player.d.ts.map +1 -0
- package/dist/audio-player.js +254 -0
- package/dist/audio-player.js.map +1 -0
- package/dist/audio-player.test.d.ts +2 -0
- package/dist/audio-player.test.d.ts.map +1 -0
- package/dist/audio-player.test.js +275 -0
- package/dist/audio-player.test.js.map +1 -0
- package/dist/back-top.d.ts +4 -1
- package/dist/back-top.d.ts.map +1 -1
- package/dist/back-top.js +5 -2
- package/dist/back-top.js.map +1 -1
- package/dist/back-top.test.js +3 -2
- package/dist/back-top.test.js.map +1 -1
- package/dist/calendar.d.ts +132 -44
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +413 -70
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.test.js +160 -76
- package/dist/calendar.test.js.map +1 -1
- package/dist/chat.d.ts +172 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +210 -0
- package/dist/chat.js.map +1 -0
- package/dist/chat.test.d.ts +2 -0
- package/dist/chat.test.d.ts.map +1 -0
- package/dist/chat.test.js +181 -0
- package/dist/chat.test.js.map +1 -0
- package/dist/code-highlight.d.ts +30 -0
- package/dist/code-highlight.d.ts.map +1 -0
- package/dist/code-highlight.js +37 -0
- package/dist/code-highlight.js.map +1 -0
- package/dist/code-highlight.test.d.ts +2 -0
- package/dist/code-highlight.test.d.ts.map +1 -0
- package/dist/code-highlight.test.js +36 -0
- package/dist/code-highlight.test.js.map +1 -0
- package/dist/collapsible.d.ts +41 -0
- package/dist/collapsible.d.ts.map +1 -0
- package/dist/collapsible.js +33 -0
- package/dist/collapsible.js.map +1 -0
- package/dist/collapsible.test.d.ts +2 -0
- package/dist/collapsible.test.d.ts.map +1 -0
- package/dist/collapsible.test.js +57 -0
- package/dist/collapsible.test.js.map +1 -0
- package/dist/color-value.d.ts +60 -0
- package/dist/color-value.d.ts.map +1 -0
- package/dist/color-value.js +165 -0
- package/dist/color-value.js.map +1 -0
- package/dist/color-value.test.d.ts +2 -0
- package/dist/color-value.test.d.ts.map +1 -0
- package/dist/color-value.test.js +104 -0
- package/dist/color-value.test.js.map +1 -0
- package/dist/config-provider.d.ts +76 -37
- package/dist/config-provider.d.ts.map +1 -1
- package/dist/config-provider.js +107 -32
- package/dist/config-provider.js.map +1 -1
- package/dist/config-provider.test.js +123 -60
- package/dist/config-provider.test.js.map +1 -1
- package/dist/cropper.d.ts +164 -0
- package/dist/cropper.d.ts.map +1 -0
- package/dist/cropper.js +841 -0
- package/dist/cropper.js.map +1 -0
- package/dist/cropper.test.d.ts +2 -0
- package/dist/cropper.test.d.ts.map +1 -0
- package/dist/cropper.test.js +259 -0
- package/dist/cropper.test.js.map +1 -0
- package/dist/drag-move.d.ts +119 -0
- package/dist/drag-move.d.ts.map +1 -0
- package/dist/drag-move.js +237 -0
- package/dist/drag-move.js.map +1 -0
- package/dist/drag-move.test.d.ts +2 -0
- package/dist/drag-move.test.d.ts.map +1 -0
- package/dist/drag-move.test.js +304 -0
- package/dist/drag-move.test.js.map +1 -0
- package/dist/editable.d.ts +24 -4
- package/dist/editable.d.ts.map +1 -1
- package/dist/editable.js +18 -0
- package/dist/editable.js.map +1 -1
- package/dist/editable.test.js +55 -2
- package/dist/editable.test.js.map +1 -1
- package/dist/ellipsis.d.ts +13 -0
- package/dist/ellipsis.d.ts.map +1 -1
- package/dist/ellipsis.js +36 -0
- package/dist/ellipsis.js.map +1 -1
- package/dist/ellipsis.test.js +37 -1
- package/dist/ellipsis.test.js.map +1 -1
- package/dist/form-path.d.ts +19 -0
- package/dist/form-path.d.ts.map +1 -0
- package/dist/form-path.js +97 -0
- package/dist/form-path.js.map +1 -0
- package/dist/form-path.test.d.ts +2 -0
- package/dist/form-path.test.d.ts.map +1 -0
- package/dist/form-path.test.js +57 -0
- package/dist/form-path.test.js.map +1 -0
- package/dist/form-validate.d.ts +13 -0
- package/dist/form-validate.d.ts.map +1 -0
- package/dist/form-validate.js +204 -0
- package/dist/form-validate.js.map +1 -0
- package/dist/form.d.ts +91 -18
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +170 -115
- package/dist/form.js.map +1 -1
- package/dist/form.test.js +349 -76
- package/dist/form.test.js.map +1 -1
- package/dist/highlight.d.ts +42 -32
- package/dist/highlight.d.ts.map +1 -1
- package/dist/highlight.js +67 -41
- package/dist/highlight.js.map +1 -1
- package/dist/highlight.test.js +73 -32
- package/dist/highlight.test.js.map +1 -1
- package/dist/hotkeys.d.ts +151 -0
- package/dist/hotkeys.d.ts.map +1 -0
- package/dist/hotkeys.js +188 -0
- package/dist/hotkeys.js.map +1 -0
- package/dist/hotkeys.test.d.ts +2 -0
- package/dist/hotkeys.test.d.ts.map +1 -0
- package/dist/hotkeys.test.js +170 -0
- package/dist/hotkeys.test.js.map +1 -0
- package/dist/index.d.ts +33 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -13
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +34 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +54 -0
- package/dist/input.js.map +1 -0
- package/dist/input.test.d.ts +2 -0
- package/dist/input.test.d.ts.map +1 -0
- package/dist/input.test.js +56 -0
- package/dist/input.test.js.map +1 -0
- package/dist/markdown-render.d.ts +49 -0
- package/dist/markdown-render.d.ts.map +1 -0
- package/dist/markdown-render.js +61 -0
- package/dist/markdown-render.js.map +1 -0
- package/dist/markdown-render.test.d.ts +2 -0
- package/dist/markdown-render.test.d.ts.map +1 -0
- package/dist/markdown-render.test.js +106 -0
- package/dist/markdown-render.test.js.map +1 -0
- package/dist/notification.d.ts +40 -31
- package/dist/notification.d.ts.map +1 -1
- package/dist/notification.js +86 -70
- package/dist/notification.js.map +1 -1
- package/dist/notification.test.js +62 -39
- package/dist/notification.test.js.map +1 -1
- package/dist/numeral.d.ts +32 -0
- package/dist/numeral.d.ts.map +1 -0
- package/dist/numeral.js +67 -0
- package/dist/numeral.js.map +1 -0
- package/dist/numeral.test.d.ts +2 -0
- package/dist/numeral.test.d.ts.map +1 -0
- package/dist/numeral.test.js +59 -0
- package/dist/numeral.test.js.map +1 -0
- package/dist/overflow-list.d.ts +9 -40
- package/dist/overflow-list.d.ts.map +1 -1
- package/dist/overflow-list.js +9 -70
- package/dist/overflow-list.js.map +1 -1
- package/dist/overflow-list.test.js +1 -122
- package/dist/overflow-list.test.js.map +1 -1
- package/dist/pagination.d.ts +17 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +48 -0
- package/dist/pagination.js.map +1 -1
- package/dist/pagination.test.js +40 -1
- package/dist/pagination.test.js.map +1 -1
- package/dist/pincode.d.ts +79 -0
- package/dist/pincode.d.ts.map +1 -0
- package/dist/pincode.js +119 -0
- package/dist/pincode.js.map +1 -0
- package/dist/pincode.test.d.ts +2 -0
- package/dist/pincode.test.d.ts.map +1 -0
- package/dist/pincode.test.js +151 -0
- package/dist/pincode.test.js.map +1 -0
- package/dist/progress.d.ts +32 -30
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +257 -64
- package/dist/progress.js.map +1 -1
- package/dist/progress.test.js +50 -47
- package/dist/progress.test.js.map +1 -1
- package/dist/resizable.d.ts +200 -0
- package/dist/resizable.d.ts.map +1 -0
- package/dist/resizable.js +329 -0
- package/dist/resizable.js.map +1 -0
- package/dist/resizable.test.d.ts +2 -0
- package/dist/resizable.test.d.ts.map +1 -0
- package/dist/resizable.test.js +302 -0
- package/dist/resizable.test.js.map +1 -0
- package/dist/scroll-list.d.ts +69 -62
- package/dist/scroll-list.d.ts.map +1 -1
- package/dist/scroll-list.js +103 -144
- package/dist/scroll-list.js.map +1 -1
- package/dist/scroll-list.test.js +100 -110
- package/dist/scroll-list.test.js.map +1 -1
- package/dist/sidebar.d.ts +46 -0
- package/dist/sidebar.d.ts.map +1 -0
- package/dist/sidebar.js +65 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/sidebar.test.d.ts +2 -0
- package/dist/sidebar.test.d.ts.map +1 -0
- package/dist/sidebar.test.js +88 -0
- package/dist/sidebar.test.js.map +1 -0
- package/dist/spin.d.ts +5 -5
- package/dist/spin.d.ts.map +1 -1
- package/dist/spin.js +13 -39
- package/dist/spin.js.map +1 -1
- package/dist/spin.test.js +2 -26
- package/dist/spin.test.js.map +1 -1
- package/dist/toast.d.ts +33 -30
- package/dist/toast.d.ts.map +1 -1
- package/dist/toast.js +77 -72
- package/dist/toast.js.map +1 -1
- package/dist/toast.test.js +63 -37
- package/dist/toast.test.js.map +1 -1
- package/dist/tree.d.ts +22 -5
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +61 -9
- package/dist/tree.js.map +1 -1
- package/dist/tree.test.js +72 -1
- package/dist/tree.test.js.map +1 -1
- package/dist/user-guide.d.ts +73 -0
- package/dist/user-guide.d.ts.map +1 -0
- package/dist/user-guide.js +95 -0
- package/dist/user-guide.js.map +1 -0
- package/dist/user-guide.test.d.ts +2 -0
- package/dist/user-guide.test.d.ts.map +1 -0
- package/dist/user-guide.test.js +109 -0
- package/dist/user-guide.test.js.map +1 -0
- package/dist/video-player.d.ts +196 -0
- package/dist/video-player.d.ts.map +1 -0
- package/dist/video-player.js +461 -0
- package/dist/video-player.js.map +1 -0
- package/dist/video-player.test.d.ts +2 -0
- package/dist/video-player.test.d.ts.map +1 -0
- package/dist/video-player.test.js +435 -0
- package/dist/video-player.test.js.map +1 -0
- package/package.json +17 -1
- package/dist/banner.d.ts +0 -19
- package/dist/banner.d.ts.map +0 -1
- package/dist/banner.js +0 -20
- package/dist/banner.js.map +0 -1
- package/dist/banner.test.d.ts +0 -2
- package/dist/banner.test.d.ts.map +0 -1
- package/dist/banner.test.js +0 -29
- package/dist/banner.test.js.map +0 -1
- package/dist/breakpoints.d.ts +0 -30
- package/dist/breakpoints.d.ts.map +0 -1
- package/dist/breakpoints.js +0 -45
- package/dist/breakpoints.js.map +0 -1
- package/dist/breakpoints.test.d.ts +0 -2
- package/dist/breakpoints.test.d.ts.map +0 -1
- package/dist/breakpoints.test.js +0 -46
- package/dist/breakpoints.test.js.map +0 -1
- package/dist/lottie-icon.d.ts +0 -88
- package/dist/lottie-icon.d.ts.map +0 -1
- package/dist/lottie-icon.js +0 -84
- package/dist/lottie-icon.js.map +0 -1
- package/dist/lottie-icon.test.d.ts +0 -2
- package/dist/lottie-icon.test.d.ts.map +0 -1
- package/dist/lottie-icon.test.js +0 -88
- package/dist/lottie-icon.test.js.map +0 -1
- package/dist/sider.d.ts +0 -26
- package/dist/sider.d.ts.map +0 -1
- package/dist/sider.js +0 -55
- package/dist/sider.js.map +0 -1
- package/dist/sider.test.d.ts +0 -2
- package/dist/sider.test.d.ts.map +0 -1
- package/dist/sider.test.js +0 -29
- package/dist/sider.test.js.map +0 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sidebar — framework-agnostic helpers for the SideBar Container (P0).
|
|
3
|
+
*
|
|
4
|
+
* The Container's drag geometry is fully delegated to `createResizeDrag`
|
|
5
|
+
* (resizable.ts, axis:'x' single-axis + clamp) — this module only carries the
|
|
6
|
+
* small pure helpers the Svelte shell needs: parse a CSS size to px and clamp a
|
|
7
|
+
* candidate width into [minWidth, maxWidth]. Kept pure (no DOM, no framework)
|
|
8
|
+
* so it is unit-testable in isolation. See
|
|
9
|
+
* specs/components/show/SideBar.spec.md §3.
|
|
10
|
+
*/
|
|
11
|
+
/** Parse a CSS size (`number` = px, or `"NNNpx"` / bare numeric string) to px. */
|
|
12
|
+
export declare function parseSideBarWidth(size: string | number | undefined): number | undefined;
|
|
13
|
+
/** Clamp a candidate width into `[min, max]` (either bound may be undefined). */
|
|
14
|
+
export declare function clampSideBarWidth(width: number, min: number | undefined, max: number | undefined): number;
|
|
15
|
+
/**
|
|
16
|
+
* MCP tool option shape consumed by the pure helpers below (P3 MCPConfigure).
|
|
17
|
+
* Framework-agnostic: only the fields the headless logic reads. The Svelte
|
|
18
|
+
* `MCPReactOption` extends this with `icon`/`desc` render slots.
|
|
19
|
+
* See specs/components/show/SideBar.spec.md §3/§4.
|
|
20
|
+
*/
|
|
21
|
+
export interface McpOptionCore {
|
|
22
|
+
/** Unique identity + filter/label fallback. */
|
|
23
|
+
value: string;
|
|
24
|
+
/** Human-readable label (primary filter target). */
|
|
25
|
+
label?: string;
|
|
26
|
+
/** Whether the tool is enabled. */
|
|
27
|
+
active?: boolean;
|
|
28
|
+
/** Whether the enable switch is locked (preset tools). */
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Default case-insensitive filter: match the trimmed input against `label`
|
|
33
|
+
* (falling back to `value`). Empty input matches everything. A custom
|
|
34
|
+
* `filter(input, option)` predicate takes precedence when provided.
|
|
35
|
+
*/
|
|
36
|
+
export declare function filterMcpOptions<T extends McpOptionCore>(input: string, options: readonly T[], filter?: (input: string, option: T) => boolean): T[];
|
|
37
|
+
/**
|
|
38
|
+
* Toggle the `active` flag of the option identified by `value`, returning a new
|
|
39
|
+
* array (pure, no mutation). Disabled options are never toggled. Used by the
|
|
40
|
+
* Svelte shell to derive the next `options`/`customOptions` passed to
|
|
41
|
+
* `onStatusChange` without holding its own mutable copy.
|
|
42
|
+
*/
|
|
43
|
+
export declare function toggleMcpOptionActive<T extends McpOptionCore>(options: readonly T[], value: string, active: boolean): T[];
|
|
44
|
+
/** Count enabled (`active`) options across the given lists. */
|
|
45
|
+
export declare function countActiveMcpOptions(...lists: readonly (readonly McpOptionCore[])[]): number;
|
|
46
|
+
//# sourceMappingURL=sidebar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../src/sidebar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAChC,MAAM,GAAG,SAAS,CAUpB;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,MAAM,CAKR;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EACtD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,GAC7C,CAAC,EAAE,CAKL;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,aAAa,EAC3D,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,GACd,CAAC,EAAE,CAIL;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CACnC,GAAG,KAAK,EAAE,SAAS,CAAC,SAAS,aAAa,EAAE,CAAC,EAAE,GAC9C,MAAM,CAIR"}
|
package/dist/sidebar.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sidebar — framework-agnostic helpers for the SideBar Container (P0).
|
|
3
|
+
*
|
|
4
|
+
* The Container's drag geometry is fully delegated to `createResizeDrag`
|
|
5
|
+
* (resizable.ts, axis:'x' single-axis + clamp) — this module only carries the
|
|
6
|
+
* small pure helpers the Svelte shell needs: parse a CSS size to px and clamp a
|
|
7
|
+
* candidate width into [minWidth, maxWidth]. Kept pure (no DOM, no framework)
|
|
8
|
+
* so it is unit-testable in isolation. See
|
|
9
|
+
* specs/components/show/SideBar.spec.md §3.
|
|
10
|
+
*/
|
|
11
|
+
/** Parse a CSS size (`number` = px, or `"NNNpx"` / bare numeric string) to px. */
|
|
12
|
+
export function parseSideBarWidth(size) {
|
|
13
|
+
if (size == null)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (typeof size === 'number')
|
|
16
|
+
return Number.isFinite(size) ? size : undefined;
|
|
17
|
+
const trimmed = size.trim();
|
|
18
|
+
if (trimmed.endsWith('px')) {
|
|
19
|
+
const n = Number(trimmed.slice(0, -2));
|
|
20
|
+
return Number.isFinite(n) ? n : undefined;
|
|
21
|
+
}
|
|
22
|
+
const n = Number(trimmed);
|
|
23
|
+
return Number.isFinite(n) ? n : undefined;
|
|
24
|
+
}
|
|
25
|
+
/** Clamp a candidate width into `[min, max]` (either bound may be undefined). */
|
|
26
|
+
export function clampSideBarWidth(width, min, max) {
|
|
27
|
+
let w = width;
|
|
28
|
+
if (min != null)
|
|
29
|
+
w = Math.max(w, min);
|
|
30
|
+
if (max != null)
|
|
31
|
+
w = Math.min(w, max);
|
|
32
|
+
return w;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Default case-insensitive filter: match the trimmed input against `label`
|
|
36
|
+
* (falling back to `value`). Empty input matches everything. A custom
|
|
37
|
+
* `filter(input, option)` predicate takes precedence when provided.
|
|
38
|
+
*/
|
|
39
|
+
export function filterMcpOptions(input, options, filter) {
|
|
40
|
+
const q = input.trim().toLowerCase();
|
|
41
|
+
if (filter)
|
|
42
|
+
return options.filter((o) => filter(input, o));
|
|
43
|
+
if (!q)
|
|
44
|
+
return [...options];
|
|
45
|
+
return options.filter((o) => (o.label ?? o.value).toLowerCase().includes(q));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Toggle the `active` flag of the option identified by `value`, returning a new
|
|
49
|
+
* array (pure, no mutation). Disabled options are never toggled. Used by the
|
|
50
|
+
* Svelte shell to derive the next `options`/`customOptions` passed to
|
|
51
|
+
* `onStatusChange` without holding its own mutable copy.
|
|
52
|
+
*/
|
|
53
|
+
export function toggleMcpOptionActive(options, value, active) {
|
|
54
|
+
return options.map((o) => o.value === value && !o.disabled ? { ...o, active } : o);
|
|
55
|
+
}
|
|
56
|
+
/** Count enabled (`active`) options across the given lists. */
|
|
57
|
+
export function countActiveMcpOptions(...lists) {
|
|
58
|
+
let n = 0;
|
|
59
|
+
for (const list of lists)
|
|
60
|
+
for (const o of list)
|
|
61
|
+
if (o.active)
|
|
62
|
+
n += 1;
|
|
63
|
+
return n;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=sidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../src/sidebar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAC/B,IAAiC;IAEjC,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,GAAuB,EACvB,GAAuB;IAEvB,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,IAAI,GAAG,IAAI,IAAI;QAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,IAAI,GAAG,IAAI,IAAI;QAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,CAAC,CAAC;AACX,CAAC;AAmBD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,OAAqB,EACrB,MAA8C;IAE9C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAqB,EACrB,KAAa,EACb,MAAe;IAEf,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACvB,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACxD,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB,CACnC,GAAG,KAA4C;IAE/C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,CAAC,MAAM;gBAAE,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar.test.d.ts","sourceRoot":"","sources":["../src/sidebar.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { parseSideBarWidth, clampSideBarWidth, filterMcpOptions, toggleMcpOptionActive, countActiveMcpOptions, } from './sidebar.js';
|
|
3
|
+
describe('parseSideBarWidth', () => {
|
|
4
|
+
it('returns numbers as-is', () => {
|
|
5
|
+
expect(parseSideBarWidth(400)).toBe(400);
|
|
6
|
+
expect(parseSideBarWidth(0)).toBe(0);
|
|
7
|
+
});
|
|
8
|
+
it('parses px strings', () => {
|
|
9
|
+
expect(parseSideBarWidth('320px')).toBe(320);
|
|
10
|
+
});
|
|
11
|
+
it('parses bare numeric strings', () => {
|
|
12
|
+
expect(parseSideBarWidth('250')).toBe(250);
|
|
13
|
+
});
|
|
14
|
+
it('returns undefined for nullish / non-finite', () => {
|
|
15
|
+
expect(parseSideBarWidth(undefined)).toBeUndefined();
|
|
16
|
+
expect(parseSideBarWidth('auto')).toBeUndefined();
|
|
17
|
+
expect(parseSideBarWidth(Number.NaN)).toBeUndefined();
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe('clampSideBarWidth', () => {
|
|
21
|
+
it('clamps to min', () => {
|
|
22
|
+
expect(clampSideBarWidth(100, 150, undefined)).toBe(150);
|
|
23
|
+
});
|
|
24
|
+
it('clamps to max', () => {
|
|
25
|
+
expect(clampSideBarWidth(900, undefined, 600)).toBe(600);
|
|
26
|
+
});
|
|
27
|
+
it('passes through when in range', () => {
|
|
28
|
+
expect(clampSideBarWidth(300, 150, 600)).toBe(300);
|
|
29
|
+
});
|
|
30
|
+
it('handles both bounds undefined', () => {
|
|
31
|
+
expect(clampSideBarWidth(300, undefined, undefined)).toBe(300);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
const OPTS = [
|
|
35
|
+
{ value: 'fs', label: 'File System', active: true },
|
|
36
|
+
{ value: 'git', label: 'Git', active: false },
|
|
37
|
+
{ value: 'preset', label: 'Preset Search', active: true, disabled: true },
|
|
38
|
+
];
|
|
39
|
+
describe('filterMcpOptions', () => {
|
|
40
|
+
it('returns all on empty input', () => {
|
|
41
|
+
expect(filterMcpOptions('', OPTS)).toHaveLength(3);
|
|
42
|
+
expect(filterMcpOptions(' ', OPTS)).toHaveLength(3);
|
|
43
|
+
});
|
|
44
|
+
it('matches label case-insensitively', () => {
|
|
45
|
+
expect(filterMcpOptions('git', OPTS).map((o) => o.value)).toEqual(['git']);
|
|
46
|
+
expect(filterMcpOptions('SEARCH', OPTS).map((o) => o.value)).toEqual(['preset']);
|
|
47
|
+
});
|
|
48
|
+
it('falls back to value when label missing', () => {
|
|
49
|
+
const list = [{ value: 'onlyvalue' }];
|
|
50
|
+
expect(filterMcpOptions('only', list)).toHaveLength(1);
|
|
51
|
+
});
|
|
52
|
+
it('honors a custom filter predicate over default', () => {
|
|
53
|
+
const only = filterMcpOptions('x', OPTS, (_i, o) => o.value === 'fs');
|
|
54
|
+
expect(only.map((o) => o.value)).toEqual(['fs']);
|
|
55
|
+
});
|
|
56
|
+
it('does not mutate the source array', () => {
|
|
57
|
+
const copy = [...OPTS];
|
|
58
|
+
filterMcpOptions('git', OPTS);
|
|
59
|
+
expect(OPTS).toEqual(copy);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('toggleMcpOptionActive', () => {
|
|
63
|
+
it('flips active of the matching option, returns new array', () => {
|
|
64
|
+
const next = toggleMcpOptionActive(OPTS, 'git', true);
|
|
65
|
+
expect(next).not.toBe(OPTS);
|
|
66
|
+
expect(next.find((o) => o.value === 'git')?.active).toBe(true);
|
|
67
|
+
expect(next.find((o) => o.value === 'fs')?.active).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
it('never toggles a disabled option', () => {
|
|
70
|
+
const next = toggleMcpOptionActive(OPTS, 'preset', false);
|
|
71
|
+
expect(next.find((o) => o.value === 'preset')?.active).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
it('is a no-op for unknown value (identity-equal contents)', () => {
|
|
74
|
+
const next = toggleMcpOptionActive(OPTS, 'nope', false);
|
|
75
|
+
expect(next.map((o) => o.active)).toEqual(OPTS.map((o) => o.active));
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('countActiveMcpOptions', () => {
|
|
79
|
+
it('counts active across multiple lists', () => {
|
|
80
|
+
expect(countActiveMcpOptions(OPTS)).toBe(2);
|
|
81
|
+
expect(countActiveMcpOptions(OPTS, [{ value: 'x', active: true }])).toBe(3);
|
|
82
|
+
});
|
|
83
|
+
it('returns 0 for empty', () => {
|
|
84
|
+
expect(countActiveMcpOptions([])).toBe(0);
|
|
85
|
+
expect(countActiveMcpOptions()).toBe(0);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=sidebar.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar.test.js","sourceRoot":"","sources":["../src/sidebar.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,GAEtB,MAAM,cAAc,CAAC;AAEtB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAoB;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE;IACnD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;IAC7C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;CAC1E,CAAC;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAoB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/spin.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* createSpinController — framework-agnostic loading-state debouncer for Spin.
|
|
3
|
-
*
|
|
4
|
-
* `
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Mirrors Semi's delay semantics (semi-foundation/spin/foundation.ts): when a
|
|
4
|
+
* `delay` is set, showing is postponed by `delay` ms; turning spinning off hides
|
|
5
|
+
* immediately (and cancels any pending delayed show). No minShowTime — Semi has
|
|
6
|
+
* none. Uses timers only; SSR-safe because the consumer starts it in a client
|
|
7
|
+
* effect. No DOM, no framework deps.
|
|
7
8
|
*/
|
|
8
9
|
export interface SpinOptions {
|
|
9
10
|
delay?: number;
|
|
10
|
-
minShowTime?: number;
|
|
11
11
|
/** initial spinning request */
|
|
12
12
|
spinning?: boolean;
|
|
13
13
|
}
|
package/dist/spin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spin.d.ts","sourceRoot":"","sources":["../src/spin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"spin.d.ts","sourceRoot":"","sources":["../src/spin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,YAAY,IAAI,OAAO,CAAC;IACxB,qEAAqE;IACrE,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,2DAA2D;IAC3D,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,qCAAqC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,WAAgB,GAAG,cAAc,CA4D9E"}
|
package/dist/spin.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* createSpinController — framework-agnostic loading-state debouncer for Spin.
|
|
3
|
-
*
|
|
4
|
-
* `
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Mirrors Semi's delay semantics (semi-foundation/spin/foundation.ts): when a
|
|
4
|
+
* `delay` is set, showing is postponed by `delay` ms; turning spinning off hides
|
|
5
|
+
* immediately (and cancels any pending delayed show). No minShowTime — Semi has
|
|
6
|
+
* none. Uses timers only; SSR-safe because the consumer starts it in a client
|
|
7
|
+
* effect. No DOM, no framework deps.
|
|
7
8
|
*/
|
|
8
9
|
export function createSpinController(options = {}) {
|
|
9
|
-
const { delay = 0
|
|
10
|
+
const { delay = 0 } = options;
|
|
10
11
|
let requested = options.spinning ?? false;
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
// Semi seeds loading=true, then getDerivedStateFromProps resolves it against
|
|
13
|
+
// spinning/delay. With no delay, effective tracks `requested` immediately.
|
|
14
|
+
let effective = delay > 0 ? false : requested;
|
|
13
15
|
let delayTimer = null;
|
|
14
|
-
let minTimer = null;
|
|
15
16
|
const listeners = new Set();
|
|
16
17
|
function clearDelay() {
|
|
17
18
|
if (delayTimer !== null) {
|
|
@@ -19,18 +20,10 @@ export function createSpinController(options = {}) {
|
|
|
19
20
|
delayTimer = null;
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
function clearMin() {
|
|
23
|
-
if (minTimer !== null) {
|
|
24
|
-
clearTimeout(minTimer);
|
|
25
|
-
minTimer = null;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
23
|
function setEffective(value) {
|
|
29
24
|
if (effective === value)
|
|
30
25
|
return;
|
|
31
26
|
effective = value;
|
|
32
|
-
if (value)
|
|
33
|
-
shownAt = Date.now();
|
|
34
27
|
for (const l of listeners)
|
|
35
28
|
l(effective);
|
|
36
29
|
}
|
|
@@ -47,25 +40,10 @@ export function createSpinController(options = {}) {
|
|
|
47
40
|
}
|
|
48
41
|
}
|
|
49
42
|
function hide() {
|
|
50
|
-
clearDelay(); // cancel a pending show — never displayed
|
|
51
|
-
if (!effective)
|
|
52
|
-
return;
|
|
53
|
-
if (minShowTime > 0) {
|
|
54
|
-
const elapsed = Date.now() - shownAt;
|
|
55
|
-
const remaining = minShowTime - elapsed;
|
|
56
|
-
if (remaining > 0) {
|
|
57
|
-
clearMin();
|
|
58
|
-
minTimer = setTimeout(() => {
|
|
59
|
-
minTimer = null;
|
|
60
|
-
if (!requested)
|
|
61
|
-
setEffective(false);
|
|
62
|
-
}, remaining);
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
43
|
+
clearDelay(); // cancel a pending show — never displayed
|
|
66
44
|
setEffective(false);
|
|
67
45
|
}
|
|
68
|
-
// apply the initial request
|
|
46
|
+
// apply the initial request (delay still honored)
|
|
69
47
|
if (requested)
|
|
70
48
|
show();
|
|
71
49
|
return {
|
|
@@ -78,17 +56,13 @@ export function createSpinController(options = {}) {
|
|
|
78
56
|
if (value === requested)
|
|
79
57
|
return;
|
|
80
58
|
requested = value;
|
|
81
|
-
if (value)
|
|
82
|
-
clearMin();
|
|
59
|
+
if (value)
|
|
83
60
|
show();
|
|
84
|
-
|
|
85
|
-
else {
|
|
61
|
+
else
|
|
86
62
|
hide();
|
|
87
|
-
}
|
|
88
63
|
},
|
|
89
64
|
destroy() {
|
|
90
65
|
clearDelay();
|
|
91
|
-
clearMin();
|
|
92
66
|
listeners.clear();
|
|
93
67
|
},
|
|
94
68
|
};
|
package/dist/spin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spin.js","sourceRoot":"","sources":["../src/spin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"spin.js","sourceRoot":"","sources":["../src/spin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,MAAM,UAAU,oBAAoB,CAAC,UAAuB,EAAE;IAC5D,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAE9B,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC1C,6EAA6E;IAC7E,2EAA2E;IAC3E,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,IAAI,UAAU,GAAmB,IAAI,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE1D,SAAS,UAAU;QACjB,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,YAAY,CAAC,UAAU,CAAC,CAAC;YACzB,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,SAAS,YAAY,CAAC,KAAc;QAClC,IAAI,SAAS,KAAK,KAAK;YAAE,OAAO;QAChC,SAAS,GAAG,KAAK,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,SAAS,IAAI;QACX,UAAU,EAAE,CAAC;QACb,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,UAAU,GAAG,IAAI,CAAC;gBAClB,YAAY,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,SAAS,IAAI;QACX,UAAU,EAAE,CAAC,CAAC,0CAA0C;QACxD,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,kDAAkD;IAClD,IAAI,SAAS;QAAE,IAAI,EAAE,CAAC;IAEtB,OAAO;QACL,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS;QAC7B,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,WAAW,CAAC,KAAK;YACf,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAChC,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,KAAK;gBAAE,IAAI,EAAE,CAAC;;gBACb,IAAI,EAAE,CAAC;QACd,CAAC;QACD,OAAO;YACL,UAAU,EAAE,CAAC;YACb,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/spin.test.js
CHANGED
|
@@ -35,21 +35,9 @@ describe('createSpinController', () => {
|
|
|
35
35
|
expect(seen).toEqual([]); // never flipped to true → no announcement noise
|
|
36
36
|
c.destroy();
|
|
37
37
|
});
|
|
38
|
-
it('
|
|
39
|
-
const c = createSpinController({
|
|
40
|
-
expect(c.getEffective()).toBe(true);
|
|
41
|
-
vi.advanceTimersByTime(100);
|
|
42
|
-
c.setSpinning(false); // wants to hide after only 100ms
|
|
43
|
-
expect(c.getEffective()).toBe(true); // still held
|
|
44
|
-
vi.advanceTimersByTime(399);
|
|
38
|
+
it('hides immediately when spinning turns off (no minShowTime — Semi has none)', () => {
|
|
39
|
+
const c = createSpinController({ spinning: true });
|
|
45
40
|
expect(c.getEffective()).toBe(true);
|
|
46
|
-
vi.advanceTimersByTime(1);
|
|
47
|
-
expect(c.getEffective()).toBe(false); // 500ms reached
|
|
48
|
-
c.destroy();
|
|
49
|
-
});
|
|
50
|
-
it('hides immediately when minShowTime already elapsed', () => {
|
|
51
|
-
const c = createSpinController({ minShowTime: 200, spinning: true });
|
|
52
|
-
vi.advanceTimersByTime(300);
|
|
53
41
|
c.setSpinning(false);
|
|
54
42
|
expect(c.getEffective()).toBe(false);
|
|
55
43
|
c.destroy();
|
|
@@ -64,17 +52,5 @@ describe('createSpinController', () => {
|
|
|
64
52
|
expect(seen).toEqual([true, false]);
|
|
65
53
|
c.destroy();
|
|
66
54
|
});
|
|
67
|
-
it('re-show during minShowTime hold keeps it visible (no flto false)', () => {
|
|
68
|
-
const seen = [];
|
|
69
|
-
const c = createSpinController({ minShowTime: 500, spinning: true });
|
|
70
|
-
c.subscribe((e) => seen.push(e));
|
|
71
|
-
vi.advanceTimersByTime(100);
|
|
72
|
-
c.setSpinning(false);
|
|
73
|
-
c.setSpinning(true); // requested again before the min timer fires
|
|
74
|
-
vi.advanceTimersByTime(1000);
|
|
75
|
-
expect(c.getEffective()).toBe(true);
|
|
76
|
-
expect(seen).toEqual([]); // stayed visible throughout
|
|
77
|
-
c.destroy();
|
|
78
|
-
});
|
|
79
55
|
});
|
|
80
56
|
//# sourceMappingURL=spin.test.js.map
|
package/dist/spin.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spin.test.js","sourceRoot":"","sources":["../src/spin.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAEpC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,8BAA8B;QACpD,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,gDAAgD;QAC1E,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"spin.test.js","sourceRoot":"","sources":["../src/spin.test.ts"],"names":[],"mappings":"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"}
|
package/dist/toast.d.ts
CHANGED
|
@@ -1,58 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export type
|
|
6
|
-
export type ToastCloseReason = 'timeout' | 'manual' | 'replace' | 'destroyAll';
|
|
7
|
-
export type ToastTheme = 'light' | 'dark';
|
|
1
|
+
/** 对齐 Semi strings.types(warning/success/info/error/default)。 */
|
|
2
|
+
export type ToastType = 'info' | 'success' | 'warning' | 'error' | 'default';
|
|
3
|
+
/** 对齐 Semi strings.themes(normal/light)。 */
|
|
4
|
+
export type ToastTheme = 'normal' | 'light';
|
|
5
|
+
export type ToastDirection = 'ltr' | 'rtl';
|
|
8
6
|
export interface ToastOptions {
|
|
9
7
|
id?: string;
|
|
10
|
-
content:
|
|
8
|
+
content: unknown;
|
|
11
9
|
type?: ToastType;
|
|
12
|
-
/**
|
|
10
|
+
/** 自动关闭秒数;0 = 不自动关闭(对齐 Semi duration)。 */
|
|
13
11
|
duration?: number;
|
|
14
|
-
|
|
15
|
-
closable?: boolean;
|
|
16
|
-
pauseOnHover?: boolean;
|
|
17
|
-
/** visual theme of the card */
|
|
18
|
-
theme?: ToastTheme;
|
|
19
|
-
onClose?: (id: string, reason: ToastCloseReason) => void;
|
|
20
|
-
/** 自定义图标(Snippet 或 false 隐藏图标),框架层消费。 */
|
|
21
|
-
icon?: any;
|
|
22
|
-
/** 是否显示关闭按钮(与 closable 等价,框架层别名)。 */
|
|
12
|
+
/** 是否显示关闭按钮(对齐 Semi showClose)。 */
|
|
23
13
|
showClose?: boolean;
|
|
24
|
-
/** 内容区最大宽度(px 数字或 CSS
|
|
14
|
+
/** 内容区最大宽度(px 数字或 CSS 字符串),对齐 Semi textMaxWidth,默认 450。 */
|
|
25
15
|
textMaxWidth?: number | string;
|
|
26
|
-
/**
|
|
16
|
+
/** 卡片主题(对齐 Semi theme,normal/light)。 */
|
|
17
|
+
theme?: ToastTheme;
|
|
18
|
+
/** 是否堆叠 Toast(对齐 Semi stack,多条叠一摞、hover 展开)。 */
|
|
27
19
|
stack?: boolean;
|
|
20
|
+
/** 书写方向(对齐 Semi direction)。 */
|
|
21
|
+
direction?: ToastDirection;
|
|
22
|
+
/** 关闭回调(对齐 Semi onClose,无参数)。 */
|
|
23
|
+
onClose?: () => void;
|
|
24
|
+
/** 自定义图标(Snippet 或 ReactNode 对齐;框架层消费)。 */
|
|
25
|
+
icon?: unknown;
|
|
28
26
|
}
|
|
29
27
|
export interface ToastItem {
|
|
30
28
|
id: string;
|
|
31
|
-
content:
|
|
29
|
+
content: unknown;
|
|
32
30
|
type: ToastType;
|
|
33
31
|
duration: number;
|
|
34
|
-
position: ToastPosition;
|
|
35
|
-
closable: boolean;
|
|
36
|
-
pauseOnHover: boolean;
|
|
37
|
-
theme: ToastTheme;
|
|
38
|
-
onClose: ((id: string, reason: ToastCloseReason) => void) | undefined;
|
|
39
|
-
icon: any;
|
|
40
32
|
showClose: boolean;
|
|
41
33
|
textMaxWidth: number | string;
|
|
34
|
+
theme: ToastTheme;
|
|
42
35
|
stack: boolean;
|
|
36
|
+
direction: ToastDirection;
|
|
37
|
+
onClose: (() => void) | undefined;
|
|
38
|
+
icon: unknown;
|
|
43
39
|
}
|
|
44
40
|
export interface ToastStoreOptions {
|
|
45
|
-
maxCount?: number;
|
|
46
41
|
defaultDuration?: number;
|
|
42
|
+
defaultTheme?: ToastTheme;
|
|
43
|
+
defaultDirection?: ToastDirection;
|
|
47
44
|
}
|
|
48
45
|
export interface ToastStore {
|
|
49
46
|
getToasts(): ToastItem[];
|
|
50
47
|
subscribe(listener: (toasts: ToastItem[]) => void): () => void;
|
|
51
|
-
/**
|
|
48
|
+
/** 是否已存在该 id(对齐 Semi has)。 */
|
|
49
|
+
has(id: string): boolean;
|
|
50
|
+
/** 新增一条 toast,返回其 id(对齐 Semi addToast)。 */
|
|
52
51
|
add(options: ToastOptions): string;
|
|
53
|
-
|
|
52
|
+
/** 按 id 原地更新一条 toast 并重启定时器(对齐 Semi updateToast + restartCloseTimer)。 */
|
|
53
|
+
update(id: string, options: ToastOptions): void;
|
|
54
|
+
remove(id: string): void;
|
|
54
55
|
removeAll(): void;
|
|
56
|
+
/** 悬停暂停定时器(对齐 Semi clearCloseTimer_)。 */
|
|
55
57
|
pause(id: string): void;
|
|
58
|
+
/** 离开恢复定时器,从头完整计时(对齐 Semi startCloseTimer_ / restartCloseTimer)。 */
|
|
56
59
|
resume(id: string): void;
|
|
57
60
|
destroy(): void;
|
|
58
61
|
}
|
package/dist/toast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.ts"],"names":[],"mappings":"AAaA,iEAAiE;AACjE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAC7E,4CAA4C;AAC5C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC5C,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,wCAAwC;IACxC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAClC,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,gBAAgB,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,IAAI,SAAS,EAAE,CAAC;IACzB,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/D,8BAA8B;IAC9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,2CAA2C;IAC3C,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAAC;IACnC,yEAAyE;IACzE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,IAAI,IAAI,CAAC;IAClB,yCAAyC;IACzC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oEAAoE;IACpE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,wBAAgB,gBAAgB,CAAC,YAAY,GAAE,iBAAsB,GAAG,UAAU,CAyIjF"}
|