@ds-mo/ui 13.12.0 → 13.13.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 (124) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +22 -3
  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 +5 -2
  10. package/dist/components/ds-agent-response.js +1 -1
  11. package/dist/components/ds-banner.js +1 -1
  12. package/dist/components/ds-bar-nav.js +1 -1
  13. package/dist/components/ds-bar-title.js +1 -1
  14. package/dist/components/ds-bar-workflow.js +1 -1
  15. package/dist/components/ds-button-filled.js +1 -1
  16. package/dist/components/ds-button-unfilled.js +1 -1
  17. package/dist/components/ds-card-chart.js +1 -1
  18. package/dist/components/ds-card-overview.js +1 -1
  19. package/dist/components/ds-card-overview.js.map +1 -1
  20. package/dist/components/ds-card-setting.js +1 -1
  21. package/dist/components/ds-chart-legend.js +1 -1
  22. package/dist/components/ds-chart-legend.js.map +1 -1
  23. package/dist/components/ds-checkbox.js +1 -1
  24. package/dist/components/ds-chip.js +1 -1
  25. package/dist/components/ds-chip.js.map +1 -1
  26. package/dist/components/ds-code-block.js +1 -1
  27. package/dist/components/ds-conversation-list-item.js +1 -1
  28. package/dist/components/ds-conversation-list-item.js.map +1 -1
  29. package/dist/components/ds-input.js +1 -1
  30. package/dist/components/ds-input.js.map +1 -1
  31. package/dist/components/ds-markdown.js +1 -1
  32. package/dist/components/ds-menu.js +1 -1
  33. package/dist/components/ds-message-actions.js +1 -1
  34. package/dist/components/ds-message-composer.js +1 -1
  35. package/dist/components/ds-message-scroller.js +1 -1
  36. package/dist/components/ds-mobile-bar-nav.js +1 -1
  37. package/dist/components/ds-mobile-header.js +1 -1
  38. package/dist/components/ds-mobile-section-switcher.js +1 -1
  39. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  40. package/dist/components/ds-modal.js +1 -1
  41. package/dist/components/ds-panel-nav.js +1 -1
  42. package/dist/components/ds-panel-sub-nav.js +1 -1
  43. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  44. package/dist/components/ds-panel-tool-header.js +1 -1
  45. package/dist/components/ds-panel-tool-search.js +1 -1
  46. package/dist/components/ds-panel-tools.js +1 -1
  47. package/dist/components/ds-radio.js +1 -1
  48. package/dist/components/ds-radio.js.map +1 -1
  49. package/dist/components/ds-select.js +1 -1
  50. package/dist/components/ds-select.js.map +1 -1
  51. package/dist/components/ds-shell-app.js +1 -1
  52. package/dist/components/ds-shell-tools.js +1 -1
  53. package/dist/components/ds-tab-group.js +1 -1
  54. package/dist/components/ds-table.js +1 -1
  55. package/dist/components/ds-table.js.map +1 -1
  56. package/dist/components/ds-tag.js +1 -1
  57. package/dist/components/ds-toast.js +1 -1
  58. package/dist/components/ds-typing-indicator.js +1 -1
  59. package/dist/components/p-B1JB0Zn-.js +2 -0
  60. package/dist/components/{p-BYre-ZDg.js.map → p-B1JB0Zn-.js.map} +1 -1
  61. package/dist/components/p-B2t8alvH.js +2 -0
  62. package/dist/components/{p-DK4PGrHm.js.map → p-B2t8alvH.js.map} +1 -1
  63. package/dist/components/{p-DxygUurH.js → p-BAGTb6cZ.js} +2 -2
  64. package/dist/components/p-BEEYhbIb.js +2 -0
  65. package/dist/components/{p-CFNG0K3m.js.map → p-BEEYhbIb.js.map} +1 -1
  66. package/dist/components/{p-BRajO-Za.js → p-BFMV9TJO.js} +2 -2
  67. package/dist/components/p-BNHPCCw8.js +2 -0
  68. package/dist/components/{p-x9jO4lZ7.js.map → p-BNHPCCw8.js.map} +1 -1
  69. package/dist/components/{p-DKftz0O8.js → p-BUZLhvs1.js} +2 -2
  70. package/dist/components/p-BgaF83uh.js +2 -0
  71. package/dist/components/{p-C5gZHZHU.js.map → p-BgaF83uh.js.map} +1 -1
  72. package/dist/components/p-Br0fwWUG.js +2 -0
  73. package/dist/components/{p-BFXN4ioL.js.map → p-Br0fwWUG.js.map} +1 -1
  74. package/dist/components/{p-DcmqsAMP.js → p-BydCwx7x.js} +2 -2
  75. package/dist/components/p-C3Z01Glr.js +2 -0
  76. package/dist/components/p-C3Z01Glr.js.map +1 -0
  77. package/dist/components/{p-BX57q1Lo.js → p-CSlTJWFG.js} +2 -2
  78. package/dist/components/p-Cw1bbiCG.js +2 -0
  79. package/dist/components/{p-B_eqa09C.js.map → p-Cw1bbiCG.js.map} +1 -1
  80. package/dist/components/p-CzV4gIxd.js +2 -0
  81. package/dist/components/{p-BxJurXEn.js.map → p-CzV4gIxd.js.map} +1 -1
  82. package/dist/components/p-D-F8eyXy.js +2 -0
  83. package/dist/components/p-D-F8eyXy.js.map +1 -0
  84. package/dist/components/p-DGvzGGcu.js +2 -0
  85. package/dist/components/{p-CIlO_j3q.js.map → p-DGvzGGcu.js.map} +1 -1
  86. package/dist/components/{p-DkhE3BsH.js → p-bLCbOPYa.js} +2 -2
  87. package/dist/components/p-cPh32CFB.js +2 -0
  88. package/dist/components/{p-Bj7KrXzw.js.map → p-cPh32CFB.js.map} +1 -1
  89. package/dist/docs/components.json +87 -3
  90. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +2 -0
  91. package/dist/mcp-data/registry/button-filled.json +20 -1
  92. package/dist/mcp-data/registry/button-unfilled.json +20 -1
  93. package/dist/mcp-data/registry/registry.json +21 -2
  94. package/dist/mcp-data/registry/table.json +24 -5
  95. package/dist/react/ds-table.d.ts +2 -1
  96. package/dist/react/ds-table.js +2 -1
  97. package/dist/styles/table.css +258 -61
  98. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +2 -0
  99. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -0
  100. package/dist/types/components/Table/Table.d.ts +12 -1
  101. package/dist/types/components/Table/index.d.ts +1 -1
  102. package/dist/types/components/Table/table-types.d.ts +11 -0
  103. package/dist/types/components.d.ts +26 -2
  104. package/package.json +1 -1
  105. package/dist/components/p-BFXN4ioL.js +0 -2
  106. package/dist/components/p-BYre-ZDg.js +0 -2
  107. package/dist/components/p-B_eqa09C.js +0 -2
  108. package/dist/components/p-Bj7KrXzw.js +0 -2
  109. package/dist/components/p-BxJurXEn.js +0 -2
  110. package/dist/components/p-C5gZHZHU.js +0 -2
  111. package/dist/components/p-CFNG0K3m.js +0 -2
  112. package/dist/components/p-CIlO_j3q.js +0 -2
  113. package/dist/components/p-DAbaMtEX.js +0 -2
  114. package/dist/components/p-DAbaMtEX.js.map +0 -1
  115. package/dist/components/p-DK4PGrHm.js +0 -2
  116. package/dist/components/p-c1pY-Mqq.js +0 -2
  117. package/dist/components/p-c1pY-Mqq.js.map +0 -1
  118. package/dist/components/p-x9jO4lZ7.js +0 -2
  119. /package/dist/components/{p-DxygUurH.js.map → p-BAGTb6cZ.js.map} +0 -0
  120. /package/dist/components/{p-BRajO-Za.js.map → p-BFMV9TJO.js.map} +0 -0
  121. /package/dist/components/{p-DKftz0O8.js.map → p-BUZLhvs1.js.map} +0 -0
  122. /package/dist/components/{p-DcmqsAMP.js.map → p-BydCwx7x.js.map} +0 -0
  123. /package/dist/components/{p-BX57q1Lo.js.map → p-CSlTJWFG.js.map} +0 -0
  124. /package/dist/components/{p-DkhE3BsH.js.map → p-bLCbOPYa.js.map} +0 -0
