@ds-mo/ui 13.15.0 → 13.16.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 (104) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +3 -2
  3. package/dist/agent.json +59 -12
  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-shell-page.d.ts +1 -1
  7. package/dist/angular/ds-shell-page.js +3 -3
  8. package/dist/angular/ds-table.d.ts +1 -1
  9. package/dist/angular/ds-table.js +3 -3
  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-card-overview.js +1 -1
  17. package/dist/components/ds-chart.js +1 -1
  18. package/dist/components/ds-code-block.js +1 -1
  19. package/dist/components/ds-conversation-list.js +1 -1
  20. package/dist/components/ds-markdown.js +1 -1
  21. package/dist/components/ds-menu.js +1 -1
  22. package/dist/components/ds-message-actions.js +1 -1
  23. package/dist/components/ds-message-composer.js +1 -1
  24. package/dist/components/ds-message-scroller.js +1 -1
  25. package/dist/components/ds-mobile-header.js +1 -1
  26. package/dist/components/ds-mobile-section-switcher.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-panel-nav.js +1 -1
  30. package/dist/components/ds-panel-tool-header.js +1 -1
  31. package/dist/components/ds-panel-tool-search.js +1 -1
  32. package/dist/components/ds-panel-tools.js +1 -1
  33. package/dist/components/ds-scroll-overlay.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-page.js +1 -1
  38. package/dist/components/ds-shell-tools.js +1 -1
  39. package/dist/components/ds-table.js +1 -1
  40. package/dist/components/ds-table.js.map +1 -1
  41. package/dist/components/ds-toast.js +1 -1
  42. package/dist/components/ds-tooltip.js +1 -1
  43. package/dist/components/{p-DgIRyJoc.js → p-B53Vpuqq.js} +2 -2
  44. package/dist/components/{p-fKwbYrhi.js → p-B94M62Tx.js} +2 -2
  45. package/dist/components/p-BAAjiAIF.js +2 -0
  46. package/dist/components/p-BAAjiAIF.js.map +1 -0
  47. package/dist/components/{p-ClHpIZg0.js → p-BMAZWEDa.js} +2 -2
  48. package/dist/components/p-BMAZWEDa.js.map +1 -0
  49. package/dist/components/p-BMc0DE59.js +2 -0
  50. package/dist/components/p-BMc0DE59.js.map +1 -0
  51. package/dist/components/{p-GSnB-sa7.js → p-BPbE-Kbl.js} +2 -2
  52. package/dist/components/{p-CCkptWPj.js → p-BxR8omPQ.js} +2 -2
  53. package/dist/components/{p-CY19gMiz.js → p-CJq3n5kA.js} +2 -2
  54. package/dist/components/{p-IhToA4m4.js → p-CMbcRN92.js} +2 -2
  55. package/dist/components/{p-QDcUAz9m.js → p-CnIvWEVm.js} +2 -2
  56. package/dist/components/{p-DWjE0VNn.js → p-D5sIwLjA.js} +2 -2
  57. package/dist/components/p-D9CDoQBx.js +2 -0
  58. package/dist/components/{p-BLaqjUWu.js.map → p-D9CDoQBx.js.map} +1 -1
  59. package/dist/components/{p-CekGwihQ.js → p-D9FdOR_m.js} +2 -2
  60. package/dist/components/{p-D5aUkdTw.js → p-Dbobj7DI.js} +2 -2
  61. package/dist/components/{p-DQXzTV8N.js → p-DrvEhJhO.js} +2 -2
  62. package/dist/components/{p-BH_lVRgp.js → p-DyqLVdJp.js} +2 -2
  63. package/dist/components/{p-DWNhyLp2.js → p-m5CSrx_s.js} +2 -2
  64. package/dist/docs/components.json +301 -2
  65. package/dist/lib/components/ShellApp/shell-app-types.d.ts +12 -0
  66. package/dist/lib/utils/index.js +41 -4
  67. package/dist/lib/utils/index.js.map +2 -2
  68. package/dist/lib/utils/resolve-css-length-px.d.ts +1 -1
  69. package/dist/mcp-data/registry/bar-title.json +38 -3
  70. package/dist/mcp-data/registry/registry.json +58 -11
  71. package/dist/mcp-data/registry/shell-app.json +3 -3
  72. package/dist/mcp-data/registry/shell-page.json +77 -4
  73. package/dist/mcp-data/registry/table.json +88 -12
  74. package/dist/styles/table.css +161 -10
  75. package/dist/types/components/BarTitle/BarTitle.d.ts +5 -0
  76. package/dist/types/components/ShellApp/shell-app-types.d.ts +12 -0
  77. package/dist/types/components/ShellPage/ShellPage.d.ts +9 -0
  78. package/dist/types/components/Table/Table.d.ts +30 -0
  79. package/dist/types/components/Table/table-cell-model.d.ts +2 -0
  80. package/dist/types/components/Table/table-layout-controller.d.ts +6 -0
  81. package/dist/types/components/Table/table-types.d.ts +3 -0
  82. package/dist/types/components/Table/table-viewport-fit-controller.d.ts +53 -0
  83. package/dist/types/components.d.ts +102 -0
  84. package/dist/types/utils/resolve-css-length-px.d.ts +1 -1
  85. package/package.json +1 -1
  86. package/dist/components/p-BJMRBHKW.js +0 -2
  87. package/dist/components/p-BJMRBHKW.js.map +0 -1
  88. package/dist/components/p-BLaqjUWu.js +0 -2
  89. package/dist/components/p-ClHpIZg0.js.map +0 -1
  90. package/dist/components/p-DyVAWGL9.js +0 -2
  91. package/dist/components/p-DyVAWGL9.js.map +0 -1
  92. /package/dist/components/{p-DgIRyJoc.js.map → p-B53Vpuqq.js.map} +0 -0
  93. /package/dist/components/{p-fKwbYrhi.js.map → p-B94M62Tx.js.map} +0 -0
  94. /package/dist/components/{p-GSnB-sa7.js.map → p-BPbE-Kbl.js.map} +0 -0
  95. /package/dist/components/{p-CCkptWPj.js.map → p-BxR8omPQ.js.map} +0 -0
  96. /package/dist/components/{p-CY19gMiz.js.map → p-CJq3n5kA.js.map} +0 -0
  97. /package/dist/components/{p-IhToA4m4.js.map → p-CMbcRN92.js.map} +0 -0
  98. /package/dist/components/{p-QDcUAz9m.js.map → p-CnIvWEVm.js.map} +0 -0
  99. /package/dist/components/{p-DWjE0VNn.js.map → p-D5sIwLjA.js.map} +0 -0
  100. /package/dist/components/{p-CekGwihQ.js.map → p-D9FdOR_m.js.map} +0 -0
  101. /package/dist/components/{p-D5aUkdTw.js.map → p-Dbobj7DI.js.map} +0 -0
  102. /package/dist/components/{p-DQXzTV8N.js.map → p-DrvEhJhO.js.map} +0 -0
  103. /package/dist/components/{p-BH_lVRgp.js.map → p-DyqLVdJp.js.map} +0 -0
  104. /package/dist/components/{p-DWNhyLp2.js.map → p-m5CSrx_s.js.map} +0 -0
