@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
@@ -1,13 +1,9 @@
1
1
  import { Component, Prop, State, Element, Watch, h, Host } from '@stencil/core';
2
+ import { resolveCssLengthPx, resolveCssTimeMs, TOKEN_DEFAULTS } from '../../utils';
2
3
 
3
4
  export type TooltipSide = 'top' | 'right' | 'bottom' | 'left';
4
5
  export type TooltipAlign = 'start' | 'center' | 'end';
5
6
 
6
- const HOVER_DELAY_MS = 600;
7
- const INSTANT_REOPEN_MS = 300;
8
- const FADE_OUT_MS = 200;
9
- const VP_PAD = 4;
10
-
11
7
  let lastDismissedAt = 0;
12
8
  let tooltipIdCounter = 0;
13
9
 
@@ -22,9 +18,12 @@ export class Tooltip {
22
18
  @Prop() label!: string;
23
19
  @Prop() side: TooltipSide = 'top';
24
20
  @Prop() align: TooltipAlign = 'center';
25
- @Prop() sideOffset: number = 4;
26
- @Prop() alignOffset: number = 0;
27
- @Prop() delay: number = HOVER_DELAY_MS;
21
+ /** Gap between anchor and tooltip — number (px) or TokoMo length. */
22
+ @Prop() sideOffset: number | string = TOKEN_DEFAULTS.space050;
23
+ /** Cross-axis offset — number (px) or TokoMo length. */
24
+ @Prop() alignOffset: number | string = 0;
25
+ /** Show delay — number (ms) or TokoMo time token / `var(--effect-animation-delay-*)`. */
26
+ @Prop() delay: number | string = TOKEN_DEFAULTS.animationDelayMedium1;
28
27
  @Prop() shortcutKey: string | undefined;
29
28
  @Prop() shortcutKeyPosition: 'start' | 'end' = 'end';
30
29
 
@@ -54,10 +53,47 @@ export class Tooltip {
54
53
  @Watch('label')
55
54
  @Watch('side')
56
55
  @Watch('align')
56
+ @Watch('sideOffset')
57
+ @Watch('alignOffset')
57
58
  onPositionPropsChange() {
58
59
  if (this.visible) this.calculatePosition();
59
60
  }
60
61
 
62
+ private get viewportPadPx(): number {
63
+ return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);
64
+ }
65
+
66
+ private get sideOffsetPx(): number {
67
+ return resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050);
68
+ }
69
+
70
+ private get alignOffsetPx(): number {
71
+ return resolveCssLengthPx(this.alignOffset, 0);
72
+ }
73
+
74
+ private get hoverDelayMs(): number {
75
+ return resolveCssTimeMs(this.delay, TOKEN_DEFAULTS.animationDelayMedium1);
76
+ }
77
+
78
+ private get instantReopenMs(): number {
79
+ return resolveCssTimeMs(
80
+ TOKEN_DEFAULTS.animationDurationMedium1,
81
+ TOKEN_DEFAULTS.animationDurationMedium1,
82
+ );
83
+ }
84
+
85
+ private get fadeOutMs(): number {
86
+ return resolveCssTimeMs(TOKEN_DEFAULTS.motionShort3, TOKEN_DEFAULTS.animationDurationShort3);
87
+ }
88
+
89
+ private get tooltipFallbackWidthPx(): number {
90
+ return resolveCssLengthPx(TOKEN_DEFAULTS.tooltipFallbackWidth, TOKEN_DEFAULTS.tooltipFallbackWidth);
91
+ }
92
+
93
+ private get tooltipFallbackHeightPx(): number {
94
+ return resolveCssLengthPx(TOKEN_DEFAULTS.size300, TOKEN_DEFAULTS.size300);
95
+ }
96
+
61
97
  private bindAnchor() {
62
98
  const slot = this.el.querySelector('slot') as HTMLSlotElement | null;
63
99
  const slotted = slot?.assignedElements?.() ?? [];
@@ -88,7 +124,7 @@ export class Tooltip {
88
124
 
89
125
  private show() {
90
126
  this.clearTimers();
91
- const instant = Date.now() - lastDismissedAt < INSTANT_REOPEN_MS;
127
+ const instant = Date.now() - lastDismissedAt < this.instantReopenMs;
92
128
  if (instant) {
93
129
  this.closing = false;
94
130
  this.visible = true;
@@ -100,7 +136,7 @@ export class Tooltip {
100
136
  this.closing = false;
101
137
  this.visible = true;
102
138
  requestAnimationFrame(() => this.calculatePosition());
103
- }, this.delay);
139
+ }, this.hoverDelayMs);
104
140
  }
105
141
 
106
142
  private hide() {
@@ -112,7 +148,7 @@ export class Tooltip {
112
148
  this.closeTimer = null;
113
149
  this.visible = false;
114
150
  this.closing = false;
115
- }, FADE_OUT_MS);
151
+ }, this.fadeOutMs);
116
152
  }
