@ds-mo/ui 14.23.0 → 14.25.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 (117) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +10 -7
  3. package/dist/agent.json +59 -15
  4. package/dist/angular/ds-bar-title.d.ts +1 -1
  5. package/dist/angular/ds-bar-title.js +3 -3
  6. package/dist/angular/ds-button-filled.d.ts +3 -1
  7. package/dist/angular/ds-button-filled.js +7 -4
  8. package/dist/angular/ds-button-unfilled.d.ts +3 -1
  9. package/dist/angular/ds-button-unfilled.js +7 -4
  10. package/dist/components/ds-agent-questionnaire.js +1 -1
  11. package/dist/components/ds-agent-response.js +1 -1
  12. package/dist/components/ds-banner.js +1 -1
  13. package/dist/components/ds-bar-nav.js +1 -1
  14. package/dist/components/ds-bar-title.js +1 -1
  15. package/dist/components/ds-bar-workflow.js +1 -1
  16. package/dist/components/ds-button-filled.js +1 -1
  17. package/dist/components/ds-button-unfilled.js +1 -1
  18. package/dist/components/ds-card-chart.js +1 -1
  19. package/dist/components/ds-card-setting.js +1 -1
  20. package/dist/components/ds-code-block.js +1 -1
  21. package/dist/components/ds-filter-menu.js +1 -1
  22. package/dist/components/ds-input.js +1 -1
  23. package/dist/components/ds-markdown.js +1 -1
  24. package/dist/components/ds-message-actions.js +1 -1
  25. package/dist/components/ds-message-composer.js +1 -1
  26. package/dist/components/ds-message-scroller.js +1 -1
  27. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  28. package/dist/components/ds-modal.js +1 -1
  29. package/dist/components/ds-pagination.js +1 -1
  30. package/dist/components/ds-panel-nav.js +1 -1
  31. package/dist/components/ds-panel-tool-header.js +1 -1
  32. package/dist/components/ds-panel-tool-search.js +1 -1
  33. package/dist/components/ds-panel-tools.js +1 -1
  34. package/dist/components/ds-select.js +1 -1
  35. package/dist/components/ds-shell-app.js +1 -1
  36. package/dist/components/ds-shell-app.js.map +1 -1
  37. package/dist/components/ds-shell-tools.js +1 -1
  38. package/dist/components/ds-table-filter.js +1 -1
  39. package/dist/components/ds-table-group.js +1 -1
  40. package/dist/components/ds-table-saved-views.js +1 -1
  41. package/dist/components/ds-table-search.js +1 -1
  42. package/dist/components/ds-table-sort.js +1 -1
  43. package/dist/components/ds-table.js +1 -1
  44. package/dist/components/ds-table.js.map +1 -1
  45. package/dist/components/ds-toast.js +1 -1
  46. package/dist/components/p-BR1ayqMU.js +2 -0
  47. package/dist/components/p-BR1ayqMU.js.map +1 -0
  48. package/dist/components/{p-DzVYGJJv.js → p-BSRIF4m8.js} +2 -2
  49. package/dist/components/{p-FitB53eM.js → p-BZlhBJZL.js} +2 -2
  50. package/dist/components/{p-BmqnrfTf.js → p-Bo6uW_8T.js} +2 -2
  51. package/dist/components/{p-BIaHDBfP.js → p-Bq8svcPs.js} +2 -2
  52. package/dist/components/{p-DAFR4U9P.js → p-BqbdABo3.js} +2 -2
  53. package/dist/components/{p-nVv71P3f.js → p-CEXchU5N.js} +2 -2
  54. package/dist/components/p-CEfxLsbX.js +2 -0
  55. package/dist/components/p-CEfxLsbX.js.map +1 -0
  56. package/dist/components/{p-DXbryJHz.js → p-CYMKmJ2s.js} +2 -2
  57. package/dist/components/{p-C13fWp2x.js → p-CZHIkVgj.js} +2 -2
  58. package/dist/components/{p-CL0tECXf.js → p-CZjjDhUl.js} +2 -2
  59. package/dist/components/{p-Bd-Kpekh.js → p-C_FFU6W3.js} +2 -2
  60. package/dist/components/{p-CilwchJH.js → p-CglHiyY2.js} +2 -2
  61. package/dist/components/{p-9M0ak2q_.js → p-DLaN9BPq.js} +2 -2
  62. package/dist/components/{p-CrYJnDev.js → p-DiS5BgLA.js} +2 -2
  63. package/dist/components/{p-DiyO47xX.js → p-PXdvBMXB.js} +2 -2
  64. package/dist/components/{p-7MWaWl8w.js → p-kslioYhf.js} +2 -2
  65. package/dist/components/p-kslioYhf.js.map +1 -0
  66. package/dist/docs/components.json +257 -30
  67. package/dist/lib/components/BarTitle/bar-title-types.d.ts +54 -1
  68. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +12 -1
  69. package/dist/lib/components/ShellApp/shell-app-types.d.ts +3 -1
  70. package/dist/lib/shell/index.d.ts +1 -0
  71. package/dist/mcp-data/registry/bar-title.json +34 -12
  72. package/dist/mcp-data/registry/button-filled.json +60 -6
  73. package/dist/mcp-data/registry/button-unfilled.json +60 -6
  74. package/dist/mcp-data/registry/registry.json +58 -14
  75. package/dist/mcp-data/registry/shell-app.json +7 -2
  76. package/dist/mcp-data/registry/table.json +3 -3
  77. package/dist/react/ds-button-filled.d.ts +1 -0
  78. package/dist/react/ds-button-filled.js +4 -1
  79. package/dist/react/ds-button-unfilled.d.ts +1 -0
  80. package/dist/react/ds-button-unfilled.js +1 -0
  81. package/dist/styles/table.css +13 -1
  82. package/dist/types/components/BarTitle/BarTitle.d.ts +19 -6
  83. package/dist/types/components/BarTitle/bar-title-actions.d.ts +11 -0
  84. package/dist/types/components/BarTitle/bar-title-types.d.ts +54 -1
  85. package/dist/types/components/BarTitle/index.d.ts +1 -1
  86. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +12 -1
  87. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +12 -1
  88. package/dist/types/components/ShellApp/ShellApp.d.ts +12 -0
  89. package/dist/types/components/ShellApp/shell-app-types.d.ts +3 -1
  90. package/dist/types/components/Table/Table.d.ts +2 -2
  91. package/dist/types/components/Table/table-row-view.d.ts +2 -1
  92. package/dist/types/components.d.ts +60 -4
  93. package/dist/types/shell/index.d.ts +1 -0
  94. package/dist/types/utils/button-story-foundation.d.ts +2 -0
  95. package/dist/vue/ds-bar-title.js +1 -0
  96. package/dist/vue/ds-button-filled.js +6 -2
  97. package/dist/vue/ds-button-unfilled.js +4 -0
  98. package/package.json +1 -1
  99. package/dist/components/p--68f7nIx.js +0 -2
  100. package/dist/components/p--68f7nIx.js.map +0 -1
  101. package/dist/components/p-7MWaWl8w.js.map +0 -1
  102. package/dist/components/p-BnTPuV3x.js +0 -2
  103. package/dist/components/p-BnTPuV3x.js.map +0 -1
  104. /package/dist/components/{p-DzVYGJJv.js.map → p-BSRIF4m8.js.map} +0 -0
  105. /package/dist/components/{p-FitB53eM.js.map → p-BZlhBJZL.js.map} +0 -0
  106. /package/dist/components/{p-BmqnrfTf.js.map → p-Bo6uW_8T.js.map} +0 -0
  107. /package/dist/components/{p-BIaHDBfP.js.map → p-Bq8svcPs.js.map} +0 -0
  108. /package/dist/components/{p-DAFR4U9P.js.map → p-BqbdABo3.js.map} +0 -0
  109. /package/dist/components/{p-nVv71P3f.js.map → p-CEXchU5N.js.map} +0 -0
  110. /package/dist/components/{p-DXbryJHz.js.map → p-CYMKmJ2s.js.map} +0 -0
  111. /package/dist/components/{p-C13fWp2x.js.map → p-CZHIkVgj.js.map} +0 -0
  112. /package/dist/components/{p-CL0tECXf.js.map → p-CZjjDhUl.js.map} +0 -0
  113. /package/dist/components/{p-Bd-Kpekh.js.map → p-C_FFU6W3.js.map} +0 -0
  114. /package/dist/components/{p-CilwchJH.js.map → p-CglHiyY2.js.map} +0 -0
  115. /package/dist/components/{p-9M0ak2q_.js.map → p-DLaN9BPq.js.map} +0 -0
  116. /package/dist/components/{p-CrYJnDev.js.map → p-DiS5BgLA.js.map} +0 -0
  117. /package/dist/components/{p-DiyO47xX.js.map → p-PXdvBMXB.js.map} +0 -0
