@ds-mo/ui 13.13.0 → 13.14.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 (191) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +50 -17
  4. package/dist/angular/ds-button-filled.d.ts +1 -1
  5. package/dist/angular/ds-button-filled.js +3 -3
  6. package/dist/angular/ds-button-unfilled.d.ts +1 -1
  7. package/dist/angular/ds-button-unfilled.js +3 -3
  8. package/dist/angular/ds-table.d.ts +4 -1
  9. package/dist/angular/ds-table.js +7 -4
  10. package/dist/angular/ds-tag.d.ts +1 -1
  11. package/dist/angular/ds-tag.js +3 -3
  12. package/dist/components/ds-agent-activity.js +1 -1
  13. package/dist/components/ds-agent-response.js +1 -1
  14. package/dist/components/ds-agent-source-list.js +1 -1
  15. package/dist/components/ds-agent-tool-call.js +1 -1
  16. package/dist/components/ds-attachment-list.js +1 -1
  17. package/dist/components/ds-avatar.js +1 -1
  18. package/dist/components/ds-banner.js +1 -1
  19. package/dist/components/ds-bar-nav.js +1 -1
  20. package/dist/components/ds-bar-title.js +1 -1
  21. package/dist/components/ds-bar-workflow.js +1 -1
  22. package/dist/components/ds-button-filled.js +1 -1
  23. package/dist/components/ds-button-unfilled.js +1 -1
  24. package/dist/components/ds-card-chart.js +1 -1
  25. package/dist/components/ds-card-setting.js +1 -1
  26. package/dist/components/ds-chip.js +1 -1
  27. package/dist/components/ds-code-block.js +1 -1
  28. package/dist/components/ds-empty-state.js +1 -1
  29. package/dist/components/ds-icon.js +1 -1
  30. package/dist/components/ds-input.js +1 -1
  31. package/dist/components/ds-markdown.js +1 -1
  32. package/dist/components/ds-message-actions.js +1 -1
  33. package/dist/components/ds-message-composer.js +1 -1
  34. package/dist/components/ds-message-scroller.js +1 -1
  35. package/dist/components/ds-mobile-bar-nav.js +1 -1
  36. package/dist/components/ds-mobile-header.js +1 -1
  37. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  38. package/dist/components/ds-modal.js +1 -1
  39. package/dist/components/ds-panel-nav.js +1 -1
  40. package/dist/components/ds-panel-tool-header.js +1 -1
  41. package/dist/components/ds-panel-tool-search.js +1 -1
  42. package/dist/components/ds-panel-tools.js +1 -1
  43. package/dist/components/ds-select.js +1 -1
  44. package/dist/components/ds-shell-app.js +1 -1
  45. package/dist/components/ds-shell-tools.js +1 -1
  46. package/dist/components/ds-tab-group.js +1 -1
  47. package/dist/components/ds-table.js +1 -1
  48. package/dist/components/ds-table.js.map +1 -1
  49. package/dist/components/ds-tag.js +1 -1
  50. package/dist/components/ds-toast.js +1 -1
  51. package/dist/components/{p-C3Z01Glr.js → p-Azjx2SsL.js} +2 -2
  52. package/dist/components/p-Azjx2SsL.js.map +1 -0
  53. package/dist/components/{p-DBchq8Zw.js → p-B6linhwY.js} +2 -2
  54. package/dist/components/{p-BEEYhbIb.js → p-B8HG9OFh.js} +2 -2
  55. package/dist/components/p-B8HG9OFh.js.map +1 -0
  56. package/dist/components/{p-BydCwx7x.js → p-BJVzrR_P.js} +2 -2
  57. package/dist/components/{p-Br0fwWUG.js → p-BL0JHLJp.js} +2 -2
  58. package/dist/components/{p-BNHPCCw8.js → p-BPS17WvI.js} +2 -2
  59. package/dist/components/{p-CSlTJWFG.js → p-BSdAFIcG.js} +2 -2
  60. package/dist/components/{p-DGkWMhHO.js → p-BULWzaBs.js} +2 -2
  61. package/dist/components/p-C-aCs6ID.js +2 -0
  62. package/dist/components/{p-Cw1bbiCG.js.map → p-C-aCs6ID.js.map} +1 -1
  63. package/dist/components/{p-BFMV9TJO.js → p-C5ecLNZA.js} +2 -2
  64. package/dist/components/p-C8U5BsJf.js +2 -0
  65. package/dist/components/p-C8U5BsJf.js.map +1 -0
  66. package/dist/components/{p-BUZLhvs1.js → p-COmqMfQo.js} +2 -2
  67. package/dist/components/{p-BAGTb6cZ.js → p-CeyoHpPn.js} +2 -2
  68. package/dist/components/{p-CdFnvBem.js → p-CiUciD5Z.js} +2 -2
  69. package/dist/components/p-CuwopElg.js.map +1 -1
  70. package/dist/components/p-DAM4CDXT.js +2 -0
  71. package/dist/components/{p-CzV4gIxd.js.map → p-DAM4CDXT.js.map} +1 -1
  72. package/dist/components/{p-DBJJiSP0.js → p-DMJEOAwP.js} +2 -2
  73. package/dist/components/{p-DGvzGGcu.js → p-DYAQVvOu.js} +2 -2
  74. package/dist/components/p-DyDkQ8H9.js +2 -0
  75. package/dist/components/p-DyDkQ8H9.js.map +1 -0
  76. package/dist/components/{p-bLCbOPYa.js → p-Dz3Ufmr4.js} +2 -2
  77. package/dist/components/{p-Doz2uwRv.js → p-fkQhr5s9.js} +2 -2
  78. package/dist/components/{p-BgaF83uh.js → p-oOKTL-yx.js} +2 -2
  79. package/dist/docs/components.json +277 -9
  80. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +4 -0
  81. package/dist/lib/utils/control-text.d.ts +2 -0
  82. package/dist/lib/utils/index.d.ts +1 -1
  83. package/dist/lib/utils/index.js.map +2 -2
  84. package/dist/mcp-data/registry/agent-activity.json +1 -1
  85. package/dist/mcp-data/registry/agent-response.json +1 -1
  86. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  87. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  88. package/dist/mcp-data/registry/attachment-list.json +1 -1
  89. package/dist/mcp-data/registry/avatar.json +1 -1
  90. package/dist/mcp-data/registry/badge.json +1 -1
  91. package/dist/mcp-data/registry/banner.json +1 -1
  92. package/dist/mcp-data/registry/bar-nav.json +1 -1
  93. package/dist/mcp-data/registry/bar-title.json +1 -1
  94. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  95. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  96. package/dist/mcp-data/registry/button-filled.json +21 -3
  97. package/dist/mcp-data/registry/button-unfilled.json +27 -7
  98. package/dist/mcp-data/registry/card-chart.json +1 -1
  99. package/dist/mcp-data/registry/card-overview.json +1 -1
  100. package/dist/mcp-data/registry/card-setting.json +1 -1
  101. package/dist/mcp-data/registry/chart-legend.json +1 -1
  102. package/dist/mcp-data/registry/chart.json +1 -1
  103. package/dist/mcp-data/registry/checkbox.json +1 -1
  104. package/dist/mcp-data/registry/chip.json +1 -1
  105. package/dist/mcp-data/registry/code-block.json +1 -1
  106. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  107. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  108. package/dist/mcp-data/registry/conversation-list.json +1 -1
  109. package/dist/mcp-data/registry/divider.json +1 -1
  110. package/dist/mcp-data/registry/empty-state.json +1 -1
  111. package/dist/mcp-data/registry/field.json +1 -1
  112. package/dist/mcp-data/registry/icon.json +2 -2
  113. package/dist/mcp-data/registry/input.json +1 -1
  114. package/dist/mcp-data/registry/loader.json +1 -1
  115. package/dist/mcp-data/registry/markdown.json +1 -1
  116. package/dist/mcp-data/registry/menu.json +1 -1
  117. package/dist/mcp-data/registry/message-actions.json +1 -1
  118. package/dist/mcp-data/registry/message-bubble.json +1 -1
  119. package/dist/mcp-data/registry/message-composer.json +1 -1
  120. package/dist/mcp-data/registry/message-scroller.json +1 -1
  121. package/dist/mcp-data/registry/message.json +1 -1
  122. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  123. package/dist/mcp-data/registry/mobile-header.json +1 -1
  124. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  125. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  126. package/dist/mcp-data/registry/modal.json +1 -1
  127. package/dist/mcp-data/registry/panel-nav.json +1 -1
  128. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  129. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  130. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  131. package/dist/mcp-data/registry/panel-tools.json +1 -1
  132. package/dist/mcp-data/registry/radio.json +1 -1
  133. package/dist/mcp-data/registry/registry.json +50 -17
  134. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  135. package/dist/mcp-data/registry/select.json +1 -1
  136. package/dist/mcp-data/registry/shell-app.json +1 -1
  137. package/dist/mcp-data/registry/shell-page.json +1 -1
  138. package/dist/mcp-data/registry/shell-tools.json +1 -1
  139. package/dist/mcp-data/registry/skeleton.json +1 -1
  140. package/dist/mcp-data/registry/slider.json +1 -1
  141. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  142. package/dist/mcp-data/registry/switch.json +1 -1
  143. package/dist/mcp-data/registry/tab-group.json +1 -1
  144. package/dist/mcp-data/registry/table.json +121 -20
  145. package/dist/mcp-data/registry/tag.json +23 -5
  146. package/dist/mcp-data/registry/text.json +1 -1
  147. package/dist/mcp-data/registry/toast.json +1 -1
  148. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  149. package/dist/mcp-data/registry/tooltip.json +1 -1
  150. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  151. package/dist/react/ds-table.d.ts +2 -1
  152. package/dist/react/ds-table.js +1 -0
  153. package/dist/styles/table.css +244 -26
  154. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +4 -0
  155. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +11 -1
  156. package/dist/types/components/Table/Table.d.ts +31 -23
  157. package/dist/types/components/Table/index.d.ts +1 -1
  158. package/dist/types/components/Table/table-cell-model.d.ts +44 -0
  159. package/dist/types/components/Table/table-layout-controller.d.ts +65 -0
  160. package/dist/types/components/Table/table-load-controller.d.ts +49 -0
  161. package/dist/types/components/Table/table-model.d.ts +25 -0
  162. package/dist/types/components/Table/table-render-model.d.ts +41 -0
  163. package/dist/types/components/Table/table-types.d.ts +23 -2
  164. package/dist/types/components/Tag/Tag.d.ts +3 -0
  165. package/dist/types/components.d.ts +84 -8
  166. package/dist/types/utils/control-text.d.ts +2 -0
  167. package/dist/types/utils/index.d.ts +1 -1
  168. package/package.json +3 -3
  169. package/dist/components/p-BEEYhbIb.js.map +0 -1
  170. package/dist/components/p-C3Z01Glr.js.map +0 -1
  171. package/dist/components/p-Cw1bbiCG.js +0 -2
  172. package/dist/components/p-CzV4gIxd.js +0 -2
  173. package/dist/components/p-D-F8eyXy.js +0 -2
  174. package/dist/components/p-D-F8eyXy.js.map +0 -1
  175. package/dist/components/p-DumWT7NN.js +0 -2
  176. package/dist/components/p-DumWT7NN.js.map +0 -1
  177. /package/dist/components/{p-DBchq8Zw.js.map → p-B6linhwY.js.map} +0 -0
  178. /package/dist/components/{p-BydCwx7x.js.map → p-BJVzrR_P.js.map} +0 -0
  179. /package/dist/components/{p-Br0fwWUG.js.map → p-BL0JHLJp.js.map} +0 -0
  180. /package/dist/components/{p-BNHPCCw8.js.map → p-BPS17WvI.js.map} +0 -0
  181. /package/dist/components/{p-CSlTJWFG.js.map → p-BSdAFIcG.js.map} +0 -0
  182. /package/dist/components/{p-DGkWMhHO.js.map → p-BULWzaBs.js.map} +0 -0
  183. /package/dist/components/{p-BFMV9TJO.js.map → p-C5ecLNZA.js.map} +0 -0
  184. /package/dist/components/{p-BUZLhvs1.js.map → p-COmqMfQo.js.map} +0 -0
  185. /package/dist/components/{p-BAGTb6cZ.js.map → p-CeyoHpPn.js.map} +0 -0
  186. /package/dist/components/{p-CdFnvBem.js.map → p-CiUciD5Z.js.map} +0 -0
  187. /package/dist/components/{p-DBJJiSP0.js.map → p-DMJEOAwP.js.map} +0 -0
  188. /package/dist/components/{p-DGvzGGcu.js.map → p-DYAQVvOu.js.map} +0 -0
  189. /package/dist/components/{p-bLCbOPYa.js.map → p-Dz3Ufmr4.js.map} +0 -0
  190. /package/dist/components/{p-Doz2uwRv.js.map → p-fkQhr5s9.js.map} +0 -0
  191. /package/dist/components/{p-BgaF83uh.js.map → p-oOKTL-yx.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
- import type { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableGroup, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from './table-types';
2
+ import type { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableGroup, TableGroupCollapseChangeDetail, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from './table-types';
3
3
  export declare class Table {
4
4
  /** Stable column definitions. Assign through JavaScript. */
5
5
  columns: TableColumn[];
@@ -11,9 +11,20 @@ export declare class Table {
11
11
  grouping: TableGroupingState | null;
12
12
  /** Controlled member-row sort state. */
13
13
  sort: TableSortState | null;
14
- /** Required accessible table name, rendered as a native caption. */
14
+ /** Controlled collapsed group identities. Groups not listed remain expanded. */
15
+ collapsedGroupIds: string[];
16
+ /** Required accessible table name, retained as a native caption. */
15
17
  caption: string;
18
+ /** Shows a matching presentational title bar above the native table frame. */
16
19
  captionVisibility: TableCaptionVisibility;
20
+ /**
21
+ * Optional result summary footer. When both `displayedCount` and `totalCount`
22
+ * are finite numbers, the table shows “Displaying {displayed} of {total}”.
23
+ */
24
+ displayedCount: number | undefined;
25
+ totalCount: number | undefined;
26
+ /** Supports {displayed} and {total} placeholders. */
27
+ resultSummaryLabel: string;
17
28
  stickyHeader: boolean;
18
29
  /** Maximum scroll-region height. Numbers resolve to CSS pixels. */
19
30
  maxHeight: string | number | undefined;
@@ -50,6 +61,7 @@ export declare class Table {
50
61
  rowsLoadedLabel: string;
51
62
  dsSortChange: EventEmitter<TableSortChangeDetail>;
52
63
  dsGroupingChange: EventEmitter<TableGroupingChangeDetail>;
64
+ dsGroupCollapseChange: EventEmitter<TableGroupCollapseChangeDetail>;
53
65
  dsSelectionChange: EventEmitter<TableSelectionChangeDetail>;
54
66
  dsLoadMore: EventEmitter<TableLoadMoreDetail>;
55
67
  dsCellAction: EventEmitter<TableCellActionDetail>;
@@ -57,21 +69,19 @@ export declare class Table {
57
69
  private overflowStart;
58
70
  private overflowEnd;
59
71
  private scrollable;
60
- private intersectionSupported;
61
72
  private announcement;
62
73
  private viewportEl;
74
+ private frameEl;
75
+ private interactiveHeadEl;
76
+ private collapseAllOverlayEl;
63
77
  private stickyHeaderTableEl;
64
78
  private tableEl;
65
79
  private sentinelEl;
66
- private resizeObserver;
67
- private intersectionObserver;
68
- private observedSentinel;
69
- private requestPending;
70
- private requestedRowCount;
71
- private previousLoadedRowCount;
72
80
  private previousModelWarning;
73
81
  private hasLoaded;
74
- private reconnectFrame;
82
+ private renderedModel;
83
+ private readonly layoutController;
84
+ private readonly loadController;
75
85
  componentWillLoad(): void;
76
86
  componentDidLoad(): void;
77
87
  componentDidRender(): void;
@@ -87,40 +97,38 @@ export declare class Table {
87
97
  private get grouped();
88
98
  private get selectable();
89
99
  private get documentStickyHeader();
90
- private get loadedRows();
91
- private get hasData();
92
- private get totalColumns();
93
- private get selectedSet();
94
- private get selectionState();
100
+ private currentLoadedRows;
101
+ private currentLoadedRowCount;
102
+ private createRenderModel;
95
103
  private get resolvedMaxHeight();
96
- private get tableStyle();
97
104
  private warnModelIssues;
98
- private connectViewportObserver;
99
- private syncOverflow;
100
- private syncStickyHeaderPosition;
101
- private resetLoadRequest;
102
- private disconnectIntersectionObserver;
103
- private connectIntersectionObserver;
104
- private requestLoadMore;
105
105
  private emitSort;
106
106
  private sortButtonLabel;
107
107
  private emitRowSelection;
108
108
  private emitAllSelection;
109
+ private emitGroupSelection;
109
110
  private rowEventOwnsActivation;
110
111
  private emitRowActivation;
111
112
  private handleRowKeydown;
112
113
  private renderSelectionControl;
113
114
  private renderStickyEdge;
115
+ private renderCollapseAllButton;
116
+ private renderFloatingCollapseAll;
114
117
  private renderColumnHeader;
115
118
  private renderColgroup;
116
119
  private renderHeader;
117
120
  private renderCellValue;
118
121
  private renderRow;
122
+ private emitGroupCollapse;
123
+ private emitAllGroupsCollapse;
119
124
  private renderDataBodies;
120
125
  private renderSkeletonBody;
121
126
  private renderStateBody;
122
127
  private renderLazyBody;
123
128
  private renderDocumentStickyHeader;
129
+ private get resultSummary();
130
+ private renderResultFooter;
131
+ private renderCaptionBar;
124
132
  render(): any;
125
133
  }
126
134
  //# sourceMappingURL=Table.d.ts.map
@@ -1,2 +1,2 @@
1
- export type { TableCaptionVisibility, TableCellAlign, TableCellAction, TableCellActionDetail, TableCellBlank, TableCellEmpty, TableCellIcon, TableCellImage, TableCellPrimaryText, TableCellText, TableCellTag, TableCellTagVariant, TableCellValue, TableColumn, TableColumnSticky, TableColumnWidth, TableGroup, TableHeaderSegment, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortDirection, TableSortState, } from './table-types';
1
+ export type { TableCaptionVisibility, TableCellAlign, TableCellAction, TableCellActionDetail, TableCellBlank, TableCellEmpty, TableCellIcon, TableCellImage, TableCellPrimaryText, TableCellText, TableCellTag, TableCellTagVariant, TableCellValue, TableColumn, TableColumnSticky, TableColumnWidth, TableGroup, TableGroupCollapseChangeDetail, TableGroupIntent, TableHeaderSegment, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortDirection, TableSortState, } from './table-types';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,44 @@
1
+ import type { TableCellAction, TableCellBlank, TableCellEmpty, TableCellIcon, TableCellImage, TableCellTag, TableCellTagVariant, TableCellValue, TableColumn } from './table-types';
2
+ export interface ResolvedTableCellText {
3
+ primary: string | number;
4
+ secondary?: string | number;
5
+ wrap?: boolean;
6
+ fontFeature?: 'normal' | 'tabular-nums';
7
+ }
8
+ export type TableCellPresentation = {
9
+ kind: 'blank';
10
+ cellType: 'blank';
11
+ value: TableCellBlank;
12
+ } | {
13
+ kind: 'empty';
14
+ cellType: 'empty';
15
+ value: TableCellEmpty | null | undefined;
16
+ } | {
17
+ kind: 'icon';
18
+ cellType: 'icon';
19
+ value: TableCellIcon;
20
+ } | {
21
+ kind: 'image';
22
+ cellType: 'image';
23
+ value: TableCellImage;
24
+ } | {
25
+ kind: 'action';
26
+ cellType: 'action';
27
+ value: TableCellAction;
28
+ } | {
29
+ kind: 'tag';
30
+ cellType: 'tag';
31
+ value: TableCellTag;
32
+ variant: TableCellTagVariant;
33
+ } | {
34
+ kind: 'text';
35
+ cellType: 'text' | 'primary-text';
36
+ value: ResolvedTableCellText;
37
+ primaryText: boolean;
38
+ singleLine: boolean;
39
+ variant: 'single' | 'multi' | 'primary-pair';
40
+ wraps: boolean;
41
+ };
42
+ /** Resolve a cell's semantic and visual recipe once for both markup and classes. */
43
+ export declare function resolveTableCellPresentation(value: TableCellValue, column: TableColumn): TableCellPresentation;
44
+ //# sourceMappingURL=table-cell-model.d.ts.map
@@ -0,0 +1,65 @@
1
+ export interface TableLayoutElements {
2
+ viewport: HTMLElement | null;
3
+ table: HTMLTableElement | null;
4
+ stickyHeaderTable: HTMLTableElement | null;
5
+ collapseAllOverlay: HTMLElement | null;
6
+ frame: HTMLElement | null;
7
+ interactiveHead: HTMLTableSectionElement | null;
8
+ }
9
+ export interface TableLayoutMode {
10
+ documentStickyHeader: boolean;
11
+ floatingCollapseAll: boolean;
12
+ }
13
+ export interface TableOverflowState {
14
+ start: boolean;
15
+ end: boolean;
16
+ scrollable: boolean;
17
+ }
18
+ export interface TableLayoutControllerOptions {
19
+ elements: () => TableLayoutElements;
20
+ mode: () => TableLayoutMode;
21
+ overflowChanged: (state: TableOverflowState) => void;
22
+ }
23
+ export interface TableLayoutMetricInput {
24
+ viewportInlineSize: number;
25
+ viewportBlockSize: number;
26
+ scrollInlineSize: number;
27
+ scrollBlockSize: number;
28
+ scrollInlineOffset: number;
29
+ tableInlineSize: number;
30
+ collapseHeadBlockStart?: number;
31
+ collapseFrameBlockStart?: number;
32
+ }
33
+ export interface TableLayoutMetrics {
34
+ visibleInlineSize: number;
35
+ overflow: TableOverflowState;
36
+ inlineOffset: number;
37
+ maxInlineOffset: number;
38
+ collapseBlockOffset: number | null;
39
+ }
40
+ /** Pure geometry resolution shared by the controller and focused tests. */
41
+ export declare function resolveTableLayoutMetrics(input: TableLayoutMetricInput): TableLayoutMetrics;
42
+ /**
43
+ * Owns table viewport observation. It resolves newly rendered geometry
44
+ * immediately so the first paint has the correct viewport-width chrome, then
45
+ * batches observer-driven scroll and resize reads/writes into one animation frame.
46
+ * The component remains responsible only for refs and reactive overflow state.
47
+ */
48
+ export declare class TableLayoutController {
49
+ private readonly options;
50
+ private connected;
51
+ private connectedViewport;
52
+ private observedTable;
53
+ private resizeObserver;
54
+ private frame;
55
+ private overflow;
56
+ constructor(options: TableLayoutControllerOptions);
57
+ connect(): void;
58
+ disconnect(): void;
59
+ /** Reconcile newly rendered refs, observers, and pending geometry. */
60
+ refresh(): void;
61
+ private schedule;
62
+ private sync;
63
+ private setProperty;
64
+ }
65
+ //# sourceMappingURL=table-layout-controller.d.ts.map
@@ -0,0 +1,49 @@
1
+ import type { TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason } from './table-types';
2
+ export interface TableLoadControllerState {
3
+ lazyLoading: boolean;
4
+ loadMoreMode: TableLoadMoreMode;
5
+ hasMore: boolean;
6
+ loadingMore: boolean;
7
+ loadMoreError: string | undefined;
8
+ loadIdentity: string | number;
9
+ loadMoreThreshold: number;
10
+ containedScroll: boolean;
11
+ loadingMoreLabel: string;
12
+ endOfResultsLabel: string;
13
+ rowsLoadedLabel: string;
14
+ loadedRowCount: number;
15
+ viewport: HTMLElement | null;
16
+ sentinel: HTMLElement | null;
17
+ }
18
+ export interface TableLoadControllerOptions {
19
+ state: () => TableLoadControllerState;
20
+ announce: (message: string) => void;
21
+ request: (detail: TableLoadMoreDetail) => void;
22
+ }
23
+ /** Owns incremental-loading request guards, announcements, and observation. */
24
+ export declare class TableLoadController {
25
+ private readonly options;
26
+ readonly intersectionSupported: boolean;
27
+ private connected;
28
+ private intersectionObserver;
29
+ private observedSentinel;
30
+ private requestPending;
31
+ private requestedRowCount;
32
+ private previousLoadedRowCount;
33
+ constructor(options: TableLoadControllerOptions);
34
+ initialize(): void;
35
+ connect(): void;
36
+ disconnect(): void;
37
+ refresh(): void;
38
+ structureChanged(): void;
39
+ dataChanged(): void;
40
+ identityChanged(): void;
41
+ configurationChanged(): void;
42
+ loadingChanged(loading: boolean): void;
43
+ errorChanged(error: string | undefined): void;
44
+ hasMoreChanged(hasMore: boolean, hadMore: boolean): void;
45
+ request(reason: TableLoadMoreReason): void;
46
+ private resetRequest;
47
+ private disconnectObserver;
48
+ }
49
+ //# sourceMappingURL=table-load-controller.d.ts.map
@@ -17,13 +17,38 @@ export declare function tableCellPrimary(value: TableCellValue): string | number
17
17
  export declare function tableRowSelectionLabel(row: TableRow, columns: TableColumn[]): string;
18
18
  export declare function nextTableSortState(current: TableSortState | null | undefined, columnId: string): TableSortState;
19
19
  export declare function nextTableGroupOrder(grouping: TableGroupingState): TableGroupingState;
20
+ export declare function toggleTableGroupCollapsed(collapsedGroupIds: string[], groupId: string): string[];
21
+ export declare function nextTableGroupsCollapsed(collapsedGroupIds: string[], groupIds: string[]): string[];
22
+ /** Host for grouped collapse-all: the trailing action lane or a scrollport-owned overlay. */
23
+ export type TableCollapseAllHost = {
24
+ columnId: string;
25
+ mode: 'action';
26
+ } | {
27
+ mode: 'floating';
28
+ };
29
+ export declare function tableCollapseAllHost(columns: TableColumn[]): TableCollapseAllHost | undefined;
20
30
  export declare function clampTableColumnSize(column: TableColumn): number | undefined;
21
31
  export declare function tableColumnSize(column: TableColumn): string | undefined;
32
+ /**
33
+ * When every column has an explicit width, one ordinary lane must absorb spare
34
+ * table width so fixed selection and action lanes are not expanded by the
35
+ * native fixed-table layout algorithm.
36
+ */
37
+ export declare function tableFlexibleColumnId(columns: TableColumn[]): string | undefined;
22
38
  export declare function tableExplicitMinWidth(columns: TableColumn[]): string | undefined;
23
39
  export declare function tableRows(rows: TableRow[], groups: TableGroup[], grouped: boolean): TableRow[];
24
40
  export declare function deriveTableSelectionState(rows: TableRow[], selectedRowIds: readonly string[]): TableSelectionState;
25
41
  export declare function toggleTableRowSelection(selectedRowIds: readonly string[], row: TableRow): string[];
26
42
  export declare function toggleAllLoadedTableRows(selectedRowIds: readonly string[], loadedRows: TableRow[]): string[];
43
+ /** Toggle every selectable loaded row that belongs to a group. */
44
+ export declare function toggleTableGroupSelection(selectedRowIds: readonly string[], groupRows: TableRow[]): string[];
27
45
  export declare function resolvedTableGroupCount(group: TableGroup): number;
46
+ export declare const TABLE_GROUP_INTENTS: readonly ["brand", "neutral", "negative", "warning", "caution", "positive"];
47
+ export declare function isTableGroupIntent(value: unknown): value is (typeof TABLE_GROUP_INTENTS)[number];
48
+ export declare function tableGroupIntentClass(intent: (typeof TABLE_GROUP_INTENTS)[number] | undefined): string | undefined;
49
+ /** Title color for an intentful group label; defaults to primary when unset. */
50
+ export declare function tableGroupLabelColor(intent: (typeof TABLE_GROUP_INTENTS)[number] | undefined): 'primary' | 'brand' | 'negative' | 'warning' | 'caution' | 'positive' | `var(--${string})`;
51
+ /** Formats the optional table result footer. Returns null when either count is missing. */
52
+ export declare function formatTableResultSummary(displayed: number | null | undefined, total: number | null | undefined, label?: string, locale?: string): string | null;
28
53
  export declare function tableModelIssues(columns: TableColumn[], rows: TableRow[], groups: TableGroup[], grouped: boolean): string[];
29
54
  //# sourceMappingURL=table-model.d.ts.map
@@ -0,0 +1,41 @@
1
+ import { tableGroupLabelColor, type TableCollapseAllHost, type TableSelectionState } from './table-model';
2
+ import type { TableColumn, TableGroup, TableGroupIntent, TableRow, TableSelectionMode } from './table-types';
3
+ export interface TableGroupRenderModel {
4
+ group: TableGroup;
5
+ count: number;
6
+ countLabel: string;
7
+ countIntent: TableGroupIntent;
8
+ intent: TableGroupIntent | undefined;
9
+ intentClass: string | undefined;
10
+ labelColor: ReturnType<typeof tableGroupLabelColor>;
11
+ collapsed: boolean;
12
+ selection: TableSelectionState | null;
13
+ }
14
+ export interface TableRenderModel {
15
+ grouped: boolean;
16
+ selectable: boolean;
17
+ loadedRows: TableRow[];
18
+ hasData: boolean;
19
+ selectedRowIds: ReadonlySet<string>;
20
+ selection: TableSelectionState;
21
+ collapsedGroupIds: ReadonlySet<string>;
22
+ groups: TableGroupRenderModel[];
23
+ totalColumns: number;
24
+ allGroupsCollapsed: boolean;
25
+ showCollapseAll: boolean;
26
+ collapseAllHost: TableCollapseAllHost | undefined;
27
+ flexibleColumnId: string | undefined;
28
+ tableStyle: Record<string, string> | undefined;
29
+ }
30
+ export interface TableRenderModelInput {
31
+ columns: TableColumn[];
32
+ rows: TableRow[];
33
+ groups: TableGroup[];
34
+ grouped: boolean;
35
+ selectionMode: TableSelectionMode;
36
+ selectedRowIds: string[];
37
+ collapsedGroupIds: string[];
38
+ }
39
+ /** Create one immutable snapshot of all derived state consumed during a render. */
40
+ export declare function createTableRenderModel(input: TableRenderModelInput): TableRenderModel;
41
+ //# sourceMappingURL=table-render-model.d.ts.map
@@ -8,6 +8,8 @@ export type TableCaptionVisibility = 'visible' | 'hidden';
8
8
  export type TableLoadMoreMode = 'auto' | 'manual';
9
9
  export type TableLoadMoreReason = 'auto' | 'manual' | 'retry';
10
10
  export type TableColumnWidth = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
11
+ /** Semantic color for a group section header (faint surface + bold title). */
12
+ export type TableGroupIntent = 'brand' | 'neutral' | 'negative' | 'warning' | 'caution' | 'positive';
11
13
  /** Independently sortable label within a compound column header. */
12
14
  export interface TableHeaderSegment {
13
15
  label: string;
@@ -135,6 +137,11 @@ export interface TableColumn {
135
137
  wrap?: boolean;
136
138
  /** Pin one application column to either inline edge during horizontal scrolling. */
137
139
  sticky?: TableColumnSticky;
140
+ /**
141
+ * Declare a trailing application-action lane. Action columns keep fixed
142
+ * geometry and may host grouped table-level controls in their header.
143
+ */
144
+ kind?: 'data' | 'action';
138
145
  }
139
146
  export interface TableRow {
140
147
  /** Stable identity, unique across all groups. */
@@ -156,8 +163,13 @@ export interface TableGroup {
156
163
  value?: string | number;
157
164
  /** Total server-side member count; may exceed the currently loaded row count. */
158
165
  totalCount?: number;
159
- /** Optional localized, display-ready count such as “18 vehicles”. */
166
+ /** Optional localized accessible count phrase such as “18 vehicles”; the visible tag remains numeric. */
160
167
  countLabel?: string;
168
+ /**
169
+ * Optional semantic intent for the group section header. Applies a faint
170
+ * intent background and bold intent title color.
171
+ */
172
+ intent?: TableGroupIntent;
161
173
  rows: TableRow[];
162
174
  }
163
175
  export interface TableSortChangeDetail {
@@ -168,8 +180,10 @@ export interface TableGroupingChangeDetail {
168
180
  }
169
181
  export interface TableSelectionChangeDetail {
170
182
  selectedRowIds: string[];
171
- scope: 'row' | 'all-loaded';
183
+ scope: 'row' | 'all-loaded' | 'group';
172
184
  changedRowId?: string;
185
+ /** Present when scope is `group`. */
186
+ groupId?: string;
173
187
  selected?: boolean;
174
188
  }
175
189
  export interface TableLoadMoreDetail {
@@ -182,6 +196,13 @@ export interface TableCellActionDetail {
182
196
  rowId: string;
183
197
  columnId: string;
184
198
  }
199
+ export interface TableGroupCollapseChangeDetail {
200
+ scope: 'group' | 'all';
201
+ /** Present when a single group was toggled. */
202
+ groupId?: string;
203
+ collapsed: boolean;
204
+ collapsedGroupIds: string[];
205
+ }
185
206
  export interface TableRowActivateDetail {
186
207
  rowId: string;
187
208
  }
@@ -1,4 +1,5 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
+ import { type ControlInsetDepth } from '../../utils';
2
3
  export type TagIntent = 'neutral' | 'brand' | 'ai' | 'negative' | 'warning' | 'caution' | 'positive';
3
4
  export type TagContrast = 'strong' | 'bold' | 'medium' | 'faint';
4
5
  export type TagSize = 'md' | 'sm' | 'xs';
@@ -11,6 +12,8 @@ export declare class Tag {
11
12
  size: TagSize;
12
13
  /** Use the reduced outer geometry when nested inside a control of the same size. */
13
14
  isInset: boolean;
15
+ /** Single removes 4px overall; double removes 8px overall (xs stays single). */
16
+ insetDepth: ControlInsetDepth;
14
17
  rounded: boolean;
15
18
  maxWidth: string | number | undefined;
16
19
  /** Render a menu-trigger button with a fixed ChevronUpDown suffix. */