@@ -26,8 +26,8 @@
26
26
  --_table-row-selected: var(--ds-table-row-selected, var(--color-interaction-active-brand));
27
27
  --_table-border: var(--ds-table-border, var(--color-border-secondary));
28
28
  --_table-column-border: var(--ds-table-column-border, var(--color-border-tertiary));
29
+ --_table-sticky-border: var(--ds-table-sticky-border, var(--color-border-secondary));
29
30
  --_table-border-strong: var(--ds-table-border-strong, var(--color-border-secondary));
30
- --_table-overflow-shadow: var(--ds-table-overflow-shadow, var(--color-border-secondary));
31
31
  --_table-radius: var(--ds-table-radius, var(--dimension-radius-075));
32
32
  --_table-header-min-block-size: var(
33
33
  --ds-table-header-min-block-size,
@@ -50,6 +50,16 @@
50
50
  var(--dimension-size-500)
51
51
  );
52
52
  --_table-selection-column-contribution: 0;
53
+ --_table-sticky-start-shadow: var(
54
+ --ds-table-sticky-start-shadow,
55
+ inset var(--dimension-space-050) 0 var(--dimension-space-050)
56
+ calc(-1 * var(--dimension-space-050)) var(--color-elevation-shadow)
57
+ );
58
+ --_table-sticky-end-shadow: var(
59
+ --ds-table-sticky-end-shadow,
60
+ inset calc(-1 * var(--dimension-space-050)) 0 var(--dimension-space-050)
61
+ calc(-1 * var(--dimension-space-050)) var(--color-elevation-shadow)
62
+ );
53
63
  display: block;