@@ -15,6 +15,7 @@
15
15
  var(--dimension-space-075) - var(--dimension-space-025)
16
16
  );
17
17
  --_table-cell-track-label-inset: var(--dimension-space-025);
18
+ --_table-caption-bar-block-size: var(--dimension-size-600);
18
19
  --_table-image-block-size: calc(
19
20
  var(--dimension-size-800) - var(--dimension-space-200)
20
21
  );
@@ -69,6 +70,25 @@
69
70
  user-select: none;
70
71
  }
71
72
 
73
+ :where(.ds-table--bounded) {
74
+ display: grid;
75
+ grid-template-rows: auto minmax(0, 1fr) auto;
76
+ min-block-size: 0;
77
+ block-size: 100%;
78
+ }
79
+
80
+ :where(.ds-table--viewport-fit) {
81
+ block-size: var(--_table-viewport-fit-current-block-size, 100%);
82
+ min-block-size: var(--_table-viewport-fit-current-block-size, 100%);
83
+ }
84
+
85
+ :where(.ds-table--bounded .ds-table__frame),
86
+ :where(.ds-table--bounded .ds-table__viewport) {
87
+ min-block-size: 0;
88
+ block-size: 100%;
89
+ max-block-size: none;
90
+ }
91
+
72
92
  :where(.ds-table__frame) {
73
93
  position: relative;
74
94
  timeline-scope: --ds-table-inline-scroll;
@@ -81,6 +101,15 @@
81
101
  background: var(--_table-surface);
82
102
  }