@@ -8,5 +8,6 @@ import type { Components } from "@ds-mo/ui/dist/components";
8
8
  import { DsButtonFilled as DsButtonFilledElement } from "@ds-mo/ui/dist/components/ds-button-filled.js";
9
9
  export type DsButtonFilledEvents = {
10
10
  onDsClick: EventName<DsButtonFilledCustomEvent<MouseEvent>>;
11
+ onDsMenuClick: EventName<DsButtonFilledCustomEvent<MouseEvent>>;
11
12
  };
12
13
  export declare const DsButtonFilled: StencilReactComponent<DsButtonFilledElement, DsButtonFilledEvents, Components.DsButtonFilled>;
@@ -7,6 +7,9 @@ export const DsButtonFilled = /*@__PURE__*/ createComponent({
7
7
  elementClass: DsButtonFilledElement,
8
8
  // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
9
9
  react: React,
10
- events: { onDsClick: 'dsClick' },
10
+ events: {
11
+ onDsClick: 'dsClick',
12
+ onDsMenuClick: 'dsMenuClick'
13
+ },
11
14
  defineCustomElement: defineDsButtonFilled
12
15
  });
@@ -8,6 +8,7 @@ import type { Components } from "@ds-mo/ui/dist/components";
8
8
  import { DsButtonUnfilled as DsButtonUnfilledElement } from "@ds-mo/ui/dist/components/ds-button-unfilled.js";
9
9
  export type DsButtonUnfilledEvents = {
10
10
  onDsClick: EventName<DsButtonUnfilledCustomEvent<MouseEvent>>;
11
+ onDsMenuClick: EventName<DsButtonUnfilledCustomEvent<MouseEvent>>;
11
12
  onDsChange: EventName<DsButtonUnfilledCustomEvent<boolean>>;
12
13
  };
13
14
  export declare const DsButtonUnfilled: StencilReactComponent<DsButtonUnfilledElement, DsButtonUnfilledEvents, Components.DsButtonUnfilled>;