54
64
  box-sizing: border-box;
55
65
  min-inline-size: 0;
@@ -61,53 +71,34 @@
61
71
 
62
72
  :where(.ds-table__frame) {
63
73
  position: relative;
74
+ timeline-scope: --ds-table-inline-scroll;
64
75
  box-sizing: border-box;
65
76
  min-inline-size: 0;
66
77
  max-inline-size: 100%;
67
- overflow: hidden;
68
- border: var(--dimension-stroke-width-012) solid var(--_table-border-strong);
78
+ overflow: visible;
79
+ border: 0;
69
80
  border-radius: var(--_table-radius);
70
81
  background: var(--_table-surface);
71
82
  }
72
83
 
73
- :where(.ds-table__frame)::before,
74
- :where(.ds-table__frame)::after {
75
- content: '';
76
- position: absolute;
77
- inset-block: 0;
78
- z-index: 3;
79
- inline-size: var(--dimension-space-200);
80
- pointer-events: none;
81
- opacity: 0;
82
- transition: opacity var(--effect-motion-short-2);
83
- }
84
-
85
- :where(.ds-table__frame)::before {
86
- inset-inline-start: 0;
87
- background: linear-gradient(to right, var(--_table-overflow-shadow), transparent);
88
- }
89
-
90
- :where(.ds-table__frame)::after {
91
- inset-inline-end: 0;
92
- background: linear-gradient(to left, var(--_table-overflow-shadow), transparent);
93
- }
94
-
95
- :where(.ds-table__frame--overflow-start)::before,
96
- :where(.ds-table__frame--overflow-end)::after {
97
- opacity: var(--effect-opacity-low);
98
- }
99
-
100
84
  :where(.ds-table__viewport) {
101
85
  box-sizing: border-box;
102
86
  max-block-size: var(--ds-table-max-block-size, none);
103
87
  max-inline-size: 100%;
104
88
  min-inline-size: 0;
105
89
  overflow: auto;
106
- overscroll-behavior: contain;
90
+ scroll-timeline: --ds-table-inline-scroll inline;
91
+ overscroll-behavior-x: none;
92
+ overscroll-behavior-y: auto;
107
93
  scrollbar-gutter: stable;
94
+ border-radius: var(--_table-radius);
108
95
  outline: none;
109
96
  }
110
97
 
98
+ :where(.ds-table--document-sticky-header .ds-table__viewport) {
99
+ scrollbar-gutter: auto;
100
+ }
101
+
111
102
  :where(.ds-table__viewport:focus-visible) {
112
103
  outline: var(--dimension-stroke-width-025) solid var(--color-interaction-focus);
113
104
  outline-offset: calc(-1 * var(--dimension-stroke-width-025));
@@ -149,12 +140,106 @@
149
140
  z-index: 1;
150
141
  }
151
142
 