83
103
 
104
+ /*
105
+ * Contained tables own a hard visual viewport. Clip table-owned overlays and
106
+ * elastic-scroll paint to that frame without introducing another scrollport;
107
+ * the nested viewport remains the only element that scrolls.
108
+ */
109
+ :where(.ds-table--contained-scroll .ds-table__frame) {
110
+ overflow: clip;
111
+ }
112
+
84
113
  :where(.ds-table__viewport) {
85
114
  box-sizing: border-box;
86
115
  max-block-size: var(--ds-table-max-block-size, none);
@@ -104,6 +133,14 @@
104
133
  outline-offset: calc(-1 * var(--dimension-stroke-width-025));
105
134
  }
106
135
 
136
+ :where(.ds-table--viewport-fit-pending .ds-table__viewport) {
137
+ overflow-y: hidden;
138
+ }
139
+
140
+ :where(.ds-table--viewport-fit-settled .ds-table__viewport) {
141
+ overscroll-behavior-y: none;
142
+ }
143
+
107
144
  :where(.ds-table__table) {
108
145
  box-sizing: border-box;
109
146
  inline-size: 100%;
@@ -132,24 +169,87 @@
132
169
  display: flex;
133
170
  align-items: center;
134
171
  inline-size: 100%;
135
- min-block-size: var(--dimension-size-600);
136
- block-size: var(--dimension-size-600);
137
- padding-inline: var(--_table-cell-padding-inline);
172
+ min-block-size: var(--_table-caption-bar-block-size);
173
+ block-size: var(--_table-caption-bar-block-size);
174
+ padding: var(--dimension-space-100);
175
+ gap: var(--dimension-space-100);
138
176
  background: var(--_table-surface);
139
177
  text-align: start;
140
178
  }
141
179
 
142
180
  :where(.ds-table__caption-bar) {
143
- border-block-end: var(--dimension-stroke-width-012) solid var(--_table-border);
181
+ border-start-start-radius: var(--_table-radius);
182
+ border-start-end-radius: var(--_table-radius);
183
+ border-block-end: var(--dimension-stroke-width-012) solid var(--_table-column-border);
144
184
  color: var(--color-foreground-primary);
145
185
  }
146
186
 