@@ -9,6 +9,7 @@ export const DsButtonUnfilled = /*@__PURE__*/ createComponent({
9
9
  react: React,
10
10
  events: {
11
11
  onDsClick: 'dsClick',
12
+ onDsMenuClick: 'dsMenuClick',
12
13
  onDsChange: 'dsChange'
13
14
  },
14
15
  defineCustomElement: defineDsButtonUnfilled
@@ -209,10 +209,22 @@
209
209
  }
210
210
 
211
211
  /* Bound style and layout invalidation to recycled row shells during window updates. */
212
- :where(.ds-table__table--virtual .ds-table__row) {
212
+ :where(.ds-table__table--windowed .ds-table__row) {
213
213
  contain: layout style;
214
214
  }
215
215
 
216
+ /*
217
+ * Pagination and infinite windows keep every loaded semantic row in the DOM.
218
+ * Let the browser skip off-screen row contents while retaining a stable scroll
219
+ * range from the same token-aligned row estimates used by virtual mode. The
220
+ * `auto` form caches each real height after the row has been laid out.
221
+ */
222
+ :where(.ds-table__table--deferred-rows .ds-table__row) {
223
+ content-visibility: auto;
224
+ contain-intrinsic-block-size: auto
225
+ var(--_table-row-intrinsic-block-size, var(--_table-row-min-block-size));
226
+ }
227
+
216
228
  :where(.ds-table__table--native-group-sticky .ds-table__header-row),
217
229
  :where(.ds-table__table--native-group-sticky .ds-table__row),
218
230
  :where(.ds-table__table--native-group-sticky .ds-table__skeleton-row) {
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
2
  import type { BreadcrumbItem, BreadcrumbSelectDetail } from '../Breadcrumb/breadcrumb-types';
3
- import { type BarTitleActionItem, type BarTitlePrimaryAction, type BarTitleSectionItem, type BarTitlePlacement, type BarTitleVariant } from './bar-title-types';
3
+ import { type BarTitleActionConfigItem, type BarTitleActionItem, type BarTitlePrimaryAction, type BarTitleSectionItem, type BarTitlePlacement, type BarTitleVariant } from './bar-title-types';
4
4
  export declare class BarTitle {
5
5
  el: HTMLElement;
6
6
  /** The page's single visible h1. */
@@ -27,6 +27,11 @@ export declare class BarTitle {
27
27
  primaryAction: BarTitlePrimaryAction | null;
28
28
  /** Secondary page actions shown in the overflow menu. Dividers create groups. */
29
29
  actions: BarTitleActionItem[];
30
+ /**
31
+ * Ordered page-header actions. When supplied, this replaces the legacy
32
+ * primaryAction/actions presentation while preserving the same dsAction event.
33
+ */
34
+ actionItems?: BarTitleActionConfigItem[];
30
35
  /** Accessible name for the page-actions menu. */
31
36
  actionsAriaLabel: string;
32
37
  /** Explicit visual/capacity variant. ShellPage owns automatic selection. */
@@ -46,7 +51,7 @@ export declare class BarTitle {
46
51
  /** Emitted with the activated primary or overflow action id. */
47
52
  dsAction: EventEmitter<string>;
48
53
  private sectionMenuOpen;
49
- private actionMenuOpen;
54
+ private openActionMenuId;
50
55
  private sectionMenuInitialFocusVisible;
51
56
  private actionMenuInitialFocusVisible;
52
57
  private readonly instanceId;
@@ -56,9 +61,11 @@ export declare class BarTitle {
56
61
  private readonly actionMenuId;
57
62
  private sectionTriggerEl;
58
63
  private actionTriggerEl;
64
+ private actionTriggerEls;
59
65
  componentWillLoad(): void;
60
66
  handleSectionsChange(): void;
61
67
  handleActionsChange(): void;
68
+ private reportActionIdIssues;
62
69
  private get compact();
63
70
  private get effectiveVariant();
64
71
  private get dividerVisible();
@@ -71,12 +78,16 @@ export declare class BarTitle {
71
78
  private get effectiveValue();
72
79
  private get selectedSectionLabel();
73
80
  private get sectionTriggerAriaLabel();
74
- private groupsFromItems;
81
+ private groupsFromSections;
75
82
  private get sectionMenuSections();
76
- private get selectableActions();
77
- private get showActionMenuTrigger();
78
- private actionMenuItem;
83
+ private get resolvedActionItems();
84
+ private get visibleActions();
79
85
  private get actionMenuSections();
86
+ private get showActionMenuTrigger();
87
+ private get availableActionMenuIds();
88
+ private actionMenuDomId;
89
+ private actionMenuAnchor;
90
+ private menuSectionsForAction;
80
91
  private toggleSectionMenu;
81
92
  private closeSectionMenu;
82
93
  private handleSectionSelect;
@@ -84,7 +95,9 @@ export declare class BarTitle {
84
95
  private closeActionMenu;
85
96
  private handleActionSelect;
86
97
  private renderSectionSelector;
98
+ private renderVisibleAction;
87
99
  private renderActions;
100
+ private renderActionMenus;
88
101
  private handleBreadcrumbSelect;
89
102
  private renderBreadcrumb;
90
103
  private renderBack;
@@ -0,0 +1,11 @@
1
+ import type { MenuSection } from '../Menu/menu-types';
2
+ import type { BarTitleAction, BarTitleActionConfigItem, BarTitleActionItem, BarTitleDivider, BarTitleMenuChoiceItem, BarTitlePrimaryAction, BarTitleVariant } from './bar-title-types';
3
+ export type BarTitleActionPresentation = BarTitleVariant | 'mobile';
4
+ export declare function isBarTitleActionDivider(item: BarTitleActionConfigItem | BarTitleMenuChoiceItem): item is BarTitleDivider;
5
+ export declare function resolveBarTitleActionItems(actionItems: BarTitleActionConfigItem[] | undefined, primaryAction: BarTitlePrimaryAction | null, actions: BarTitleActionItem[]): BarTitleActionConfigItem[];
6
+ export declare function barTitleActionIdIssues(items: BarTitleActionConfigItem[]): string[];
7
+ export declare function visibleBarTitleActions(items: BarTitleActionConfigItem[], presentation: BarTitleActionPresentation): BarTitleActionConfigItem[];
8
+ export declare function barTitleChoiceSections(choices: BarTitleMenuChoiceItem[]): MenuSection[];
9
+ export declare function overflowBarTitleActionSections(items: BarTitleActionConfigItem[], presentation: BarTitleActionPresentation): MenuSection[];
10
+ export declare function findBarTitleAction(items: BarTitleActionConfigItem[], id: string): BarTitleAction | undefined;
11
+ //# sourceMappingURL=bar-title-actions.d.ts.map
@@ -11,11 +11,12 @@ export type BarTitleSectionItem = BarTitleSection | BarTitleDivider;
11
11
  export interface BarTitleAction {
12
12
  id: string;
13
13
  label: string;
14
+ ariaLabel?: string;
15
+ icon?: string;
14
16
  isInactive?: boolean;
15
17
  isDestructive?: boolean;
16
18
  }
17
19
  export interface BarTitlePrimaryAction extends BarTitleAction {
18
- icon?: string;
19
20
  intent?: ButtonFilledIntent;
20
21
  contrast?: ButtonFilledContrast;
21
22
  isLoading?: boolean;
@@ -23,8 +24,60 @@ export interface BarTitlePrimaryAction extends BarTitleAction {
23
24
  collapse?: BarTitlePrimaryActionCollapse;
24
25
  }
25
26
  export type BarTitleActionItem = BarTitleAction | BarTitleDivider;
27
+ export type BarTitleActionAppearance = 'filled' | 'unfilled';
28
+ export type BarTitleActionCollapse = 'auto' | 'never';
29
+ export type BarTitleActionMobile = 'auto' | 'visible' | 'overflow';
30
+ interface BarTitleVisibleActionBase extends BarTitleAction {
31
+ appearance?: BarTitleActionAppearance;
32
+ intent?: ButtonFilledIntent;
33
+ contrast?: ButtonFilledContrast;
34
+ isLoading?: boolean;
35
+ buttonType?: 'button' | 'submit' | 'reset';
36
+ /** Auto moves the action into overflow only in constrained presentation. */
37
+ collapse?: BarTitleActionCollapse;
38
+ /**
39
+ * Mobile defaults icon actions to visible and all labeled actions to overflow.
40
+ * `visible` is supported only by icon actions.
41
+ */
42
+ mobile?: BarTitleActionMobile;
43
+ }
44
+ /** Visible labeled command in the authored action order. */
45
+ export interface BarTitleButtonAction extends BarTitleVisibleActionBase {
46
+ type: 'button';
47
+ }
48
+ /** Visible icon-only command. ariaLabel is required because label is not rendered. */
49
+ export interface BarTitleIconAction extends BarTitleVisibleActionBase {
50
+ type: 'icon';
51
+ icon: string;
52
+ ariaLabel: string;
53
+ }
54
+ export type BarTitleMenuChoice = BarTitleAction;
55
+ export type BarTitleMenuChoiceItem = BarTitleMenuChoice | BarTitleDivider;
56
+ /** Visible labeled menu button. Selecting a choice emits that choice's flat id. */
57
+ export interface BarTitleMenuAction extends BarTitleVisibleActionBase {
58
+ type: 'menu';
59
+ choices: BarTitleMenuChoiceItem[];
60
+ menuAriaLabel?: string;
61
+ }
62
+ /** Command with a dedicated menu segment; defaults filled when appearance is omitted. */
63
+ export interface BarTitleSplitAction extends BarTitleVisibleActionBase {
64
+ type: 'split';
65
+ choices: BarTitleMenuChoiceItem[];
66
+ menuAriaLabel: string;
67
+ }
68
+ /** Command that is always presented in the shared overflow menu. */
69
+ export interface BarTitleOverflowAction extends BarTitleAction {
70
+ type: 'overflow';
71
+ }
72
+ /**
73
+ * Ordered page-header action model. IDs must be non-empty and unique across
74
+ * top-level actions and every nested menu choice. At most the first eligible
75
+ * action renders beside the title; remaining actions use the text-only overflow.
76
+ */
77
+ export type BarTitleActionConfigItem = BarTitleButtonAction | BarTitleIconAction | BarTitleMenuAction | BarTitleSplitAction | BarTitleOverflowAction | BarTitleDivider;
26
78
  export type BarTitleVariant = 'expanded' | 'compact' | 'constrained';
27
79
  export type BarTitlePlacement = 'page' | 'shell-bar';
28
80
  export type BarTitlePrimaryActionCollapse = 'auto' | 'never';
29
81
  export declare function isBarTitleDivider(item: BarTitleSectionItem | BarTitleActionItem): item is BarTitleDivider;
82
+ export {};
30
83
  //# sourceMappingURL=bar-title-types.d.ts.map
@@ -1,2 +1,2 @@
1
- export type { BarTitleAction, BarTitleActionItem, BarTitleDivider, BarTitlePrimaryActionCollapse, BarTitlePrimaryAction, BarTitleSection, BarTitleSectionItem, BarTitlePlacement, BarTitleVariant, } from './bar-title-types';
1
+ export type { BarTitleAction, BarTitleActionAppearance, BarTitleActionCollapse, BarTitleActionConfigItem, BarTitleActionItem, BarTitleActionMobile, BarTitleButtonAction, BarTitleDivider, BarTitleIconAction, BarTitleMenuAction, BarTitleMenuChoice, BarTitleMenuChoiceItem, BarTitleOverflowAction, BarTitlePrimaryActionCollapse, BarTitlePrimaryAction, BarTitleSection, BarTitleSectionItem, BarTitleSplitAction, BarTitlePlacement, BarTitleVariant, } from './bar-title-types';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -69,6 +69,13 @@ export declare class ButtonFilled {
69
69
  expanded: boolean | undefined;
70
70
  /** Popup type exposed to assistive technology. */
71
71
  haspopup: ButtonFilledPopup | undefined;
72
+ /**
73
+ * Append a separate ChevronDown menu segment while preserving this button's
74
+ * variant, size, intent, contrast, loading, inactive, and width treatment.
75
+ */
76
+ split: boolean;
77
+ /** Accessible name for the appended menu segment in split mode. */
78
+ menuAriaLabel: string;
72
79
  /**
73
80
  * This action *has* a menu: implies `aria-haspopup="menu"` and adds the trailing
74
81
  * chevron that carries the affordance.
@@ -81,12 +88,16 @@ export declare class ButtonFilled {
81
88
  */
82
89
  hasMenu: boolean;
83
90
  dsClick: EventEmitter<MouseEvent>;
91
+ dsMenuClick: EventEmitter<MouseEvent>;
84
92
  private buttonEl;
85
- setFocus(): Promise<void>;
93
+ private menuButtonEl;
94
+ setFocus(segment?: 'primary' | 'menu'): Promise<void>;
86
95
  private handleClick;
96
+ private handleMenuClick;
87
97
  private get resolvedHaspopup();
88
98
  private get accessibleName();
89
99
  private get doubleInset();
100
+ private buttonClass;
90
101
  render(): any;
91
102
  }
92
103
  //# sourceMappingURL=ButtonFilled.d.ts.map
@@ -67,6 +67,13 @@ export declare class ButtonUnfilled {
67
67
  */
68
68
  expanded: boolean | undefined;
69
69
  haspopup: ButtonUnfilledPopup | undefined;
70
+ /**
71
+ * Append a separate ChevronDown menu segment while preserving this button's
72
+ * variant, size, surface, active, loading, border, and width treatment.
73
+ */
74
+ split: boolean;
75
+ /** Accessible name for the appended menu segment in split mode. */
76
+ menuAriaLabel: string;
70
77
  /**
71
78
  * Controlled state for a genuine toggle button. Adds aria-pressed, promotes
72
79
  * active styling, and makes activation emit dsChange with the requested state.
@@ -98,17 +105,20 @@ export declare class ButtonUnfilled {
98
105
  */
99
106
  focusTabIndex?: number;
100
107
  dsClick: EventEmitter<MouseEvent>;
108
+ dsMenuClick: EventEmitter<MouseEvent>;
101
109
  dsChange: EventEmitter<boolean>;
102
110
  private captionCompact;
103
111
  private buttonEl;
112
+ private menuButtonEl;
104
113
  private captionCompactDisconnect;
105
114
  private hasLoaded;
106
115
  componentDidLoad(): void;
107
116
  connectedCallback(): void;
108
117
  disconnectedCallback(): void;
109
118
  onCollapseLabelChange(): void;
110
- setFocus(): Promise<void>;
119
+ setFocus(segment?: 'primary' | 'menu'): Promise<void>;
111
120
  private handleClick;
121
+ private handleMenuClick;
112
122
  private get captionIconOnly();
113
123
  private get visualVariant();
114
124
  private get showDot();
@@ -122,6 +132,7 @@ export declare class ButtonUnfilled {
122
132
  /** Knock-out ring: selected fill → active wash; otherwise surface token. */
123
133
  private get dotRing();
124
134
  private get accessibleName();
135
+ private buttonClass;
125
136
  render(): any;
126
137
  }
127
138
  //# sourceMappingURL=ButtonUnfilled.d.ts.map
@@ -89,6 +89,12 @@ export declare class ShellApp {
89
89
  private managedMobileSheetNavOpen;
90
90
  private managedInboxTool;
91
91
  private managedBrowseContext;
92
+ private mobileActionMenuOpen;
93
+ private mobileActionMenuInitialFocusVisible;
94
+ private readonly instanceId;
95
+ private readonly mobileActionMenuTriggerId;
96
+ private readonly mobileActionMenuId;
97
+ private mobileActionTriggerEl;
92
98
  private resizeObserver;
93
99
  private hasLoaded;
94
100
  private foregroundRefreshTimer;
@@ -114,6 +120,7 @@ export declare class ShellApp {
114
120
  disconnectedCallback(): void;
115
121
  onShellPropsChange(): void;
116
122
  handleNavigationChange(): void;
123
+ handlePageChromeChange(): void;
117
124
  handleToolsChange(): void;
118
125
  onMobileStateChange(_next: unknown, previous: unknown): void;
119
126
  private updateResponsiveMode;
@@ -184,6 +191,11 @@ export declare class ShellApp {
184
191
  private renderManagedMobileBarNav;
185
192
  private renderManagedMobileLeading;
186
193
  private renderManagedMobileActions;
194
+ private get resolvedHeaderActions();
195
+ private get mobileActionMenuSections();
196
+ private closeMobileActionMenu;
197
+ private handleMobileActionSelect;
198
+ private renderManagedMobileActionMenu;
187
199
  private get barTitleSections();
188
200
  private renderManagedBarTitle;
189
201
  private renderManagedPage;
@@ -1,5 +1,5 @@
1
1
  import type { BarNavTab } from '../BarNav/bar-nav-types';
2
- import type { BarTitleActionItem, BarTitlePrimaryAction } from '../BarTitle/bar-title-types';
2
+ import type { BarTitleActionConfigItem, BarTitleActionItem, BarTitlePrimaryAction } from '../BarTitle/bar-title-types';
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';
@@ -67,6 +67,8 @@ export interface ShellPageChromeConfig {
67
67
  breadcrumbAriaLabel?: string;
68
68
  primaryAction?: BarTitlePrimaryAction | null;
69
69
  actions?: BarTitleActionItem[];
70
+ /** Ordered desktop, tablet, and mobile page-action model. */
71
+ actionItems?: BarTitleActionConfigItem[];
70
72
  /** Icon actions rendered in the mobile header's trailing lane. */
71
73
  mobileActions?: PanelToolsHeaderAction[];
72
74
  actionsAriaLabel?: string;
@@ -230,13 +230,13 @@ export declare class Table {
230
230
  private currentLoadedRowCount;
231
231
  private createRenderModel;
232
232
  private get highlightMatcher();
233
- private get virtualizationEnabled();
233
+ private get rowWindowingEnabled();
234
234
  private get virtualViewportMissing();
235
235
  private get hasVirtualViewportBounds();
236
236
  private estimateVirtualViewportSize;
237
237
  private virtualPinnedRowIds;
238
238
  private syncVirtualItems;
239
- private shouldVirtualize;
239
+ private shouldWindowRows;
240
240
  private get resolvedMaxHeight();
241
241
  private get resolvedHeight();
242
242
  private warnModelIssues;
@@ -15,6 +15,7 @@ export interface TableRowViewOptions {
15
15
  highlightFieldIds: string[];
16
16
  ariaRowIndex?: number;
17
17
  variableVirtualSize?: boolean;
18
+ intrinsicBlockSize?: number;
18
19
  rowKey?: string;
19
20
  renderSelectionControl: (label: string, checked: boolean, indeterminate: boolean, disabled: boolean, onActivate: () => void) => unknown;
20
21
  renderStickyEdge: (sticky: TableColumn['sticky']) => unknown;
@@ -25,5 +26,5 @@ export interface TableRowViewOptions {
25
26
  onActionMenuToggle: (row: TableRow, column: TableColumn, event: MouseEvent) => void;
26
27
  }
27
28
  /** Render one semantic body row and the complete declarative table-cell vocabulary. */
28
- export declare function renderTableRow({ row, model, visibleColumns, emptyCellLabel, actionMenuElementId, actionMenu, highlightMatcher, highlightFieldIds, ariaRowIndex, variableVirtualSize, rowKey, renderSelectionControl, renderStickyEdge, onRowActivate, onRowKeyDown, onRowSelection, onCellAction, onActionMenuToggle, }: TableRowViewOptions): any;
29
+ export declare function renderTableRow({ row, model, visibleColumns, emptyCellLabel, actionMenuElementId, actionMenu, highlightMatcher, highlightFieldIds, ariaRowIndex, variableVirtualSize, intrinsicBlockSize, rowKey, renderSelectionControl, renderStickyEdge, onRowActivate, onRowKeyDown, onRowSelection, onCellAction, onActionMenuToggle, }: TableRowViewOptions): any;
29
30
  //# sourceMappingURL=table-row-view.d.ts.map
@@ -13,7 +13,7 @@ import { BannerAnnouncement, BannerContrast, BannerIntent, BannerOrientation } f
13
13
  import { NavChromeStyle } from "./shell/nav-chrome";
14
14
  import { BarNavTab } from "./components/BarNav/bar-nav-types";
15
15
  import { BreadcrumbItem, BreadcrumbSelectDetail } from "./components/Breadcrumb/breadcrumb-types";
16
- import { BarTitleActionItem, BarTitlePlacement, BarTitlePrimaryAction, BarTitleSectionItem, BarTitleVariant } from "./components/BarTitle/bar-title-types";
16
+ import { BarTitleActionConfigItem, BarTitleActionItem, BarTitlePlacement, BarTitlePrimaryAction, BarTitleSectionItem, BarTitleVariant } from "./components/BarTitle/bar-title-types";
17
17
  import { BarWorkflowStep, BarWorkflowSubmitAction } from "./components/BarWorkflow/bar-workflow-types";
18
18
  import { MobileDestination, ShellResponsiveMode } from "./shell/shell-responsive";
19
19
  import { ButtonFilledBackground, ButtonFilledContrast, ButtonFilledIntent, ButtonFilledPopup, ButtonFilledSize, ButtonFilledVariant, ButtonFilledWidth } from "./components/ButtonFilled/ButtonFilled";
@@ -83,7 +83,7 @@ export { BannerAnnouncement, BannerContrast, BannerIntent, BannerOrientation } f
83
83
  export { NavChromeStyle } from "./shell/nav-chrome";
84
84
  export { BarNavTab } from "./components/BarNav/bar-nav-types";
85
85
  export { BreadcrumbItem, BreadcrumbSelectDetail } from "./components/Breadcrumb/breadcrumb-types";
86
- export { BarTitleActionItem, BarTitlePlacement, BarTitlePrimaryAction, BarTitleSectionItem, BarTitleVariant } from "./components/BarTitle/bar-title-types";
86
+ export { BarTitleActionConfigItem, BarTitleActionItem, BarTitlePlacement, BarTitlePrimaryAction, BarTitleSectionItem, BarTitleVariant } from "./components/BarTitle/bar-title-types";
87
87
  export { BarWorkflowStep, BarWorkflowSubmitAction } from "./components/BarWorkflow/bar-workflow-types";
88
88
  export { MobileDestination, ShellResponsiveMode } from "./shell/shell-responsive";
89
89
  export { ButtonFilledBackground, ButtonFilledContrast, ButtonFilledIntent, ButtonFilledPopup, ButtonFilledSize, ButtonFilledVariant, ButtonFilledWidth } from "./components/ButtonFilled/ButtonFilled";
@@ -420,6 +420,10 @@ export namespace Components {
420
420
  "value": string;
421
421
  }
422
422
  interface DsBarTitle {
423
+ /**
424
+ * Ordered page-header actions. When supplied, this replaces the legacy primaryAction/actions presentation while preserving the same dsAction event.
425
+ */
426
+ "actionItems"?: BarTitleActionConfigItem[];
423
427
  /**
424
428
  * Secondary page actions shown in the overflow menu. Dividers create groups.
425
429
  * @default []
@@ -644,6 +648,11 @@ export namespace Components {
644
648
  * @default true
645
649
  */
646
650
  "labelEmphasis": boolean;
651
+ /**
652
+ * Accessible name for the appended menu segment in split mode.
653
+ * @default 'More options'
654
+ */
655
+ "menuAriaLabel": string;
647
656
  /**
648
657
  * Scale down during a physical pointer press. Disable when an owning composite requires fixed child or background geometry.
649
658
  * @default true
@@ -654,12 +663,17 @@ export namespace Components {
654
663
  * @default false
655
664
  */
656
665
  "rounded": boolean;
657
- "setFocus": () => Promise<void>;
666
+ "setFocus": (segment?: "primary" | "menu") => Promise<void>;
658
667
  /**
659
668
  * Control density (height, padding, icon, type).
660
669
  * @default 'md'
661
670
  */
662
671
  "size": ButtonFilledSize;
672
+ /**
673
+ * Append a separate ChevronDown menu segment while preserving this button's variant, size, intent, contrast, loading, inactive, and width treatment.
674
+ * @default false
675
+ */
676
+ "split": boolean;
663
677
  /**
664
678
  * Native button type.
665
679
  * @default 'button'
@@ -761,6 +775,11 @@ export namespace Components {
761
775
  * @default true
762
776
  */
763
777
  "labelEmphasis": boolean;
778
+ /**
779
+ * Accessible name for the appended menu segment in split mode.
780
+ * @default 'More options'
781
+ */
782
+ "menuAriaLabel": string;
764
783
  /**
765
784
  * Scale down during a physical pointer press. Disable when an owning composite requires fixed child or background geometry.
766
785
  * @default true
@@ -775,12 +794,17 @@ export namespace Components {
775
794
  * @default false
776
795
  */
777
796
  "rounded": boolean;
778
- "setFocus": () => Promise<void>;
797
+ "setFocus": (segment?: "primary" | "menu") => Promise<void>;
779
798
  /**
780
799
  * Control density (height, padding, icon, type).
781
800
  * @default 'md'
782
801
  */
783
802
  "size": ButtonUnfilledSize;
803
+ /**
804
+ * Append a separate ChevronDown menu segment while preserving this button's variant, size, surface, active, loading, border, and width treatment.
805
+ * @default false
806
+ */
807
+ "split": boolean;
784
808
  /**
785
809
  * Native button type.
786
810
  * @default 'button'
@@ -4166,6 +4190,7 @@ declare global {
4166
4190
  };
4167
4191
  interface HTMLDsButtonFilledElementEventMap {
4168
4192
  "dsClick": MouseEvent;
4193
+ "dsMenuClick": MouseEvent;
4169
4194
  }
4170
4195
  interface HTMLDsButtonFilledElement extends Components.DsButtonFilled, HTMLStencilElement {
4171
4196
  addEventListener<K extends keyof HTMLDsButtonFilledElementEventMap>(type: K, listener: (this: HTMLDsButtonFilledElement, ev: DsButtonFilledCustomEvent<HTMLDsButtonFilledElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -4183,6 +4208,7 @@ declare global {
4183
4208
  };
4184
4209
  interface HTMLDsButtonUnfilledElementEventMap {
4185
4210
  "dsClick": MouseEvent;
4211
+ "dsMenuClick": MouseEvent;
4186
4212
  "dsChange": boolean;
4187
4213
  }
4188
4214
  interface HTMLDsButtonUnfilledElement extends Components.DsButtonUnfilled, HTMLStencilElement {
@@ -5543,6 +5569,10 @@ declare namespace LocalJSX {
5543
5569
  "value"?: string;
5544
5570
  }
5545
5571
  interface DsBarTitle {
5572
+ /**
5573
+ * Ordered page-header actions. When supplied, this replaces the legacy primaryAction/actions presentation while preserving the same dsAction event.
5574
+ */
5575
+ "actionItems"?: BarTitleActionConfigItem[];
5546
5576
  /**
5547
5577
  * Secondary page actions shown in the overflow menu. Dividers create groups.
5548
5578
  * @default []
@@ -5799,7 +5829,13 @@ declare namespace LocalJSX {
5799
5829
  * @default true
5800
5830
  */
5801
5831
  "labelEmphasis"?: boolean;
5832
+ /**
5833
+ * Accessible name for the appended menu segment in split mode.
5834
+ * @default 'More options'
5835
+ */
5836
+ "menuAriaLabel"?: string;
5802
5837
  "onDsClick"?: (event: DsButtonFilledCustomEvent<MouseEvent>) => void;
5838
+ "onDsMenuClick"?: (event: DsButtonFilledCustomEvent<MouseEvent>) => void;
5803
5839
  /**
5804
5840
  * Scale down during a physical pointer press. Disable when an owning composite requires fixed child or background geometry.
5805
5841
  * @default true
@@ -5815,6 +5851,11 @@ declare namespace LocalJSX {
5815
5851
  * @default 'md'
5816
5852
  */
5817
5853
  "size"?: ButtonFilledSize;
5854
+ /**
5855
+ * Append a separate ChevronDown menu segment while preserving this button's variant, size, intent, contrast, loading, inactive, and width treatment.
5856
+ * @default false
5857
+ */
5858
+ "split"?: boolean;
5818
5859
  /**
5819
5860
  * Native button type.
5820
5861
  * @default 'button'
@@ -5916,8 +5957,14 @@ declare namespace LocalJSX {
5916
5957
  * @default true
5917
5958
  */
5918
5959
  "labelEmphasis"?: boolean;
5960
+ /**
5961
+ * Accessible name for the appended menu segment in split mode.
5962
+ * @default 'More options'
5963
+ */
5964
+ "menuAriaLabel"?: string;
5919
5965
  "onDsChange"?: (event: DsButtonUnfilledCustomEvent<boolean>) => void;
5920
5966
  "onDsClick"?: (event: DsButtonUnfilledCustomEvent<MouseEvent>) => void;
5967
+ "onDsMenuClick"?: (event: DsButtonUnfilledCustomEvent<MouseEvent>) => void;
5921
5968
  /**
5922
5969
  * Scale down during a physical pointer press. Disable when an owning composite requires fixed child or background geometry.
5923
5970
  * @default true
@@ -5937,6 +5984,11 @@ declare namespace LocalJSX {
5937
5984
  * @default 'md'
5938
5985
  */
5939
5986
  "size"?: ButtonUnfilledSize;
5987
+ /**
5988
+ * Append a separate ChevronDown menu segment while preserving this button's variant, size, surface, active, loading, border, and width treatment.
5989
+ * @default false
5990
+ */
5991
+ "split"?: boolean;
5940
5992
  /**
5941
5993
  * Native button type.
5942
5994
  * @default 'button'
@@ -9355,6 +9407,8 @@ declare namespace LocalJSX {
9355
9407
  "controls": string | undefined;
9356
9408
  "expanded": boolean | undefined;
9357
9409
  "haspopup": ButtonFilledPopup | undefined;
9410
+ "split": boolean;
9411
+ "menuAriaLabel": string;
9358
9412
  "hasMenu": boolean;
9359
9413
  }
9360
9414
  interface DsButtonUnfilledAttributes {
@@ -9380,6 +9434,8 @@ declare namespace LocalJSX {
9380
9434
  "controls": string | undefined;
9381
9435
  "expanded": boolean | undefined;
9382
9436
  "haspopup": ButtonUnfilledPopup | undefined;
9437
+ "split": boolean;
9438
+ "menuAriaLabel": string;
9383
9439
  "pressed": boolean | undefined;
9384
9440
  "collapseLabel": boolean;
9385
9441
  "hasMenu": boolean;
@@ -1,6 +1,7 @@
1
1
  export type { NavChromeStyle } from './nav-chrome';
2
2
  export type { PanelNavChildItem, PanelNavChildSelectDetail, PanelNavGroup, PanelNavItem, PanelNavPresentation, } from '../components/PanelNav/panel-nav-types';
3
3
  export type { BarNavTab } from '../components/BarNav/bar-nav-types';
4
+ export type { BarTitleAction, BarTitleActionAppearance, BarTitleActionCollapse, BarTitleActionConfigItem, BarTitleActionItem, BarTitleActionMobile, BarTitleButtonAction, BarTitleDivider, BarTitleIconAction, BarTitleMenuAction, BarTitleMenuChoice, BarTitleMenuChoiceItem, BarTitleOverflowAction, BarTitlePrimaryAction, BarTitleSplitAction, } from '../components/BarTitle/bar-title-types';
4
5
  export type { ShellPageContentInset, ShellPageContentSurface, ShellPageDesktopHeaderPlacement, } from '../components/ShellPage/shell-page-types';
5
6
  export type { ShellAppComposition, ShellNavigationConfig, ShellNavigationSelectDetail, ShellPageChromeConfig, ShellSectionNavigation, ShellToolsConfig, } from '../components/ShellApp/shell-app-types';
6
7
  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';
@@ -6,4 +6,6 @@ export declare const BUTTON_STORY_COLUMN = "display:flex;flex-direction:column;g
6
6
  export declare const BUTTON_STORY_SURFACE = "display:flex;gap:var(--dimension-space-100);align-items:center;padding:var(--dimension-space-150);border-radius:var(--dimension-radius-100);";
7
7
  /** Shared Storybook wiring for the two semantic menu-button components. */
8
8
  export declare function wireButtonStoryMenuTriggers(root: Element | undefined): void;
9
+ /** Shared Storybook wiring for native split mode on either button family. */
10
+ export declare function wireButtonStorySplitTriggers(root: Element | undefined): void;
9
11
  //# sourceMappingURL=button-story-foundation.d.ts.map
@@ -16,6 +16,7 @@ export const DsBarTitle = /*@__PURE__*/ defineContainer('ds-bar-title', defineDs
16
16
  'sectionsAriaLabel',
17
17
  'primaryAction',
18
18
  'actions',
19
+ 'actionItems',
19
20
  'actionsAriaLabel',
20
21
  'variant',
21
22
  'placement',
@@ -25,8 +25,12 @@ export const DsButtonFilled = /*@__PURE__*/ defineContainer('ds-button-filled',
25
25
  'controls',
26
26
  'expanded',
27
27
  'haspopup',
28
+ 'split',
29
+ 'menuAriaLabel',
28
30
  'hasMenu',
29
- 'dsClick'
31
+ 'dsClick',
32
+ 'dsMenuClick'
30
33
  ], [
31
- 'dsClick'
34
+ 'dsClick',
35
+ 'dsMenuClick'
32
36
  ]);
@@ -26,13 +26,17 @@ export const DsButtonUnfilled = /*@__PURE__*/ defineContainer('ds-button-unfille
26
26
  'controls',
27
27
  'expanded',
28
28
  'haspopup',
29
+ 'split',
30
+ 'menuAriaLabel',
29
31
  'pressed',
30
32
  'collapseLabel',
31
33
  'hasMenu',
32
34
  'focusTabIndex',
33
35
  'dsClick',
36
+ 'dsMenuClick',
34
37
  'dsChange'
35
38
  ], [
36
39
  'dsClick',
40
+ 'dsMenuClick',
37
41
  'dsChange'
38
42
  ]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ds-mo/ui",
3
- "version": "14.23.0",
3
+ "version": "14.25.0",
4
4
  "description": "CompoMo — composable web components styled with TokoMo design tokens",
5
5
  "keywords": [
6
6
  "web-components",