@ds-mo/ui 14.22.2 → 14.23.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 (128) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +5 -1
  3. package/dist/agent.json +56 -13
  4. package/dist/angular/ds-panel-tools.d.ts +7 -1
  5. package/dist/angular/ds-panel-tools.js +7 -4
  6. package/dist/angular/ds-shell-app.d.ts +7 -1
  7. package/dist/angular/ds-shell-app.js +5 -2
  8. package/dist/angular/ds-shell-tools.d.ts +4 -1
  9. package/dist/angular/ds-shell-tools.js +7 -4
  10. package/dist/components/ds-message-scroller.js +1 -1
  11. package/dist/components/ds-message-scroller.js.map +1 -1
  12. package/dist/components/ds-panel-tools.js +1 -1
  13. package/dist/components/ds-shell-app.js +1 -1
  14. package/dist/components/ds-shell-app.js.map +1 -1
  15. package/dist/components/ds-shell-tools.js +1 -1
  16. package/dist/components/p-Bd-Kpekh.js +2 -0
  17. package/dist/components/p-Bd-Kpekh.js.map +1 -0
  18. package/dist/components/p-C13fWp2x.js +2 -0
  19. package/dist/components/p-C13fWp2x.js.map +1 -0
  20. package/dist/docs/components.json +178 -3
  21. package/dist/lib/components/PanelTools/panel-tools-types.d.ts +76 -1
  22. package/dist/lib/components/ShellApp/shell-app-types.d.ts +3 -1
  23. package/dist/lib/shell/index.d.ts +1 -1
  24. package/dist/lib/shell/index.js.map +2 -2
  25. package/dist/mcp-data/registry/agent-activity.json +1 -1
  26. package/dist/mcp-data/registry/agent-questionnaire.json +1 -1
  27. package/dist/mcp-data/registry/agent-response.json +1 -1
  28. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  29. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  30. package/dist/mcp-data/registry/attachment-list.json +1 -1
  31. package/dist/mcp-data/registry/avatar.json +1 -1
  32. package/dist/mcp-data/registry/badge.json +1 -1
  33. package/dist/mcp-data/registry/banner.json +1 -1
  34. package/dist/mcp-data/registry/bar-action.json +1 -1
  35. package/dist/mcp-data/registry/bar-nav.json +1 -1
  36. package/dist/mcp-data/registry/bar-title.json +1 -1
  37. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  38. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  39. package/dist/mcp-data/registry/button-filled.json +1 -1
  40. package/dist/mcp-data/registry/button-unfilled.json +1 -1
  41. package/dist/mcp-data/registry/card-chart.json +1 -1
  42. package/dist/mcp-data/registry/card-overview.json +1 -1
  43. package/dist/mcp-data/registry/card-setting.json +1 -1
  44. package/dist/mcp-data/registry/chart-legend.json +1 -1
  45. package/dist/mcp-data/registry/chart.json +1 -1
  46. package/dist/mcp-data/registry/checkbox.json +1 -1
  47. package/dist/mcp-data/registry/chip.json +1 -1
  48. package/dist/mcp-data/registry/code-block.json +1 -1
  49. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  50. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  51. package/dist/mcp-data/registry/conversation-list.json +1 -1
  52. package/dist/mcp-data/registry/divider.json +1 -1
  53. package/dist/mcp-data/registry/empty-state.json +1 -1
  54. package/dist/mcp-data/registry/field.json +1 -1
  55. package/dist/mcp-data/registry/filter-menu.json +1 -1
  56. package/dist/mcp-data/registry/icon.json +1 -1
  57. package/dist/mcp-data/registry/input.json +1 -1
  58. package/dist/mcp-data/registry/loader.json +1 -1
  59. package/dist/mcp-data/registry/markdown.json +1 -1
  60. package/dist/mcp-data/registry/menu.json +1 -1
  61. package/dist/mcp-data/registry/message-actions.json +1 -1
  62. package/dist/mcp-data/registry/message-bubble.json +1 -1
  63. package/dist/mcp-data/registry/message-composer.json +1 -1
  64. package/dist/mcp-data/registry/message-scroller.json +9 -2
  65. package/dist/mcp-data/registry/message.json +1 -1
  66. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  67. package/dist/mcp-data/registry/mobile-header.json +1 -1
  68. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  69. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  70. package/dist/mcp-data/registry/modal.json +1 -1
  71. package/dist/mcp-data/registry/pagination.json +1 -1
  72. package/dist/mcp-data/registry/panel-nav.json +1 -1
  73. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  74. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  75. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  76. package/dist/mcp-data/registry/panel-tools.json +62 -15
  77. package/dist/mcp-data/registry/paper-texture.json +1 -1
  78. package/dist/mcp-data/registry/radio.json +1 -1
  79. package/dist/mcp-data/registry/registry.json +56 -13
  80. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  81. package/dist/mcp-data/registry/select.json +1 -1
  82. package/dist/mcp-data/registry/shell-app.json +22 -3
  83. package/dist/mcp-data/registry/shell-page.json +1 -1
  84. package/dist/mcp-data/registry/shell-tools.json +39 -6
  85. package/dist/mcp-data/registry/skeleton.json +1 -1
  86. package/dist/mcp-data/registry/slider.json +1 -1
  87. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  88. package/dist/mcp-data/registry/switch.json +1 -1
  89. package/dist/mcp-data/registry/tab-group.json +1 -1
  90. package/dist/mcp-data/registry/table-filter.json +1 -1
  91. package/dist/mcp-data/registry/table-group.json +1 -1
  92. package/dist/mcp-data/registry/table-saved-views.json +1 -1
  93. package/dist/mcp-data/registry/table-search.json +1 -1
  94. package/dist/mcp-data/registry/table-sort.json +1 -1
  95. package/dist/mcp-data/registry/table-toolbar.json +1 -1
  96. package/dist/mcp-data/registry/table.json +1 -1
  97. package/dist/mcp-data/registry/tag.json +1 -1
  98. package/dist/mcp-data/registry/text.json +1 -1
  99. package/dist/mcp-data/registry/toast.json +1 -1
  100. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  101. package/dist/mcp-data/registry/tooltip.json +1 -1
  102. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  103. package/dist/react/ds-panel-tools.d.ts +2 -1
  104. package/dist/react/ds-panel-tools.js +1 -0
  105. package/dist/react/ds-shell-app.d.ts +2 -1
  106. package/dist/react/ds-shell-app.js +1 -0
  107. package/dist/react/ds-shell-tools.d.ts +2 -1
  108. package/dist/react/ds-shell-tools.js +2 -1
  109. package/dist/types/components/MessageScroller/MessageScroller.d.ts +14 -0
  110. package/dist/types/components/MessageScroller/message-scroller-transcript.d.ts +9 -0
  111. package/dist/types/components/PanelTools/PanelTools.d.ts +17 -1
  112. package/dist/types/components/PanelTools/index.d.ts +1 -1
  113. package/dist/types/components/PanelTools/panel-tools-types.d.ts +76 -1
  114. package/dist/types/components/PanelTools/panel-tools-utils.d.ts +17 -1
  115. package/dist/types/components/ShellApp/ShellApp.d.ts +4 -1
  116. package/dist/types/components/ShellApp/shell-app-types.d.ts +3 -1
  117. package/dist/types/components/ShellTools/ShellTools.d.ts +5 -1
  118. package/dist/types/components/ShellTools/index.d.ts +1 -1
  119. package/dist/types/components.d.ts +34 -2
  120. package/dist/types/shell/index.d.ts +1 -1
  121. package/dist/vue/ds-panel-tools.js +3 -0
  122. package/dist/vue/ds-shell-app.js +2 -0
  123. package/dist/vue/ds-shell-tools.js +5 -2
  124. package/package.json +3 -3
  125. package/dist/components/p-COFw_fcj.js +0 -2
  126. package/dist/components/p-COFw_fcj.js.map +0 -1
  127. package/dist/components/p-CvHrCyuz.js +0 -2
  128. package/dist/components/p-CvHrCyuz.js.map +0 -1