187
+ :where(.ds-table--caption-visible .ds-table__frame),
188
+ :where(.ds-table--caption-visible .ds-table__viewport) {
189
+ border-start-start-radius: 0;
190
+ border-start-end-radius: 0;
191
+ }
192
+
193
+ :where(.ds-table__bar-leading),
194
+ :where(.ds-table__bar-trailing) {
195
+ display: flex;
196
+ align-items: center;
197
+ flex: 0 0 auto;
198
+ min-inline-size: 0;
199
+ gap: var(--dimension-space-100);
200
+ }
201
+
202
+ :where(.ds-table__bar-trailing) {
203
+ margin-inline-start: auto;
204
+ }
205
+
206
+ :where(.ds-table__bar-leading[hidden], .ds-table__bar-trailing[hidden]) {
207
+ display: none;
208
+ }
209
+
210
+ :where(.ds-table__bar-copy) {
211
+ display: flex;
212
+ flex: 1 1 auto;
213
+ align-items: center;
214
+ box-sizing: border-box;
215
+ min-inline-size: 0;
216
+ max-inline-size: 100%;
217
+ padding: var(--ds-control-padding-inline, var(--dimension-space-075));
218
+ }
219
+
220
+ :where(.ds-table__bar-copy > slot) {
221
+ display: contents;
222
+ }
223
+
224
+ :where(.ds-table__bar-copy > slot)::slotted(*) {
225
+ flex: 1 1 auto;
226
+ min-inline-size: 0;
227
+ max-inline-size: 100%;
228
+ }
229
+
230
+ :where(.ds-table__bar-text) {
231
+ display: inline-flex;
232
+ align-items: center;
233
+ box-sizing: border-box;
234
+ min-inline-size: 0;
235
+ block-size: var(--ds-control-height, var(--dimension-size-400));
236
+ padding-inline: var(--ds-control-label-inset, var(--dimension-space-025));
237
+ }
238
+
147
239
  /* Optional controlled result summary. */
148
240
  :where(.ds-table__footer) {
149
- border-block-start: var(--dimension-stroke-width-012) solid var(--_table-border);
241
+ border-end-start-radius: var(--_table-radius);
242
+ border-end-end-radius: var(--_table-radius);
243
+ border-block-start: var(--dimension-stroke-width-012) solid var(--_table-column-border);
150
244
  color: var(--color-foreground-secondary);
151
245
  }
152
246
 
