@ds-mo/ui 1.4.0 → 1.6.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.
Files changed (92) hide show
  1. package/README.md +1 -1
  2. package/dist/.build-stamp +1 -0
  3. package/dist/components/{ds-sidebar.d.ts → ds-app-shell.d.ts} +4 -4
  4. package/dist/components/ds-app-shell.js +2 -0
  5. package/dist/components/ds-app-shell.js.map +1 -0
  6. package/dist/components/ds-banner.js +1 -1
  7. package/dist/components/ds-banner.js.map +1 -1
  8. package/dist/components/ds-bar-nav.js +1 -1
  9. package/dist/components/ds-bar-nav.js.map +1 -1
  10. package/dist/components/ds-button-group.js +1 -1
  11. package/dist/components/ds-button.js +1 -1
  12. package/dist/components/ds-checkbox.js +1 -1
  13. package/dist/components/ds-field.js +1 -1
  14. package/dist/components/ds-loader.js +1 -1
  15. package/dist/components/ds-menu.js +1 -1
  16. package/dist/components/ds-modal.js +1 -1
  17. package/dist/components/ds-modal.js.map +1 -1
  18. package/dist/components/ds-panel-nav.js +1 -1
  19. package/dist/components/ds-panel-nav.js.map +1 -1
  20. package/dist/components/ds-select.js +1 -1
  21. package/dist/components/ds-slider.js +1 -1
  22. package/dist/components/ds-toast-provider.js +1 -1
  23. package/dist/components/ds-toast-provider.js.map +1 -1
  24. package/dist/components/ds-toggle-button-group.js +1 -1
  25. package/dist/components/ds-toggle-button.js +1 -1
  26. package/dist/components/ds-toggle.js +1 -1
  27. package/dist/components/ds-tooltip.js +1 -1
  28. package/dist/components/ds-tooltip.js.map +1 -1
  29. package/dist/components/p-BRju0sEC.js +2 -0
  30. package/dist/components/p-BRju0sEC.js.map +1 -0
  31. package/dist/components/p-BvmooLHV.js +2 -0
  32. package/dist/components/p-BvmooLHV.js.map +1 -0
  33. package/dist/components/p-C4WbCXBj.js +2 -0
  34. package/dist/components/p-C4WbCXBj.js.map +1 -0
  35. package/dist/components/p-CYJ-de0u.js +2 -0
  36. package/dist/components/p-CYJ-de0u.js.map +1 -0
  37. package/dist/components/{p--YDw8Q4o.js → p-CsO880L-.js} +2 -2
  38. package/dist/components/p-DTjpgYJV.js +2 -0
  39. package/dist/components/p-DTjpgYJV.js.map +1 -0
  40. package/dist/components/p-DfL2MOso.js +2 -0
  41. package/dist/components/p-DfL2MOso.js.map +1 -0
  42. package/dist/components/p-DiWQFROF.js +2 -0
  43. package/dist/components/p-DiWQFROF.js.map +1 -0
  44. package/dist/types/components/AppShell/AppShell.d.ts +25 -0
  45. package/dist/types/components/Banner/Banner.d.ts +2 -0
  46. package/dist/types/components/Loader/Loader.d.ts +3 -2
  47. package/dist/types/components/Menu/Menu.d.ts +11 -2
  48. package/dist/types/components/Modal/Modal.d.ts +1 -0
  49. package/dist/types/components/PanelNav/PanelNav.d.ts +3 -6
  50. package/dist/types/components/Toast/Toast.d.ts +1 -0
  51. package/dist/types/components/Tooltip/Tooltip.d.ts +14 -3
  52. package/dist/types/components.d.ts +92 -105
  53. package/dist/types/nav/index.d.ts +2 -0
  54. package/dist/types/nav/shell-gradient.d.ts +25 -0
  55. package/dist/types/nav/shell-view-transition.d.ts +2 -2
  56. package/dist/types/utils/index.d.ts +5 -0
  57. package/dist/types/utils/resolve-css-length-px.d.ts +8 -0
  58. package/dist/types/utils/resolve-css-time-ms.d.ts +8 -0
  59. package/dist/types/utils/token-defaults.d.ts +27 -0
  60. package/package.json +4 -4
  61. package/src/angular/index.ts +1 -1
  62. package/src/angular/proxies.ts +23 -33
  63. package/src/react/components.ts +1 -1
  64. package/src/react/ds-app-shell.ts +26 -0
  65. package/src/wc/components/AppShell/AppShell.tsx +180 -0
  66. package/src/wc/components/Banner/Banner.tsx +11 -5
  67. package/src/wc/components/Loader/Loader.tsx +8 -3
  68. package/src/wc/components/Menu/Menu.tsx +61 -26
  69. package/src/wc/components/Modal/Modal.tsx +10 -7
  70. package/src/wc/components/PanelNav/PanelNav.tsx +5 -8
  71. package/src/wc/components/Toast/Toast.tsx +7 -2
  72. package/src/wc/components/Toast/toast-service.ts +8 -1
  73. package/src/wc/components/ToggleButton/ToggleButton.tsx +7 -3
  74. package/src/wc/components/Tooltip/Tooltip.tsx +70 -31
  75. package/src/wc/components.d.ts +92 -105
  76. package/src/wc/nav/index.ts +14 -0
  77. package/src/wc/nav/shell-gradient.ts +44 -0
  78. package/src/wc/nav/shell-view-transition.ts +4 -10
  79. package/dist/components/ds-sidebar.js +0 -2
  80. package/dist/components/ds-sidebar.js.map +0 -1
  81. package/dist/components/p-BcuUR5Ao.js +0 -2
  82. package/dist/components/p-BcuUR5Ao.js.map +0 -1
  83. package/dist/components/p-CpbnmEu1.js +0 -2
  84. package/dist/components/p-CpbnmEu1.js.map +0 -1
  85. package/dist/components/p-DznbYg1m.js +0 -2
  86. package/dist/components/p-DznbYg1m.js.map +0 -1
  87. package/dist/components/p-uMN1Ppw2.js +0 -2
  88. package/dist/components/p-uMN1Ppw2.js.map +0 -1
  89. package/dist/types/components/Sidebar/Sidebar.d.ts +0 -29
  90. package/src/react/ds-sidebar.ts +0 -33
  91. package/src/wc/components/Sidebar/Sidebar.tsx +0 -245
  92. /package/dist/components/{p--YDw8Q4o.js.map → p-CsO880L-.js.map} +0 -0
