@ds-mo/ui 1.5.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/.build-stamp +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-banner.js.map +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-button-group.js +1 -1
- package/dist/components/ds-button.js +1 -1
- package/dist/components/ds-loader.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-modal.js.map +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-nav.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-toast-provider.js +1 -1
- package/dist/components/ds-toast-provider.js.map +1 -1
- package/dist/components/ds-toggle-button-group.js +1 -1
- package/dist/components/ds-toggle-button.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-tooltip.js.map +1 -1
- package/dist/components/p-BRju0sEC.js +2 -0
- package/dist/components/p-BRju0sEC.js.map +1 -0
- package/dist/components/p-BvmooLHV.js +2 -0
- package/dist/components/p-BvmooLHV.js.map +1 -0
- package/dist/components/p-C4WbCXBj.js +2 -0
- package/dist/components/p-C4WbCXBj.js.map +1 -0
- package/dist/components/p-CYJ-de0u.js +2 -0
- package/dist/components/p-CYJ-de0u.js.map +1 -0
- package/dist/components/{p--YDw8Q4o.js → p-CsO880L-.js} +2 -2
- package/dist/components/p-DTjpgYJV.js +2 -0
- package/dist/components/p-DTjpgYJV.js.map +1 -0
- package/dist/components/p-DfL2MOso.js +2 -0
- package/dist/components/p-DfL2MOso.js.map +1 -0
- package/dist/components/p-DiWQFROF.js +2 -0
- package/dist/components/p-DiWQFROF.js.map +1 -0
- package/dist/types/components/Banner/Banner.d.ts +2 -0
- package/dist/types/components/Loader/Loader.d.ts +3 -2
- package/dist/types/components/Menu/Menu.d.ts +11 -2
- package/dist/types/components/Modal/Modal.d.ts +1 -0
- package/dist/types/components/PanelNav/PanelNav.d.ts +3 -6
- package/dist/types/components/Toast/Toast.d.ts +1 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts +14 -3
- package/dist/types/components.d.ts +42 -103
- package/dist/types/nav/shell-view-transition.d.ts +2 -2
- package/dist/types/utils/index.d.ts +5 -0
- package/dist/types/utils/resolve-css-length-px.d.ts +8 -0
- package/dist/types/utils/resolve-css-time-ms.d.ts +8 -0
- package/dist/types/utils/token-defaults.d.ts +27 -0
- package/package.json +8 -2
- package/src/angular/index.ts +0 -1
- package/src/angular/proxies.ts +0 -33
- package/src/react/components.ts +0 -1
- package/src/wc/components/Banner/Banner.tsx +11 -5
- package/src/wc/components/Loader/Loader.tsx +8 -3
- package/src/wc/components/Menu/Menu.tsx +61 -26
- package/src/wc/components/Modal/Modal.tsx +10 -7
- package/src/wc/components/PanelNav/PanelNav.tsx +5 -8
- package/src/wc/components/Toast/Toast.tsx +7 -2
- package/src/wc/components/Toast/toast-service.ts +8 -1
- package/src/wc/components/ToggleButton/ToggleButton.tsx +7 -3
- package/src/wc/components/Tooltip/Tooltip.tsx +70 -31
- package/src/wc/components.d.ts +42 -103
- package/src/wc/nav/shell-view-transition.ts +4 -10
- package/src/wc/utils/index.ts +4 -0
- package/src/wc/utils/resolve-css-length-px.ts +64 -0
- package/src/wc/utils/resolve-css-time-ms.ts +46 -0
- package/src/wc/utils/token-defaults.ts +48 -0
- package/dist/components/ds-sidebar.d.ts +0 -11
- package/dist/components/ds-sidebar.js +0 -2
- package/dist/components/ds-sidebar.js.map +0 -1
- package/dist/components/p-BcuUR5Ao.js +0 -2
- package/dist/components/p-BcuUR5Ao.js.map +0 -1
- package/dist/components/p-CpbnmEu1.js +0 -2
- package/dist/components/p-CpbnmEu1.js.map +0 -1
- package/dist/components/p-DznbYg1m.js +0 -2
- package/dist/components/p-DznbYg1m.js.map +0 -1
- package/dist/components/p-uMN1Ppw2.js +0 -2
- package/dist/components/p-uMN1Ppw2.js.map +0 -1
- package/dist/types/components/Sidebar/Sidebar.d.ts +0 -29
- package/src/react/ds-sidebar.ts +0 -33
- package/src/wc/components/Sidebar/Sidebar.tsx +0 -245
- /package/dist/components/{p--YDw8Q4o.js.map → p-CsO880L-.js.map} +0 -0
package/src/wc/components.d.ts
CHANGED
|
@@ -28,7 +28,6 @@ import { PanelNavGroup, PanelNavRouterMode } from "./components/PanelNav/panel-n
|
|
|
28
28
|
import { RadioOption } from "./components/RadioGroup/RadioGroup";
|
|
29
29
|
import { ScrollbarVariant } from "./components/Scrollbar/Scrollbar";
|
|
30
30
|
import { SelectOption } from "./components/Select/Select";
|
|
31
|
-
import { SidebarWidth } from "./components/Sidebar/Sidebar";
|
|
32
31
|
import { SkeletonVariant } from "./components/Skeleton/Skeleton";
|
|
33
32
|
import { SurfaceBackground, SurfaceContrast, SurfaceElement, SurfaceElevation, SurfaceIntent, SurfaceRadius } from "./components/Surface/Surface";
|
|
34
33
|
import { TabItem } from "./components/TabGroup/tab-item-utils";
|
|
@@ -64,7 +63,6 @@ export { PanelNavGroup, PanelNavRouterMode } from "./components/PanelNav/panel-n
|
|
|
64
63
|
export { RadioOption } from "./components/RadioGroup/RadioGroup";
|
|
65
64
|
export { ScrollbarVariant } from "./components/Scrollbar/Scrollbar";
|
|
66
65
|
export { SelectOption } from "./components/Select/Select";
|
|
67
|
-
export { SidebarWidth } from "./components/Sidebar/Sidebar";
|
|
68
66
|
export { SkeletonVariant } from "./components/Skeleton/Skeleton";
|
|
69
67
|
export { SurfaceBackground, SurfaceContrast, SurfaceElement, SurfaceElevation, SurfaceIntent, SurfaceRadius } from "./components/Surface/Surface";
|
|
70
68
|
export { TabItem } from "./components/TabGroup/tab-item-utils";
|
|
@@ -541,10 +539,10 @@ export namespace Components {
|
|
|
541
539
|
*/
|
|
542
540
|
"label": string | undefined;
|
|
543
541
|
/**
|
|
544
|
-
* Render size
|
|
545
|
-
* @default
|
|
542
|
+
* Render size — number (px) or TokoMo length (`var(--dimension-iconography-md)`, etc.).
|
|
543
|
+
* @default TOKEN_DEFAULTS.iconographyMd
|
|
546
544
|
*/
|
|
547
|
-
"size": number;
|
|
545
|
+
"size": number | string;
|
|
548
546
|
}
|
|
549
547
|
interface DsMenu {
|
|
550
548
|
/**
|
|
@@ -552,9 +550,10 @@ export namespace Components {
|
|
|
552
550
|
*/
|
|
553
551
|
"align": MenuAlign;
|
|
554
552
|
/**
|
|
553
|
+
* Cross-axis offset — number (px) or TokoMo length.
|
|
555
554
|
* @default 0
|
|
556
555
|
*/
|
|
557
|
-
"alignOffset": number;
|
|
556
|
+
"alignOffset": number | string;
|
|
558
557
|
/**
|
|
559
558
|
* External trigger element to position against. Set via JS: menuEl.anchor = buttonEl
|
|
560
559
|
*/
|
|
@@ -582,9 +581,10 @@ export namespace Components {
|
|
|
582
581
|
*/
|
|
583
582
|
"side": MenuSide;
|
|
584
583
|
/**
|
|
585
|
-
*
|
|
584
|
+
* Gap between anchor and menu — number (px) or TokoMo length (`var(--dimension-space-050)`, etc.).
|
|
585
|
+
* @default TOKEN_DEFAULTS.space050
|
|
586
586
|
*/
|
|
587
|
-
"sideOffset": number;
|
|
587
|
+
"sideOffset": number | string;
|
|
588
588
|
}
|
|
589
589
|
interface DsModal {
|
|
590
590
|
"heading": string;
|
|
@@ -628,7 +628,7 @@ export namespace Components {
|
|
|
628
628
|
*/
|
|
629
629
|
"breakpoint": number;
|
|
630
630
|
/**
|
|
631
|
-
* Whether the nav is in collapsed (icon-only) state.
|
|
631
|
+
* Whether the nav is in collapsed (icon-only) state. Set `storageKey` to persist across reloads. `dsNavToggle` still fires on change.
|
|
632
632
|
* @default false
|
|
633
633
|
*/
|
|
634
634
|
"collapsed": boolean;
|
|
@@ -658,7 +658,7 @@ export namespace Components {
|
|
|
658
658
|
*/
|
|
659
659
|
"routerMode": PanelNavRouterMode;
|
|
660
660
|
/**
|
|
661
|
-
* `localStorage` key used to persist the collapsed state across page loads. When set
|
|
661
|
+
* `localStorage` key used to persist the collapsed state across page loads. When set, collapsed state is restored on mount and written on each toggle.
|
|
662
662
|
* @default ''
|
|
663
663
|
*/
|
|
664
664
|
"storageKey": string;
|
|
@@ -728,24 +728,6 @@ export namespace Components {
|
|
|
728
728
|
*/
|
|
729
729
|
"value": string;
|
|
730
730
|
}
|
|
731
|
-
interface DsSidebar {
|
|
732
|
-
/**
|
|
733
|
-
* @default false
|
|
734
|
-
*/
|
|
735
|
-
"collapsed": boolean;
|
|
736
|
-
/**
|
|
737
|
-
* @default false
|
|
738
|
-
*/
|
|
739
|
-
"mobile": boolean;
|
|
740
|
-
/**
|
|
741
|
-
* @default true
|
|
742
|
-
*/
|
|
743
|
-
"resizable": boolean;
|
|
744
|
-
/**
|
|
745
|
-
* @default 'default'
|
|
746
|
-
*/
|
|
747
|
-
"width": SidebarWidth;
|
|
748
|
-
}
|
|
749
731
|
interface DsSkeleton {
|
|
750
732
|
/**
|
|
751
733
|
* Height as a CSS value string or number (px).
|
|
@@ -1049,13 +1031,15 @@ export namespace Components {
|
|
|
1049
1031
|
*/
|
|
1050
1032
|
"align": TooltipAlign;
|
|
1051
1033
|
/**
|
|
1034
|
+
* Cross-axis offset — number (px) or TokoMo length.
|
|
1052
1035
|
* @default 0
|
|
1053
1036
|
*/
|
|
1054
|
-
"alignOffset": number;
|
|
1037
|
+
"alignOffset": number | string;
|
|
1055
1038
|
/**
|
|
1056
|
-
*
|
|
1039
|
+
* Show delay — number (ms) or TokoMo time token / `var(--effect-animation-delay-*)`.
|
|
1040
|
+
* @default TOKEN_DEFAULTS.animationDelayMedium1
|
|
1057
1041
|
*/
|
|
1058
|
-
"delay": number;
|
|
1042
|
+
"delay": number | string;
|
|
1059
1043
|
"label": string;
|
|
1060
1044
|
"shortcutKey": string | undefined;
|
|
1061
1045
|
/**
|
|
@@ -1067,9 +1051,10 @@ export namespace Components {
|
|
|
1067
1051
|
*/
|
|
1068
1052
|
"side": TooltipSide;
|
|
1069
1053
|
/**
|
|
1070
|
-
*
|
|
1054
|
+
* Gap between anchor and tooltip — number (px) or TokoMo length.
|
|
1055
|
+
* @default TOKEN_DEFAULTS.space050
|
|
1071
1056
|
*/
|
|
1072
|
-
"sideOffset": number;
|
|
1057
|
+
"sideOffset": number | string;
|
|
1073
1058
|
}
|
|
1074
1059
|
}
|
|
1075
1060
|
export interface DsAccordionCustomEvent<T> extends CustomEvent<T> {
|
|
@@ -1136,10 +1121,6 @@ export interface DsSelectCustomEvent<T> extends CustomEvent<T> {
|
|
|
1136
1121
|
detail: T;
|
|
1137
1122
|
target: HTMLDsSelectElement;
|
|
1138
1123
|
}
|
|
1139
|
-
export interface DsSidebarCustomEvent<T> extends CustomEvent<T> {
|
|
1140
|
-
detail: T;
|
|
1141
|
-
target: HTMLDsSidebarElement;
|
|
1142
|
-
}
|
|
1143
1124
|
export interface DsSliderCustomEvent<T> extends CustomEvent<T> {
|
|
1144
1125
|
detail: T;
|
|
1145
1126
|
target: HTMLDsSliderElement;
|
|
@@ -1517,24 +1498,6 @@ declare global {
|
|
|
1517
1498
|
prototype: HTMLDsSelectElement;
|
|
1518
1499
|
new (): HTMLDsSelectElement;
|
|
1519
1500
|
};
|
|
1520
|
-
interface HTMLDsSidebarElementEventMap {
|
|
1521
|
-
"dsToggle": void;
|
|
1522
|
-
"dsWidthChange": SidebarWidth;
|
|
1523
|
-
}
|
|
1524
|
-
interface HTMLDsSidebarElement extends Components.DsSidebar, HTMLStencilElement {
|
|
1525
|
-
addEventListener<K extends keyof HTMLDsSidebarElementEventMap>(type: K, listener: (this: HTMLDsSidebarElement, ev: DsSidebarCustomEvent<HTMLDsSidebarElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1526
|
-
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1527
|
-
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
1528
|
-
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
1529
|
-
removeEventListener<K extends keyof HTMLDsSidebarElementEventMap>(type: K, listener: (this: HTMLDsSidebarElement, ev: DsSidebarCustomEvent<HTMLDsSidebarElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
1530
|
-
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
1531
|
-
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
1532
|
-
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
1533
|
-
}
|
|
1534
|
-
var HTMLDsSidebarElement: {
|
|
1535
|
-
prototype: HTMLDsSidebarElement;
|
|
1536
|
-
new (): HTMLDsSidebarElement;
|
|
1537
|
-
};
|
|
1538
1501
|
interface HTMLDsSkeletonElement extends Components.DsSkeleton, HTMLStencilElement {
|
|
1539
1502
|
}
|
|
1540
1503
|
var HTMLDsSkeletonElement: {
|
|
@@ -1720,7 +1683,6 @@ declare global {
|
|
|
1720
1683
|
"ds-radio-group": HTMLDsRadioGroupElement;
|
|
1721
1684
|
"ds-scrollbar": HTMLDsScrollbarElement;
|
|
1722
1685
|
"ds-select": HTMLDsSelectElement;
|
|
1723
|
-
"ds-sidebar": HTMLDsSidebarElement;
|
|
1724
1686
|
"ds-skeleton": HTMLDsSkeletonElement;
|
|
1725
1687
|
"ds-slider": HTMLDsSliderElement;
|
|
1726
1688
|
"ds-surface": HTMLDsSurfaceElement;
|
|
@@ -2238,10 +2200,10 @@ declare namespace LocalJSX {
|
|
|
2238
2200
|
*/
|
|
2239
2201
|
"label"?: string | undefined;
|
|
2240
2202
|
/**
|
|
2241
|
-
* Render size
|
|
2242
|
-
* @default
|
|
2203
|
+
* Render size — number (px) or TokoMo length (`var(--dimension-iconography-md)`, etc.).
|
|
2204
|
+
* @default TOKEN_DEFAULTS.iconographyMd
|
|
2243
2205
|
*/
|
|
2244
|
-
"size"?: number;
|
|
2206
|
+
"size"?: number | string;
|
|
2245
2207
|
}
|
|
2246
2208
|
interface DsMenu {
|
|
2247
2209
|
/**
|
|
@@ -2249,9 +2211,10 @@ declare namespace LocalJSX {
|
|
|
2249
2211
|
*/
|
|
2250
2212
|
"align"?: MenuAlign;
|
|
2251
2213
|
/**
|
|
2214
|
+
* Cross-axis offset — number (px) or TokoMo length.
|
|
2252
2215
|
* @default 0
|
|
2253
2216
|
*/
|
|
2254
|
-
"alignOffset"?: number;
|
|
2217
|
+
"alignOffset"?: number | string;
|
|
2255
2218
|
/**
|
|
2256
2219
|
* External trigger element to position against. Set via JS: menuEl.anchor = buttonEl
|
|
2257
2220
|
*/
|
|
@@ -2281,9 +2244,10 @@ declare namespace LocalJSX {
|
|
|
2281
2244
|
*/
|
|
2282
2245
|
"side"?: MenuSide;
|
|
2283
2246
|
/**
|
|
2284
|
-
*
|
|
2247
|
+
* Gap between anchor and menu — number (px) or TokoMo length (`var(--dimension-space-050)`, etc.).
|
|
2248
|
+
* @default TOKEN_DEFAULTS.space050
|
|
2285
2249
|
*/
|
|
2286
|
-
"sideOffset"?: number;
|
|
2250
|
+
"sideOffset"?: number | string;
|
|
2287
2251
|
}
|
|
2288
2252
|
interface DsModal {
|
|
2289
2253
|
"heading": string;
|
|
@@ -2329,7 +2293,7 @@ declare namespace LocalJSX {
|
|
|
2329
2293
|
*/
|
|
2330
2294
|
"breakpoint"?: number;
|
|
2331
2295
|
/**
|
|
2332
|
-
* Whether the nav is in collapsed (icon-only) state.
|
|
2296
|
+
* Whether the nav is in collapsed (icon-only) state. Set `storageKey` to persist across reloads. `dsNavToggle` still fires on change.
|
|
2333
2297
|
* @default false
|
|
2334
2298
|
*/
|
|
2335
2299
|
"collapsed"?: boolean;
|
|
@@ -2375,7 +2339,7 @@ declare namespace LocalJSX {
|
|
|
2375
2339
|
*/
|
|
2376
2340
|
"routerMode"?: PanelNavRouterMode;
|
|
2377
2341
|
/**
|
|
2378
|
-
* `localStorage` key used to persist the collapsed state across page loads. When set
|
|
2342
|
+
* `localStorage` key used to persist the collapsed state across page loads. When set, collapsed state is restored on mount and written on each toggle.
|
|
2379
2343
|
* @default ''
|
|
2380
2344
|
*/
|
|
2381
2345
|
"storageKey"?: string;
|
|
@@ -2450,26 +2414,6 @@ declare namespace LocalJSX {
|
|
|
2450
2414
|
*/
|
|
2451
2415
|
"value"?: string;
|
|
2452
2416
|
}
|
|
2453
|
-
interface DsSidebar {
|
|
2454
|
-
/**
|
|
2455
|
-
* @default false
|
|
2456
|
-
*/
|
|
2457
|
-
"collapsed"?: boolean;
|
|
2458
|
-
/**
|
|
2459
|
-
* @default false
|
|
2460
|
-
*/
|
|
2461
|
-
"mobile"?: boolean;
|
|
2462
|
-
"onDsToggle"?: (event: DsSidebarCustomEvent<void>) => void;
|
|
2463
|
-
"onDsWidthChange"?: (event: DsSidebarCustomEvent<SidebarWidth>) => void;
|
|
2464
|
-
/**
|
|
2465
|
-
* @default true
|
|
2466
|
-
*/
|
|
2467
|
-
"resizable"?: boolean;
|
|
2468
|
-
/**
|
|
2469
|
-
* @default 'default'
|
|
2470
|
-
*/
|
|
2471
|
-
"width"?: SidebarWidth;
|
|
2472
|
-
}
|
|
2473
2417
|
interface DsSkeleton {
|
|
2474
2418
|
/**
|
|
2475
2419
|
* Height as a CSS value string or number (px).
|
|
@@ -2788,13 +2732,15 @@ declare namespace LocalJSX {
|
|
|
2788
2732
|
*/
|
|
2789
2733
|
"align"?: TooltipAlign;
|
|
2790
2734
|
/**
|
|
2735
|
+
* Cross-axis offset — number (px) or TokoMo length.
|
|
2791
2736
|
* @default 0
|
|
2792
2737
|
*/
|
|
2793
|
-
"alignOffset"?: number;
|
|
2738
|
+
"alignOffset"?: number | string;
|
|
2794
2739
|
/**
|
|
2795
|
-
*
|
|
2740
|
+
* Show delay — number (ms) or TokoMo time token / `var(--effect-animation-delay-*)`.
|
|
2741
|
+
* @default TOKEN_DEFAULTS.animationDelayMedium1
|
|
2796
2742
|
*/
|
|
2797
|
-
"delay"?: number;
|
|
2743
|
+
"delay"?: number | string;
|
|
2798
2744
|
"label": string;
|
|
2799
2745
|
"shortcutKey"?: string | undefined;
|
|
2800
2746
|
/**
|
|
@@ -2806,9 +2752,10 @@ declare namespace LocalJSX {
|
|
|
2806
2752
|
*/
|
|
2807
2753
|
"side"?: TooltipSide;
|
|
2808
2754
|
/**
|
|
2809
|
-
*
|
|
2755
|
+
* Gap between anchor and tooltip — number (px) or TokoMo length.
|
|
2756
|
+
* @default TOKEN_DEFAULTS.space050
|
|
2810
2757
|
*/
|
|
2811
|
-
"sideOffset"?: number;
|
|
2758
|
+
"sideOffset"?: number | string;
|
|
2812
2759
|
}
|
|
2813
2760
|
|
|
2814
2761
|
interface DsAccordionAttributes {
|
|
@@ -2955,15 +2902,15 @@ declare namespace LocalJSX {
|
|
|
2955
2902
|
"ariaDescribedby": string | undefined;
|
|
2956
2903
|
}
|
|
2957
2904
|
interface DsLoaderAttributes {
|
|
2958
|
-
"size":
|
|
2905
|
+
"size": string;
|
|
2959
2906
|
"label": string | undefined;
|
|
2960
2907
|
}
|
|
2961
2908
|
interface DsMenuAttributes {
|
|
2962
2909
|
"open": boolean;
|
|
2963
2910
|
"side": MenuSide;
|
|
2964
2911
|
"align": MenuAlign;
|
|
2965
|
-
"sideOffset":
|
|
2966
|
-
"alignOffset":
|
|
2912
|
+
"sideOffset": string;
|
|
2913
|
+
"alignOffset": string;
|
|
2967
2914
|
"menuWidth": string | undefined;
|
|
2968
2915
|
"minWidth": string | undefined;
|
|
2969
2916
|
"anchorId": string | undefined;
|
|
@@ -3011,12 +2958,6 @@ declare namespace LocalJSX {
|
|
|
3011
2958
|
"ariaLabel": string | undefined;
|
|
3012
2959
|
"ariaLabelledby": string | undefined;
|
|
3013
2960
|
}
|
|
3014
|
-
interface DsSidebarAttributes {
|
|
3015
|
-
"collapsed": boolean;
|
|
3016
|
-
"width": string;
|
|
3017
|
-
"resizable": boolean;
|
|
3018
|
-
"mobile": boolean;
|
|
3019
|
-
}
|
|
3020
2961
|
interface DsSkeletonAttributes {
|
|
3021
2962
|
"variant": SkeletonVariant;
|
|
3022
2963
|
"width": string;
|
|
@@ -3117,9 +3058,9 @@ declare namespace LocalJSX {
|
|
|
3117
3058
|
"label": string;
|
|
3118
3059
|
"side": TooltipSide;
|
|
3119
3060
|
"align": TooltipAlign;
|
|
3120
|
-
"sideOffset":
|
|
3121
|
-
"alignOffset":
|
|
3122
|
-
"delay":
|
|
3061
|
+
"sideOffset": string;
|
|
3062
|
+
"alignOffset": string;
|
|
3063
|
+
"delay": string;
|
|
3123
3064
|
"shortcutKey": string | undefined;
|
|
3124
3065
|
"shortcutKeyPosition": 'start' | 'end';
|
|
3125
3066
|
}
|
|
@@ -3152,7 +3093,6 @@ declare namespace LocalJSX {
|
|
|
3152
3093
|
"ds-radio-group": Omit<DsRadioGroup, keyof DsRadioGroupAttributes> & { [K in keyof DsRadioGroup & keyof DsRadioGroupAttributes]?: DsRadioGroup[K] } & { [K in keyof DsRadioGroup & keyof DsRadioGroupAttributes as `attr:${K}`]?: DsRadioGroupAttributes[K] } & { [K in keyof DsRadioGroup & keyof DsRadioGroupAttributes as `prop:${K}`]?: DsRadioGroup[K] };
|
|
3153
3094
|
"ds-scrollbar": Omit<DsScrollbar, keyof DsScrollbarAttributes> & { [K in keyof DsScrollbar & keyof DsScrollbarAttributes]?: DsScrollbar[K] } & { [K in keyof DsScrollbar & keyof DsScrollbarAttributes as `attr:${K}`]?: DsScrollbarAttributes[K] } & { [K in keyof DsScrollbar & keyof DsScrollbarAttributes as `prop:${K}`]?: DsScrollbar[K] };
|
|
3154
3095
|
"ds-select": Omit<DsSelect, keyof DsSelectAttributes> & { [K in keyof DsSelect & keyof DsSelectAttributes]?: DsSelect[K] } & { [K in keyof DsSelect & keyof DsSelectAttributes as `attr:${K}`]?: DsSelectAttributes[K] } & { [K in keyof DsSelect & keyof DsSelectAttributes as `prop:${K}`]?: DsSelect[K] };
|
|
3155
|
-
"ds-sidebar": Omit<DsSidebar, keyof DsSidebarAttributes> & { [K in keyof DsSidebar & keyof DsSidebarAttributes]?: DsSidebar[K] } & { [K in keyof DsSidebar & keyof DsSidebarAttributes as `attr:${K}`]?: DsSidebarAttributes[K] } & { [K in keyof DsSidebar & keyof DsSidebarAttributes as `prop:${K}`]?: DsSidebar[K] };
|
|
3156
3096
|
"ds-skeleton": Omit<DsSkeleton, keyof DsSkeletonAttributes> & { [K in keyof DsSkeleton & keyof DsSkeletonAttributes]?: DsSkeleton[K] } & { [K in keyof DsSkeleton & keyof DsSkeletonAttributes as `attr:${K}`]?: DsSkeletonAttributes[K] } & { [K in keyof DsSkeleton & keyof DsSkeletonAttributes as `prop:${K}`]?: DsSkeleton[K] };
|
|
3157
3097
|
"ds-slider": Omit<DsSlider, keyof DsSliderAttributes> & { [K in keyof DsSlider & keyof DsSliderAttributes]?: DsSlider[K] } & { [K in keyof DsSlider & keyof DsSliderAttributes as `attr:${K}`]?: DsSliderAttributes[K] } & { [K in keyof DsSlider & keyof DsSliderAttributes as `prop:${K}`]?: DsSlider[K] } & OneOf<"label", DsSlider["label"], DsSliderAttributes["label"]>;
|
|
3158
3098
|
"ds-surface": Omit<DsSurface, keyof DsSurfaceAttributes> & { [K in keyof DsSurface & keyof DsSurfaceAttributes]?: DsSurface[K] } & { [K in keyof DsSurface & keyof DsSurfaceAttributes as `attr:${K}`]?: DsSurfaceAttributes[K] } & { [K in keyof DsSurface & keyof DsSurfaceAttributes as `prop:${K}`]?: DsSurface[K] };
|
|
@@ -3199,7 +3139,6 @@ declare module "@stencil/core" {
|
|
|
3199
3139
|
"ds-radio-group": LocalJSX.IntrinsicElements["ds-radio-group"] & JSXBase.HTMLAttributes<HTMLDsRadioGroupElement>;
|
|
3200
3140
|
"ds-scrollbar": LocalJSX.IntrinsicElements["ds-scrollbar"] & JSXBase.HTMLAttributes<HTMLDsScrollbarElement>;
|
|
3201
3141
|
"ds-select": LocalJSX.IntrinsicElements["ds-select"] & JSXBase.HTMLAttributes<HTMLDsSelectElement>;
|
|
3202
|
-
"ds-sidebar": LocalJSX.IntrinsicElements["ds-sidebar"] & JSXBase.HTMLAttributes<HTMLDsSidebarElement>;
|
|
3203
3142
|
"ds-skeleton": LocalJSX.IntrinsicElements["ds-skeleton"] & JSXBase.HTMLAttributes<HTMLDsSkeletonElement>;
|
|
3204
3143
|
"ds-slider": LocalJSX.IntrinsicElements["ds-slider"] & JSXBase.HTMLAttributes<HTMLDsSliderElement>;
|
|
3205
3144
|
"ds-surface": LocalJSX.IntrinsicElements["ds-surface"] & JSXBase.HTMLAttributes<HTMLDsSurfaceElement>;
|
|
@@ -1,17 +1,11 @@
|
|
|
1
|
+
import { parseCssTimeMs } from '../utils/resolve-css-time-ms';
|
|
2
|
+
|
|
1
3
|
/** `view-transition-name` on `ds-bar-nav` — pairs with root reveal in shell apps. */
|
|
2
4
|
export const SHELL_BAR_NAV_VT_NAME = 'ds-shell-bar-nav';
|
|
3
5
|
|
|
4
|
-
|
|
6
|
+
export { parseCssTimeMs };
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
export function parseCssTimeMs(value: string, fallback: number): number {
|
|
8
|
-
const v = value.trim();
|
|
9
|
-
const num = parseFloat(v);
|
|
10
|
-
if (Number.isNaN(num)) return fallback;
|
|
11
|
-
if (/ms\s*$/.test(v)) return num;
|
|
12
|
-
if (/s\s*$/.test(v)) return num * 1000;
|
|
13
|
-
return num;
|
|
14
|
-
}
|
|
8
|
+
const VT_STYLE_ID = 'ds-shell-nav-vt-style';
|
|
15
9
|
|
|
16
10
|
/** Suppress default cross-fade and pin new snapshots to a 0px circle for WAAPI reveal. */
|
|
17
11
|
export function ensureShellNavVtStyle(): void {
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const lengthPxCache = new Map<string, number>();
|
|
2
|
+
|
|
3
|
+
let probeEl: HTMLElement | null = null;
|
|
4
|
+
|
|
5
|
+
function getProbeElement(): HTMLElement | null {
|
|
6
|
+
if (typeof document === 'undefined') return null;
|
|
7
|
+
|
|
8
|
+
if (!probeEl) {
|
|
9
|
+
probeEl = document.createElement('div');
|
|
10
|
+
probeEl.setAttribute('aria-hidden', 'true');
|
|
11
|
+
probeEl.style.cssText =
|
|
12
|
+
'position:absolute;visibility:hidden;pointer-events:none;top:0;left:0;width:0;height:0;overflow:hidden;';
|
|
13
|
+
document.documentElement.appendChild(probeEl);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return probeEl;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Clear session cache (tests only). */
|
|
20
|
+
export function clearCssLengthPxCache(): void {
|
|
21
|
+
lengthPxCache.clear();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a CSS length to pixels for layout math.
|
|
26
|
+
* Numbers pass through; `var(--dimension-*)`, `calc(...)`, and `16px` resolve via a hidden probe.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveCssLengthPx(
|
|
29
|
+
value: number | string | undefined,
|
|
30
|
+
fallback: number | string,
|
|
31
|
+
): number {
|
|
32
|
+
const resolved = value === undefined || value === null || value === '' ? fallback : value;
|
|
33
|
+
if (typeof resolved === 'number') return resolved;
|
|
34
|
+
|
|
35
|
+
const trimmed = resolved.trim();
|
|
36
|
+
if (!trimmed) return resolveCssLengthPx(fallback, 0);
|
|
37
|
+
|
|
38
|
+
const cached = lengthPxCache.get(trimmed);
|
|
39
|
+
if (cached !== undefined) return cached;
|
|
40
|
+
|
|
41
|
+
if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
|
|
42
|
+
const n = Number(trimmed);
|
|
43
|
+
lengthPxCache.set(trimmed, n);
|
|
44
|
+
return n;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const pxMatch = trimmed.match(/^(-?\d+(\.\d+)?)px$/);
|
|
48
|
+
if (pxMatch) {
|
|
49
|
+
const px = parseFloat(pxMatch[1]);
|
|
50
|
+
lengthPxCache.set(trimmed, px);
|
|
51
|
+
return px;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const probe = getProbeElement();
|
|
55
|
+
if (!probe) {
|
|
56
|
+
return typeof fallback === 'number' ? fallback : 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
probe.style.width = trimmed;
|
|
60
|
+
const px = probe.getBoundingClientRect().width;
|
|
61
|
+
probe.style.width = '';
|
|
62
|
+
lengthPxCache.set(trimmed, px);
|
|
63
|
+
return px;
|
|
64
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** Parse a CSS <time> value (or motion shorthand's first token) to milliseconds. */
|
|
2
|
+
export function parseCssTimeMs(value: string, fallback: number): number {
|
|
3
|
+
const firstToken = value.trim().split(/\s+/)[0] ?? '';
|
|
4
|
+
const num = parseFloat(firstToken);
|
|
5
|
+
if (Number.isNaN(num)) return fallback;
|
|
6
|
+
if (/ms\s*$/.test(firstToken)) return num;
|
|
7
|
+
if (/s\s*$/.test(firstToken)) return num * 1000;
|
|
8
|
+
return num;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function extractCssCustomProp(ref: string): string | null {
|
|
12
|
+
const varMatch = ref.match(/^var\(\s*(--[^),]+)/);
|
|
13
|
+
if (varMatch) return varMatch[1].trim();
|
|
14
|
+
if (ref.startsWith('--')) return ref.trim();
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function readTokenTimeMs(token: string, fallback: number): number {
|
|
19
|
+
if (typeof document === 'undefined') return fallback;
|
|
20
|
+
|
|
21
|
+
const prop = extractCssCustomProp(token);
|
|
22
|
+
if (!prop) return parseCssTimeMs(token, fallback);
|
|
23
|
+
|
|
24
|
+
const raw = getComputedStyle(document.documentElement).getPropertyValue(prop).trim();
|
|
25
|
+
return parseCssTimeMs(raw, fallback);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a duration to milliseconds for JS timers aligned with CSS motion tokens.
|
|
30
|
+
* Accepts numbers (ms), raw times (`200ms`, `0.75s`), or `var(--effect-*)` references.
|
|
31
|
+
*/
|
|
32
|
+
export function resolveCssTimeMs(
|
|
33
|
+
value: number | string | undefined,
|
|
34
|
+
fallbackToken: string,
|
|
35
|
+
): number {
|
|
36
|
+
if (typeof value === 'number') return value;
|
|
37
|
+
|
|
38
|
+
const token = typeof value === 'string' && value.trim() ? value.trim() : fallbackToken;
|
|
39
|
+
const prop = extractCssCustomProp(token);
|
|
40
|
+
|
|
41
|
+
if (prop) {
|
|
42
|
+
return readTokenTimeMs(token, readTokenTimeMs(fallbackToken, 200));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return parseCssTimeMs(token, readTokenTimeMs(fallbackToken, 200));
|
|
46
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import {
|
|
2
|
+
dimensionIconographyMd,
|
|
3
|
+
dimensionIconographySm,
|
|
4
|
+
dimensionIconographyXs,
|
|
5
|
+
dimensionMenuWidthXs,
|
|
6
|
+
dimensionPanelWidth2xs,
|
|
7
|
+
dimensionPanelWidthLg,
|
|
8
|
+
dimensionPanelWidthMd,
|
|
9
|
+
dimensionSize300,
|
|
10
|
+
dimensionSize600,
|
|
11
|
+
dimensionSize800,
|
|
12
|
+
dimensionSpace050,
|
|
13
|
+
dimensionSpace200,
|
|
14
|
+
effectAnimationDelayLong2,
|
|
15
|
+
effectAnimationDelayMedium1,
|
|
16
|
+
effectAnimationDelayShort2,
|
|
17
|
+
effectAnimationDurationMedium1,
|
|
18
|
+
effectAnimationDurationShort3,
|
|
19
|
+
effectMotionShort3,
|
|
20
|
+
} from '@ds-mo/tokens/ts';
|
|
21
|
+
|
|
22
|
+
/** TokoMo CSS custom-property names for shared component defaults (runtime resolution). */
|
|
23
|
+
export const TOKEN_DEFAULTS = {
|
|
24
|
+
space050: dimensionSpace050,
|
|
25
|
+
space200: dimensionSpace200,
|
|
26
|
+
size300: dimensionSize300,
|
|
27
|
+
size600: dimensionSize600,
|
|
28
|
+
size800: dimensionSize800,
|
|
29
|
+
iconographyMd: dimensionIconographyMd,
|
|
30
|
+
iconographySm: dimensionIconographySm,
|
|
31
|
+
iconographyXs: dimensionIconographyXs,
|
|
32
|
+
panelWidth2xs: dimensionPanelWidth2xs,
|
|
33
|
+
panelWidthMd: dimensionPanelWidthMd,
|
|
34
|
+
panelWidthLg: dimensionPanelWidthLg,
|
|
35
|
+
menuWidthXs: dimensionMenuWidthXs,
|
|
36
|
+
motionShort3: effectMotionShort3,
|
|
37
|
+
animationDurationShort3: effectAnimationDurationShort3,
|
|
38
|
+
animationDurationMedium1: effectAnimationDurationMedium1,
|
|
39
|
+
animationDelayMedium1: effectAnimationDelayMedium1,
|
|
40
|
+
animationDelayShort2: effectAnimationDelayShort2,
|
|
41
|
+
animationDelayLong2: effectAnimationDelayLong2,
|
|
42
|
+
/** Unmeasured menu height fallback: 20× base (160px at default scale). */
|
|
43
|
+
menuFallbackHeight: 'calc(var(--dimension-size-base) * 20)',
|
|
44
|
+
/** Unmeasured tooltip width fallback: size-800 + size-200 (80px). */
|
|
45
|
+
tooltipFallbackWidth: 'calc(var(--dimension-size-800) + var(--dimension-size-200))',
|
|
46
|
+
} as const;
|
|
47
|
+
|
|
48
|
+
export type TokenDefaultKey = keyof typeof TOKEN_DEFAULTS;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Components, JSX } from "../types/components";
|
|
2
|
-
|
|
3
|
-
interface DsSidebar extends Components.DsSidebar, HTMLElement {}
|
|
4
|
-
export const DsSidebar: {
|
|
5
|
-
prototype: DsSidebar;
|
|
6
|
-
new (): DsSidebar;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Used to define this component and all nested components recursively.
|
|
10
|
-
*/
|
|
11
|
-
export const defineCustomElement: () => void;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as s,H as i,c as e,h as t,a as o,t as r}from"./index.js";const a=()=>`.sc-ds-sidebar-h{display:contents}.backdrop.sc-ds-sidebar{position:fixed;inset:0;background-color:var(--color-background-shade);z-index:9996}.sidebar.sc-ds-sidebar{display:flex;flex-direction:column;height:100%;background-color:var(--color-background-secondary);border-right:var(--dimension-stroke-width-015) solid var(--color-border-primary);position:relative;flex-shrink:0;overflow:hidden;transition:width var(--effect-motion-short-2);box-sizing:border-box}.sidebar--resizing.sc-ds-sidebar{transition:none}.sidebar--collapsed.sc-ds-sidebar{width:0 !important;border-right:none}.sidebar--mobile.sc-ds-sidebar{position:fixed;top:0;left:0;bottom:0;z-index:9997}.sidebar--mini.sc-ds-sidebar-s>[data-sidebar-label],.sidebar--mini .sc-ds-sidebar-s>[data-sidebar-label],.sidebar--mini.sc-ds-sidebar-s>[data-sidebar-badge],.sidebar--mini .sc-ds-sidebar-s>[data-sidebar-badge],.sidebar--mini.sc-ds-sidebar-s>[data-sidebar-section-header],.sidebar--mini .sc-ds-sidebar-s>[data-sidebar-section-header]{display:none}.sidebar__content.sc-ds-sidebar{flex:1;overflow-y:auto;overflow-x:hidden;padding:var(--dimension-space-050);scrollbar-width:none}.sidebar__content.sc-ds-sidebar::-webkit-scrollbar{display:none}.sidebar__footer.sc-ds-sidebar{flex-shrink:0;padding:var(--dimension-space-050);border-top:var(--dimension-stroke-width-015) solid var(--color-border-primary)}.sidebar__footer.sc-ds-sidebar:empty{display:none}.sidebar__resize-handle.sc-ds-sidebar{position:absolute;top:0;right:-3px;bottom:0;width:6px;cursor:col-resize;z-index:10}.sidebar__resize-handle.sc-ds-sidebar:hover{background-color:var(--color-border-bold-brand);opacity:0.5}.sidebar__resize-handle.sc-ds-sidebar:focus-visible{outline:var(--dimension-stroke-width-025) solid var(--color-border-bold-brand);outline-offset:var(--dimension-stroke-width-015);background-color:var(--color-border-bold-brand);opacity:0.5}`;const d=56;const n=240;const l=480;const c=180;const h=140;const b=16;const u=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])'].join(",");const m=s(class s extends i{constructor(s){super();if(s!==false){this.__registerHost()}this.dsToggle=e(this,"dsToggle");this.dsWidthChange=e(this,"dsWidthChange");this.collapsed=false;this.width="default";this.resizable=true;this.mobile=false;this.isResizing=false;this.triggerEl=null;this.escapeHandler=null;this.tabHandler=null;this.mouseMoveHandler=null;this.mouseUpHandler=null}get resolvedWidth(){if(this.width==="mini")return d;if(this.width==="default")return n;return this.width}get isMobileOpen(){return this.mobile&&!this.collapsed}onCollapsedChange(){if(this.isMobileOpen){this.setupMobileFocusTrap()}else{this.teardownMobileFocusTrap()}}componentDidLoad(){if(this.isMobileOpen){this.setupMobileFocusTrap()}if(this.mobile){this.escapeHandler=s=>{if(s.key==="Escape"&&!this.collapsed){this.dsToggle.emit()}};document.addEventListener("keydown",this.escapeHandler)}}disconnectedCallback(){this.teardownMobileFocusTrap();if(this.escapeHandler){document.removeEventListener("keydown",this.escapeHandler);this.escapeHandler=null}this.cleanupMouseHandlers()}setupMobileFocusTrap(){this.triggerEl=document.activeElement;const s=()=>Array.from(this.el.querySelectorAll(u)).filter((s=>!s.hasAttribute("aria-hidden")&&s.offsetParent!==null));const i=s();(i[0]??this.el).focus();this.tabHandler=i=>{if(i.key!=="Tab")return;const e=s();if(!e.length){i.preventDefault();this.el.focus();return}const t=e[0];const o=e[e.length-1];const r=document.activeElement;if(i.shiftKey&&(r===t||!this.el.contains(r))){i.preventDefault();o.focus()}else if(!i.shiftKey&&(r===o||!this.el.contains(r))){i.preventDefault();t.focus()}};document.addEventListener("keydown",this.tabHandler)}teardownMobileFocusTrap(){if(this.tabHandler){document.removeEventListener("keydown",this.tabHandler);this.tabHandler=null}this.triggerEl?.focus?.();this.triggerEl=null}cleanupMouseHandlers(){if(this.mouseMoveHandler)document.removeEventListener("mousemove",this.mouseMoveHandler);if(this.mouseUpHandler)document.removeEventListener("mouseup",this.mouseUpHandler);this.mouseMoveHandler=null;this.mouseUpHandler=null;document.body.style.cursor="";document.body.style.userSelect=""}handleResizeMouseDown(s){if(!this.resizable)return;s.preventDefault();this.isResizing=true;this.mouseMoveHandler=s=>{const i=s.clientX;if(i<h){this.dsWidthChange.emit("mini")}else if(i<c){this.dsWidthChange.emit("default")}else{this.dsWidthChange.emit(i)}};this.mouseUpHandler=()=>{this.isResizing=false;this.cleanupMouseHandlers()};document.body.style.cursor="col-resize";document.body.style.userSelect="none";document.addEventListener("mousemove",this.mouseMoveHandler);document.addEventListener("mouseup",this.mouseUpHandler)}handleResizeKeyDown(s){if(!this.resizable)return;const i=this.width;const e=this.resolvedWidth;switch(s.key){case"ArrowLeft":{s.preventDefault();if(i==="mini")return;const t=e-b;this.dsWidthChange.emit(t<c?"mini":t);break}case"ArrowRight":{s.preventDefault();if(i==="mini"){this.dsWidthChange.emit("default");return}this.dsWidthChange.emit(Math.min(e+b,l));break}case"Home":s.preventDefault();this.dsWidthChange.emit("mini");break;case"End":s.preventDefault();this.dsWidthChange.emit(l);break}}render(){if(this.collapsed&&!this.mobile)return null;const s=this.width==="mini";const i=this.isMobileOpen;const e=this.collapsed?0:this.resolvedWidth;const r=i?{role:"dialog","aria-modal":"true",tabIndex:-1}:{role:"navigation"};return t(o,null,this.mobile&&!this.collapsed&&t("div",{class:"backdrop",onClick:()=>this.dsToggle.emit(),"aria-hidden":"true"}),t("aside",{class:{sidebar:true,"sidebar--mini":s,"sidebar--mobile":this.mobile,"sidebar--collapsed":this.collapsed,"sidebar--resizing":this.isResizing},style:{width:`${e}px`},"aria-label":"Sidebar",...r},t("div",{class:"sidebar__content"},t("slot",null)),t("div",{class:"sidebar__footer"},t("slot",{name:"footer"})),this.resizable&&!this.mobile&&t("div",{class:"sidebar__resize-handle",onMouseDown:s=>this.handleResizeMouseDown(s),onKeyDown:s=>this.handleResizeKeyDown(s),role:"separator","aria-orientation":"vertical","aria-label":"Resize sidebar","aria-valuenow":this.resolvedWidth,"aria-valuemin":d,"aria-valuemax":l,tabIndex:0})))}get el(){return this}static get watchers(){return{collapsed:[{onCollapsedChange:0}]}}static get style(){return a()}},[262,"ds-sidebar",{collapsed:[1028],width:[8],resizable:[4],mobile:[4],isResizing:[32]},undefined,{collapsed:[{onCollapsedChange:0}]}]);function f(){if(typeof customElements==="undefined"){return}const s=["ds-sidebar"];s.forEach((s=>{switch(s){case"ds-sidebar":if(!customElements.get(r(s))){customElements.define(r(s),m)}break}}))}f();const p=m;const g=f;export{p as DsSidebar,g as defineCustomElement};
|
|
2
|
-
//# sourceMappingURL=ds-sidebar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["sidebarCss","MINI_WIDTH","DEFAULT_WIDTH","MAX_WIDTH","MIN_DRAG_WIDTH","SNAP_THRESHOLD","KEYBOARD_STEP","FOCUSABLE_SEL","join","Sidebar","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","collapsed","width","resizable","mobile","isResizing","triggerEl","escapeHandler","tabHandler","mouseMoveHandler","mouseUpHandler","resolvedWidth","isMobileOpen","onCollapsedChange","setupMobileFocusTrap","teardownMobileFocusTrap","componentDidLoad","e","key","dsToggle","emit","document","addEventListener","disconnectedCallback","removeEventListener","cleanupMouseHandlers","activeElement","focusables","Array","from","el","querySelectorAll","filter","hasAttribute","offsetParent","initial","focus","items","length","preventDefault","first","last","active","shiftKey","contains","body","style","cursor","userSelect","handleResizeMouseDown","ev","newW","clientX","dsWidthChange","handleResizeKeyDown","w","resolved","next","Math","min","render","isMini","sidebarWidth","dialogProps","role","tabIndex","h","Host","class","onClick","sidebar","name","onMouseDown","onKeyDown"],"sources":["src/wc/components/Sidebar/Sidebar.css?tag=ds-sidebar&encapsulation=scoped","src/wc/components/Sidebar/Sidebar.tsx"],"sourcesContent":[":host {\n display: contents;\n}\n\n.backdrop {\n position: fixed;\n inset: 0;\n background-color: var(--color-background-shade);\n z-index: 9996;\n}\n\n.sidebar {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--color-background-secondary);\n border-right: var(--dimension-stroke-width-015) solid var(--color-border-primary);\n position: relative;\n flex-shrink: 0;\n overflow: hidden;\n transition: width var(--effect-motion-short-2);\n box-sizing: border-box;\n}\n\n.sidebar--resizing { transition: none; }\n\n.sidebar--collapsed {\n width: 0 !important;\n border-right: none;\n}\n\n.sidebar--mobile {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n z-index: 9997;\n}\n\n/* Hide labels/badges/section headers when mini */\n.sidebar--mini ::slotted([data-sidebar-label]),\n.sidebar--mini ::slotted([data-sidebar-badge]),\n.sidebar--mini ::slotted([data-sidebar-section-header]) {\n display: none;\n}\n\n.sidebar__content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: var(--dimension-space-050);\n scrollbar-width: none;\n}\n\n.sidebar__content::-webkit-scrollbar { display: none; }\n\n.sidebar__footer {\n flex-shrink: 0;\n padding: var(--dimension-space-050);\n border-top: var(--dimension-stroke-width-015) solid var(--color-border-primary);\n}\n\n.sidebar__footer:empty { display: none; }\n\n.sidebar__resize-handle {\n position: absolute;\n top: 0;\n right: -3px;\n bottom: 0;\n width: 6px;\n cursor: col-resize;\n z-index: 10;\n}\n\n.sidebar__resize-handle:hover {\n background-color: var(--color-border-bold-brand);\n opacity: 0.5;\n}\n\n.sidebar__resize-handle:focus-visible {\n outline: var(--dimension-stroke-width-025) solid var(--color-border-bold-brand);\n outline-offset: var(--dimension-stroke-width-015);\n background-color: var(--color-border-bold-brand);\n opacity: 0.5;\n}\n","import { Component, Prop, State, Event, EventEmitter, Element, Watch, h, Host } from '@stencil/core';\n\nexport type SidebarWidth = 'mini' | 'default' | number;\n\nconst MINI_WIDTH = 56;\nconst DEFAULT_WIDTH = 240;\nconst MAX_WIDTH = 480;\nconst MIN_DRAG_WIDTH = 180;\nconst SNAP_THRESHOLD = 140;\nconst KEYBOARD_STEP = 16;\n\nconst FOCUSABLE_SEL = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n@Component({\n tag: 'ds-sidebar',\n styleUrl: 'Sidebar.css',\n scoped: true,\n})\nexport class Sidebar {\n @Element() el!: HTMLElement;\n\n @Prop({ mutable: true }) collapsed: boolean = false;\n @Prop() width: SidebarWidth = 'default';\n @Prop() resizable: boolean = true;\n @Prop() mobile: boolean = false;\n\n @State() private isResizing: boolean = false;\n\n @Event() dsToggle!: EventEmitter<void>;\n @Event() dsWidthChange!: EventEmitter<SidebarWidth>;\n\n private triggerEl: HTMLElement | null = null;\n private escapeHandler: ((e: KeyboardEvent) => void) | null = null;\n private tabHandler: ((e: KeyboardEvent) => void) | null = null;\n private mouseMoveHandler: ((e: MouseEvent) => void) | null = null;\n private mouseUpHandler: (() => void) | null = null;\n\n private get resolvedWidth(): number {\n if (this.width === 'mini') return MINI_WIDTH;\n if (this.width === 'default') return DEFAULT_WIDTH;\n return this.width as number;\n }\n\n private get isMobileOpen(): boolean {\n return this.mobile && !this.collapsed;\n }\n\n @Watch('collapsed')\n onCollapsedChange() {\n if (this.isMobileOpen) {\n this.setupMobileFocusTrap();\n } else {\n this.teardownMobileFocusTrap();\n }\n }\n\n componentDidLoad() {\n if (this.isMobileOpen) {\n this.setupMobileFocusTrap();\n }\n if (this.mobile) {\n this.escapeHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && !this.collapsed) {\n this.dsToggle.emit();\n }\n };\n document.addEventListener('keydown', this.escapeHandler);\n }\n }\n\n disconnectedCallback() {\n this.teardownMobileFocusTrap();\n if (this.escapeHandler) {\n document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = null;\n }\n this.cleanupMouseHandlers();\n }\n\n private setupMobileFocusTrap() {\n this.triggerEl = document.activeElement as HTMLElement | null;\n\n const focusables = () =>\n Array.from(this.el.querySelectorAll<HTMLElement>(FOCUSABLE_SEL)).filter(\n el => !el.hasAttribute('aria-hidden') && el.offsetParent !== null,\n );\n\n const initial = focusables();\n (initial[0] ?? this.el).focus();\n\n this.tabHandler = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const items = focusables();\n if (!items.length) { e.preventDefault(); this.el.focus(); return; }\n const first = items[0];\n const last = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (e.shiftKey && (active === first || !this.el.contains(active))) {\n e.preventDefault(); last.focus();\n } else if (!e.shiftKey && (active === last || !this.el.contains(active))) {\n e.preventDefault(); first.focus();\n }\n };\n document.addEventListener('keydown', this.tabHandler);\n }\n\n private teardownMobileFocusTrap() {\n if (this.tabHandler) {\n document.removeEventListener('keydown', this.tabHandler);\n this.tabHandler = null;\n }\n this.triggerEl?.focus?.();\n this.triggerEl = null;\n }\n\n private cleanupMouseHandlers() {\n if (this.mouseMoveHandler) document.removeEventListener('mousemove', this.mouseMoveHandler);\n if (this.mouseUpHandler) document.removeEventListener('mouseup', this.mouseUpHandler);\n this.mouseMoveHandler = null;\n this.mouseUpHandler = null;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n\n private handleResizeMouseDown(e: MouseEvent) {\n if (!this.resizable) return;\n e.preventDefault();\n this.isResizing = true;\n\n this.mouseMoveHandler = (ev: MouseEvent) => {\n const newW = ev.clientX;\n if (newW < SNAP_THRESHOLD) {\n this.dsWidthChange.emit('mini');\n } else if (newW < MIN_DRAG_WIDTH) {\n this.dsWidthChange.emit('default');\n } else {\n this.dsWidthChange.emit(newW);\n }\n };\n\n this.mouseUpHandler = () => {\n this.isResizing = false;\n this.cleanupMouseHandlers();\n };\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', this.mouseMoveHandler);\n document.addEventListener('mouseup', this.mouseUpHandler);\n }\n\n private handleResizeKeyDown(e: KeyboardEvent) {\n if (!this.resizable) return;\n const w = this.width;\n const resolved = this.resolvedWidth;\n\n switch (e.key) {\n case 'ArrowLeft': {\n e.preventDefault();\n if (w === 'mini') return;\n const next = resolved - KEYBOARD_STEP;\n this.dsWidthChange.emit(next < MIN_DRAG_WIDTH ? 'mini' : next);\n break;\n }\n case 'ArrowRight': {\n e.preventDefault();\n if (w === 'mini') { this.dsWidthChange.emit('default'); return; }\n this.dsWidthChange.emit(Math.min(resolved + KEYBOARD_STEP, MAX_WIDTH));\n break;\n }\n case 'Home':\n e.preventDefault();\n this.dsWidthChange.emit('mini');\n break;\n case 'End':\n e.preventDefault();\n this.dsWidthChange.emit(MAX_WIDTH);\n break;\n }\n }\n\n render() {\n if (this.collapsed && !this.mobile) return null;\n\n const isMini = this.width === 'mini';\n const isMobileOpen = this.isMobileOpen;\n const sidebarWidth = this.collapsed ? 0 : this.resolvedWidth;\n\n const dialogProps = isMobileOpen\n ? { role: 'dialog', 'aria-modal': 'true', tabIndex: -1 }\n : { role: 'navigation' };\n\n return (\n <Host>\n {this.mobile && !this.collapsed && (\n <div\n class=\"backdrop\"\n onClick={() => this.dsToggle.emit()}\n aria-hidden=\"true\"\n />\n )}\n <aside\n class={{\n sidebar: true,\n 'sidebar--mini': isMini,\n 'sidebar--mobile': this.mobile,\n 'sidebar--collapsed': this.collapsed,\n 'sidebar--resizing': this.isResizing,\n }}\n style={{ width: `${sidebarWidth}px` }}\n aria-label=\"Sidebar\"\n {...dialogProps}\n >\n <div class=\"sidebar__content\">\n <slot />\n </div>\n <div class=\"sidebar__footer\">\n <slot name=\"footer\" />\n </div>\n {this.resizable && !this.mobile && (\n <div\n class=\"sidebar__resize-handle\"\n onMouseDown={(e: MouseEvent) => this.handleResizeMouseDown(e)}\n onKeyDown={(e: KeyboardEvent) => this.handleResizeKeyDown(e)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize sidebar\"\n aria-valuenow={this.resolvedWidth}\n aria-valuemin={MINI_WIDTH}\n aria-valuemax={MAX_WIDTH}\n tabIndex={0}\n />\n )}\n </aside>\n </Host>\n );\n }\n}\n"],"mappings":"kEAAA,MAAMA,EAAa,IAAM,o1DCIzB,MAAMC,EAAa,GACnB,MAAMC,EAAgB,IACtB,MAAMC,EAAY,IAClB,MAAMC,EAAiB,IACvB,MAAMC,EAAiB,IACvB,MAAMC,EAAgB,GAEtB,MAAMC,EAAgB,CACpB,UACA,yBACA,wBACA,yBACA,2BACA,mCACAC,KAAK,K,MAOMC,EAAOC,EAAA,MAAAD,UAAAE,EALpB,WAAAC,CAAAC,G,wHAQ2BC,KAAAC,UAAqB,MACtCD,KAAAE,MAAsB,UACtBF,KAAAG,UAAqB,KACrBH,KAAAI,OAAkB,MAETJ,KAAAK,WAAsB,MAK/BL,KAAAM,UAAgC,KAChCN,KAAAO,cAAqD,KACrDP,KAAAQ,WAAkD,KAClDR,KAAAS,iBAAqD,KACrDT,KAAAU,eAAsC,IA0M/C,CAxMC,iBAAYC,GACV,GAAIX,KAAKE,QAAU,OAAQ,OAAOf,EAClC,GAAIa,KAAKE,QAAU,UAAW,OAAOd,EACrC,OAAOY,KAAKE,K,CAGd,gBAAYU,GACV,OAAOZ,KAAKI,SAAWJ,KAAKC,S,CAI9B,iBAAAY,GACE,GAAIb,KAAKY,aAAc,CACrBZ,KAAKc,sB,KACA,CACLd,KAAKe,yB,EAIT,gBAAAC,GACE,GAAIhB,KAAKY,aAAc,CACrBZ,KAAKc,sB,CAEP,GAAId,KAAKI,OAAQ,CACfJ,KAAKO,cAAiBU,IACpB,GAAIA,EAAEC,MAAQ,WAAalB,KAAKC,UAAW,CACzCD,KAAKmB,SAASC,M,GAGlBC,SAASC,iBAAiB,UAAWtB,KAAKO,c,EAI9C,oBAAAgB,GACEvB,KAAKe,0BACL,GAAIf,KAAKO,cAAe,CACtBc,SAASG,oBAAoB,UAAWxB,KAAKO,eAC7CP,KAAKO,cAAgB,I,CAEvBP,KAAKyB,sB,CAGC,oBAAAX,GACNd,KAAKM,UAAYe,SAASK,cAE1B,MAAMC,EAAa,IACjBC,MAAMC,KAAK7B,KAAK8B,GAAGC,iBAA8BtC,IAAgBuC,QAC/DF,IAAOA,EAAGG,aAAa,gBAAkBH,EAAGI,eAAiB,OAGjE,MAAMC,EAAUR,KACfQ,EAAQ,IAAMnC,KAAK8B,IAAIM,QAExBpC,KAAKQ,WAAcS,IACjB,GAAIA,EAAEC,MAAQ,MAAO,OACrB,MAAMmB,EAAQV,IACd,IAAKU,EAAMC,OAAQ,CAAErB,EAAEsB,iBAAkBvC,KAAK8B,GAAGM,QAAS,M,CAC1D,MAAMI,EAAQH,EAAM,GACpB,MAAMI,EAAOJ,EAAMA,EAAMC,OAAS,GAClC,MAAMI,EAASrB,SAASK,cACxB,GAAIT,EAAE0B,WAAaD,IAAWF,IAAUxC,KAAK8B,GAAGc,SAASF,IAAU,CACjEzB,EAAEsB,iBAAkBE,EAAKL,O,MACpB,IAAKnB,EAAE0B,WAAaD,IAAWD,IAASzC,KAAK8B,GAAGc,SAASF,IAAU,CACxEzB,EAAEsB,iBAAkBC,EAAMJ,O,GAG9Bf,SAASC,iBAAiB,UAAWtB,KAAKQ,W,CAGpC,uBAAAO,GACN,GAAIf,KAAKQ,WAAY,CACnBa,SAASG,oBAAoB,UAAWxB,KAAKQ,YAC7CR,KAAKQ,WAAa,I,CAEpBR,KAAKM,WAAW8B,UAChBpC,KAAKM,UAAY,I,CAGX,oBAAAmB,GACN,GAAIzB,KAAKS,iBAAkBY,SAASG,oBAAoB,YAAaxB,KAAKS,kBAC1E,GAAIT,KAAKU,eAAgBW,SAASG,oBAAoB,UAAWxB,KAAKU,gBACtEV,KAAKS,iBAAmB,KACxBT,KAAKU,eAAiB,KACtBW,SAASwB,KAAKC,MAAMC,OAAS,GAC7B1B,SAASwB,KAAKC,MAAME,WAAa,E,CAG3B,qBAAAC,CAAsBhC,GAC5B,IAAKjB,KAAKG,UAAW,OACrBc,EAAEsB,iBACFvC,KAAKK,WAAa,KAElBL,KAAKS,iBAAoByC,IACvB,MAAMC,EAAOD,EAAGE,QAChB,GAAID,EAAO5D,EAAgB,CACzBS,KAAKqD,cAAcjC,KAAK,O,MACnB,GAAI+B,EAAO7D,EAAgB,CAChCU,KAAKqD,cAAcjC,KAAK,U,KACnB,CACLpB,KAAKqD,cAAcjC,KAAK+B,E,GAI5BnD,KAAKU,eAAiB,KACpBV,KAAKK,WAAa,MAClBL,KAAKyB,sBAAsB,EAG7BJ,SAASwB,KAAKC,MAAMC,OAAS,aAC7B1B,SAASwB,KAAKC,MAAME,WAAa,OACjC3B,SAASC,iBAAiB,YAAatB,KAAKS,kBAC5CY,SAASC,iBAAiB,UAAWtB,KAAKU,e,CAGpC,mBAAA4C,CAAoBrC,GAC1B,IAAKjB,KAAKG,UAAW,OACrB,MAAMoD,EAAIvD,KAAKE,MACf,MAAMsD,EAAWxD,KAAKW,cAEtB,OAAQM,EAAEC,KACR,IAAK,YAAa,CAChBD,EAAEsB,iBACF,GAAIgB,IAAM,OAAQ,OAClB,MAAME,EAAOD,EAAWhE,EACxBQ,KAAKqD,cAAcjC,KAAKqC,EAAOnE,EAAiB,OAASmE,GACzD,K,CAEF,IAAK,aAAc,CACjBxC,EAAEsB,iBACF,GAAIgB,IAAM,OAAQ,CAAEvD,KAAKqD,cAAcjC,KAAK,WAAY,M,CACxDpB,KAAKqD,cAAcjC,KAAKsC,KAAKC,IAAIH,EAAWhE,EAAeH,IAC3D,K,CAEF,IAAK,OACH4B,EAAEsB,iBACFvC,KAAKqD,cAAcjC,KAAK,QACxB,MACF,IAAK,MACHH,EAAEsB,iBACFvC,KAAKqD,cAAcjC,KAAK/B,GACxB,M,CAIN,MAAAuE,GACE,GAAI5D,KAAKC,YAAcD,KAAKI,OAAQ,OAAO,KAE3C,MAAMyD,EAAS7D,KAAKE,QAAU,OAC9B,MAAMU,EAAeZ,KAAKY,aAC1B,MAAMkD,EAAe9D,KAAKC,UAAY,EAAID,KAAKW,cAE/C,MAAMoD,EAAcnD,EAChB,CAAEoD,KAAM,SAAU,aAAc,OAAQC,UAAU,GAClD,CAAED,KAAM,cAEZ,OACEE,EAACC,EAAI,KACFnE,KAAKI,SAAWJ,KAAKC,WACpBiE,EAAA,OACEE,MAAM,WACNC,QAAS,IAAMrE,KAAKmB,SAASC,OAAM,cACvB,SAGhB8C,EAAA,SACEE,MAAO,CACLE,QAAS,KACT,gBAAiBT,EACjB,kBAAmB7D,KAAKI,OACxB,qBAAsBJ,KAAKC,UAC3B,oBAAqBD,KAAKK,YAE5ByC,MAAO,CAAE5C,MAAO,GAAG4D,OAAkB,aAC1B,aACPC,GAEJG,EAAA,OAAKE,MAAM,oBACTF,EAAA,cAEFA,EAAA,OAAKE,MAAM,mBACTF,EAAA,QAAMK,KAAK,YAEZvE,KAAKG,YAAcH,KAAKI,QACvB8D,EAAA,OACEE,MAAM,yBACNI,YAAcvD,GAAkBjB,KAAKiD,sBAAsBhC,GAC3DwD,UAAYxD,GAAqBjB,KAAKsD,oBAAoBrC,GAC1D+C,KAAK,YAAW,mBACC,WAAU,aAChB,iBAAgB,gBACZhE,KAAKW,cAAa,gBAClBxB,EAAU,gBACVE,EACf4E,SAAU,K","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as e,H as s,h as t,t as i}from"./index.js";const n=()=>`:host{display:inline-flex;align-items:center;flex-shrink:0}.spinner{flex-shrink:0;animation:spin 0.75s linear infinite}.status{display:inline-flex;align-items:center}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}`;const r=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.size=20}render(){const e=`${this.size}px`;const s=t("svg",{style:{width:e,height:e},viewBox:"0 0 16 16",fill:"none",class:"spinner","aria-hidden":"true"},t("circle",{cx:"8",cy:"8",r:"5",stroke:"currentColor","stroke-width":"1","stroke-linecap":"round","stroke-dasharray":"23.6 7.9"}));if(!this.label)return s;return t("span",{role:"status","aria-live":"polite",class:"status"},s,t("span",{class:"visually-hidden"},this.label))}static get style(){return n()}},[1,"ds-loader",{size:[2],label:[1]}]);function a(){if(typeof customElements==="undefined"){return}const e=["ds-loader"];e.forEach((e=>{switch(e){case"ds-loader":if(!customElements.get(i(e))){customElements.define(i(e),r)}break}}))}a();export{r as L,a as d};
|
|
2
|
-
//# sourceMappingURL=p-BcuUR5Ao.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["loaderCss","Loader","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","size","render","px","svg","h","style","width","height","viewBox","fill","class","cx","cy","r","stroke","label","role"],"sources":["src/wc/components/Loader/Loader.css?tag=ds-loader&encapsulation=shadow","src/wc/components/Loader/Loader.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n.spinner {\n flex-shrink: 0;\n animation: spin 0.75s linear infinite;\n}\n\n.status {\n display: inline-flex;\n align-items: center;\n}\n\n.visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'ds-loader',\n styleUrl: 'Loader.css',\n shadow: true,\n})\nexport class Loader {\n /** Render size in px. Designed on a 16×16 viewBox; stroke scales proportionally. */\n @Prop() size: number = 20;\n /**\n * Accessible label for standalone usage. Wraps the spinner in a live region\n * and renders the label visually-hidden. Omit when the host element already\n * conveys busy state via aria-busy.\n */\n @Prop() label: string | undefined;\n\n render() {\n const px = `${this.size}px`;\n const svg = (\n <svg\n style={{ width: px, height: px }}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n class=\"spinner\"\n aria-hidden=\"true\"\n >\n <circle\n cx=\"8\" cy=\"8\" r=\"5\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"23.6 7.9\"\n />\n </svg>\n );\n\n if (!this.label) return svg;\n\n return (\n <span role=\"status\" aria-live=\"polite\" class=\"status\">\n {svg}\n <span class=\"visually-hidden\">{this.label}</span>\n </span>\n );\n }\n}\n"],"mappings":"oDAAA,MAAMA,EAAY,IAAM,kY,MCOXC,EAAMC,EAAA,MAAAD,UAAAE,EALnB,WAAAC,CAAAC,G,kEAOUC,KAAAC,KAAe,EAqCxB,CA7BC,MAAAC,GACE,MAAMC,EAAK,GAAGH,KAAKC,SACnB,MAAMG,EACJC,EAAA,OACEC,MAAO,CAAEC,MAAOJ,EAAIK,OAAQL,GAC5BM,QAAQ,YACRC,KAAK,OACLC,MAAM,UAAS,cACH,QAEZN,EAAA,UACEO,GAAG,IAAIC,GAAG,IAAIC,EAAE,IAChBC,OAAO,eAAc,eACR,IAAG,iBACD,QAAO,mBACL,cAKvB,IAAKf,KAAKgB,MAAO,OAAOZ,EAExB,OACEC,EAAA,QAAMY,KAAK,SAAQ,YAAW,SAASN,MAAM,UAC1CP,EACDC,EAAA,QAAMM,MAAM,mBAAmBX,KAAKgB,O","ignoreList":[]}
|