@@ -9,6 +9,7 @@ export declare const PANEL_TOOLS_PRIMARY_TOOL_ID: CanonicalPanelToolsToolId;
9
9
  export declare const PANEL_TOOLS_FOOTER_TOOL_ID: CanonicalPanelToolsToolId;
10
10
  export declare const PANEL_TOOLS_LABELS: Record<CanonicalPanelToolsToolId, string>;
11
11
  export declare const PANEL_TOOLS_SHORTCUTS: Partial<Record<CanonicalPanelToolsToolId, string>>;
12
+ export type PanelToolsRailPlacement = 'header' | 'body' | 'footer';
12
13
  export interface PanelToolsItem {
13
14
  id: PanelToolsToolId;
14
15
  /** Icon name for <ds-icon>. */
@@ -16,7 +17,7 @@ export interface PanelToolsItem {
16
17
  /** Visible and accessible fallback label for custom tool ids. */
17
18
  label?: string;
18
19
  /** Explicit rail region; canonical Agents/Help placement is the fallback. */
19
- railPlacement?: 'header' | 'body' | 'footer';
20
+ railPlacement?: PanelToolsRailPlacement;
20
21
  /** Stable ordering within the selected rail region. */
21
22
  order?: number;
22
23
  /** Optional shortcut label displayed by the tooltip. */
@@ -30,6 +31,79 @@ export interface PanelToolsItem {
30
31
  isInactive?: boolean;
31
32
  ariaLabel?: string;
32
33
  }
34
+ export type PanelToolsRailAccessoryVisual = {
35
+ type: 'icon';
36
+ icon: string;
37
+ } | {
38
+ type: 'initial';
39
+ initial: string;
40
+ } | {
41
+ type: 'image';
42
+ src: string;
43
+ };
44
+ export interface PanelToolsRailAccessoryAction {
45
+ /** Stable application-owned action id emitted with the accessory id. */
46
+ id: string;
47
+ /** Overrides the accessory label for the primary action. */
48
+ ariaLabel?: string;
49
+ isInactive?: boolean;
50
+ }
51
+ export interface PanelToolsRailAccessorySecondaryAction {
52
+ id: string;
53
+ icon: string;
54
+ ariaLabel: string;
55
+ isInactive?: boolean;
56
+ }
57
+ export type PanelToolsRailTransientTone = 'active' | 'positive';
58
+ interface PanelToolsRailAccessoryBase {
59
+ /** Stable application-owned identity. Duplicate or blank ids are omitted. */
60
+ id: string;
61
+ /** Explicit rail region; accessories never infer placement from their id. */
62
+ railPlacement: PanelToolsRailPlacement;
63
+ /** Stable ordering within the selected rail region. */
64
+ order: number;
65
+ }
66
+ /** Decorative boundary between application-owned rail accessory groups. */
67
+ export interface PanelToolsRailDividerAccessory extends PanelToolsRailAccessoryBase {
68
+ type: 'divider';
69
+ }
70
+ /**
71
+ * A compact one-action shortcut that matches standard tool-button geometry.
72
+ * PanelTools owns its initial orb, notification dot, and transient interaction paint.
73
+ */
74
+ export interface PanelToolsRailShortcutAccessory extends PanelToolsRailAccessoryBase {
75
+ type: 'shortcut';
76
+ /** Accessible shortcut name and action-label fallback. */
77
+ ariaLabel: string;
78
+ /** One or two displayed graphemes. Longer values are truncated visually. */
79
+ initials: string;
80
+ /** Supplemental notification dot. Include its meaning in the accessible label when needed. */
81
+ dot?: boolean;
82
+ action: PanelToolsRailAccessoryAction;
83
+ }
84
+ /**
85
+ * A direct application intent that never selects a tool or changes drawer state.
86
+ * PanelTools owns the two-control-height surface and its focus behavior.
87
+ */
88
+ export interface PanelToolsRailTransientAccessory extends PanelToolsRailAccessoryBase {
89
+ type: 'transient';
90
+ /** Accessible accessory name and primary-action fallback label. */
91
+ ariaLabel: string;
92
+ visual: PanelToolsRailAccessoryVisual;
93
+ /** State announced with the primary action and shown in its tooltip. */
94
+ statusText: string;
95
+ /** Bold surface treatment. Active uses brand; positive uses positive semantic color. */
96
+ statusTone: PanelToolsRailTransientTone;
97
+ primaryAction: PanelToolsRailAccessoryAction;
98
+ secondaryAction?: PanelToolsRailAccessorySecondaryAction;
99
+ }
100
+ export type PanelToolsRailAccessory = PanelToolsRailDividerAccessory | PanelToolsRailShortcutAccessory | PanelToolsRailTransientAccessory;
101
+ export interface PanelToolsRailAccessoryActionDetail {
102
+ accessoryId: string;
103
+ actionId: string;
104
+ /** Rendered action control, suitable for anchoring an application-owned overlay. */
105
+ anchor: HTMLElement;
106
+ }
33
107
  /** Canonical shell recipe used by Lab and by managed ShellApp examples. */
34
108
  export declare const PANEL_TOOLS_DEFAULT_ITEMS: PanelToolsItem[];
35
109
  export interface PanelToolsHeaderAction {
@@ -64,4 +138,5 @@ export interface PanelToolsHeaderConfig {
64
138
  }
65
139
  /** Per-tool header state. The application replaces the object when a tool changes depth or actions. */
66
140
  export type PanelToolsHeaders = Partial<Record<PanelToolsToolId, PanelToolsHeaderConfig>>;
141
+ export {};
67
142
  //# sourceMappingURL=panel-tools-types.d.ts.map
@@ -1,5 +1,21 @@
1
- import { type PanelToolsItem, type PanelToolsToolId } from './panel-tools-types';
1
+ import { type PanelToolsItem, type PanelToolsRailAccessory, type PanelToolsRailAccessoryActionDetail, type PanelToolsToolId } from './panel-tools-types';
2
2
  export declare function orderPanelToolsItems(items: PanelToolsItem[]): PanelToolsItem[];
3
+ export type PanelToolsRailEntry = {
4
+ type: 'tool';
5
+ id: string;
6
+ item: PanelToolsItem;
7
+ } | {
8
+ type: 'accessory';
9
+ id: string;
10
+ accessory: PanelToolsRailAccessory;
11
+ };
12
+ /** Merge tools and governed accessories into one visual and keyboard order. */
13
+ export declare function orderPanelToolsRailEntries(items: PanelToolsItem[], accessories: PanelToolsRailAccessory[]): PanelToolsRailEntry[];
14
+ /** Flatten interactive entries while leaving decorative boundaries out of focus order. */
15
+ export declare function panelToolsRailFocusKeys(entries: PanelToolsRailEntry[]): string[];
16
+ /** Preserve the current target across collection changes, or choose its nearest survivor. */
17
+ export declare function reconcilePanelToolsRovingIndex(previousKeys: string[], nextKeys: string[], currentIndex: number): number;
18
+ export declare function panelToolsRailAccessoryActionDetail(accessoryId: string, actionId: string, anchor: HTMLElement): PanelToolsRailAccessoryActionDetail;
3
19
  export declare function isPanelToolsToolId(value: string | null): value is PanelToolsToolId;
4
20
  export declare function panelToolsRailPlacement(item: PanelToolsItem): 'header' | 'body' | 'footer';
5
21
  export declare function reconcilePanelToolsAvailability(items: PanelToolsItem[], open: boolean, activeTool: PanelToolsToolId | ''): {
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
2
  import type { NavChromeStyle } from '../../shell/nav-chrome';
3
- import type { PanelToolsToolId } from '../PanelTools/panel-tools-types';
3
+ import type { PanelToolsRailAccessoryActionDetail, PanelToolsToolId } from '../PanelTools/panel-tools-types';
4
4
  import type { BreadcrumbSelectDetail } from '../Breadcrumb/breadcrumb-types';
5
5
  import { type ShellGradientPreset } from '../../shell/shell-gradient-presets';
6
6
  import { type MobileDestination, type ShellResponsiveMode } from '../../shell/shell-responsive';
@@ -67,6 +67,8 @@ export declare class ShellApp {
67
67
  tool: PanelToolsToolId;
68
68
  id: string;
69
69
  }>;
70
+ /** Managed desktop/tablet rail accessory intent. */
71
+ dsRailAccessoryAction: EventEmitter<PanelToolsRailAccessoryActionDetail>;
70
72
  /** Managed drawer/fullscreen presentation state. */
71
73
  dsPresentationChange: EventEmitter<{
72
74
  presentation: 'drawer' | 'fullscreen';
@@ -159,6 +161,7 @@ export declare class ShellApp {
159
161
  private handleManagedPresentationChange;
160
162
  private handleManagedHeaderBack;
161
163
  private handleManagedHeaderAction;
164
+ private handleManagedRailAccessoryAction;
162
165
  private handleManagedSheetToggle;
163
166
  private activateManagedMobileTool;
164
167
  private handleManagedMobileDestination;
@@ -3,7 +3,7 @@ import type { BarTitleActionItem, BarTitlePrimaryAction } from '../BarTitle/bar-
3
3
  import type { BreadcrumbItem } from '../Breadcrumb/breadcrumb-types';
4
4
  import type { MobileHeaderTone } from '../MobileHeader/mobile-header-types';
5
5
  import type { PanelNavGroup, PanelNavItem, PanelNavRouterMode } from '../PanelNav/panel-nav-types';
6
- import type { PanelToolsHeaders, PanelToolsHeaderAction, PanelToolsItem } from '../PanelTools/panel-tools-types';
6
+ import type { PanelToolsHeaders, PanelToolsHeaderAction, PanelToolsItem, PanelToolsRailAccessory } from '../PanelTools/panel-tools-types';
7
7
  import type { NavChromeStyle } from '../../shell/nav-chrome';
8
8
  import type { ShellPageContentInset, ShellPageContentSurface } from '../ShellPage/shell-page-types';
9
9
  export type ShellAppComposition = 'managed' | 'slotted';
@@ -93,6 +93,8 @@ export interface ShellPageChromeConfig {
93
93
  */
94
94
  export interface ShellToolsConfig {
95
95
  items?: PanelToolsItem[];
96
+ /** Desktop/tablet-only direct rail intents and decorative group boundaries. */
97
+ accessories?: PanelToolsRailAccessory[];
96
98
  headers?: PanelToolsHeaders;
97
99
  storageKey?: string;
98
100
  fullscreenHeaderMode?: 'shared' | 'split';
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
- import { type PanelToolsHeaders, type PanelToolsItem, type PanelToolsToolId } from '../PanelTools/panel-tools-types';
2
+ import { type PanelToolsHeaders, type PanelToolsItem, type PanelToolsRailAccessory, type PanelToolsRailAccessoryActionDetail, type PanelToolsToolId } from '../PanelTools/panel-tools-types';
3
3
  import { type ShellResponsiveMode } from '../../shell/shell-responsive';
4
4
  export declare class ShellTools {
5
5
  el: HTMLElement;
@@ -10,6 +10,8 @@ export declare class ShellTools {
10
10
  presentation: 'drawer' | 'fullscreen';
11
11
  fullscreenHeaderMode: 'shared' | 'split';
12
12
  items: PanelToolsItem[];
13
+ /** Desktop/tablet rail accessories. Intentionally omitted from the mobile tool stage. */
14
+ accessories: PanelToolsRailAccessory[];
13
15
  headers: PanelToolsHeaders;
14
16
  storageKey: string;
15
17
  toolsLabel: string;
@@ -31,6 +33,7 @@ export declare class ShellTools {
31
33
  tool: PanelToolsToolId;
32
34
  id: string;
33
35
  }>;
36
+ dsRailAccessoryAction: EventEmitter<PanelToolsRailAccessoryActionDetail>;
34
37
  private panelToolsEl;
35
38
  private get resolvedItems();
36
39
  private get availableInboxTools();
@@ -46,6 +49,7 @@ export declare class ShellTools {
46
49
  private selectInboxTool;
47
50
  private handlePanelToolChange;
48
51
  private handlePanelPresentationChange;
52
+ private handlePanelRailAccessoryAction;
49
53
  private handleMobileHeaderAction;
50
54
  /** Match PanelTools' imperative activation contract in every responsive mode. */
51
55
  activateTool(id: PanelToolsToolId): Promise<void>;
@@ -1,3 +1,3 @@
1
1
  export { ShellTools } from './ShellTools';
2
- export type { PanelToolsHeaderAction, PanelToolsHeaderConfig, PanelToolsHeaders, PanelToolsItem, PanelToolsToolId, } from '../PanelTools/panel-tools-types';
2
+ export type { PanelToolsHeaderAction, PanelToolsHeaderConfig, PanelToolsHeaders, PanelToolsItem, PanelToolsRailAccessory, PanelToolsRailAccessoryAction, PanelToolsRailAccessoryActionDetail, PanelToolsRailAccessorySecondaryAction, PanelToolsRailAccessoryVisual, PanelToolsRailDividerAccessory, PanelToolsRailPlacement, PanelToolsRailShortcutAccessory, PanelToolsRailTransientAccessory, PanelToolsRailTransientTone, PanelToolsToolId, } from '../PanelTools/panel-tools-types';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -51,7 +51,7 @@ import { PaginationChangeDetail, PaginationPageSizeMode } from "./components/Pag
51
51
  import { ChromeTransitionDetail } from "./shell/chrome-transition";
52
52
  import { PanelSubNavItem } from "./components/PanelSubNav/panel-sub-nav-types";
53
53
  import { PanelSubNavBackground } from "./components/PanelSubNav/PanelSubNav";
54
- import { PanelToolHeaderActionDetail, PanelToolsHeaderAction, PanelToolsHeaderActionDetail, PanelToolsHeaders, PanelToolsItem, PanelToolsToolId } from "./components/PanelTools/panel-tools-types";
54
+ import { PanelToolHeaderActionDetail, PanelToolsHeaderAction, PanelToolsHeaderActionDetail, PanelToolsHeaders, PanelToolsItem, PanelToolsRailAccessory, PanelToolsRailAccessoryActionDetail, PanelToolsToolId } from "./components/PanelTools/panel-tools-types";
55
55
  import { PaperTextureConfig } from "./components/PaperTexture/paper-texture-types";
56
56
  import { RadioOption, RadioSize } from "./components/Radio/Radio";
57
57
  import { ScrollOverlayScrollDetail } from "./components/ScrollOverlay/ScrollOverlay";
@@ -121,7 +121,7 @@ export { PaginationChangeDetail, PaginationPageSizeMode } from "./components/Pag
121
121
  export { ChromeTransitionDetail } from "./shell/chrome-transition";
122
122
  export { PanelSubNavItem } from "./components/PanelSubNav/panel-sub-nav-types";
123
123
  export { PanelSubNavBackground } from "./components/PanelSubNav/PanelSubNav";
124
- export { PanelToolHeaderActionDetail, PanelToolsHeaderAction, PanelToolsHeaderActionDetail, PanelToolsHeaders, PanelToolsItem, PanelToolsToolId } from "./components/PanelTools/panel-tools-types";
124
+ export { PanelToolHeaderActionDetail, PanelToolsHeaderAction, PanelToolsHeaderActionDetail, PanelToolsHeaders, PanelToolsItem, PanelToolsRailAccessory, PanelToolsRailAccessoryActionDetail, PanelToolsToolId } from "./components/PanelTools/panel-tools-types";
125
125
  export { PaperTextureConfig } from "./components/PaperTexture/paper-texture-types";
126
126
  export { RadioOption, RadioSize } from "./components/Radio/Radio";
127
127
  export { ScrollOverlayScrollDetail } from "./components/ScrollOverlay/ScrollOverlay";
@@ -2249,6 +2249,11 @@ export namespace Components {
2249
2249
  "value": string;
2250
2250
  }
2251
2251
  interface DsPanelTools {
2252
+ /**
2253
+ * Desktop/tablet-only application-owned rail boundaries and direct intents. Set via JS property and replace the array reference to update.
2254
+ * @default []
2255
+ */
2256
+ "accessories": PanelToolsRailAccessory[];
2252
2257
  /**
2253
2258
  * Toggle any rail tool open/closed — shell shortcuts K/A/S/M/N call this.
2254
2259
  */
@@ -2699,6 +2704,11 @@ export namespace Components {
2699
2704
  "scrollCompaction": boolean;
2700
2705
  }
2701
2706
  interface DsShellTools {
2707
+ /**
2708
+ * Desktop/tablet rail accessories. Intentionally omitted from the mobile tool stage.
2709
+ * @default []
2710
+ */
2711
+ "accessories": PanelToolsRailAccessory[];
2702
2712
  /**
2703
2713
  * Match PanelTools' imperative activation contract in every responsive mode.
2704
2714
  */
@@ -4721,6 +4731,7 @@ declare global {
4721
4731
  tool: PanelToolsToolId;
4722
4732
  };
4723
4733
  "dsHeaderAction": PanelToolsHeaderActionDetail;
4734
+ "dsRailAccessoryAction": PanelToolsRailAccessoryActionDetail;
4724
4735
  "dsChromeTransitionStart": ChromeTransitionDetail;
4725
4736
  "dsChromeTransitionEnd": ChromeTransitionDetail;
4726
4737
  }
@@ -4812,6 +4823,7 @@ declare global {
4812
4823
  "dsToolChange": { id: PanelToolsToolId; selected: boolean };
4813
4824
  "dsHeaderBack": { tool: PanelToolsToolId };
4814
4825
  "dsHeaderAction": { tool: PanelToolsToolId; id: string };
4826
+ "dsRailAccessoryAction": PanelToolsRailAccessoryActionDetail;
4815
4827
  "dsPresentationChange": { presentation: 'drawer' | 'fullscreen' };
4816
4828
  "dsBrowseContextChange": NavChromeStyle;
4817
4829
  "dsNavFooterAction": void;
@@ -4852,6 +4864,7 @@ declare global {
4852
4864
  tool: PanelToolsToolId;
4853
4865
  id: string;
4854
4866
  };
4867
+ "dsRailAccessoryAction": PanelToolsRailAccessoryActionDetail;
4855
4868
  }
4856
4869
  interface HTMLDsShellToolsElement extends Components.DsShellTools, HTMLStencilElement {
4857
4870
  addEventListener<K extends keyof HTMLDsShellToolsElementEventMap>(type: K, listener: (this: HTMLDsShellToolsElement, ev: DsShellToolsCustomEvent<HTMLDsShellToolsElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -7527,6 +7540,11 @@ declare namespace LocalJSX {
7527
7540
  "value"?: string;
7528
7541
  }
7529
7542
  interface DsPanelTools {
7543
+ /**
7544
+ * Desktop/tablet-only application-owned rail boundaries and direct intents. Set via JS property and replace the array reference to update.
7545
+ * @default []
7546
+ */
7547
+ "accessories"?: PanelToolsRailAccessory[];
7530
7548
  /**
7531
7549
  * Active tool view — `search`, `agents`, `messages`, `stacks`, `activity`, or `help`.
7532
7550
  * @default ''
@@ -7568,6 +7586,10 @@ declare namespace LocalJSX {
7568
7586
  "onDsPresentationChange"?: (event: DsPanelToolsCustomEvent<{
7569
7587
  presentation: 'drawer' | 'fullscreen';
7570
7588
  }>) => void;
7589
+ /**
7590
+ * Direct accessory intent. Emitting this event never changes the active tool or drawer.
7591
+ */
7592
+ "onDsRailAccessoryAction"?: (event: DsPanelToolsCustomEvent<PanelToolsRailAccessoryActionDetail>) => void;
7571
7593
  /**
7572
7594
  * Emitted when a rail button is toggled. Detail = { id, selected }.
7573
7595
  */
@@ -7969,6 +7991,10 @@ declare namespace LocalJSX {
7969
7991
  * Managed drawer/fullscreen presentation state.
7970
7992
  */
7971
7993
  "onDsPresentationChange"?: (event: DsShellAppCustomEvent<{ presentation: 'drawer' | 'fullscreen' }>) => void;
7994
+ /**
7995
+ * Managed desktop/tablet rail accessory intent.
7996
+ */
7997
+ "onDsRailAccessoryAction"?: (event: DsShellAppCustomEvent<PanelToolsRailAccessoryActionDetail>) => void;
7972
7998
  /**
7973
7999
  * Emitted after crossing the fixed 768px or 1200px shell boundaries.
7974
8000
  */
@@ -8060,6 +8086,11 @@ declare namespace LocalJSX {
8060
8086
  "scrollCompaction"?: boolean;
8061
8087
  }
8062
8088
  interface DsShellTools {
8089
+ /**
8090
+ * Desktop/tablet rail accessories. Intentionally omitted from the mobile tool stage.
8091
+ * @default []
8092
+ */
8093
+ "accessories"?: PanelToolsRailAccessory[];
8063
8094
  /**
8064
8095
  * @default ''
8065
8096
  */
@@ -8094,6 +8125,7 @@ declare namespace LocalJSX {
8094
8125
  "onDsPresentationChange"?: (event: DsShellToolsCustomEvent<{
8095
8126
  presentation: 'drawer' | 'fullscreen';
8096
8127
  }>) => void;
8128
+ "onDsRailAccessoryAction"?: (event: DsShellToolsCustomEvent<PanelToolsRailAccessoryActionDetail>) => void;
8097
8129
  "onDsToolChange"?: (event: DsShellToolsCustomEvent<{
8098
8130
  id: PanelToolsToolId;
8099
8131
  selected: boolean;
@@ -3,7 +3,7 @@ export type { PanelNavChildItem, PanelNavChildSelectDetail, PanelNavGroup, Panel
3
3
  export type { BarNavTab } from '../components/BarNav/bar-nav-types';
4
4
  export type { ShellPageContentInset, ShellPageContentSurface, ShellPageDesktopHeaderPlacement, } from '../components/ShellPage/shell-page-types';
5
5
  export type { ShellAppComposition, ShellNavigationConfig, ShellNavigationSelectDetail, ShellPageChromeConfig, ShellSectionNavigation, ShellToolsConfig, } from '../components/ShellApp/shell-app-types';
6
- export type { PanelToolsHeaderAction, PanelToolsHeaderActionDetail, PanelToolHeaderActionDetail, PanelToolsHeaderConfig, PanelToolsHeaders, PanelToolsItem, PanelToolsToolId, } from '../components/PanelTools/panel-tools-types';
6
+ export type { PanelToolsHeaderAction, PanelToolsHeaderActionDetail, PanelToolHeaderActionDetail, PanelToolsHeaderConfig, PanelToolsHeaders, PanelToolsItem, PanelToolsRailAccessory, PanelToolsRailAccessoryAction, PanelToolsRailAccessoryActionDetail, PanelToolsRailAccessorySecondaryAction, PanelToolsRailAccessoryVisual, PanelToolsRailDividerAccessory, PanelToolsRailPlacement, PanelToolsRailShortcutAccessory, PanelToolsRailTransientAccessory, PanelToolsRailTransientTone, PanelToolsToolId, } from '../components/PanelTools/panel-tools-types';
7
7
  export { PANEL_TOOLS_DEFAULT_ITEMS } from '../components/PanelTools/panel-tools-types';
8
8
  export { NAV_STYLE_HINT_ATTR, readNavStyleAttr, setNavStyleHint, clearNavStyleHint, } from './nav-chrome';
9
9
  export type { MenuPlacement } from '../components/Menu/menu-placement';
@@ -9,6 +9,7 @@ export const DsPanelTools = /*@__PURE__*/ defineContainer('ds-panel-tools', defi
9
9
  'fullscreenHeaderMode',
10
10
  'activeTool',
11
11
  'items',
12
+ 'accessories',
12
13
  'toolsLabel',
13
14
  'toolShortcutsLabel',
14
15
  'headers',
@@ -17,6 +18,7 @@ export const DsPanelTools = /*@__PURE__*/ defineContainer('ds-panel-tools', defi
17
18
  'dsPresentationChange',
18
19
  'dsHeaderBack',
19
20
  'dsHeaderAction',
21
+ 'dsRailAccessoryAction',
20
22
  'dsChromeTransitionStart',
21
23
  'dsChromeTransitionEnd'
22
24
  ], [
@@ -24,6 +26,7 @@ export const DsPanelTools = /*@__PURE__*/ defineContainer('ds-panel-tools', defi
24
26
  'dsPresentationChange',
25
27
  'dsHeaderBack',
26
28
  'dsHeaderAction',
29
+ 'dsRailAccessoryAction',
27
30
  'dsChromeTransitionStart',
28
31
  'dsChromeTransitionEnd'
29
32
  ]);
@@ -26,6 +26,7 @@ export const DsShellApp = /*@__PURE__*/ defineContainer('ds-shell-app', defineDs
26
26
  'dsToolChange',
27
27
  'dsHeaderBack',
28
28
  'dsHeaderAction',
29
+ 'dsRailAccessoryAction',
29
30
  'dsPresentationChange',
30
31
  'dsBrowseContextChange',
31
32
  'dsNavFooterAction',
@@ -42,6 +43,7 @@ export const DsShellApp = /*@__PURE__*/ defineContainer('ds-shell-app', defineDs
42
43
  'dsToolChange',
43
44
  'dsHeaderBack',
44
45
  'dsHeaderAction',
46
+ 'dsRailAccessoryAction',
45
47
  'dsPresentationChange',
46
48
  'dsBrowseContextChange',
47
49
  'dsNavFooterAction',
@@ -10,6 +10,7 @@ export const DsShellTools = /*@__PURE__*/ defineContainer('ds-shell-tools', defi
10
10
  'presentation',
11
11
  'fullscreenHeaderMode',
12
12
  'items',
13
+ 'accessories',
13
14
  'headers',
14
15
  'storageKey',
15
16
  'toolsLabel',
@@ -19,10 +20,12 @@ export const DsShellTools = /*@__PURE__*/ defineContainer('ds-shell-tools', defi
19
20
  'dsToolChange',
20
21
  'dsPresentationChange',
21
22
  'dsHeaderBack',
22
- 'dsHeaderAction'
23
+ 'dsHeaderAction',
24
+ 'dsRailAccessoryAction'
23
25
  ], [
24
26
  'dsToolChange',
25
27
  'dsPresentationChange',
26
28
  'dsHeaderBack',
27
- 'dsHeaderAction'
29
+ 'dsHeaderAction',
30
+ 'dsRailAccessoryAction'
28
31
  ]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ds-mo/ui",
3
- "version": "14.22.2",
3
+ "version": "14.23.0",
4
4
  "description": "CompoMo — composable web components styled with TokoMo design tokens",
5
5
  "keywords": [
6
6
  "web-components",
@@ -125,7 +125,7 @@
125
125
  "@angular/core": ">=19 <23",
126
126
  "@angular/forms": ">=19 <23",
127
127
  "@ds-mo/icons": "^7.0.0",
128
- "@ds-mo/tokens": "^6.5.0",
128
+ "@ds-mo/tokens": "^6.5.1",
129
129
  "react": "^18 || ^19",
130
130
  "react-dom": "^18 || ^19",
131
131
  "rxjs": "^7.8.0",
@@ -158,7 +158,7 @@
158
158
  "@angular/forms": "^22.0.7",
159
159
  "@axe-core/playwright": "^4.12.1",
160
160
  "@ds-mo/icons": "^7.0.0",
161
- "@ds-mo/tokens": "^6.5.0",
161
+ "@ds-mo/tokens": "^6.5.1",
162
162
  "@eslint/js": "^10.0.1",
163
163
  "@fontsource-variable/inter": "^5.3.0",
164
164
  "@fontsource/fira-code": "^5.3.0",
@@ -1,2 +0,0 @@
1
- import{p as e,H as s,c as t,h as o,a as i,t as n}from"./index.js";import{p as r}from"./p-CUL5_8JM.js";import{d as a}from"./p-DzPtYdXy.js";import{d as l}from"./p-7MWaWl8w.js";import{d}from"./p-Cea7rROU.js";import{d as c}from"./p-0XTyQNRG.js";import{d as h}from"./p-DzVYGJJv.js";import{d as f}from"./p-Cd1JnnVK.js";import{d as u}from"./p-9X_p0bHr.js";const p=["agents","messages","activity","search","stacks","help"];const m="agents";const g={search:"Search",messages:"Messages",stacks:"Stacks",activity:"Activity",agents:"Agents",help:"Help & Support"};const v={search:"K",agents:"A",messages:"M",stacks:"S",activity:"N",help:"/"};const b=[{id:"agents",icon:"AI",label:g.agents,railPlacement:"header",order:0,shortcutKey:v.agents,mobileDestination:"agents"},{id:"messages",icon:"MessageBubbleStack",label:g.messages,order:0,shortcutKey:v.messages,mobileDestination:"messages"},{id:"activity",icon:"Bell",label:g.activity,order:1,shortcutKey:v.activity,mobileDestination:"activity"},{id:"search",icon:"MagnifyingGlass",label:g.search,order:2,shortcutKey:v.search,mobileDestination:"search"},{id:"help",icon:"CircleQuestion",label:g.help,railPlacement:"footer",order:0,shortcutKey:v.help,mobileDestination:"help"}];function w(e){const s=new Map;for(const t of e){if(t.id.trim()&&!s.has(t.id))s.set(t.id,t)}const t={header:0,body:1,footer:2};return Array.from(s.values()).sort(((e,s)=>{const o=_(e);const i=_(s);const n=t[o]-t[i];if(n!==0)return n;const r=p.findIndex((s=>s===e.id));const a=p.findIndex((e=>e===s.id));const l=e.order??(r<0?Number.MAX_SAFE_INTEGER:r);const d=s.order??(a<0?Number.MAX_SAFE_INTEGER:a);return l-d}))}function y(e){return typeof e==="string"&&e.trim().length>0}function _(e){if(e.railPlacement)return e.railPlacement;if(e.id===m)return"header";if(e.id==="help")return"footer";return"body"}function x(e,s,t){if(!t||e.some((e=>e.id===t))){return{open:s,activeTool:t,removedTool:""}}return{open:false,activeTool:"",removedTool:t}}function k(e){const s=e.transitionProperty.split(",").map((e=>e.trim()));const t=e.transitionDuration.split(",").map((e=>r(e.trim(),0)));const o=e.transitionDelay.split(",").map((e=>r(e.trim(),0)));return s.reduce(((e,s,i)=>{if(s!=="all"&&s!=="max-width")return e;const n=t[i%t.length]??0;const r=o[i%o.length]??0;return Math.max(e,n+r,0)}),0)}function T(e,s){return!e&&s==="idle"}function C(e,s,t){if(t==="closing")return e<=.5;if(t==="opening")return s>0&&e>=s-.5;return true}function A(e,s,t){if(e&&s===t){return{open:false,activeTool:t,selected:false}}return{open:true,activeTool:t,selected:true}}const z=()=>`.ds-control--lg,:host(.ds-control--lg),:host(.ds-control--md),.ds-control--md,:host(.ds-control--sm),.ds-control--sm,:host(.ds-control--xs),.ds-control--xs{--ds-control-radius:var(--dimension-radius-025)}:host(.ds-control--lg),.ds-control--lg{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}:host(.ds-control--md),.ds-control--md{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}:host(.ds-control--sm),.ds-control--sm{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}:host(.ds-control--xs),.ds-control--xs{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}:host(.ds-chrome-space--sm),.ds-chrome-space--sm{--ds-chrome-padding:var(--dimension-space-050);--ds-chrome-gap:var(--dimension-space-050)}:host(.ds-chrome-space--md),.ds-chrome-space--md{--ds-chrome-padding:var(--dimension-space-100);--ds-chrome-gap:var(--dimension-space-100)}:host(.ds-chrome-space--lg),.ds-chrome-space--lg{--ds-chrome-padding:var(--dimension-space-200);--ds-chrome-gap:var(--dimension-space-200)}:host(.ds-chrome-row),.ds-chrome-row,:host(.ds-chrome-column),.ds-chrome-column,:host(.ds-chrome-grid),.ds-chrome-grid{display:flex;box-sizing:border-box;gap:var(--ds-chrome-gap, var(--dimension-space-100));padding:var(--ds-chrome-padding, var(--dimension-space-100))}:host(.ds-chrome-row),.ds-chrome-row{flex-direction:row;align-items:center}:host(.ds-chrome-column),.ds-chrome-column{flex-direction:column}:host(.ds-chrome-grid),.ds-chrome-grid{display:grid;align-items:center}@media (forced-colors: active){:root,:host,.ds-forced-colors-scope{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}:host{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}:host(.ds-focus-ring),.ds-focus-ring,:host(.ds-focus-ring-inset),.ds-focus-ring-inset{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}:host(.ds-focus-ring:focus-visible),.ds-focus-ring:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}:host(.ds-focus-ring.ds-focus-ring--visible),.ds-focus-ring.ds-focus-ring--visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}:host(.ds-focus-ring-inset:focus-visible),.ds-focus-ring-inset:focus-visible{outline:none}:host(.ds-focus-ring-inset:focus-visible)::after,.ds-focus-ring-inset:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}:host(.ds-focus-ring-inset.ds-focus-ring--visible),.ds-focus-ring-inset.ds-focus-ring--visible{outline:none}:host(.ds-focus-ring-inset.ds-focus-ring--visible)::after,.ds-focus-ring-inset.ds-focus-ring--visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){:host{--ds-focus-ring-color:var(--ds-forced-color-selected)}}:host(.ds-scrollbar-hidden),.ds-scrollbar-hidden{scrollbar-width:none}:host(.ds-scrollbar-hidden)::-webkit-scrollbar,.ds-scrollbar-hidden::-webkit-scrollbar{display:none}:host{display:block;flex:0 0 auto;box-sizing:border-box;height:100%;min-height:0;overflow:hidden;--_panel-tools-rail-width:var(--dimension-size-600);--_panel-tools-drawer-width:var(--ds-shell-panel-tools-width, var(--dimension-panel-width-xs));--_panel-tools-border:var(--dimension-stroke-width-012, 1px) solid var(--color-border-tertiary);--_panel-tools-expand-dur:var(--effect-animation-duration-medium-1, 300ms)}.panel-tools__layout{display:flex;flex-direction:row-reverse;align-items:stretch;height:100%;min-height:0;box-sizing:border-box}.panel-tools__drawer{flex:0 0 auto;max-width:0;min-width:0;height:100%;min-height:0;overflow:hidden;box-sizing:border-box;transition:none}:host(.panel-tools--ready) .panel-tools__drawer{transition:max-width var(--_panel-tools-expand-dur) var(--effect-animation-easing-ease-in-out, ease)}:host(.panel-tools--ready.panel-tools--motion-opening) .panel-tools__drawer{transition:max-width var(--_panel-tools-expand-dur) var(--effect-animation-easing-ease-out, ease-out)}:host(.panel-tools--ready.panel-tools--motion-closing) .panel-tools__drawer{transition:max-width var(--_panel-tools-expand-dur) var(--effect-animation-easing-ease-in, ease-in)}:host(.panel-tools--open) .panel-tools__drawer{max-width:var(--_panel-tools-drawer-width)}.panel-tools__drawer--visible{border-left:var(--_panel-tools-border)}.panel-tools__drawer-surface{display:flex;flex-direction:column;width:var(--_panel-tools-drawer-width);height:100%;min-height:0;box-sizing:border-box;background-color:transparent}.panel-tools__full-views,.panel-tools__full-view{flex:1 1 auto;min-height:0;overflow:hidden}.panel-tools__full-view{height:100%}.panel-tools__full-view{display:none}.panel-tools__full-view--active{display:block}:host([presentation='fullscreen']){height:100vh;inset:0;position:fixed;width:100vw;z-index:var(--dimension-z-index-modal)}:host([presentation='fullscreen']) .panel-tools__rail{display:none}:host([presentation='fullscreen']) .panel-tools__drawer{max-width:100vw;transition:none;width:100vw}:host([presentation='fullscreen']) .panel-tools__drawer--visible{border-left:none}:host([presentation='fullscreen']) .panel-tools__drawer-surface{background-color:transparent;width:100vw}:host([presentation='fullscreen']:not(.panel-tools--fullscreen)) .panel-tools__drawer-surface,:host(.panel-tools--fullscreen:not([presentation='fullscreen'])) .panel-tools__drawer-surface{visibility:hidden}:host(.panel-tools--presentation-snap) .panel-tools__drawer{transition:none}.panel-tools__body{flex:1 1 auto;min-height:0;overflow:auto;position:relative}:host(.panel-tools--drawer-resting) .panel-tools__body{content-visibility:auto;contain-intrinsic-size:auto 200px}.panel-tools__view{display:none;height:100%;min-height:0;box-sizing:border-box;padding:var(--dimension-space-200);color:var(--color-foreground-secondary);font-family:var(--typography-font-family-ui);font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md);font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-negative-half)}.panel-tools__view ::slotted(*){margin:0;color:var(--color-foreground-secondary);font-family:var(--typography-font-family-ui);font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md);font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-negative-half)}.panel-tools__view--active{display:block}.panel-tools__rail{flex:0 0 var(--_panel-tools-rail-width);width:var(--_panel-tools-rail-width);min-width:var(--_panel-tools-rail-width);display:flex;flex-direction:column;box-sizing:border-box;height:100%;min-height:0;border-left:var(--_panel-tools-border);background-color:transparent}.panel-tools__rail-header{justify-content:center;height:var(--dimension-size-600);flex-shrink:0;border-bottom:var(--_panel-tools-border)}.panel-tools__rail-body{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}.panel-tools__rail-actions{display:flex;flex-direction:column;gap:var(--dimension-space-050);width:100%}.panel-tools__rail-footer{justify-content:center;flex-shrink:0;margin-top:auto}.panel-tools__rail-action{display:flex;align-items:center;justify-content:center;width:100%;height:var(--ds-control-height);flex-shrink:0}@media (prefers-reduced-motion: reduce){:host(.panel-tools--ready.panel-tools--motion-opening) .panel-tools__drawer,:host(.panel-tools--ready.panel-tools--motion-closing) .panel-tools__drawer{transition:none}}`;const S=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.dsToolChange=t(this,"dsToolChange",7);this.dsPresentationChange=t(this,"dsPresentationChange",7);this.dsHeaderBack=t(this,"dsHeaderBack",7);this.dsHeaderAction=t(this,"dsHeaderAction",7);this.dsChromeTransitionStart=t(this,"dsChromeTransitionStart",7);this.dsChromeTransitionEnd=t(this,"dsChromeTransitionEnd",7);this.open=false;this.presentation="drawer";this.fullscreenHeaderMode="shared";this.activeTool="";this.items=[];this.toolsLabel="Tools";this.toolShortcutsLabel="Tool shortcuts";this.headers={};this.storageKey="";this.motion="idle";this.drawerSurfaceRetained=false;this.readyForMotion=false;this.presentationMotionSuppressed=false;this.rovingIndex=0;this.fullViewToolIds=[];this.railBodyScrollable=false;this.motionEnableGeneration=0;this.presentationMotionGeneration=0;this.transitionGeneration=0;this.transitionFallbackTimer=null;this.ignoreReplacementTerminal=false;this.focusBeforeFullscreen=null;this.fullViewObserver=null;this.handleComposedHeaderAction=e=>{const s=e.detail;if(!this.activeTool||!s?.id)return;e.stopPropagation();this.dsHeaderAction.emit({tool:this.activeTool,id:s.id,anchor:s.anchor})};this.handleTransitionEnd=e=>{const s=this.renderRoot.querySelector(".panel-tools__drawer");if(e.target!==s)return;if(e.propertyName!=="max-width")return;if(this.ignoreReplacementTerminal){this.ignoreReplacementTerminal=false;return}if(e.type==="transitioncancel")return;if(s&&!this.drawerTransitionAtTerminal(s,this.motion))return;this.finishDrawerTransition()};this.handleToolChange=e=>{const s=A(this.open,this.activeTool,e);this.open=s.open;this.activeTool=s.activeTool;this.dsToolChange.emit({id:e,selected:s.selected})};this.handleRailKeyDown=(e,s)=>{const t=this.orderedRailItems;if(!t.length)return;if(e.key==="Enter"||e.key===" "){e.preventDefault();this.handleToolChange(t[s].id);return}if(e.key==="ArrowDown"){if(s>=t.length-1)return;e.preventDefault();this.focusRailAt(s+1);return}if(e.key==="ArrowUp"){if(s<=0)return;e.preventDefault();this.focusRailAt(s-1)}}}get railItems(){return this.items??[]}get orderedRailItems(){return w(this.railItems)}disconnectedCallback(){this.el.removeEventListener("transitionend",this.handleTransitionEnd);this.el.removeEventListener("transitioncancel",this.handleTransitionEnd);this.el.removeEventListener("dsAction",this.handleComposedHeaderAction);this.clearTransitionCompletion();this.motionEnableGeneration+=1;this.fullViewObserver?.disconnect();this.fullViewObserver=null;this.disconnectRailBodyObserver()}presentationChanged(e,t){if(e===t)return;if(this.el.getAttribute("presentation")!==e){this.el.setAttribute("presentation",e)}const o=++this.presentationMotionGeneration;this.presentationMotionSuppressed=true;requestAnimationFrame((()=>{requestAnimationFrame((()=>{if(o!==this.presentationMotionGeneration)return;this.presentationMotionSuppressed=false}))}));if(e==="fullscreen"){this.focusBeforeFullscreen=document.activeElement instanceof s?document.activeElement:null;this.open=true}else if(t==="fullscreen"){const e=this.focusBeforeFullscreen;const s=this.activeHeader().actions?.[0]?.id;requestAnimationFrame((async()=>{if(e?.isConnected){e.focus({preventScroll:true})}const t=e?document.activeElement===e||e.contains(document.activeElement):false;if(!t&&s)await this.focusHeaderAction(s);this.focusBeforeFullscreen=null}))}this.dsPresentationChange.emit({presentation:e})}handleFullscreenEscape(e){if(this.presentation!=="fullscreen"||e.key!=="Escape")return;e.preventDefault();e.stopPropagation();this.presentation="drawer"}deferMotionEnable(){if(this.readyForMotion)return;const e=++this.motionEnableGeneration;requestAnimationFrame((()=>{if(e!==this.motionEnableGeneration)return;requestAnimationFrame((()=>{if(e!==this.motionEnableGeneration)return;this.readyForMotion=true}))}))}connectedCallback(){this.el.addEventListener("transitionend",this.handleTransitionEnd);this.el.addEventListener("transitioncancel",this.handleTransitionEnd);this.el.addEventListener("dsAction",this.handleComposedHeaderAction)}componentWillLoad(){this.restoreLastActiveTool();this.drawerSurfaceRetained=this.open}openChanged(e,s){if(e)this.drawerSurfaceRetained=true;if(this.readyForMotion&&s!==undefined&&s!==e){this.startDrawerTransition(e?"opening":"closing")}else if(!e){this.drawerSurfaceRetained=false}this.deferMotionEnable()}activeToolChanged(){this.persistLastActiveTool();this.deferMotionEnable()}storageKeyChanged(){this.restoreLastActiveTool()}componentDidLoad(){this.deferMotionEnable();this.connectRailBodyObserver();this.updateRailBodyScrollable();this.syncFullViewTools();this.fullViewObserver=new MutationObserver((()=>this.syncFullViewTools()));this.fullViewObserver.observe(this.el,{childList:true,attributes:true,attributeFilter:["slot"]})}componentDidRender(){this.updateRailBodyScrollable()}connectRailBodyObserver(){this.disconnectRailBodyObserver();if(!this.railBodyEl||typeof ResizeObserver==="undefined")return;this.railBodyObserver=new ResizeObserver((()=>this.updateRailBodyScrollable()));this.railBodyObserver.observe(this.railBodyEl)}disconnectRailBodyObserver(){this.railBodyObserver?.disconnect();this.railBodyObserver=undefined}updateRailBodyScrollable(){const e=Boolean(this.railBodyEl&&this.railBodyEl.scrollHeight>this.railBodyEl.clientHeight+1);if(e!==this.railBodyScrollable)this.railBodyScrollable=e}itemsChanged(){this.rovingIndex=0;this.reconcileActiveTool();this.deferMotionEnable()}restoreLastActiveTool(){if(!this.storageKey||this.activeTool)return;try{const e=localStorage.getItem(this.storageKey);if(y(e))this.activeTool=e}catch{}}persistLastActiveTool(){if(!this.storageKey||!this.activeTool)return;try{localStorage.setItem(this.storageKey,this.activeTool)}catch{}}clearPersistedTool(){if(!this.storageKey)return;try{localStorage.removeItem(this.storageKey)}catch{}}reconcileActiveTool(){const e=x(this.railItems,this.open,this.activeTool);if(!e.removedTool)return;this.clearPersistedTool();this.open=e.open;this.activeTool=e.activeTool;this.dsToolChange.emit({id:e.removedTool,selected:false})}startDrawerTransition(e){const s=this.renderRoot.querySelector(".panel-tools__drawer");if(this.motion!=="idle"){this.finishDrawerTransition();this.ignoreReplacementTerminal=true}this.motion=e;this.dsChromeTransitionStart.emit({source:"panel-tools",phase:e});const t=++this.transitionGeneration;requestAnimationFrame((()=>{requestAnimationFrame((()=>{if(t!==this.transitionGeneration||this.motion!==e)return;if(!s){this.finishDrawerTransition();return}if(this.drawerTransitionAtTerminal(s,e)){this.finishDrawerTransition();return}const o=k(getComputedStyle(s));if(o<=0){this.finishDrawerTransition();return}this.transitionFallbackTimer=window.setTimeout((()=>{this.finishDrawerTransition()}),o)}))}))}drawerTransitionAtTerminal(e,s){const t=e.getBoundingClientRect().width;const o=e.querySelector(".panel-tools__drawer-surface");const i=o?.getBoundingClientRect().width??0;return C(t,i,s)}finishDrawerTransition(){const e=this.motion;const s=e!=="idle";this.clearTransitionCompletion();if(!s)return;this.ignoreReplacementTerminal=false;this.motion="idle";if(e==="closing"&&!this.open){this.drawerSurfaceRetained=false}this.dsChromeTransitionEnd.emit({source:"panel-tools"})}clearTransitionCompletion(){this.transitionGeneration+=1;if(this.transitionFallbackTimer!==null){window.clearTimeout(this.transitionFallbackTimer);this.transitionFallbackTimer=null}}isRailSelected(e){return this.open&&this.activeTool===e}isDrawerPresent(){return this.open||this.drawerSurfaceRetained}isViewActive(e){return this.isDrawerPresent()&&this.activeTool===e}hasFullView(e){return this.fullViewToolIds.includes(e)}syncFullViewTools(){const e=this.orderedRailItems.map((e=>e.id));const s=e.filter((e=>Boolean(this.el.querySelector(`[slot="${e}-view"]`))));if(s.join("|")!==this.fullViewToolIds.join("|"))this.fullViewToolIds=s}get renderRoot(){return this.el.shadowRoot??this.el}headerLabel(){if(!this.isDrawerPresent()||!this.activeTool)return"";const e=this.railItems.find((e=>e.id===this.activeTool));return e?.label??g[this.activeTool]??this.activeTool}resolvedHeaders(){return this.headers??{}}activeHeader(){if(!this.activeTool)return{};return this.resolvedHeaders()[this.activeTool]??{}}async activateTool(e){const s=this.railItems.find((s=>s.id===e));if(!s||s.isInactive)return;this.handleToolChange(e)}async closeDrawer(){if(!this.open)return;const e=this.activeTool;this.open=false;if(e){this.dsToolChange.emit({id:e,selected:false})}}async focusHeaderAction(e){const s=this.renderRoot.querySelector(`[data-header-action-id="${CSS.escape(e)}"]`);await(s?.setFocus?.())}focusRailAt(e){const s=this.orderedRailItems;if(!s.length)return;const t=Math.max(0,Math.min(e,s.length-1));if(t===this.rovingIndex)return;this.rovingIndex=t;const o=Array.from(this.renderRoot.querySelectorAll(".panel-tools__rail-action .button-icon"));o[t]?.focus({preventScroll:true})}renderRailAction(e,s){const t=e.ariaLabel??e.label??g[e.id]??e.id;return o("ds-tooltip",{key:e.id,label:t,shortcutKey:e.shortcutKey??v[e.id],side:"left",size:"sm",boundary:"viewport"},o("ds-button-unfilled",{variant:"icon",class:"panel-tools__rail-action",icon:e.icon,isActive:this.isRailSelected(e.id),activeFill:false,hasBorder:false,pressScale:false,dot:e.dot??false,isInactive:e.isInactive,focusTabIndex:s===this.rovingIndex?0:-1,"aria-label":t,pressed:this.isRailSelected(e.id),onFocusin:()=>{this.rovingIndex=s},onKeyDown:e=>this.handleRailKeyDown(e,s),onDsClick:()=>this.handleToolChange(e.id)}))}render(){const e=this.headerLabel();const s=this.activeHeader();const t=s.title?.trim()||e;const n=s.actions??[];const r=this.orderedRailItems;const a=r.filter((e=>_(e)==="header"));const l=r.filter((e=>_(e)==="body"));const d=r.filter((e=>_(e)==="footer"));const c=a.length;const h=c+l.length;const f=this.isDrawerPresent();const u=T(this.open,this.motion);const p=Boolean(f&&this.activeTool&&this.hasFullView(this.activeTool));const m=r.map((e=>e.id));return o(i,{key:"f0b68f1eba06350ea0e6e9cd49ac8af501e3d119",class:{"panel-tools":true,"panel-tools--open":this.open,"panel-tools--ready":this.readyForMotion,"panel-tools--motion-opening":this.motion==="opening","panel-tools--motion-closing":this.motion==="closing","panel-tools--drawer-resting":u,"panel-tools--fullscreen":this.presentation==="fullscreen","panel-tools--presentation-snap":this.presentationMotionSuppressed},role:this.presentation==="fullscreen"?"dialog":"complementary","aria-modal":this.presentation==="fullscreen"?"true":undefined,"aria-label":this.toolsLabel},o("div",{key:"39d87b56af32d1b0c9df28ae753418b031bce592",class:"panel-tools__layout"},o("nav",{key:"49386a819594b99d83fad67035ba9b61dffef7b8",class:"panel-tools__rail","aria-label":this.toolShortcutsLabel},a.length?o("div",{class:"panel-tools__rail-header ds-chrome-row ds-chrome-space--md"},a.map(((e,s)=>this.renderRailAction(e,s)))):null,o("div",{key:"03b7594635006a2bd0dcd01328b67a470477fe22",class:{"panel-tools__rail-body":true,"ds-chrome-column":true,"ds-chrome-space--md":true,"ds-scrollbar-hidden":true,"ds-focus-ring":this.railBodyScrollable},ref:e=>{const s=e??undefined;if(s===this.railBodyEl)return;this.railBodyEl=s;this.connectRailBodyObserver()},role:this.railBodyScrollable?"region":undefined,"aria-label":this.railBodyScrollable?this.toolShortcutsLabel:undefined,tabIndex:this.railBodyScrollable?0:undefined},o("div",{key:"fdbd54e7590e79decf8650a402f97655accde47a",class:"panel-tools__rail-actions"},l.map(((e,s)=>this.renderRailAction(e,c+s))))),d.length?o("div",{class:"panel-tools__rail-footer ds-chrome-row ds-chrome-space--md"},d.map(((e,s)=>this.renderRailAction(e,h+s)))):null),o("div",{key:"b52eb269ee5503602f7449cbcc98d3d8a79ac24e",class:{"panel-tools__drawer":true,"panel-tools__drawer--visible":f},"aria-hidden":f?null:"true",inert:f?undefined:true},o("div",{key:"8ae718b1e9e1cea92011c4f098fb2baf4f3088e6",class:"panel-tools__drawer-surface"},this.presentation!=="fullscreen"||this.fullscreenHeaderMode==="shared"?o("ds-panel-tool-header",{class:"panel-tools__header",heading:t,showBack:s.showBack??false,backIcon:s.backIcon||"ChevronLeft",backAriaLabel:s.backAriaLabel||"Back",showMenu:false,ref:e=>{const s=e;if(s)s.actions=n},onDsBack:()=>{if(this.activeTool)this.dsHeaderBack.emit({tool:this.activeTool})}}):null,o("div",{key:"b0ed560e468602805bc95ef3d30de2b7874f1ccf",class:"panel-tools__body",hidden:p},m.map((e=>{const s=this.isViewActive(e);return o("div",{class:{"panel-tools__view":true,"panel-tools__view--active":s},hidden:!s},o("slot",{name:e}))}))),o("div",{key:"20e0ba3227e0b5fa1ca193e73660e73a0f84e986",class:"panel-tools__full-views",hidden:!p},m.map((e=>o("div",{class:{"panel-tools__full-view":true,"panel-tools__full-view--active":this.isViewActive(e)&&this.hasFullView(e)},hidden:!(this.isViewActive(e)&&this.hasFullView(e))},o("slot",{name:`${e}-view`})))))))))}get el(){return this}static get watchers(){return{presentation:[{presentationChanged:0}],open:[{openChanged:0}],activeTool:[{activeToolChanged:0}],storageKey:[{storageKeyChanged:0}],items:[{itemsChanged:0}]}}static get style(){return z()}},[257,"ds-panel-tools",{open:[1540],presentation:[1537],fullscreenHeaderMode:[513,"fullscreen-header-mode"],activeTool:[1537,"active-tool"],items:[16],toolsLabel:[1,"tools-label"],toolShortcutsLabel:[1,"tool-shortcuts-label"],headers:[16],storageKey:[1,"storage-key"],motion:[32],drawerSurfaceRetained:[32],readyForMotion:[32],presentationMotionSuppressed:[32],rovingIndex:[32],fullViewToolIds:[32],railBodyScrollable:[32],activateTool:[64],closeDrawer:[64],focusHeaderAction:[64]},[[10,"keydown","handleFullscreenEscape"]],{presentation:[{presentationChanged:0}],open:[{openChanged:0}],activeTool:[{activeToolChanged:0}],storageKey:[{storageKeyChanged:0}],items:[{itemsChanged:0}]}]);function D(){if(typeof customElements==="undefined"){return}const e=["ds-panel-tools","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-panel-tool-header","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-panel-tools":if(!customElements.get(n(e))){customElements.define(n(e),S)}break;case"ds-badge":if(!customElements.get(n(e))){a()}break;case"ds-button-unfilled":if(!customElements.get(n(e))){l()}break;case"ds-icon":if(!customElements.get(n(e))){d()}break;case"ds-loader":if(!customElements.get(n(e))){c()}break;case"ds-panel-tool-header":if(!customElements.get(n(e))){h()}break;case"ds-text":if(!customElements.get(n(e))){f()}break;case"ds-tooltip":if(!customElements.get(n(e))){u()}break}}))}D();export{S as P,g as a,A as b,b as c,D as d,w as o,x as r};
2
- //# sourceMappingURL=p-COFw_fcj.js.map