@@ -6,10 +6,10 @@
6
6
  */
7
7
  import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
8
8
  import { AccordionItemData } from "./components/Accordion/Accordion";
9
+ import { NavChromeStyle } from "./nav/nav-chrome";
9
10
  import { BadgeSurface, BadgeVariant } from "./components/Badge/Badge";
10
11
  import { BannerContrast, BannerIntent } from "./components/Banner/Banner";
11
12
  import { BarNavActionItem, BarNavTab } from "./components/BarNav/bar-nav-types";
12
- import { NavChromeStyle } from "./nav/nav-chrome";
13
13
  import { BarNavActionBackground } from "./components/BarNavAction/BarNavAction";
14
14
  import { BreadcrumbItem } from "./components/Breadcrumb/Breadcrumb";
15
15
  import { ButtonBackground, ButtonContrast, ButtonElevation, ButtonIntent, ButtonSize, ButtonVariant } from "./components/Button/Button";
@@ -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";
@@ -42,10 +41,10 @@ import { ToggleButtonBackground, ToggleButtonElevation, ToggleButtonSize } from
42
41
  import { ToggleGroupBackground, ToggleGroupElevation, ToggleGroupItem, ToggleGroupSize } from "./components/ToggleButtonGroup/ToggleButtonGroup";
43
42
  import { TooltipAlign, TooltipSide } from "./components/Tooltip/Tooltip";
44
43
  export { AccordionItemData } from "./components/Accordion/Accordion";
44
+ export { NavChromeStyle } from "./nav/nav-chrome";
45
45
  export { BadgeSurface, BadgeVariant } from "./components/Badge/Badge";
46
46
  export { BannerContrast, BannerIntent } from "./components/Banner/Banner";
47
47
  export { BarNavActionItem, BarNavTab } from "./components/BarNav/bar-nav-types";
48
- export { NavChromeStyle } from "./nav/nav-chrome";
49
48
  export { BarNavActionBackground } from "./components/BarNavAction/BarNavAction";
50
49
  export { BreadcrumbItem } from "./components/Breadcrumb/Breadcrumb";
51
50
  export { ButtonBackground, ButtonContrast, ButtonElevation, ButtonIntent, ButtonSize, ButtonVariant } from "./components/Button/Button";
@@ -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";
@@ -93,6 +91,23 @@ export namespace Components {
93
91
  */
94
92
  "multiple": boolean;
95
93
  }
94
+ interface DsAppShell {
95
+ /**
96
+ * When `true`, paints the shared L-shaped radial wash on panel + bar backgrounds.
97
+ * @default false
98
+ */
99
+ "gradient": boolean;
100
+ /**
101
+ * Optional custom gradient for `background-image` (e.g. SVG URL). When set, overrides the built-in radial wash.
102
+ * @default ''
103
+ */
104
+ "gradientSrc": string;
105
+ /**
106
+ * Chrome style propagated to slotted `ds-panel-nav` and `ds-bar-nav`.
107
+ * @default 'navigation'
108
+ */
109
+ "navStyle": NavChromeStyle;
110
+ }
96
111
  interface DsBadge {
97
112
  /**
98
113
  * Direct ring background override for component-local surfaces.
@@ -524,10 +539,10 @@ export namespace Components {
524
539
  */
525
540
  "label": string | undefined;
526
541
  /**
527
- * Render size in px. Designed on a 16×16 viewBox; stroke scales proportionally.
528
- * @default 20
542
+ * Render size number (px) or TokoMo length (`var(--dimension-iconography-md)`, etc.).
543
+ * @default TOKEN_DEFAULTS.iconographyMd
529
544
  */
530
- "size": number;
545
+ "size": number | string;
531
546
  }