247
+ :where(.ds-table--footer-visible .ds-table__frame),
248
+ :where(.ds-table--footer-visible .ds-table__viewport) {
249
+ border-end-start-radius: 0;
250
+ border-end-end-radius: 0;
251
+ }
252
+
153
253
  :where(.ds-table__selection-column) {
154
254
  inline-size: var(--_table-selection-column-inline-size);
155
255
  width: var(--_table-selection-column-inline-size);
@@ -170,13 +270,13 @@
170
270
  :where(.ds-table--contained-sticky-header .ds-table__head) {
171
271
  position: sticky;
172
272
  inset-block-start: 0;
173
- z-index: 2;
273
+ z-index: 6;
174
274
  }
175
275
 
176
276
  :where(.ds-table__document-sticky-header) {
177
277
  position: sticky;
178
278
  inset-block-start: var(--ds-table-sticky-header-offset, 0);
179
- z-index: 3;
279
+ z-index: 6;
180
280
  block-size: var(--_table-header-min-block-size);
181
281
  margin-block-end: calc(-1 * var(--_table-header-min-block-size));
182
282
  max-inline-size: 100%;
@@ -185,6 +285,38 @@
185
285
  background: var(--_table-header-surface);
186
286
  }
187
287
 
288
+ :where(.ds-table--document-sticky-header.ds-table--caption-visible > .ds-table__caption-bar) {
289
+ position: sticky;
290
+ inset-block-start: var(--ds-table-sticky-header-offset, 0);
291
+ z-index: 3;
292
+ }
293
+
294
+ :where(.ds-table--document-sticky-header.ds-table--caption-visible .ds-table__document-sticky-header) {
295
+ inset-block-start: calc(
296
+ var(--ds-table-sticky-header-offset, 0px) + var(--_table-caption-bar-block-size)
297
+ );
298
+ }
299
+
300
+ :where(.ds-table__sticky-group) {
301
+ position: absolute;
302
+ inset-block-start: var(--_table-sticky-group-top, 0);
303
+ inset-inline-start: 0;
304
+ z-index: 5;
305
+ box-sizing: border-box;
306
+ inline-size: 100%;
307
+ block-size: var(--_table-row-min-block-size);
308
+ overflow: hidden;
309
+ will-change: inset-block-start;
310
+ }
311
+
312
+ :where(.ds-table__sticky-group .ds-table__group-content) {
313
+ position: relative;
314
+ }
315
+
316
+ :where(.ds-table__group-cell--sticky-source-hidden) {
317
+ visibility: hidden;
318
+ }
319
+
188
320
  :where(.ds-table__sticky-header-table) {
189
321
  block-size: var(--_table-header-min-block-size);
190
322
  transform: translate3d(calc(-1 * var(--ds-table-inline-scroll-offset, 0px)), 0, 0);
@@ -929,7 +1061,8 @@
929
1061
  display: none;
930
1062
  }
931
1063
 
932
- :where(.ds-table__table--selectable .ds-table__group-content) {
1064
+ :where(.ds-table__table--selectable .ds-table__group-content),
1065
+ :where(.ds-table__sticky-group--selectable .ds-table__group-content) {
933
1066
  /* Selection lane is the real 40px column — don't add start pad or flex gap. */
934
1067
  gap: 0;
935
1068
  padding-inline-start: 0;
@@ -965,7 +1098,8 @@
965
1098
  padding-inline: var(--dimension-space-050);
966
1099
  }
967
1100
 
968
- :where(.ds-table__table--selectable .ds-table__group-copy) {
1101
+ :where(.ds-table__table--selectable .ds-table__group-copy),
1102
+ :where(.ds-table__sticky-group--selectable .ds-table__group-copy) {
969
1103
  padding-inline-start: calc(
970
1104
  var(--dimension-space-100) + var(--_table-cell-track-label-inset)
971
1105
  );
@@ -985,11 +1119,24 @@
985
1119
 
986
1120
  :where(.ds-table__load-cell),
987
1121
  :where(.ds-table__state-cell) {
988
- padding: var(--dimension-space-200) var(--_table-cell-padding-inline);
1122
+ padding: 0;
989
1123
  background: var(--_table-surface);
990
1124
  text-align: center;
991
1125
  }
992
1126
 
1127
+ :where(.ds-table__viewport-band) {
1128
+ position: sticky;
1129
+ inset-inline-start: 0;
1130
+ box-sizing: border-box;
1131
+ display: flex;
1132
+ align-items: center;
1133
+ justify-content: center;
1134
+ inline-size: var(--ds-table-visible-inline-size, 100%);
1135
+ max-inline-size: var(--ds-table-visible-inline-size, 100%);
1136
+ padding: var(--dimension-space-200) var(--_table-cell-padding-inline);
1137
+ background: var(--_table-surface);
1138
+ }
1139
+
993
1140
  :where(.ds-table__load-content) {
994
1141
  /* Match md ButtonUnfilled height so text-only / loading / button states share one box. */
995
1142
  box-sizing: border-box;
@@ -1019,6 +1166,10 @@
1019
1166
  block-size: calc(var(--dimension-size-800) * 2);
1020
1167
  }
1021
1168
 
1169
+ :where(.ds-table__state-band) {
1170
+ min-block-size: calc(var(--dimension-size-800) * 2);
1171
+ }
1172
+
1022
1173
  :where(.ds-table__skeleton-row) {
1023
1174
  pointer-events: none;
1024
1175
  }
@@ -31,6 +31,10 @@ export declare class BarTitle {
31
31
  actionsAriaLabel: string;
32
32
  /** Explicit visual/capacity variant. ShellPage owns automatic selection. */
33
33
  variant: BarTitleVariant;
34
+ /** Draw the page-title divider beneath the header. */
35
+ showDivider: boolean;
36
+ /** Override divider visibility for compact and constrained variants. */
37
+ showCompactDivider?: boolean;
34
38
  /** Emitted when the leading Back action is activated. */
35
39
  dsBack: EventEmitter<MouseEvent>;
36
40
  /** Emitted when an authored expanded breadcrumb item is activated. */
@@ -54,6 +58,7 @@ export declare class BarTitle {
54
58
  handleSectionsChange(): void;
55
59
  handleActionsChange(): void;
56
60
  private get compact();
61
+ private get dividerVisible();
57
62
  private get expandedBreadcrumbItems();
58
63
  /** Tooltip copy is fixed and generic; backAriaLabel/actionsAriaLabel stay page-specific. */
59
64
  private get backTooltipLabel();
@@ -69,6 +69,18 @@ export interface ShellPageChromeConfig {
69
69
  actionsAriaLabel?: string;
70
70
  tone?: MobileHeaderTone;
71
71
  contentInset?: ShellPageContentInset;
72
+ /** Remove only the content gutter adjacent to the page header. */
73
+ contentInsetBlockStart?: ShellPageContentInset;
74
+ /** Exact roomy block-start content inset when the responsive default is not appropriate. */
75
+ contentInsetBlockStartSize?: string;
76
+ /** Exact block-start content inset while page-title capacity is compact or constrained. */
77
+ compactContentInsetBlockStartSize?: string;
78
+ /** Allow a roomy page title to compact in response to page scrolling. */
79
+ scrollCompaction?: boolean;
80
+ /** Draw the divider beneath the desktop/tablet page title. */
81
+ showHeaderDivider?: boolean;
82
+ /** Override divider visibility while the page title is compact or constrained. */
83
+ showCompactHeaderDivider?: boolean;
72
84
  /** Canvas surface painted by ShellPage around and beneath routed content. */
73
85
  contentSurface?: ShellPageContentSurface;
74
86
  }
@@ -10,6 +10,14 @@ export declare class ShellPage {
10
10
  headerCapacity?: ShellPageCapacity;
11
11
  /** Standard page gutters, or no inset for full-bleed page content. */
12
12
  contentInset: ShellPageContentInset;
13
+ /** Preserve the responsive side/end gutters while allowing content to meet the header. */
14
+ contentInsetBlockStart: ShellPageContentInset;
15
+ /** Exact block-start content inset, overriding the responsive default when provided. */
16
+ contentInsetBlockStartSize?: string;
17
+ /** Exact block-start content inset while the header is compact or constrained. */
18
+ compactContentInsetBlockStartSize?: string;
19
+ /** Allow roomy automatic headers to compact as the page scrolls. */
20
+ scrollCompaction: boolean;
13
21
  /** Canvas surface painted around and beneath routed page content. */
14
22
  contentSurface: ShellPageContentSurface;
15
23
  /** Explicit shell breakpoint presentation. Mobile uses the dedicated mobile-header slot. */
@@ -39,6 +47,7 @@ export declare class ShellPage {
39
47
  private get effectiveVariant();
40
48
  private get headerContractResolved();
41
49
  private get isScrollCompacted();
50
+ private get contentInsetStyles();
42
51
  private composedParent;
43
52
  private findScrollRoot;
44
53
  private connectScrollRoot;
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
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
+ el: HTMLElement;
4
5
  /** Stable column definitions. Assign through JavaScript. */
5
6
  columns: TableColumn[];
6
7
  /** Ungrouped row data. Ignored while grouping is active. Assign through JavaScript. */
@@ -28,6 +29,14 @@ export declare class Table {
28
29
  stickyHeader: boolean;
29
30
  /** Maximum scroll-region height. Numbers resolve to CSS pixels. */
30
31
  maxHeight: string | number | undefined;
32
+ /** Fixed height for the complete header, table frame, and footer composition. */
33
+ height: string | number | undefined;
34
+ /** Fit the complete table composition to its nearest vertical scrollport. */
35
+ fitViewport: boolean;
36
+ /** Reserved space above a viewport-fitted table once surrounding chrome is compact. */
37
+ viewportInsetBlockStart: string | number;
38
+ /** Reserved space below a viewport-fitted table. */
39
+ viewportInsetBlockEnd: string | number;
31
40
  /** Optional explicit label for the horizontal/vertical scroll region. */
32
41
  scrollLabel: string | undefined;
33
42
  selectionMode: TableSelectionMode;
@@ -70,6 +79,12 @@ export declare class Table {
70
79
  private overflowEnd;
71
80
  private scrollable;
72
81
  private announcement;
82
+ private activeStickyGroupId;
83
+ private viewportFitSettled;
84
+ private headerLeadingPresent;
85
+ private headerCopyPresent;
86
+ private headerTrailingPresent;
87
+ private rootEl;
73
88
  private viewportEl;
74
89
  private frameEl;
75
90
  private interactiveHeadEl;
@@ -80,13 +95,21 @@ export declare class Table {
80
95
  private previousModelWarning;
81
96
  private hasLoaded;
82
97
  private renderedModel;
98
+ private stickyGroupConnected;
99
+ private headerSlotObserver;
83
100
  private readonly layoutController;
84
101
  private readonly loadController;
102
+ private readonly viewportFitController;
85
103
  componentWillLoad(): void;
86
104
  componentDidLoad(): void;
87
105
  componentDidRender(): void;
88
106
  connectedCallback(): void;
89
107
  disconnectedCallback(): void;
108
+ private syncHeaderSlotPresence;
109
+ private connectHeaderSlotObserver;
110
+ private connectStickyGroup;
111
+ private disconnectStickyGroup;
112
+ private readonly updateStickyGroup;
90
113
  handleStructureChange(): void;
91
114
  handleDataChange(): void;
92
115
  handleLoadIdentityChange(): void;
@@ -97,10 +120,14 @@ export declare class Table {
97
120
  private get grouped();
98
121
  private get selectable();
99
122
  private get documentStickyHeader();
123
+ private get fixedHeight();
124
+ private get boundedComposition();
125
+ private get containedScroll();
100
126
  private currentLoadedRows;
101
127
  private currentLoadedRowCount;
102
128
  private createRenderModel;
103
129
  private get resolvedMaxHeight();
130
+ private get resolvedHeight();
104
131
  private warnModelIssues;
105
132
  private emitSort;
106
133
  private sortButtonLabel;
@@ -121,12 +148,15 @@ export declare class Table {
121
148
  private renderRow;
122
149
  private emitGroupCollapse;
123
150
  private emitAllGroupsCollapse;
151
+ private renderGroupContent;
152
+ private renderStickyGroup;
124
153
  private renderDataBodies;
125
154
  private renderSkeletonBody;
126
155
  private renderStateBody;
127
156
  private renderLazyBody;
128
157
  private renderDocumentStickyHeader;
129
158
  private get resultSummary();
159
+ private get hasResultFooter();
130
160
  private renderResultFooter;
131
161
  private renderCaptionBar;
132
162
  render(): any;
@@ -1,7 +1,9 @@
1
1
  import type { TableCellAction, TableCellBlank, TableCellEmpty, TableCellIcon, TableCellImage, TableCellTag, TableCellTagVariant, TableCellValue, TableColumn } from './table-types';
2
+ import type { TextColor } from '../Text/text-types';
2
3
  export interface ResolvedTableCellText {
3
4
  primary: string | number;
4
5
  secondary?: string | number;
6
+ secondaryColor?: TextColor;
5
7
  wrap?: boolean;
6
8
  fontFeature?: 'normal' | 'tabular-nums';
7
9
  }
@@ -9,6 +9,7 @@ export interface TableLayoutElements {
9
9
  export interface TableLayoutMode {
10
10
  documentStickyHeader: boolean;
11
11
  floatingCollapseAll: boolean;
12
+ clampVerticalOverscroll: boolean;
12
13
  }
13
14
  export interface TableOverflowState {
14
15
  start: boolean;
@@ -19,6 +20,7 @@ export interface TableLayoutControllerOptions {
19
20
  elements: () => TableLayoutElements;
20
21
  mode: () => TableLayoutMode;
21
22
  overflowChanged: (state: TableOverflowState) => void;
23
+ verticalEdgeWheel?: (deltaY: number) => boolean;
22
24
  }
23
25
  export interface TableLayoutMetricInput {
24
26
  viewportInlineSize: number;
@@ -59,6 +61,10 @@ export declare class TableLayoutController {
59
61
  /** Reconcile newly rendered refs, observers, and pending geometry. */
60
62
  refresh(): void;
61
63
  private schedule;
64
+ private readonly handleScroll;
65
+ private readonly handleWheel;
66
+ private clampInlineOffset;
67
+ private clampBlockOffset;
62
68
  private sync;
63
69
  private setProperty;
64
70
  }
@@ -1,5 +1,6 @@
1
1
  import type { TagContrast, TagIntent } from '../Tag/Tag';
2
2
  import type { IconColor } from '../Icon/Icon';
3
+ import type { TextColor } from '../Text/text-types';
3
4
  export type TableSortDirection = 'asc' | 'desc';
4
5
  export type TableSelectionMode = 'none' | 'multiple';
5
6
  export type TableCellAlign = 'start' | 'center' | 'end';
@@ -32,6 +33,8 @@ export interface TableGroupingState {
32
33
  export interface TableCellText {
33
34
  primary: string | number;
34
35
  secondary?: string;
36
+ /** Optional semantic foreground for secondary copy; defaults to the standard secondary color. */
37
+ secondaryColor?: TextColor;
35
38
  /** Allow this cell to wrap even when its column truncates by default. */
36
39
  wrap?: boolean;
37
40
  fontFeature?: 'normal' | 'tabular-nums';
@@ -0,0 +1,53 @@
1
+ export interface TableViewportFitMetricInput {
2
+ scrollportBlockStart: number;
3
+ scrollportBlockSize: number;
4
+ hostBlockStart: number;
5
+ insetBlockStart: number;
6
+ insetBlockEnd: number;
7
+ }
8
+ export interface TableViewportFitMetrics {
9
+ reservedBlockSize: number;
10
+ currentBlockSize: number;
11
+ settled: boolean;
12
+ }
13
+ export interface TableViewportFitElements {
14
+ host: HTMLElement | null;
15
+ surface: HTMLElement | null;
16
+ }
17
+ export interface TableViewportFitControllerOptions {
18
+ enabled: () => boolean;
19
+ elements: () => TableViewportFitElements;
20
+ insets: () => {
21
+ blockStart: string | number;
22
+ blockEnd: string | number;
23
+ };
24
+ fitChanged: (metrics: TableViewportFitMetrics | null) => void;
25
+ }
26
+ /** Resolve the reserved compact-state height and the height currently visible. */
27
+ export declare function resolveTableViewportFitMetrics(input: TableViewportFitMetricInput): TableViewportFitMetrics;
28
+ /**
29
+ * Fits the complete table chrome to its nearest vertical scrollport. The host
30
+ * reserves its compact-state height so the outer page can consume collapsing
31
+ * header travel without changing document height. The visible table surface
32
+ * grows into that reservation until it reaches the supplied sticky inset.
33
+ */
34
+ export declare class TableViewportFitController {
35
+ private readonly options;
36
+ private connected;
37
+ private scrollRoot;
38
+ private resizeObserver;
39
+ private metrics;
40
+ constructor(options: TableViewportFitControllerOptions);
41
+ connect(): void;
42
+ disconnect(): void;
43
+ refresh(): void;
44
+ /** Pass a fitted table's boundary wheel delta to its owning page scrollport. */
45
+ scrollOuterBy(delta: number): boolean;
46
+ private disconnectRuntime;
47
+ private clearGeometry;
48
+ private readonly sync;
49
+ private findScrollRoot;
50
+ private composedParent;
51
+ private setProperty;
52
+ }
53
+ //# sourceMappingURL=table-viewport-fit-controller.d.ts.map