152
- :where(.ds-table--sticky-header .ds-table__head) {
143
+ :where(.ds-table--contained-sticky-header .ds-table__head) {
153
144
  position: sticky;
154
145
  inset-block-start: 0;
155
146
  z-index: 2;
156
147
  }
157
148
 
149
+ :where(.ds-table__document-sticky-header) {
150
+ position: sticky;
151
+ inset-block-start: var(--ds-table-sticky-header-offset, 0);
152
+ z-index: 3;
153
+ block-size: var(--_table-header-min-block-size);
154
+ margin-block-end: calc(-1 * var(--_table-header-min-block-size));
155
+ max-inline-size: 100%;
156
+ overflow: hidden;
157
+ border-radius: var(--_table-radius) var(--_table-radius) 0 0;
158
+ background: var(--_table-header-surface);
159
+ }
160
+
161
+ :where(.ds-table__sticky-header-table) {
162
+ block-size: var(--_table-header-min-block-size);
163
+ transform: translate3d(calc(-1 * var(--ds-table-inline-scroll-offset, 0px)), 0, 0);
164
+ will-change: transform;
165
+ }
166
+
167
+ /*
168
+ * The document-flow header is visually duplicated so it can stick to the page
169
+ * while the semantic table remains inside the horizontal scrollport. Keep the
170
+ * duplicate out of a second scroll container: its columns follow the body's
171
+ * scroll timeline and its pinned lanes counter that exact movement.
172
+ */
173
+ :where(.ds-table__sticky-header-table .ds-table__cell--sticky-start) {
174
+ transform: translate3d(var(--ds-table-inline-scroll-offset, 0), 0, 0);
175
+ }
176
+
177
+ :where(.ds-table__sticky-header-table .ds-table__cell--sticky-end) {
178
+ transform: translate3d(
179
+ calc(
180
+ var(--ds-table-inline-scroll-offset, 0) -
181
+ var(--ds-table-inline-scroll-max-offset, 0)
182
+ ),
183
+ 0,
184
+ 0
185
+ );
186
+ }
187
+
188
+ @supports (animation-timeline: --ds-table-inline-scroll) {
189
+ :where(.ds-table__sticky-header-table) {
190
+ animation: ds-table-follow-inline-scroll var(--effect-motion-short-2) both;
191
+ animation-timeline: --ds-table-inline-scroll;
192
+ animation-range: 0% 100%;
193
+ animation-timing-function: linear;
194
+ }
195
+
196
+ :where(.ds-table__sticky-header-table .ds-table__cell--sticky-start) {
197
+ animation: ds-table-counter-inline-scroll-start var(--effect-motion-short-2) both;
198
+ animation-timeline: --ds-table-inline-scroll;
199
+ animation-range: 0% 100%;
200
+ animation-timing-function: linear;
201
+ }
202
+
203
+ :where(.ds-table__sticky-header-table .ds-table__cell--sticky-end) {
204
+ animation: ds-table-counter-inline-scroll-end var(--effect-motion-short-2) both;
205
+ animation-timeline: --ds-table-inline-scroll;
206
+ animation-range: 0% 100%;
207
+ animation-timing-function: linear;
208
+ }
209
+ }
210
+
211
+ @keyframes ds-table-follow-inline-scroll {
212
+ from { transform: translate3d(0, 0, 0); }
213
+ to {
214
+ transform: translate3d(
215
+ calc(-1 * var(--ds-table-inline-scroll-max-offset, 0)),
216
+ 0,
217
+ 0
218
+ );
219
+ }
220
+ }
221
+
222
+ @keyframes ds-table-counter-inline-scroll-start {
223
+ from { transform: translate3d(0, 0, 0); }
224
+ to { transform: translate3d(var(--ds-table-inline-scroll-max-offset, 0), 0, 0); }
225
+ }
226
+
227
+ @keyframes ds-table-counter-inline-scroll-end {
228
+ from {
229
+ transform: translate3d(
230
+ calc(-1 * var(--ds-table-inline-scroll-max-offset, 0)),
231
+ 0,
232
+ 0
233
+ );
234
+ }
235
+ to { transform: translate3d(0, 0, 0); }
236
+ }
237
+
238
+ :where(.ds-table__head--semantic-copy) {
239
+ opacity: 0;
240
+ pointer-events: none;
241
+ }
242
+
158
243
  :where(.ds-table__header-row) {
159
244
  min-block-size: var(--_table-header-min-block-size);
160
245
  background: var(--_table-header-surface);
@@ -173,6 +258,7 @@
173
258
  }
174
259
 
175
260
  :where(.ds-table__header-cell) {
261
+ position: relative;
176
262
  min-block-size: calc(
177
263
  var(--_table-header-min-block-size) - var(--dimension-space-100) - var(--dimension-space-100)
178
264
  );
@@ -181,27 +267,48 @@
181
267
  );
182
268
  padding: var(--dimension-space-100);
183
269
  border-block-end: 0;
184
- box-shadow: inset 0 calc(-1 * var(--dimension-stroke-width-012)) 0 var(--_table-border);
185
270
  background: var(--_table-header-surface);
186
271
  color: var(--color-foreground-secondary);
187
272
  }
188
273
 
274
+ :where(.ds-table__header-cell)::after {
275
+ content: '';
276
+ position: absolute;
277
+ inset-inline: 0;
278
+ inset-block-end: 0;
279
+ z-index: 1;
280
+ block-size: var(--dimension-stroke-width-012);
281
+ background: var(--_table-border-strong);
282
+ pointer-events: none;
283
+ }
284
+
189
285
  :where(.ds-table__cell) {
190
286
  min-block-size: var(--_table-row-min-block-size);
191
287
  block-size: var(--_table-row-min-block-size);
192
288
  padding: var(--_table-cell-padding-block) var(--_table-cell-padding-inline);
289
+ --ds-interaction-group-divider-width: var(--dimension-stroke-width-012);
290
+ --ds-interaction-group-divider-color: var(--_table-border);
193
291
  border-block-end: 0;
194
292
  background-color: inherit;
195
- background-image: linear-gradient(var(--_table-border), var(--_table-border));
196
- background-repeat: no-repeat;
197
- background-position: bottom;
198
- background-size: 100% var(--dimension-stroke-width-012);
199
293
  vertical-align: top;
200
294
  }
201
295
 
202
- :where(.ds-table__header-cell + .ds-table__header-cell),
296
+ :where(.ds-table__header-cell + .ds-table__header-cell) {
297
+ border-inline-start: 0;
298
+ }
299
+
300
+ :where(.ds-table__header-cell + .ds-table__header-cell)::before {
301
+ content: '';
302
+ position: absolute;
303
+ inset: 0;
304
+ z-index: 0;
305
+ box-shadow: inset var(--dimension-stroke-width-012) 0 0 var(--_table-column-border);
306
+ pointer-events: none;
307
+ }
308
+
203
309
  :where(.ds-table__cell + .ds-table__cell) {
204
- border-inline-start: var(--dimension-stroke-width-012) solid var(--_table-column-border);
310
+ --ds-interaction-group-divider-inline-start-width: var(--dimension-stroke-width-012);
311
+ --ds-interaction-group-divider-inline-start-color: var(--_table-column-border);
205
312
  }
206
313
 
207
314
  :where(.ds-table__header-labels),