532
547
  interface DsMenu {
533
548
  /**
@@ -535,9 +550,10 @@ export namespace Components {
535
550
  */
536
551
  "align": MenuAlign;
537
552
  /**
553
+ * Cross-axis offset — number (px) or TokoMo length.
538
554
  * @default 0
539
555
  */
540
- "alignOffset": number;
556
+ "alignOffset": number | string;
541
557
  /**
542
558
  * External trigger element to position against. Set via JS: menuEl.anchor = buttonEl
543
559
  */
@@ -565,9 +581,10 @@ export namespace Components {
565
581
  */
566
582
  "side": MenuSide;
567
583
  /**
568
- * @default 4
584
+ * Gap between anchor and menu — number (px) or TokoMo length (`var(--dimension-space-050)`, etc.).
585
+ * @default TOKEN_DEFAULTS.space050
569
586
  */
570
- "sideOffset": number;
587
+ "sideOffset": number | string;
571
588
  }
572
589
  interface DsModal {
573
590
  "heading": string;
@@ -611,7 +628,7 @@ export namespace Components {
611
628
  */
612
629
  "breakpoint": number;
613
630
  /**
614
- * Whether the nav is in collapsed (icon-only) state. When `storageKey` is set the component manages this internally do not also bind it from outside in that mode.
631
+ * Whether the nav is in collapsed (icon-only) state. Set `storageKey` to persist across reloads. `dsNavToggle` still fires on change.
615
632
  * @default false
616
633
  */
617
634
  "collapsed": boolean;
@@ -641,7 +658,7 @@ export namespace Components {
641
658
  */
642
659
  "routerMode": PanelNavRouterMode;
643
660
  /**
644
- * `localStorage` key used to persist the collapsed state across page loads. When set the component is self-managing for collapsed state; `dsNavToggle` still fires for consumers that want to observe the change.
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.
645
662
  * @default ''
646
663
  */
647
664
  "storageKey": string;
@@ -711,24 +728,6 @@ export namespace Components {
711
728
  */
712
729
  "value": string;
713
730
  }
714
- interface DsSidebar {
715
- /**
716
- * @default false
717
- */
718
- "collapsed": boolean;
719
- /**
720
- * @default false
721
- */
722
- "mobile": boolean;
723
- /**
724
- * @default true
725
- */
726
- "resizable": boolean;
727
- /**
728
- * @default 'default'
729
- */
730
- "width": SidebarWidth;
731
- }
732
731
  interface DsSkeleton {
733
732
  /**
734
733
  * Height as a CSS value string or number (px).
@@ -1032,13 +1031,15 @@ export namespace Components {
1032
1031
  */
1033
1032
  "align": TooltipAlign;
1034
1033
  /**
1034
+ * Cross-axis offset — number (px) or TokoMo length.
1035
1035
  * @default 0
1036
1036
  */
1037
- "alignOffset": number;
1037
+ "alignOffset": number | string;
1038
1038
  /**
1039
- * @default HOVER_DELAY_MS
1039
+ * Show delay — number (ms) or TokoMo time token / `var(--effect-animation-delay-*)`.
1040
+ * @default TOKEN_DEFAULTS.animationDelayMedium1
1040
1041
  */
1041
- "delay": number;
1042
+ "delay": number | string;
1042
1043
  "label": string;
1043
1044
  "shortcutKey": string | undefined;
1044
1045
  /**
@@ -1050,9 +1051,10 @@ export namespace Components {
1050
1051
  */
1051
1052
  "side": TooltipSide;
1052
1053
  /**
1053
- * @default 4
1054
+ * Gap between anchor and tooltip — number (px) or TokoMo length.
1055
+ * @default TOKEN_DEFAULTS.space050
1054
1056
  */
1055
- "sideOffset": number;
1057
+ "sideOffset": number | string;
1056
1058
  }
1057
1059
  }
1058
1060
  export interface DsAccordionCustomEvent<T> extends CustomEvent<T> {
@@ -1119,10 +1121,6 @@ export interface DsSelectCustomEvent<T> extends CustomEvent<T> {
1119
1121
  detail: T;
1120
1122
  target: HTMLDsSelectElement;
1121
1123
  }
1122
- export interface DsSidebarCustomEvent<T> extends CustomEvent<T> {
1123
- detail: T;
1124
- target: HTMLDsSidebarElement;
1125
- }
1126
1124
  export interface DsSliderCustomEvent<T> extends CustomEvent<T> {
1127
1125
  detail: T;
1128
1126
  target: HTMLDsSliderElement;
@@ -1169,6 +1167,12 @@ declare global {
1169
1167
  prototype: HTMLDsAccordionElement;
1170
1168
  new (): HTMLDsAccordionElement;
1171
1169
  };
1170
+ interface HTMLDsAppShellElement extends Components.DsAppShell, HTMLStencilElement {
1171
+ }
1172
+ var HTMLDsAppShellElement: {
1173
+ prototype: HTMLDsAppShellElement;
1174
+ new (): HTMLDsAppShellElement;
1175
+ };
1172
1176
  interface HTMLDsBadgeElement extends Components.DsBadge, HTMLStencilElement {
1173
1177
  }
1174
1178
  var HTMLDsBadgeElement: {
@@ -1494,24 +1498,6 @@ declare global {
1494
1498
  prototype: HTMLDsSelectElement;
1495
1499
  new (): HTMLDsSelectElement;
1496
1500
  };
1497
- interface HTMLDsSidebarElementEventMap {
1498
- "dsToggle": void;
1499
- "dsWidthChange": SidebarWidth;
1500
- }
1501
- interface HTMLDsSidebarElement extends Components.DsSidebar, HTMLStencilElement {
1502
- addEventListener<K extends keyof HTMLDsSidebarElementEventMap>(type: K, listener: (this: HTMLDsSidebarElement, ev: DsSidebarCustomEvent<HTMLDsSidebarElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
1503
- addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1504
- addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1505
- addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
1506
- removeEventListener<K extends keyof HTMLDsSidebarElementEventMap>(type: K, listener: (this: HTMLDsSidebarElement, ev: DsSidebarCustomEvent<HTMLDsSidebarElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
1507
- removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1508
- removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1509
- removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
1510
- }
1511
- var HTMLDsSidebarElement: {
1512
- prototype: HTMLDsSidebarElement;
1513
- new (): HTMLDsSidebarElement;
1514
- };
1515
1501
  interface HTMLDsSkeletonElement extends Components.DsSkeleton, HTMLStencilElement {
1516
1502
  }
1517
1503
  var HTMLDsSkeletonElement: {
@@ -1671,6 +1657,7 @@ declare global {
1671
1657
  };
1672
1658
  interface HTMLElementTagNameMap {
1673
1659
  "ds-accordion": HTMLDsAccordionElement;
1660
+ "ds-app-shell": HTMLDsAppShellElement;
1674
1661
  "ds-badge": HTMLDsBadgeElement;
1675
1662
  "ds-banner": HTMLDsBannerElement;
1676
1663
  "ds-bar-nav": HTMLDsBarNavElement;
@@ -1696,7 +1683,6 @@ declare global {
1696
1683
  "ds-radio-group": HTMLDsRadioGroupElement;
1697
1684
  "ds-scrollbar": HTMLDsScrollbarElement;
1698
1685
  "ds-select": HTMLDsSelectElement;
1699
- "ds-sidebar": HTMLDsSidebarElement;
1700
1686
  "ds-skeleton": HTMLDsSkeletonElement;
1701
1687
  "ds-slider": HTMLDsSliderElement;
1702
1688
  "ds-surface": HTMLDsSurfaceElement;
@@ -1731,6 +1717,23 @@ declare namespace LocalJSX {
1731
1717
  "multiple"?: boolean;
1732
1718
  "onDsExpandedChange"?: (event: DsAccordionCustomEvent<string[]>) => void;
1733
1719
  }
1720
+ interface DsAppShell {
1721
+ /**
1722
+ * When `true`, paints the shared L-shaped radial wash on panel + bar backgrounds.
1723
+ * @default false
1724
+ */
1725
+ "gradient"?: boolean;
1726
+ /**
1727
+ * Optional custom gradient for `background-image` (e.g. SVG URL). When set, overrides the built-in radial wash.
1728
+ * @default ''
1729
+ */
1730
+ "gradientSrc"?: string;
1731
+ /**
1732
+ * Chrome style propagated to slotted `ds-panel-nav` and `ds-bar-nav`.
1733
+ * @default 'navigation'
1734
+ */
1735
+ "navStyle"?: NavChromeStyle;
1736
+ }
1734
1737
  interface DsBadge {
1735
1738
  /**
1736
1739
  * Direct ring background override for component-local surfaces.
@@ -2197,10 +2200,10 @@ declare namespace LocalJSX {
2197
2200
  */
2198
2201
  "label"?: string | undefined;
2199
2202
  /**
2200
- * Render size in px. Designed on a 16×16 viewBox; stroke scales proportionally.
2201
- * @default 20
2203
+ * Render size number (px) or TokoMo length (`var(--dimension-iconography-md)`, etc.).
2204
+ * @default TOKEN_DEFAULTS.iconographyMd
2202
2205
  */
2203
- "size"?: number;
2206
+ "size"?: number | string;
2204
2207
  }
2205
2208
  interface DsMenu {
2206
2209
  /**
@@ -2208,9 +2211,10 @@ declare namespace LocalJSX {
2208
2211
  */
2209
2212
  "align"?: MenuAlign;
2210
2213
  /**
2214
+ * Cross-axis offset — number (px) or TokoMo length.
2211
2215
  * @default 0
2212
2216
  */
2213
- "alignOffset"?: number;
2217
+ "alignOffset"?: number | string;
2214
2218
  /**
2215
2219
  * External trigger element to position against. Set via JS: menuEl.anchor = buttonEl
2216
2220
  */
@@ -2240,9 +2244,10 @@ declare namespace LocalJSX {
2240
2244
  */
2241
2245
  "side"?: MenuSide;
2242
2246
  /**
2243
- * @default 4
2247
+ * Gap between anchor and menu — number (px) or TokoMo length (`var(--dimension-space-050)`, etc.).
2248
+ * @default TOKEN_DEFAULTS.space050
2244
2249
  */
2245
- "sideOffset"?: number;
2250
+ "sideOffset"?: number | string;
2246
2251
  }
2247
2252
  interface DsModal {
2248
2253
  "heading": string;
@@ -2288,7 +2293,7 @@ declare namespace LocalJSX {
2288
2293
  */
2289
2294
  "breakpoint"?: number;
2290
2295
  /**
2291
- * Whether the nav is in collapsed (icon-only) state. When `storageKey` is set the component manages this internally do not also bind it from outside in that mode.
2296
+ * Whether the nav is in collapsed (icon-only) state. Set `storageKey` to persist across reloads. `dsNavToggle` still fires on change.
2292
2297
  * @default false
2293
2298
  */
2294
2299
  "collapsed"?: boolean;
@@ -2334,7 +2339,7 @@ declare namespace LocalJSX {
2334
2339
  */
2335
2340
  "routerMode"?: PanelNavRouterMode;
2336
2341
  /**
2337
- * `localStorage` key used to persist the collapsed state across page loads. When set the component is self-managing for collapsed state; `dsNavToggle` still fires for consumers that want to observe the change.
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.
2338
2343
  * @default ''
2339
2344
  */
2340
2345
  "storageKey"?: string;
@@ -2409,26 +2414,6 @@ declare namespace LocalJSX {
2409
2414
  */
2410
2415
  "value"?: string;
2411
2416
  }
2412
- interface DsSidebar {
2413
- /**
2414
- * @default false
2415
- */
2416
- "collapsed"?: boolean;
2417
- /**
2418
- * @default false
2419
- */
2420
- "mobile"?: boolean;
2421
- "onDsToggle"?: (event: DsSidebarCustomEvent<void>) => void;
2422
- "onDsWidthChange"?: (event: DsSidebarCustomEvent<SidebarWidth>) => void;
2423
- /**
2424
- * @default true
2425
- */
2426
- "resizable"?: boolean;
2427
- /**
2428
- * @default 'default'
2429
- */
2430
- "width"?: SidebarWidth;
2431
- }
2432
2417
  interface DsSkeleton {
2433
2418
  /**
2434
2419
  * Height as a CSS value string or number (px).
@@ -2747,13 +2732,15 @@ declare namespace LocalJSX {
2747
2732
  */
2748
2733
  "align"?: TooltipAlign;
2749
2734
  /**
2735
+ * Cross-axis offset — number (px) or TokoMo length.
2750
2736
  * @default 0
2751
2737
  */
2752
- "alignOffset"?: number;
2738
+ "alignOffset"?: number | string;
2753
2739
  /**
2754
- * @default HOVER_DELAY_MS
2740
+ * Show delay — number (ms) or TokoMo time token / `var(--effect-animation-delay-*)`.
2741
+ * @default TOKEN_DEFAULTS.animationDelayMedium1
2755
2742
  */
2756
- "delay"?: number;
2743
+ "delay"?: number | string;
2757
2744
  "label": string;
2758
2745
  "shortcutKey"?: string | undefined;
2759
2746
  /**
@@ -2765,15 +2752,21 @@ declare namespace LocalJSX {
2765
2752
  */
2766
2753
  "side"?: TooltipSide;
2767
2754
  /**
2768
- * @default 4
2755
+ * Gap between anchor and tooltip — number (px) or TokoMo length.
2756
+ * @default TOKEN_DEFAULTS.space050
2769
2757
  */
2770
- "sideOffset"?: number;
2758
+ "sideOffset"?: number | string;
2771
2759
  }
2772
2760
 
2773
2761
  interface DsAccordionAttributes {
2774
2762
  "multiple": boolean;
2775
2763
  "expandedIds": string;
2776
2764
  }
2765
+ interface DsAppShellAttributes {
2766
+ "navStyle": NavChromeStyle;
2767
+ "gradient": boolean;
2768
+ "gradientSrc": string;
2769
+ }
2777
2770
  interface DsBadgeAttributes {
2778
2771
  "variant": BadgeVariant;
2779
2772
  "count": number;
@@ -2909,15 +2902,15 @@ declare namespace LocalJSX {
2909
2902
  "ariaDescribedby": string | undefined;
2910
2903
  }
2911
2904
  interface DsLoaderAttributes {
2912
- "size": number;
2905
+ "size": string;
2913
2906
  "label": string | undefined;
2914
2907
  }
2915
2908
  interface DsMenuAttributes {
2916
2909
  "open": boolean;
2917
2910
  "side": MenuSide;
2918
2911
  "align": MenuAlign;
2919
- "sideOffset": number;
2920
- "alignOffset": number;
2912
+ "sideOffset": string;
2913
+ "alignOffset": string;
2921
2914
  "menuWidth": string | undefined;
2922
2915
  "minWidth": string | undefined;
2923
2916
  "anchorId": string | undefined;
@@ -2965,12 +2958,6 @@ declare namespace LocalJSX {
2965
2958
  "ariaLabel": string | undefined;
2966
2959
  "ariaLabelledby": string | undefined;
2967
2960
  }
2968
- interface DsSidebarAttributes {
2969
- "collapsed": boolean;
2970
- "width": string;
2971
- "resizable": boolean;
2972
- "mobile": boolean;
2973
- }
2974
2961
  interface DsSkeletonAttributes {
2975
2962
  "variant": SkeletonVariant;
2976
2963
  "width": string;
@@ -3071,15 +3058,16 @@ declare namespace LocalJSX {
3071
3058
  "label": string;
3072
3059
  "side": TooltipSide;
3073
3060
  "align": TooltipAlign;
3074
- "sideOffset": number;
3075
- "alignOffset": number;
3076
- "delay": number;
3061
+ "sideOffset": string;
3062
+ "alignOffset": string;
3063
+ "delay": string;
3077
3064
  "shortcutKey": string | undefined;
3078
3065
  "shortcutKeyPosition": 'start' | 'end';
3079
3066
  }
3080
3067
 
3081
3068
  interface IntrinsicElements {
3082
3069
  "ds-accordion": Omit<DsAccordion, keyof DsAccordionAttributes> & { [K in keyof DsAccordion & keyof DsAccordionAttributes]?: DsAccordion[K] } & { [K in keyof DsAccordion & keyof DsAccordionAttributes as `attr:${K}`]?: DsAccordionAttributes[K] } & { [K in keyof DsAccordion & keyof DsAccordionAttributes as `prop:${K}`]?: DsAccordion[K] };
3070
+ "ds-app-shell": Omit<DsAppShell, keyof DsAppShellAttributes> & { [K in keyof DsAppShell & keyof DsAppShellAttributes]?: DsAppShell[K] } & { [K in keyof DsAppShell & keyof DsAppShellAttributes as `attr:${K}`]?: DsAppShellAttributes[K] } & { [K in keyof DsAppShell & keyof DsAppShellAttributes as `prop:${K}`]?: DsAppShell[K] };
3083
3071
  "ds-badge": Omit<DsBadge, keyof DsBadgeAttributes> & { [K in keyof DsBadge & keyof DsBadgeAttributes]?: DsBadge[K] } & { [K in keyof DsBadge & keyof DsBadgeAttributes as `attr:${K}`]?: DsBadgeAttributes[K] } & { [K in keyof DsBadge & keyof DsBadgeAttributes as `prop:${K}`]?: DsBadge[K] };
3084
3072
  "ds-banner": Omit<DsBanner, keyof DsBannerAttributes> & { [K in keyof DsBanner & keyof DsBannerAttributes]?: DsBanner[K] } & { [K in keyof DsBanner & keyof DsBannerAttributes as `attr:${K}`]?: DsBannerAttributes[K] } & { [K in keyof DsBanner & keyof DsBannerAttributes as `prop:${K}`]?: DsBanner[K] };
3085
3073
  "ds-bar-nav": Omit<DsBarNav, keyof DsBarNavAttributes> & { [K in keyof DsBarNav & keyof DsBarNavAttributes]?: DsBarNav[K] } & { [K in keyof DsBarNav & keyof DsBarNavAttributes as `attr:${K}`]?: DsBarNavAttributes[K] } & { [K in keyof DsBarNav & keyof DsBarNavAttributes as `prop:${K}`]?: DsBarNav[K] };
@@ -3105,7 +3093,6 @@ declare namespace LocalJSX {
3105
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] };
3106
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] };
3107
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] };
3108
- "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] };
3109
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] };
3110
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"]>;
3111
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] };
@@ -3126,6 +3113,7 @@ declare module "@stencil/core" {
3126
3113
  export namespace JSX {
3127
3114
  interface IntrinsicElements {
3128
3115
  "ds-accordion": LocalJSX.IntrinsicElements["ds-accordion"] & JSXBase.HTMLAttributes<HTMLDsAccordionElement>;
3116
+ "ds-app-shell": LocalJSX.IntrinsicElements["ds-app-shell"] & JSXBase.HTMLAttributes<HTMLDsAppShellElement>;
3129
3117
  "ds-badge": LocalJSX.IntrinsicElements["ds-badge"] & JSXBase.HTMLAttributes<HTMLDsBadgeElement>;
3130
3118
  "ds-banner": LocalJSX.IntrinsicElements["ds-banner"] & JSXBase.HTMLAttributes<HTMLDsBannerElement>;
3131
3119
  "ds-bar-nav": LocalJSX.IntrinsicElements["ds-bar-nav"] & JSXBase.HTMLAttributes<HTMLDsBarNavElement>;
@@ -3151,7 +3139,6 @@ declare module "@stencil/core" {
3151
3139
  "ds-radio-group": LocalJSX.IntrinsicElements["ds-radio-group"] & JSXBase.HTMLAttributes<HTMLDsRadioGroupElement>;
3152
3140
  "ds-scrollbar": LocalJSX.IntrinsicElements["ds-scrollbar"] & JSXBase.HTMLAttributes<HTMLDsScrollbarElement>;
3153
3141
  "ds-select": LocalJSX.IntrinsicElements["ds-select"] & JSXBase.HTMLAttributes<HTMLDsSelectElement>;
3154
- "ds-sidebar": LocalJSX.IntrinsicElements["ds-sidebar"] & JSXBase.HTMLAttributes<HTMLDsSidebarElement>;
3155
3142
  "ds-skeleton": LocalJSX.IntrinsicElements["ds-skeleton"] & JSXBase.HTMLAttributes<HTMLDsSkeletonElement>;
3156
3143
  "ds-slider": LocalJSX.IntrinsicElements["ds-slider"] & JSXBase.HTMLAttributes<HTMLDsSliderElement>;
3157
3144
  "ds-surface": LocalJSX.IntrinsicElements["ds-surface"] & JSXBase.HTMLAttributes<HTMLDsSurfaceElement>;
@@ -2,4 +2,6 @@ export type { NavChromeStyle } from './nav-chrome';
2
2
  export { NAV_STYLE_HINT_ATTR, readNavStyleAttr, setNavStyleHint, clearNavStyleHint, resolveNavChromeStyle, shouldResyncNavChromeStyle, } from './nav-chrome';
3
3
  export { SHELL_BAR_NAV_VT_NAME, parseCssTimeMs, ensureShellNavVtStyle, resolveShellNavRevealOrigin, setShellNavRevealOriginVars, animateShellNavRadialReveal, runShellNavStyleRevealOnReady, } from './shell-view-transition';
4
4
  export type { ShellNavRevealOrigin } from './shell-view-transition';
5
+ export { SHELL_GRADIENT_IMAGE_VAR, SHELL_GRADIENT_SIZE_VAR, SHELL_GRADIENT_POSITION_PANEL_VAR, SHELL_GRADIENT_POSITION_BAR_VAR, SHELL_GRADIENT_OPACITY_VAR, SHELL_GRADIENT_OPACITY, buildShellRadialGradient, shellGradientImageForStyle, shellGradientSize, shellGradientPositionPanel, shellGradientPositionBar, } from './shell-gradient';
6
+ export type { ShellGradientLayout } from './shell-gradient';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,25 @@
1
+ import type { NavChromeStyle } from './nav-chrome';
2
+ /** CSS var names consumed by `ds-panel-nav` / `ds-bar-nav` inside `ds-app-shell`. */
3
+ export declare const SHELL_GRADIENT_IMAGE_VAR = "--ds-shell-gradient-image";
4
+ export declare const SHELL_GRADIENT_SIZE_VAR = "--ds-shell-gradient-size";
5
+ export declare const SHELL_GRADIENT_POSITION_PANEL_VAR = "--ds-shell-gradient-position-panel";
6
+ export declare const SHELL_GRADIENT_POSITION_BAR_VAR = "--ds-shell-gradient-position-bar";
7
+ export declare const SHELL_GRADIENT_OPACITY_VAR = "--ds-shell-gradient-opacity";
8
+ /** Layer opacity for the nav gradient wash. */
9
+ export declare const SHELL_GRADIENT_OPACITY = "0.1";
10
+ /**
11
+ * Unified shell radial — same wash for all nav chrome styles.
12
+ * Tokens follow `data-theme` (light/dark blue intent).
13
+ */
14
+ export declare function buildShellRadialGradient(): string;
15
+ /** Built-in radial image (optional `gradientSrc` on shell overrides). */
16
+ export declare function shellGradientImageForStyle(_style: NavChromeStyle): string;
17
+ export interface ShellGradientLayout {
18
+ width: number;
19
+ height: number;
20
+ panelWidth: number;
21
+ }
22
+ export declare function shellGradientSize(layout: ShellGradientLayout): string;
23
+ export declare function shellGradientPositionPanel(): string;
24
+ export declare function shellGradientPositionBar(panelWidth: number): string;
25
+ //# sourceMappingURL=shell-gradient.d.ts.map
@@ -1,7 +1,7 @@
1
+ import { parseCssTimeMs } from '../utils/resolve-css-time-ms';
1
2
  /** `view-transition-name` on `ds-bar-nav` — pairs with root reveal in shell apps. */
2
3
  export declare const SHELL_BAR_NAV_VT_NAME = "ds-shell-bar-nav";
3
- /** Parse a CSS <time> value to milliseconds. */
4
- export declare function parseCssTimeMs(value: string, fallback: number): number;
4
+ export { parseCssTimeMs };
5
5
  /** Suppress default cross-fade and pin new snapshots to a 0px circle for WAAPI reveal. */
6
6
  export declare function ensureShellNavVtStyle(): void;
7
7
  export interface ShellNavRevealOrigin {
@@ -0,0 +1,5 @@
1
+ export { clearCssLengthPxCache, resolveCssLengthPx } from './resolve-css-length-px';
2
+ export { parseCssTimeMs, resolveCssTimeMs } from './resolve-css-time-ms';
3
+ export { TOKEN_DEFAULTS } from './token-defaults';
4
+ export type { TokenDefaultKey } from './token-defaults';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,8 @@
1
+ /** Clear session cache (tests only). */
2
+ export declare function clearCssLengthPxCache(): void;
3
+ /**
4
+ * Resolve a CSS length to pixels for layout math.
5
+ * Numbers pass through; `var(--dimension-*)`, `calc(...)`, and `16px` resolve via a hidden probe.
6
+ */
7
+ export declare function resolveCssLengthPx(value: number | string | undefined, fallback: number | string): number;
8
+ //# sourceMappingURL=resolve-css-length-px.d.ts.map
@@ -0,0 +1,8 @@
1
+ /** Parse a CSS <time> value (or motion shorthand's first token) to milliseconds. */
2
+ export declare function parseCssTimeMs(value: string, fallback: number): number;
3
+ /**
4
+ * Resolve a duration to milliseconds for JS timers aligned with CSS motion tokens.
5
+ * Accepts numbers (ms), raw times (`200ms`, `0.75s`), or `var(--effect-*)` references.
6
+ */
7
+ export declare function resolveCssTimeMs(value: number | string | undefined, fallbackToken: string): number;
8
+ //# sourceMappingURL=resolve-css-time-ms.d.ts.map
@@ -0,0 +1,27 @@
1
+ /** TokoMo CSS custom-property names for shared component defaults (runtime resolution). */
2
+ export declare const TOKEN_DEFAULTS: {
3
+ readonly space050: "--dimension-space-050";
4
+ readonly space200: "--dimension-space-200";
5
+ readonly size300: "--dimension-size-300";
6
+ readonly size600: "--dimension-size-600";
7
+ readonly size800: "--dimension-size-800";
8
+ readonly iconographyMd: "--dimension-iconography-md";
9
+ readonly iconographySm: "--dimension-iconography-sm";
10
+ readonly iconographyXs: "--dimension-iconography-xs";
11
+ readonly panelWidth2xs: "--dimension-panel-width-2xs";
12
+ readonly panelWidthMd: "--dimension-panel-width-md";
13
+ readonly panelWidthLg: "--dimension-panel-width-lg";
14
+ readonly menuWidthXs: "--dimension-menu-width-xs";
15
+ readonly motionShort3: "--effect-motion-short-3";
16
+ readonly animationDurationShort3: "--effect-animation-duration-short-3";
17
+ readonly animationDurationMedium1: "--effect-animation-duration-medium-1";
18
+ readonly animationDelayMedium1: "--effect-animation-delay-medium-1";
19
+ readonly animationDelayShort2: "--effect-animation-delay-short-2";
20
+ readonly animationDelayLong2: "--effect-animation-delay-long-2";
21
+ /** Unmeasured menu height fallback: 20× base (160px at default scale). */
22
+ readonly menuFallbackHeight: "calc(var(--dimension-size-base) * 20)";
23
+ /** Unmeasured tooltip width fallback: size-800 + size-200 (80px). */
24
+ readonly tooltipFallbackWidth: "calc(var(--dimension-size-800) + var(--dimension-size-200))";
25
+ };
26
+ export type TokenDefaultKey = keyof typeof TOKEN_DEFAULTS;
27
+ //# sourceMappingURL=token-defaults.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ds-mo/ui",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "description": "CompoMo — composable web components styled with TokoMo design tokens",
5
5
  "keywords": [
6
6
  "web-components",
@@ -62,13 +62,13 @@
62
62
  "prebuild": "node scripts/generate-icon-catalog.mjs",
63
63
  "pretypecheck": "node scripts/generate-icon-catalog.mjs",
64
64
  "pretest": "node scripts/generate-icon-catalog.mjs",
65
- "build": "stencil build && node scripts/patch-index-types.mjs && node scripts/verify-icons-externalized.mjs",
66
- "test": "node --import tsx/esm --test tests/panel-nav-utils.test.ts tests/shell-view-transition.test.ts tests/bar-nav-utils.test.ts tests/bar-nav-tabs-menu-utils.test.ts tests/bar-nav-dom-utils.test.ts tests/icon-catalog.test.ts",
65
+ "build": "stencil build && node scripts/patch-index-types.mjs && node scripts/verify-icons-externalized.mjs && node scripts/write-build-stamp.mjs",
66
+ "test": "node --import tsx/esm --test tests/panel-nav-utils.test.ts tests/shell-view-transition.test.ts tests/shell-gradient.test.ts tests/resolve-css-length-px.test.ts tests/resolve-css-time-ms.test.ts tests/overlay-positioning.test.ts tests/bar-nav-utils.test.ts tests/bar-nav-tabs-menu-utils.test.ts tests/bar-nav-dom-utils.test.ts tests/icon-catalog.test.ts",
67
67
  "test:e2e": "npm run build && playwright test",
68
68
  "test:e2e:install": "playwright install chromium",
69
69
  "build:docs": "stencil build --docs",
70
70
  "dev": "node scripts/generate-icon-catalog.mjs && stencil build --watch",
71
- "storybook:ui": "storybook dev -p 6006 --no-open",
71
+ "storybook:ui": "node scripts/storybook-ui.mjs",
72
72
  "storybook": "node scripts/storybook-dev.mjs",
73
73
  "storybook:build": "storybook build",
74
74
  "clean": "rm -rf dist",
@@ -3,6 +3,7 @@ import * as d from './proxies';
3
3
 
4
4
  export const DIRECTIVES = [
5
5
  d.DsAccordion,
6
+ d.DsAppShell,
6
7
  d.DsBadge,
7
8
  d.DsBanner,
8
9
  d.DsBarNav,
@@ -28,7 +29,6 @@ export const DIRECTIVES = [
28
29
  d.DsRadioGroup,
29
30
  d.DsScrollbar,
30
31
  d.DsSelect,
31
- d.DsSidebar,
32
32
  d.DsSkeleton,
33
33
  d.DsSlider,
34
34
  d.DsSurface,