117
153
 
118
154
  private calculatePosition() {
@@ -120,40 +156,43 @@ export class Tooltip {
120
156
  const tip = this.el.querySelector('.tooltip-popup') as HTMLElement | null;
121
157
  if (!tip) return;
122
158
  const a = this.anchor.getBoundingClientRect();
123
- const tw = tip.offsetWidth || 80;
124
- const th = tip.offsetHeight || 24;
159
+ const tw = tip.offsetWidth || this.tooltipFallbackWidthPx;
160
+ const th = tip.offsetHeight || this.tooltipFallbackHeightPx;
161
+ const sideOffset = this.sideOffsetPx;
162
+ const alignOffset = this.alignOffsetPx;
163
+ const vpPad = this.viewportPadPx;
125
164
  let x = 0, y = 0;
126
165
 
127
166
  switch (this.side) {
128
167
  case 'top':
129
- y = a.top - th - this.sideOffset;
130
- x = this.align === 'start' ? a.left + this.alignOffset
131
- : this.align === 'end' ? a.right - tw + this.alignOffset
132
- : a.left + a.width / 2 - tw / 2 + this.alignOffset;
168
+ y = a.top - th - sideOffset;
169
+ x = this.align === 'start' ? a.left + alignOffset
170
+ : this.align === 'end' ? a.right - tw + alignOffset
171
+ : a.left + a.width / 2 - tw / 2 + alignOffset;
133
172
  break;
134
173
  case 'bottom':
135
- y = a.bottom + this.sideOffset;
136
- x = this.align === 'start' ? a.left + this.alignOffset
137
- : this.align === 'end' ? a.right - tw + this.alignOffset
138
- : a.left + a.width / 2 - tw / 2 + this.alignOffset;
174
+ y = a.bottom + sideOffset;
175
+ x = this.align === 'start' ? a.left + alignOffset
176
+ : this.align === 'end' ? a.right - tw + alignOffset
177
+ : a.left + a.width / 2 - tw / 2 + alignOffset;
139
178
  break;
140
179
  case 'left':
141
- x = a.left - tw - this.sideOffset;
142
- y = this.align === 'start' ? a.top + this.alignOffset
143
- : this.align === 'end' ? a.bottom - th + this.alignOffset
144
- : a.top + a.height / 2 - th / 2 + this.alignOffset;
180
+ x = a.left - tw - sideOffset;
181
+ y = this.align === 'start' ? a.top + alignOffset
182
+ : this.align === 'end' ? a.bottom - th + alignOffset
183
+ : a.top + a.height / 2 - th / 2 + alignOffset;
145
184
  break;
146
185
  case 'right':
147
- x = a.right + this.sideOffset;
148
- y = this.align === 'start' ? a.top + this.alignOffset
149
- : this.align === 'end' ? a.bottom - th + this.alignOffset
150
- : a.top + a.height / 2 - th / 2 + this.alignOffset;
186
+ x = a.right + sideOffset;
187
+ y = this.align === 'start' ? a.top + alignOffset
188
+ : this.align === 'end' ? a.bottom - th + alignOffset
189
+ : a.top + a.height / 2 - th / 2 + alignOffset;
151
190
  break;
152
191
  }
153
192
 
154
193
  this.pos = {
155
- x: Math.min(Math.max(x, VP_PAD), window.innerWidth - tw - VP_PAD),
156
- y: Math.min(Math.max(y, VP_PAD), window.innerHeight - th - VP_PAD),
194
+ x: Math.min(Math.max(x, vpPad), window.innerWidth - tw - vpPad),
195
+ y: Math.min(Math.max(y, vpPad), window.innerHeight - th - vpPad),
157
196
  };
158
197
  }
159
198
 
@@ -6,10 +6,10 @@
6
6
  */
7
7
  import { HTMLStencilElement, JSXBase } from "@stencil/core/internal";
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>;
@@ -17,3 +17,17 @@ export {
17
17
  runShellNavStyleRevealOnReady,
18
18
  } from './shell-view-transition';
19
19
  export type { ShellNavRevealOrigin } from './shell-view-transition';
20
+ export {
21
+ SHELL_GRADIENT_IMAGE_VAR,
22
+ SHELL_GRADIENT_SIZE_VAR,
23
+ SHELL_GRADIENT_POSITION_PANEL_VAR,
24
+ SHELL_GRADIENT_POSITION_BAR_VAR,
25
+ SHELL_GRADIENT_OPACITY_VAR,
26
+ SHELL_GRADIENT_OPACITY,
27
+ buildShellRadialGradient,
28
+ shellGradientImageForStyle,
29
+ shellGradientSize,
30
+ shellGradientPositionPanel,
31
+ shellGradientPositionBar,
32
+ } from './shell-gradient';
33
+ export type { ShellGradientLayout } from './shell-gradient';