@@ -252,9 +359,6 @@
252
359
  color: var(--color-foreground-primary);
253
360
  }
254
361
 
255
- :where(.ds-table__row:not(.ds-table__row--disabled):hover) {
256
- background: var(--_table-row-hover);
257
- }
258
362
  }
259
363
 
260
364
  :where(.ds-table__header-label--interactive:active) {
@@ -469,11 +573,11 @@
469
573
  }
470
574
 
471
575
  :where(.ds-table__cell--action) {
472
- padding: var(--dimension-space-100);
576
+ padding: var(--dimension-space-075);
473
577
  }
474
578
 
475
579
  :where(.ds-table__cell--action .ds-table__cell-content) {
476
- min-block-size: var(--dimension-size-300);
580
+ min-block-size: var(--_table-cell-track-min-block-size);
477
581
  }
478
582
 
479
583
  :where(.ds-table__cell-primary),
@@ -512,15 +616,26 @@
512
616
  :where(.ds-table__row) {
513
617
  min-block-size: var(--_table-row-min-block-size);
514
618
  background: var(--_table-surface);
515
- transition: background-color var(--effect-motion-short-2);
516
619
  }
517
620
 
518
- :where(.ds-table__row:active:not(.ds-table__row--disabled)) {
519
- background: var(--_table-row-pressed);
621
+ :where(.ds-table__row > .ds-table__cell.ds-interaction-fill) {
622
+ --ds-interaction-active: var(--_table-row-selected);
623
+ --ds-interaction-group-fill: transparent;
520
624
  }
521
625
 
522
- :where(.ds-table__row--selected) {
523
- background: var(--_table-row-selected);
626
+ @media (hover: hover) and (pointer: fine) {
627
+ :where(.ds-table__row--interactive:hover > .ds-table__cell.ds-interaction-fill) {
628
+ --ds-interaction-group-fill: var(--_table-row-hover);
629
+ }
630
+ }
631
+
632
+ :where(.ds-table__row--interactive:active > .ds-table__cell.ds-interaction-fill) {
633
+ --ds-interaction-group-fill: var(--_table-row-pressed);
634
+ }
635
+
636
+ :where(.ds-table__row--interactive:focus-visible) {
637
+ outline: var(--dimension-stroke-width-025) solid var(--color-interaction-focus);
638
+ outline-offset: calc(-1 * var(--dimension-stroke-width-025));
524
639
  }
525
640
 
526
641
  :where(.ds-table__row--disabled) {
@@ -534,6 +649,94 @@
534
649
  text-align: center;
535
650
  }
536
651
 
652
+ :where(.ds-table__cell--sticky-start),
653
+ :where(.ds-table__cell--sticky-end) {
654
+ --ds-interaction-position: sticky;
655
+ --ds-interaction-z-index: 2;
656
+ position: sticky;
657
+ z-index: 2;
658
+ background-color: var(--_table-surface);
659
+ }
660
+
661
+ :where(.ds-table__cell--sticky-start) {
662
+ inset-inline-start: 0;
663
+ }
664
+
665
+ :where(.ds-table__cell--sticky-end) {
666
+ inset-inline-end: 0;
667
+ }
668
+
669
+ :where(.ds-table__header-cell.ds-table__cell--sticky-start),
670
+ :where(.ds-table__header-cell.ds-table__cell--sticky-end) {
671
+ z-index: 3;
672
+ background-color: var(--_table-header-surface);
673
+ }
674
+
675
+ :where(.ds-table__sticky-header-table .ds-table__cell--sticky-start),
676
+ :where(.ds-table__sticky-header-table .ds-table__cell--sticky-end) {
677
+ position: relative;
678
+ inset-inline: auto;
679
+ will-change: transform;
680
+ }
681
+
682
+ :where(.ds-table__selection-cell.ds-table__cell--sticky-start) {
683
+ --ds-interaction-group-divider-inline-end-width: 0px;
684
+ }
685
+
686
+ :where(.ds-table__cell--sticky-start + .ds-table__cell) {
687
+ --ds-interaction-group-divider-inline-start-width: 0px;
688
+ }
689
+
690
+ :where(.ds-table__cell--sticky-end) {
691
+ --ds-interaction-group-divider-inline-start-width: 0px;
692
+ }
693
+
694
+ :where(.ds-table__header-cell.ds-table__cell--sticky-start + .ds-table__header-cell)::before,
695
+ :where(.ds-table__header-cell.ds-table__cell--sticky-end)::before {
696
+ box-shadow: none;
697
+ }
698
+
699
+ :where(.ds-table__sticky-edge) {
700
+ position: absolute;
701
+ inset-block: 0 var(--dimension-stroke-width-012);
702
+ z-index: 4;
703
+ inline-size: var(--dimension-stroke-width-012);
704
+ background: var(--_table-sticky-border);
705
+ pointer-events: none;
706
+ }
707
+
708
+ :where(.ds-table__sticky-edge)::after {
709
+ content: '';
710
+ position: absolute;
711
+ inset-block: 0;
712
+ inline-size: var(--dimension-space-050);
713
+ pointer-events: none;
714
+ }
715
+
716
+ :where(.ds-table__sticky-edge--start) {
717
+ inset-inline-end: 0;
718
+ }
719
+
720
+ :where(.ds-table__sticky-edge--start)::after {
721
+ inset-inline-start: 100%;
722
+ }
723
+
724
+ :where(.ds-table__sticky-edge--end) {
725
+ inset-inline-start: 0;
726
+ }
727
+
728
+ :where(.ds-table__sticky-edge--end)::after {
729
+ inset-inline-end: 100%;
730
+ }
731
+
732
+ :where(.ds-table__frame--overflow-start .ds-table__sticky-edge--start)::after {
733
+ box-shadow: var(--_table-sticky-start-shadow);
734
+ }
735
+
736
+ :where(.ds-table__frame--overflow-end .ds-table__sticky-edge--end)::after {
737
+ box-shadow: var(--_table-sticky-end-shadow);
738
+ }
739
+
537
740
  :where(.ds-table__cell.ds-table__selection-cell) {
538
741
  padding: var(--dimension-space-125);
539
742
  }
@@ -615,7 +818,7 @@
615
818
  :where(.ds-table__state-row:last-child .ds-table__state-cell),
616
819
  :where(.ds-table__body:last-child .ds-table__row:last-child .ds-table__cell) {
617
820
  border-block-end: 0;
618
- background-image: none;
821
+ --ds-interaction-group-divider-width: 0px;
619
822
  }
620
823
 
621
824
  :where(.ds-visually-hidden) {
@@ -631,9 +834,8 @@
631
834
  }
632
835
 
633
836
  @media (prefers-reduced-motion: reduce) {
634
- :where(.ds-table__frame)::before,
635
- :where(.ds-table__frame)::after,
636
- :where(.ds-table__row) {
837
+ :where(.ds-table__cell--sticky-start),
838
+ :where(.ds-table__cell--sticky-end) {
637
839
  transition: none;
638
840
  }
639
841
  }
@@ -649,14 +851,9 @@
649
851
  color: var(--ds-forced-color-content);
650
852
  }
651
853
 
652
- :where(.ds-table__frame)::before,
653
- :where(.ds-table__frame)::after {
654
- display: none;
655
- }
656
-
657
- :where(.ds-table__row--selected > .ds-table__cell) {
658
- background: var(--ds-forced-color-selected);
659
- color: var(--ds-forced-color-on-selected);
854
+ :where(.ds-table__frame--overflow-start .ds-table__sticky-edge--start)::after,
855
+ :where(.ds-table__frame--overflow-end .ds-table__sticky-edge--end)::after {
856
+ box-shadow: none;
660
857
  }
661
858
 
662
859
  :where(.ds-table__row--disabled) {
@@ -17,6 +17,8 @@ export declare class ButtonFilled {
17
17
  variant: ButtonFilledVariant;
18
18
  /** Control density (height, padding, icon, type). */
19
19
  size: ButtonFilledSize;
20
+ /** Use reduced outer geometry when nested inside a control of the same size. */
21
+ isInset: boolean;
20
22
  /** Width fit — hug content (default) or fill the parent. */
21
23
  width: ButtonFilledWidth;
22
24
  /** Visible text for `label` / `icon-label` variants. */
@@ -14,6 +14,8 @@ export declare class ButtonUnfilled {
14
14
  variant: ButtonUnfilledVariant;
15
15
  /** Control density (height, padding, icon, type). */
16
16
  size: ButtonUnfilledSize;
17
+ /** Use reduced outer geometry when nested inside a control of the same size. */
18
+ isInset: boolean;
17
19
  /** Width fit — hug content (default) or fill the parent. */
18
20
  width: ButtonUnfilledWidth;
19
21
  /** Visible text for `label` / `icon-label` variants. */
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
- import type { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableGroup, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableRow, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from './table-types';
2
+ import type { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableGroup, 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[];
@@ -53,12 +53,14 @@ export declare class Table {
53
53
  dsSelectionChange: EventEmitter<TableSelectionChangeDetail>;
54
54
  dsLoadMore: EventEmitter<TableLoadMoreDetail>;
55
55
  dsCellAction: EventEmitter<TableCellActionDetail>;
56
+ dsRowActivate: EventEmitter<TableRowActivateDetail>;
56
57
  private overflowStart;
57
58
  private overflowEnd;
58
59
  private scrollable;
59
60
  private intersectionSupported;
60
61
  private announcement;
61
62
  private viewportEl;
63
+ private stickyHeaderTableEl;
62
64
  private tableEl;
63
65
  private sentinelEl;
64
66
  private resizeObserver;
@@ -84,6 +86,7 @@ export declare class Table {
84
86
  handleHasMoreChange(hasMore: boolean, hadMore: boolean): void;
85
87
  private get grouped();
86
88
  private get selectable();
89
+ private get documentStickyHeader();
87
90
  private get loadedRows();
88
91
  private get hasData();
89
92
  private get totalColumns();
@@ -94,6 +97,7 @@ export declare class Table {
94
97
  private warnModelIssues;
95
98
  private connectViewportObserver;
96
99
  private syncOverflow;
100
+ private syncStickyHeaderPosition;
97
101
  private resetLoadRequest;
98
102
  private disconnectIntersectionObserver;
99
103
  private connectIntersectionObserver;
@@ -102,14 +106,21 @@ export declare class Table {
102
106
  private sortButtonLabel;
103
107
  private emitRowSelection;
104
108
  private emitAllSelection;
109
+ private rowEventOwnsActivation;
110
+ private emitRowActivation;
111
+ private handleRowKeydown;
105
112
  private renderSelectionControl;
113
+ private renderStickyEdge;
106
114
  private renderColumnHeader;
115
+ private renderColgroup;
116
+ private renderHeader;
107
117
  private renderCellValue;
108
118
  private renderRow;
109
119
  private renderDataBodies;
110
120
  private renderSkeletonBody;
111
121
  private renderStateBody;
112
122
  private renderLazyBody;
123
+ private renderDocumentStickyHeader;
113
124
  render(): any;
114
125
  }
115
126
  //# 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, TableColumnWidth, TableGroup, TableHeaderSegment, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason, TableRow, 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, TableHeaderSegment, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortDirection, TableSortState, } from './table-types';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -3,6 +3,7 @@ import type { IconColor } from '../Icon/Icon';
3
3
  export type TableSortDirection = 'asc' | 'desc';
4
4
  export type TableSelectionMode = 'none' | 'multiple';
5
5
  export type TableCellAlign = 'start' | 'center' | 'end';
6
+ export type TableColumnSticky = 'start' | 'end';
6
7
  export type TableCaptionVisibility = 'visible' | 'hidden';
7
8
  export type TableLoadMoreMode = 'auto' | 'manual';
8
9
  export type TableLoadMoreReason = 'auto' | 'manual' | 'retry';
@@ -116,7 +117,10 @@ export type TableCellValue = string | number | null | undefined | TableCellText
116
117
  export interface TableColumn {
117
118
  /** Stable column identity. */
118
119
  id: string;
120
+ /** Visible column label. May be empty when headerLabel supplies a non-visual name. */
119
121
  header: string;
122
+ /** Screen-reader-only column name for an intentionally blank visual header. */
123
+ headerLabel?: string;
120
124
  /** Optional labels for columns that present and sort multiple related data points. */
121
125
  headerSegments?: TableHeaderSegment[];
122
126
  align?: TableCellAlign;
@@ -129,6 +133,8 @@ export interface TableColumn {
129
133
  maxSize?: number;
130
134
  /** Wrap cell text instead of truncating it to one line. */
131
135
  wrap?: boolean;
136
+ /** Pin one application column to either inline edge during horizontal scrolling. */
137
+ sticky?: TableColumnSticky;
132
138
  }
133
139
  export interface TableRow {
134
140
  /** Stable identity, unique across all groups. */
@@ -140,6 +146,8 @@ export interface TableRow {
140
146
  selectable?: boolean;
141
147
  /** Keep the row visible while disabling its selection control and styling it as inactive. */
142
148
  disabled?: boolean;
149
+ /** Make the complete row a keyboard- and pointer-activatable application target. */
150
+ interactive?: boolean;
143
151
  }
144
152
  export interface TableGroup {
145
153
  /** Stable group identity. */
@@ -174,5 +182,8 @@ export interface TableCellActionDetail {
174
182
  rowId: string;
175
183
  columnId: string;
176
184
  }
185
+ export interface TableRowActivateDetail {
186
+ rowId: string;
187
+ }
177
188
  export {};
178
189
  //# sourceMappingURL=table-types.d.ts.map
@@ -61,7 +61,7 @@ import { SliderOrientation, SliderSize, SliderThumbAlignment, SliderValue } from
61
61
  import { SwatchPickerOption, SwatchPickerSection } from "./components/SwatchPicker/swatch-picker-types";
62
62
  import { SwitchSize } from "./components/Switch/Switch";
63
63
  import { TabBackground, TabGroupSize as TabGroupSize1 } from "./components/TabGroup/TabGroup";
64
- import { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableGroup, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableRow, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from "./components/Table/table-types";
64
+ import { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableGroup, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from "./components/Table/table-types";
65
65
  import { TagContrast, TagIntent, TagSize } from "./components/Tag/Tag";
66
66
  import { ToastActionEventDetail, ToastCloseEventDetail, ToastEventDetail, ToastManager, ToastSwipeDirection } from "./toast";
67
67
  import { TooltipAlign, TooltipSide, TooltipSize } from "./components/Tooltip/Tooltip";
@@ -122,7 +122,7 @@ export { SliderOrientation, SliderSize, SliderThumbAlignment, SliderValue } from
122
122
  export { SwatchPickerOption, SwatchPickerSection } from "./components/SwatchPicker/swatch-picker-types";
123
123
  export { SwitchSize } from "./components/Switch/Switch";
124
124
  export { TabBackground, TabGroupSize as TabGroupSize1 } from "./components/TabGroup/TabGroup";
125
- export { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableGroup, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableRow, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from "./components/Table/table-types";
125
+ export { TableCaptionVisibility, TableCellActionDetail, TableColumn, TableGroup, TableGroupingChangeDetail, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortState } from "./components/Table/table-types";
126
126
  export { TagContrast, TagIntent, TagSize } from "./components/Tag/Tag";
127
127
  export { ToastActionEventDetail, ToastCloseEventDetail, ToastEventDetail, ToastManager, ToastSwipeDirection } from "./toast";
128
128
  export { TooltipAlign, TooltipSide, TooltipSize } from "./components/Tooltip/Tooltip";
@@ -541,6 +541,11 @@ export namespace Components {
541
541
  * @default false
542
542
  */
543
543
  "isInactive": boolean;
544
+ /**
545
+ * Use reduced outer geometry when nested inside a control of the same size.
546
+ * @default false
547
+ */
548
+ "isInset": boolean;
544
549
  /**
545
550
  * Shows an inline loader and prevents interaction without applying inactive opacity.
546
551
  * @default false
@@ -635,6 +640,11 @@ export namespace Components {
635
640
  * @default false
636
641
  */
637
642
  "isInactive": boolean;
643
+ /**
644
+ * Use reduced outer geometry when nested inside a control of the same size.
645
+ * @default false
646
+ */
647
+ "isInset": boolean;
638
648
  /**
639
649
  * Shows an inline loader and prevents interaction without applying inactive opacity.
640
650
  * @default false
@@ -3925,6 +3935,7 @@ declare global {
3925
3935
  "dsSelectionChange": TableSelectionChangeDetail;
3926
3936
  "dsLoadMore": TableLoadMoreDetail;
3927
3937
  "dsCellAction": TableCellActionDetail;
3938
+ "dsRowActivate": TableRowActivateDetail;
3928
3939
  }
3929
3940
  interface HTMLDsTableElement extends Components.DsTable, HTMLStencilElement {
3930
3941
  addEventListener<K extends keyof HTMLDsTableElementEventMap>(type: K, listener: (this: HTMLDsTableElement, ev: DsTableCustomEvent<HTMLDsTableElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -4549,6 +4560,11 @@ declare namespace LocalJSX {
4549
4560
  * @default false
4550
4561
  */
4551
4562
  "isInactive"?: boolean;
4563
+ /**
4564
+ * Use reduced outer geometry when nested inside a control of the same size.
4565
+ * @default false
4566
+ */
4567
+ "isInset"?: boolean;
4552
4568
  /**
4553
4569
  * Shows an inline loader and prevents interaction without applying inactive opacity.
4554
4570
  * @default false
@@ -4643,6 +4659,11 @@ declare namespace LocalJSX {
4643
4659
  * @default false
4644
4660
  */
4645
4661
  "isInactive"?: boolean;
4662
+ /**
4663
+ * Use reduced outer geometry when nested inside a control of the same size.
4664
+ * @default false
4665
+ */
4666
+ "isInset"?: boolean;
4646
4667
  /**
4647
4668
  * Shows an inline loader and prevents interaction without applying inactive opacity.
4648
4669
  * @default false
@@ -6794,6 +6815,7 @@ declare namespace LocalJSX {
6794
6815
  "onDsCellAction"?: (event: DsTableCustomEvent<TableCellActionDetail>) => void;
6795
6816
  "onDsGroupingChange"?: (event: DsTableCustomEvent<TableGroupingChangeDetail>) => void;
6796
6817
  "onDsLoadMore"?: (event: DsTableCustomEvent<TableLoadMoreDetail>) => void;
6818
+ "onDsRowActivate"?: (event: DsTableCustomEvent<TableRowActivateDetail>) => void;
6797
6819
  "onDsSelectionChange"?: (event: DsTableCustomEvent<TableSelectionChangeDetail>) => void;
6798
6820
  "onDsSortChange"?: (event: DsTableCustomEvent<TableSortChangeDetail>) => void;
6799
6821
  /**
@@ -7168,6 +7190,7 @@ declare namespace LocalJSX {
7168
7190
  interface DsButtonFilledAttributes {
7169
7191
  "variant": ButtonFilledVariant;
7170
7192
  "size": ButtonFilledSize;
7193
+ "isInset": boolean;
7171
7194
  "width": ButtonFilledWidth;
7172
7195
  "label": string;
7173
7196
  "icon": string;
@@ -7189,6 +7212,7 @@ declare namespace LocalJSX {
7189
7212
  interface DsButtonUnfilledAttributes {
7190
7213
  "variant": ButtonUnfilledVariant;
7191
7214
  "size": ButtonUnfilledSize;
7215
+ "isInset": boolean;
7192
7216
  "width": ButtonUnfilledWidth;
7193
7217
  "label": string;
7194
7218
  "icon": string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ds-mo/ui",
3
- "version": "13.12.0",
3
+ "version": "13.13.0",
4
4
  "description": "CompoMo — composable web components styled with TokoMo design tokens",
5
5
  "keywords": [
6
6
  "web-components",