@ds-mo/ui 14.25.0 → 14.27.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 (220) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +343 -16
  4. package/dist/angular/ds-score.d.ts +12 -0
  5. package/dist/angular/ds-score.js +38 -0
  6. package/dist/angular/ds-textarea.d.ts +15 -0
  7. package/dist/angular/ds-textarea.js +43 -0
  8. package/dist/angular/index.d.ts +1 -1
  9. package/dist/angular/index.js +2 -0
  10. package/dist/angular/proxies.d.ts +2 -0
  11. package/dist/angular/proxies.js +2 -0
  12. package/dist/angular/text-value-accessor.d.ts +1 -1
  13. package/dist/angular/text-value-accessor.js +2 -2
  14. package/dist/components/ds-agent-activity.js +1 -1
  15. package/dist/components/ds-agent-questionnaire.js +1 -1
  16. package/dist/components/ds-agent-response.js +1 -1
  17. package/dist/components/ds-agent-source-list.js +1 -1
  18. package/dist/components/ds-agent-tool-call.js +1 -1
  19. package/dist/components/ds-attachment-list.js +1 -1
  20. package/dist/components/ds-badge.js +1 -1
  21. package/dist/components/ds-banner.js +1 -1
  22. package/dist/components/ds-bar-action.js +1 -1
  23. package/dist/components/ds-bar-nav.js +1 -1
  24. package/dist/components/ds-bar-title.js +1 -1
  25. package/dist/components/ds-bar-workflow.js +1 -1
  26. package/dist/components/ds-breadcrumb.js +1 -1
  27. package/dist/components/ds-button-filled.js +1 -1
  28. package/dist/components/ds-button-unfilled.js +1 -1
  29. package/dist/components/ds-card-chart.js +1 -1
  30. package/dist/components/ds-card-overview.js +1 -1
  31. package/dist/components/ds-card-overview.js.map +1 -1
  32. package/dist/components/ds-card-setting.js +1 -1
  33. package/dist/components/ds-chart-legend.js +1 -1
  34. package/dist/components/ds-chart.js +1 -1
  35. package/dist/components/ds-checkbox.js +1 -1
  36. package/dist/components/ds-chip.js +1 -1
  37. package/dist/components/ds-code-block.js +1 -1
  38. package/dist/components/ds-conversation-list-item.js +1 -1
  39. package/dist/components/ds-conversation-list-section.js +1 -1
  40. package/dist/components/ds-empty-state.js +1 -1
  41. package/dist/components/ds-field.js +1 -1
  42. package/dist/components/ds-filter-menu.js +1 -1
  43. package/dist/components/ds-input.js +1 -1
  44. package/dist/components/ds-markdown.js +1 -1
  45. package/dist/components/ds-menu.js +1 -1
  46. package/dist/components/ds-message-actions.js +1 -1
  47. package/dist/components/ds-message-composer.js +1 -1
  48. package/dist/components/ds-message-scroller.js +1 -1
  49. package/dist/components/ds-message.js +1 -1
  50. package/dist/components/ds-mobile-bar-nav.js +1 -1
  51. package/dist/components/ds-mobile-header.js +1 -1
  52. package/dist/components/ds-mobile-section-switcher.js +1 -1
  53. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  54. package/dist/components/ds-modal.js +1 -1
  55. package/dist/components/ds-pagination.js +1 -1
  56. package/dist/components/ds-panel-nav.js +1 -1
  57. package/dist/components/ds-panel-sub-nav.js +1 -1
  58. package/dist/components/ds-panel-tool-header.js +1 -1
  59. package/dist/components/ds-panel-tool-search.js +1 -1
  60. package/dist/components/ds-panel-tools.js +1 -1
  61. package/dist/components/ds-paper-texture.js +1 -1
  62. package/dist/components/ds-radio.js +1 -1
  63. package/dist/components/ds-score.d.ts +11 -0
  64. package/dist/components/ds-score.js +2 -0
  65. package/dist/components/ds-score.js.map +1 -0
  66. package/dist/components/ds-select.js +1 -1
  67. package/dist/components/ds-shell-app.js +1 -1
  68. package/dist/components/ds-shell-page.js +1 -1
  69. package/dist/components/ds-shell-tools.js +1 -1
  70. package/dist/components/ds-slider.js +1 -1
  71. package/dist/components/ds-swatch-picker.js +1 -1
  72. package/dist/components/ds-tab-group.js +1 -1
  73. package/dist/components/ds-table-filter.js +1 -1
  74. package/dist/components/ds-table-group.js +1 -1
  75. package/dist/components/ds-table-group.js.map +1 -1
  76. package/dist/components/ds-table-saved-views.js +1 -1
  77. package/dist/components/ds-table-search.js +1 -1
  78. package/dist/components/ds-table-sort.js +1 -1
  79. package/dist/components/ds-table-toolbar.js +1 -1
  80. package/dist/components/ds-table.js +1 -1
  81. package/dist/components/ds-table.js.map +1 -1
  82. package/dist/components/ds-tag.js +1 -1
  83. package/dist/components/ds-text.js +1 -1
  84. package/dist/components/ds-textarea.d.ts +11 -0
  85. package/dist/components/ds-textarea.js +2 -0
  86. package/dist/components/ds-textarea.js.map +1 -0
  87. package/dist/components/ds-toast.js +1 -1
  88. package/dist/components/ds-tooltip-chart.js +1 -1
  89. package/dist/components/ds-tooltip.js +1 -1
  90. package/dist/components/ds-typing-indicator.js +1 -1
  91. package/dist/components/{p-DLaN9BPq.js → p-1604KY3B.js} +2 -2
  92. package/dist/components/{p-CYMKmJ2s.js → p-2wIPUcSL.js} +2 -2
  93. package/dist/components/{p-CEfxLsbX.js → p-537t6oRD.js} +2 -2
  94. package/dist/components/{p-kslioYhf.js → p-6_CNVbqa.js} +2 -2
  95. package/dist/components/{p-PXdvBMXB.js → p-B3Z5sQin.js} +2 -2
  96. package/dist/components/{p-CZjjDhUl.js → p-B3sRZBZk.js} +2 -2
  97. package/dist/components/{p-BZlhBJZL.js → p-B9esvbYk.js} +2 -2
  98. package/dist/components/{p-5Z4oYuiK.js → p-BEXkJ9lg.js} +2 -2
  99. package/dist/components/{p-DbLLH3hr.js → p-BIGpc__9.js} +2 -2
  100. package/dist/components/{p-DzPtYdXy.js → p-BMzn2Cmw.js} +2 -2
  101. package/dist/components/{p-BSRIF4m8.js → p-BRLDf-NK.js} +2 -2
  102. package/dist/components/{p-0X-4KGQf.js → p-BUh2GkPJ.js} +2 -2
  103. package/dist/components/{p-pUOA3iDG.js → p-BVpn_e-r.js} +2 -2
  104. package/dist/components/{p-CpeJMKJ5.js → p-BVz-r3g0.js} +2 -2
  105. package/dist/components/{p-CBymzuOO.js → p-BXDLR072.js} +2 -2
  106. package/dist/components/{p-DiS5BgLA.js → p-BZiGtBBk.js} +2 -2
  107. package/dist/components/{p-BcxidW9k.js → p-Bb9dA7sl.js} +2 -2
  108. package/dist/components/{p-BR1ayqMU.js → p-Bjt_8sLe.js} +2 -2
  109. package/dist/components/{p-BqbdABo3.js → p-BssZ4SbT.js} +2 -2
  110. package/dist/components/{p-bHnk8t5I.js → p-C68oSTb1.js} +2 -2
  111. package/dist/components/{p-C_FFU6W3.js → p-CGQnHNuW.js} +2 -2
  112. package/dist/components/{p-BqVXMEJm.js → p-CQjUOHiN.js} +2 -2
  113. package/dist/components/{p-w9fkkwL2.js → p-CaF5WCci.js} +2 -2
  114. package/dist/components/{p-Bjq1KP_Y.js → p-Cf5Ai4xx.js} +2 -2
  115. package/dist/components/{p-B0kSlcaw.js → p-Cr6pDY-e.js} +2 -2
  116. package/dist/components/{p-FxtgCvhA.js → p-Cy1oWIaV.js} +2 -2
  117. package/dist/components/{p-CTH3dSYg.js → p-DDqRCDXh.js} +2 -2
  118. package/dist/components/{p-x5u5Ueli.js → p-DIqAdmui.js} +2 -2
  119. package/dist/components/{p-Cd1JnnVK.js → p-DQQsS9Rx.js} +2 -2
  120. package/dist/components/{p-CZHIkVgj.js → p-DQsFmleZ.js} +2 -2
  121. package/dist/components/{p-CE2b5GPu.js → p-DVLghmNY.js} +2 -2
  122. package/dist/components/p-DW8ssbfI.js +2 -0
  123. package/dist/components/p-DW8ssbfI.js.map +1 -0
  124. package/dist/components/{p-BXv6RpoF.js → p-DZcIt_JJ.js} +2 -2
  125. package/dist/components/{p-CglHiyY2.js → p-DkxOEFHN.js} +2 -2
  126. package/dist/components/{p-DeK_6Uym.js → p-DlbhmXjH.js} +2 -2
  127. package/dist/components/{p-Bq8svcPs.js → p-GEi3hDJQ.js} +2 -2
  128. package/dist/components/p-LMmrjmI_.js +2 -0
  129. package/dist/components/p-LMmrjmI_.js.map +1 -0
  130. package/dist/components/{p-DI8DUozc.js → p-Q0dkeoJ6.js} +2 -2
  131. package/dist/components/{p-XaCYqck3.js → p-Q7AOgrg5.js} +2 -2
  132. package/dist/components/p-VT-5XDkB.js +2 -0
  133. package/dist/components/p-VT-5XDkB.js.map +1 -0
  134. package/dist/components/{p-B0OZx3JB.js → p-WFo1x6dN.js} +2 -2
  135. package/dist/components/{p-CEXchU5N.js → p-to8BxxgT.js} +2 -2
  136. package/dist/docs/components.json +1106 -5
  137. package/dist/mcp-data/registry/card-overview.json +8 -6
  138. package/dist/mcp-data/registry/field.json +5 -4
  139. package/dist/mcp-data/registry/panel-nav.json +2 -1
  140. package/dist/mcp-data/registry/registry.json +348 -15
  141. package/dist/mcp-data/registry/score.json +241 -0
  142. package/dist/mcp-data/registry/table-group.json +5 -5
  143. package/dist/mcp-data/registry/table.json +16 -13
  144. package/dist/mcp-data/registry/textarea.json +600 -0
  145. package/dist/mcp-data/registry/tooltip.json +5 -5
  146. package/dist/react/components.d.ts +2 -0
  147. package/dist/react/components.js +2 -0
  148. package/dist/react/ds-score.d.ts +9 -0
  149. package/dist/react/ds-score.js +12 -0
  150. package/dist/react/ds-textarea.d.ts +12 -0
  151. package/dist/react/ds-textarea.js +12 -0
  152. package/dist/styles/table.css +188 -69
  153. package/dist/types/components/CardOverview/card-overview-controller.d.ts +2 -2
  154. package/dist/types/components/CardOverview/card-overview-types.d.ts +2 -1
  155. package/dist/types/components/Score/Score.d.ts +21 -0
  156. package/dist/types/components/Score/index.d.ts +3 -0
  157. package/dist/types/components/Score/score-model.d.ts +14 -0
  158. package/dist/types/components/Score/score-types.d.ts +5 -0
  159. package/dist/types/components/Table/Table.d.ts +3 -0
  160. package/dist/types/components/Table/index.d.ts +1 -1
  161. package/dist/types/components/Table/table-cell-model.d.ts +12 -0
  162. package/dist/types/components/Table/table-model.d.ts +10 -1
  163. package/dist/types/components/Table/table-render-model.d.ts +3 -1
  164. package/dist/types/components/Table/table-types.d.ts +62 -1
  165. package/dist/types/components/Table/table-virtual-model.d.ts +6 -5
  166. package/dist/types/components/TableGroup/TableGroup.d.ts +13 -3
  167. package/dist/types/components/Textarea/Textarea.d.ts +66 -0
  168. package/dist/types/components/Textarea/index.d.ts +2 -0
  169. package/dist/types/components/Tooltip/Tooltip.d.ts +1 -1
  170. package/dist/types/components.d.ts +324 -2
  171. package/dist/vue/components.d.ts +2 -0
  172. package/dist/vue/components.js +2 -0
  173. package/dist/vue/ds-score.d.ts +3 -0
  174. package/dist/vue/ds-score.js +12 -0
  175. package/dist/vue/ds-textarea.d.ts +3 -0
  176. package/dist/vue/ds-textarea.js +36 -0
  177. package/package.json +1 -1
  178. package/dist/components/p-9X_p0bHr.js +0 -2
  179. package/dist/components/p-9X_p0bHr.js.map +0 -1
  180. package/dist/components/p-Bo6uW_8T.js +0 -2
  181. package/dist/components/p-Bo6uW_8T.js.map +0 -1
  182. /package/dist/components/{p-DLaN9BPq.js.map → p-1604KY3B.js.map} +0 -0
  183. /package/dist/components/{p-CYMKmJ2s.js.map → p-2wIPUcSL.js.map} +0 -0
  184. /package/dist/components/{p-CEfxLsbX.js.map → p-537t6oRD.js.map} +0 -0
  185. /package/dist/components/{p-kslioYhf.js.map → p-6_CNVbqa.js.map} +0 -0
  186. /package/dist/components/{p-PXdvBMXB.js.map → p-B3Z5sQin.js.map} +0 -0
  187. /package/dist/components/{p-CZjjDhUl.js.map → p-B3sRZBZk.js.map} +0 -0
  188. /package/dist/components/{p-BZlhBJZL.js.map → p-B9esvbYk.js.map} +0 -0
  189. /package/dist/components/{p-5Z4oYuiK.js.map → p-BEXkJ9lg.js.map} +0 -0
  190. /package/dist/components/{p-DbLLH3hr.js.map → p-BIGpc__9.js.map} +0 -0
  191. /package/dist/components/{p-DzPtYdXy.js.map → p-BMzn2Cmw.js.map} +0 -0
  192. /package/dist/components/{p-BSRIF4m8.js.map → p-BRLDf-NK.js.map} +0 -0
  193. /package/dist/components/{p-0X-4KGQf.js.map → p-BUh2GkPJ.js.map} +0 -0
  194. /package/dist/components/{p-pUOA3iDG.js.map → p-BVpn_e-r.js.map} +0 -0
  195. /package/dist/components/{p-CpeJMKJ5.js.map → p-BVz-r3g0.js.map} +0 -0
  196. /package/dist/components/{p-CBymzuOO.js.map → p-BXDLR072.js.map} +0 -0
  197. /package/dist/components/{p-DiS5BgLA.js.map → p-BZiGtBBk.js.map} +0 -0
  198. /package/dist/components/{p-BcxidW9k.js.map → p-Bb9dA7sl.js.map} +0 -0
  199. /package/dist/components/{p-BR1ayqMU.js.map → p-Bjt_8sLe.js.map} +0 -0
  200. /package/dist/components/{p-BqbdABo3.js.map → p-BssZ4SbT.js.map} +0 -0
  201. /package/dist/components/{p-bHnk8t5I.js.map → p-C68oSTb1.js.map} +0 -0
  202. /package/dist/components/{p-C_FFU6W3.js.map → p-CGQnHNuW.js.map} +0 -0
  203. /package/dist/components/{p-BqVXMEJm.js.map → p-CQjUOHiN.js.map} +0 -0
  204. /package/dist/components/{p-w9fkkwL2.js.map → p-CaF5WCci.js.map} +0 -0
  205. /package/dist/components/{p-Bjq1KP_Y.js.map → p-Cf5Ai4xx.js.map} +0 -0
  206. /package/dist/components/{p-B0kSlcaw.js.map → p-Cr6pDY-e.js.map} +0 -0
  207. /package/dist/components/{p-FxtgCvhA.js.map → p-Cy1oWIaV.js.map} +0 -0
  208. /package/dist/components/{p-CTH3dSYg.js.map → p-DDqRCDXh.js.map} +0 -0
  209. /package/dist/components/{p-x5u5Ueli.js.map → p-DIqAdmui.js.map} +0 -0
  210. /package/dist/components/{p-Cd1JnnVK.js.map → p-DQQsS9Rx.js.map} +0 -0
  211. /package/dist/components/{p-CZHIkVgj.js.map → p-DQsFmleZ.js.map} +0 -0
  212. /package/dist/components/{p-CE2b5GPu.js.map → p-DVLghmNY.js.map} +0 -0
  213. /package/dist/components/{p-BXv6RpoF.js.map → p-DZcIt_JJ.js.map} +0 -0
  214. /package/dist/components/{p-CglHiyY2.js.map → p-DkxOEFHN.js.map} +0 -0
  215. /package/dist/components/{p-DeK_6Uym.js.map → p-DlbhmXjH.js.map} +0 -0
  216. /package/dist/components/{p-Bq8svcPs.js.map → p-GEi3hDJQ.js.map} +0 -0
  217. /package/dist/components/{p-DI8DUozc.js.map → p-Q0dkeoJ6.js.map} +0 -0
  218. /package/dist/components/{p-XaCYqck3.js.map → p-Q7AOgrg5.js.map} +0 -0
  219. /package/dist/components/{p-B0OZx3JB.js.map → p-WFo1x6dN.js.map} +0 -0
  220. /package/dist/components/{p-CEXchU5N.js.map → p-to8BxxgT.js.map} +0 -0
@@ -13,12 +13,8 @@
13
13
  --_table-cell-track-label-inset: var(--dimension-space-025);
14
14
  --_table-caption-bar-block-size: var(--dimension-size-600);
15
15
  --_table-image-block-size: var(--_table-cell-track-min-block-size);
16
- --_table-image-block-size-multi: calc(
17
- var(--_table-cell-track-min-block-size) + var(--dimension-space-025) + var(--dimension-size-250)
18
- );
19
- --_table-image-block-size-triple: calc(
20
- var(--_table-image-block-size-multi) + var(--dimension-space-025) + var(--dimension-size-250)
21
- );
16
+ --_table-image-block-size-multi: calc(2 * var(--_table-cell-track-min-block-size));
17
+ --_table-image-block-size-triple: calc(3 * var(--_table-cell-track-min-block-size));
22
18
  --_table-image-column-inline-size: calc(
23
19
  ((var(--_table-image-block-size) * 16) / 9) + (var(--_table-cell-padding-inline) * 2)
24
20
  );
@@ -29,27 +25,13 @@
29
25
  ((var(--_table-image-block-size-triple) * 16) / 9) + (var(--_table-cell-padding-inline) * 2)
30
26
  );
31
27
  /*
32
- * Wrapping primary on a 1-track cell occupies later tracks instead of a
33
- * private leading scale. Keep body-medium size; add the 2px stack gap to
34
- * line-height and leave the leftover first-track inset as padding-block
35
- * so 1 / 2 / 3 wrapped lines measure 40 / 62 / 84 like named tracks.
36
- */
37
- --_table-wrap-primary-line-height: calc(
38
- var(--typography-lineheight-md) + var(--dimension-space-025)
39
- );
40
- --_table-wrap-primary-padding-block: calc(
41
- (
42
- var(--_table-cell-track-min-block-size) - var(--typography-lineheight-md) -
43
- var(--dimension-space-025)
44
- ) /
45
- 2
46
- );
47
- /*
48
- * Wrapping secondary on a 2-track cell occupies later tracks. Zero the copy
49
- * gap and use later-track + gap as line-height so 1 / 2 / 3 secondary lines
50
- * land on 62 / 84 / 106 with primary remaining the first 24px track.
28
+ * Every body-row track is 24px with no stack gap (40 / 64 / 88 / 112).
29
+ * Wrapping primary and secondary use that same 24px as line-height so
30
+ * extra lines land on named tracks without a private leading scale.
51
31
  */
52
- --_table-wrap-secondary-line-height: calc(var(--dimension-size-250) + var(--dimension-space-025));
32
+ --_table-wrap-primary-line-height: var(--_table-cell-track-min-block-size);
33
+ --_table-wrap-primary-padding-block: 0px;
34
+ --_table-wrap-secondary-line-height: var(--_table-cell-track-min-block-size);
53
35
  --_table-wrap-secondary-padding-block: 0;
54
36
  --_table-surface: var(--ds-table-surface, var(--color-background-primary));
55
37
  --_table-header-surface: var(--ds-table-header-surface, var(--color-background-primary));
@@ -894,18 +876,18 @@
894
876
 
895
877
  :where(.ds-table__cell--text-multi .ds-table__cell-copy),
896
878
  :where(.ds-table__cell--text-triple .ds-table__cell-copy) {
897
- gap: var(--dimension-space-025);
879
+ gap: 0;
898
880
  }
899
881
 
900
882
  /*
901
- * Body cells share 8px chrome. 20px content (body-medium text, md icon,
902
- * checkbox) sits in a 24px track (2px block inset). Text tracks keep that
903
- * 2px plus the 2px label inset, so padding-inline is 4px and copy lines up
904
- * with column-header labels. Later body-small tracks stay 20px, stacked with
905
- * a 2px gap. Wrapping 1-track primary folds that gap into line-height so
906
- * extra lines land on the same 62px and 84px rows as 2- and 3-track cells.
907
- * Wrapping secondary keeps primary on track 1 and consumes later tracks the
908
- * same way, including a 106px fourth track when secondary wraps to three lines.
883
+ * Body cells share 8px chrome. Every named track is 24px with no stack gap,
884
+ * so 20px content (body-medium text, md icon, checkbox, sm tag) sits in that
885
+ * track with a 2px block inset. Text tracks keep that 2px plus the 2px label
886
+ * inset, so padding-inline is 4px and copy lines up with column-header labels.
887
+ * Wrapping 1-track primary uses the 24px track as line-height so extra lines
888
+ * land on the same 64px and 88px rows as 2- and 3-track cells. Wrapping
889
+ * secondary keeps primary on track 1 and consumes later tracks the same way,
890
+ * including a 112px fourth track when secondary wraps to three lines.
909
891
  * Header and group rows keep their own recipes.
910
892
  */
911
893
  :where(.ds-table__cell-primary),
@@ -915,12 +897,16 @@
915
897
 
916
898
  :where(.ds-table__cell--text-multi .ds-table__cell-secondary),
917
899
  :where(.ds-table__cell--text-triple .ds-table__cell-secondary),
918
- :where(.ds-table__cell--text-triple .ds-table__cell-tertiary) {
919
- padding-block: var(--dimension-space-025);
920
- }
921
-
900
+ :where(.ds-table__cell--text-triple .ds-table__cell-tertiary),
901
+ :where(.ds-table__cell--icon-text-multi .ds-table__cell-secondary),
902
+ :where(.ds-table__cell--icon-text-triple .ds-table__cell-secondary),
903
+ :where(.ds-table__cell--icon-text-triple .ds-table__cell-tertiary),
904
+ :where(.ds-table__cell--score-text-multi .ds-table__cell-secondary),
905
+ :where(.ds-table__cell--score-text-triple .ds-table__cell-secondary),
906
+ :where(.ds-table__cell--score-text-triple .ds-table__cell-tertiary),
922
907
  :where(.ds-table__cell--primary-text .ds-table__cell-secondary) {
923
- padding-block: 0;
908
+ padding-block: var(--dimension-space-025);
909
+ min-block-size: var(--_table-cell-track-min-block-size);
924
910
  }
925
911
 
926
912
  :where(.ds-table__cell--tag-tag-only .ds-table__cell-content) {
@@ -928,10 +914,10 @@
928
914
  }
929
915
 
930
916
  /*
931
- * Multiple Tags use the 20px small single-inset control so each wrapped line
932
- * occupies one later-track slot. The 2px block inset forms the 24px first
933
- * track; subsequent lines add a 20px track and 2px gap, preserving the named
934
- * row ladder for any declared number of tracks.
917
+ * Multiple Tags use the 20px small single-inset control. Each wrap line is a
918
+ * 24px track (2px block margin around the tag) with no row-gap, so wrap lines
919
+ * land on the same 40 / 64 / 88 ladder as text. Same-line tags keep a 2px
920
+ * column gap.
935
921
  */
936
922
  :where(.ds-table__cell--tags .ds-table__cell-content) {
937
923
  min-block-size: 0;
@@ -942,18 +928,19 @@
942
928
  flex-wrap: wrap;
943
929
  align-content: flex-start;
944
930
  align-items: center;
945
- gap: var(--dimension-space-025);
931
+ gap: 0 var(--dimension-space-025);
946
932
  box-sizing: border-box;
947
933
  inline-size: 100%;
948
934
  min-inline-size: 0;
949
935
  max-inline-size: 100%;
950
936
  min-block-size: var(--_table-cell-tags-min-block-size, var(--_table-cell-track-min-block-size));
951
- padding-block: var(--dimension-space-025);
937
+ padding-block: 0;
952
938
  }
953
939
 
954
940
  :where(.ds-table__cell-tags > ds-tag) {
955
941
  flex: none;
956
942
  max-inline-size: 100%;
943
+ margin-block: var(--dimension-space-025);
957
944
  }
958
945
 
959
946
  :where(.ds-table__cell-tag-stack) {
@@ -972,21 +959,21 @@
972
959
  :where(.ds-table__cell-tag-stack--tag-with-text .ds-table__cell-tag-text) {
973
960
  padding-inline: var(--_table-cell-track-padding-inline);
974
961
  padding-block: var(--dimension-space-025);
975
- min-block-size: 0;
962
+ min-block-size: var(--_table-cell-track-min-block-size);
976
963
  }
977
964
 
978
965
  :where(.ds-table__cell-tag-stack--tag-with-text) {
979
- gap: var(--dimension-space-025);
966
+ gap: 0;
980
967
  }
981
968
 
982
969
  :where(.ds-table__cell-tag-stack--text-with-tag .ds-table__cell-tag-text) {
983
970
  padding-inline: var(--_table-cell-track-padding-inline);
984
971
  padding-block: var(--dimension-space-025);
985
- min-block-size: 0;
972
+ min-block-size: var(--_table-cell-track-min-block-size);
986
973
  }
987
974
 
988
975
  :where(.ds-table__cell-tag-stack--text-with-tag) {
989
- gap: var(--dimension-space-025);
976
+ gap: 0;
990
977
  }
991
978
 
992
979
  :where(.ds-table__cell-tag-control-track) {
@@ -995,10 +982,6 @@
995
982
  min-block-size: var(--_table-cell-track-min-block-size);
996
983
  }
997
984
 
998
- :where(.ds-table__cell-tag-stack--text-with-tag .ds-table__cell-tag-control-track) {
999
- min-block-size: var(--dimension-size-250);
1000
- }
1001
-
1002
985
  :where(.ds-table__cell--icon .ds-table__cell-content) {
1003
986
  align-items: center;
1004
987
  justify-content: center;
@@ -1035,19 +1018,58 @@
1035
1018
 
1036
1019
  :where(.ds-table__cell--icon-text-multi .ds-table__cell-copy),
1037
1020
  :where(.ds-table__cell--icon-text-triple .ds-table__cell-copy) {
1038
- gap: var(--dimension-space-025);
1021
+ gap: 0;
1039
1022
  }
1040
1023
 
1041
1024
  :where(.ds-table__cell--icon-text-multi .ds-table__cell-secondary),
1042
1025
  :where(.ds-table__cell--icon-text-triple .ds-table__cell-secondary),
1043
1026
  :where(.ds-table__cell--icon-text-triple .ds-table__cell-tertiary) {
1044
1027
  padding-block: var(--dimension-space-025);
1028
+ min-block-size: var(--_table-cell-track-min-block-size);
1029
+ }
1030
+
1031
+ /*
1032
+ * Score-and-text: copy fills from the start edge while the sm Score owns the
1033
+ * top-right 24px track. The score has no padding that would enlarge or
1034
+ * misalign its fill.
1035
+ */
1036
+ :where(.ds-table__cell-score-text) {
1037
+ display: flex;
1038
+ align-items: flex-start;
1039
+ gap: var(--dimension-space-075);
1040
+ inline-size: 100%;
1041
+ min-inline-size: 0;
1042
+ max-inline-size: 100%;
1043
+ }
1044
+
1045
+ :where(.ds-table__cell-score-text-score) {
1046
+ box-sizing: border-box;
1047
+ display: flex;
1048
+ flex: none;
1049
+ align-items: flex-start;
1050
+ min-block-size: var(--_table-cell-track-min-block-size);
1051
+ }
1052
+
1053
+ :where(.ds-table__cell--score-text .ds-table__cell-content),
1054
+ :where(.ds-table__cell--score-text .ds-table__cell-track) {
1055
+ min-block-size: 0;
1056
+ }
1057
+
1058
+ :where(.ds-table__cell--score-text-multi .ds-table__cell-copy),
1059
+ :where(.ds-table__cell--score-text-triple .ds-table__cell-copy) {
1060
+ gap: 0;
1061
+ }
1062
+
1063
+ :where(.ds-table__cell--score-text-multi .ds-table__cell-secondary),
1064
+ :where(.ds-table__cell--score-text-triple .ds-table__cell-secondary),
1065
+ :where(.ds-table__cell--score-text-triple .ds-table__cell-tertiary) {
1066
+ padding-block: var(--dimension-space-025);
1067
+ min-block-size: var(--_table-cell-track-min-block-size);
1045
1068
  }
1046
1069
 
1047
1070
  /*
1048
1071
  * Image previews fill the matching body-row content box (cell height minus
1049
- * 8px padding) at 16:9. Track 1 is the 24px first-track stack; tracks 2 and
1050
- * 3 add the same 20px later-track and 2px gap as text.
1072
+ * 8px padding) at 16:9. Each track is 24px with no stack gap.
1051
1073
  */
1052
1074
  :where(.ds-table__cell-image) {
1053
1075
  display: block;
@@ -1121,25 +1143,32 @@
1121
1143
  * to the 40px single-track row.
1122
1144
  */
1123
1145
  :where(.ds-table__cell--text-wrap .ds-table__cell-track--text),
1124
- :where(.ds-table__cell--icon-text-wrap .ds-table__cell-track--text) {
1146
+ :where(.ds-table__cell--icon-text-wrap .ds-table__cell-track--text),
1147
+ :where(.ds-table__cell--score-text-wrap .ds-table__cell-track--text) {
1125
1148
  display: block;
1126
1149
  }
1127
1150
 
1128
1151
  :where(.ds-table__cell--text-wrap.ds-table__cell--text-single .ds-table__cell-primary),
1129
1152
  :where(.ds-table__cell--text-wrap.ds-table__cell--text-multi .ds-table__cell-primary),
1130
1153
  :where(.ds-table__cell--icon-text-wrap.ds-table__cell--icon-text-single .ds-table__cell-primary),
1131
- :where(.ds-table__cell--icon-text-wrap.ds-table__cell--icon-text-multi .ds-table__cell-primary) {
1154
+ :where(.ds-table__cell--icon-text-wrap.ds-table__cell--icon-text-multi .ds-table__cell-primary),
1155
+ :where(.ds-table__cell--score-text-wrap.ds-table__cell--score-text-single .ds-table__cell-primary),
1156
+ :where(.ds-table__cell--score-text-wrap.ds-table__cell--score-text-multi .ds-table__cell-primary) {
1132
1157
  line-height: var(--_table-wrap-primary-line-height);
1133
1158
  padding-block: var(--_table-wrap-primary-padding-block);
1134
1159
  }
1135
1160
 
1136
1161
  :where(.ds-table__cell--text-wrap.ds-table__cell--text-multi .ds-table__cell-copy),
1137
- :where(.ds-table__cell--icon-text-wrap.ds-table__cell--icon-text-multi .ds-table__cell-copy) {
1162
+ :where(.ds-table__cell--icon-text-wrap.ds-table__cell--icon-text-multi .ds-table__cell-copy),
1163
+ :where(.ds-table__cell--score-text-wrap.ds-table__cell--score-text-multi .ds-table__cell-copy) {
1138
1164
  gap: 0;
1139
1165
  }
1140
1166
 
1141
1167
  :where(.ds-table__cell--text-wrap.ds-table__cell--text-multi .ds-table__cell-secondary),
1142
- :where(.ds-table__cell--icon-text-wrap.ds-table__cell--icon-text-multi .ds-table__cell-secondary) {
1168
+ :where(.ds-table__cell--icon-text-wrap.ds-table__cell--icon-text-multi .ds-table__cell-secondary),
1169
+ :where(
1170
+ .ds-table__cell--score-text-wrap.ds-table__cell--score-text-multi .ds-table__cell-secondary
1171
+ ) {
1143
1172
  line-height: var(--_table-wrap-secondary-line-height);
1144
1173
  padding-block: var(--_table-wrap-secondary-padding-block);
1145
1174
  }
@@ -1402,6 +1431,28 @@
1402
1431
  border-block-end: 0;
1403
1432
  background: var(--_table-group-surface);
1404
1433
  background-clip: border-box;
1434
+ cursor: default;
1435
+ }
1436
+
1437
+ /* Hover/press wash. Keep this on ::before so the dedicated trailing-edge
1438
+ * separator on ::after stays the original 1px surface rule. */
1439
+ :where(.ds-table__group-content)::before {
1440
+ content: '';
1441
+ position: absolute;
1442
+ inset: 0;
1443
+ z-index: 0;
1444
+ background: transparent;
1445
+ pointer-events: none;
1446
+ }
1447
+
1448
+ @media (hover: hover) and (pointer: fine) {
1449
+ :where(.ds-table__group-content:hover)::before {
1450
+ background: var(--_table-row-hover);
1451
+ }
1452
+ }
1453
+
1454
+ :where(.ds-table__group-content:active)::before {
1455
+ background: var(--_table-row-pressed);
1405
1456
  }
1406
1457
 
1407
1458
  :where(.ds-table__group-content)::after {
@@ -1409,6 +1460,7 @@
1409
1460
  position: absolute;
1410
1461
  inset-inline: 0;
1411
1462
  inset-block-end: 0;
1463
+ z-index: 1;
1412
1464
  block-size: var(--dimension-stroke-width-012);
1413
1465
  background: var(--_table-border);
1414
1466
  pointer-events: none;
@@ -1446,31 +1498,94 @@
1446
1498
  block-size: var(--dimension-iconography-md);
1447
1499
  }
1448
1500
 
1449
- :where(.ds-table__group-copy) {
1450
- /* The full-size sm count tag owns the 24px content height; inline padding
1451
- * preserves the shared text track without making the 40px section row grow. */
1501
+ :where(.ds-table__group-content--hero) {
1502
+ align-items: flex-start;
1503
+ }
1504
+
1505
+ :where(.ds-table__group-hero) {
1506
+ position: relative;
1452
1507
  box-sizing: border-box;
1453
1508
  display: inline-flex;
1454
- align-items: center;
1509
+ flex: 0 0 auto;
1510
+ align-self: flex-start;
1511
+ /* Same 6px as the extra group-copy inset so the sm figure sits on the text column. */
1512
+ margin-inline-start: var(--dimension-space-075);
1513
+ }
1514
+
1515
+ :where(.ds-table__group-hero)::after {
1516
+ content: '';
1517
+ position: absolute;
1518
+ inset: 0;
1519
+ z-index: 1;
1520
+ box-sizing: border-box;
1521
+ border-radius: var(--dimension-radius-025);
1522
+ border: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);
1523
+ pointer-events: none;
1524
+ }
1525
+
1526
+ :where(.ds-table__table--selectable .ds-table__group-hero),
1527
+ :where(.ds-table__sticky-group--selectable .ds-table__group-hero) {
1528
+ /* Margin, not padding: ::after inset:0 must hug the 24px sm fill. */
1529
+ margin-inline-end: var(--dimension-space-100);
1530
+ }
1531
+
1532
+ :where(.ds-table__group-content--multi) {
1533
+ align-items: flex-start;
1534
+ min-block-size: calc(var(--_table-row-min-block-size) + var(--_table-cell-track-min-block-size));
1535
+ }
1536
+
1537
+ :where(.ds-table__group-copy) {
1538
+ /* One or two 24px tracks; 8px chrome on group-content keeps 40 / 64 row height. */
1539
+ box-sizing: border-box;
1540
+ display: flex;
1541
+ flex-direction: column;
1542
+ justify-content: center;
1455
1543
  min-inline-size: 0;
1456
1544
  flex: 1 1 auto;
1457
- gap: var(--dimension-space-050);
1545
+ gap: 0;
1458
1546
  padding-block: 0;
1459
1547
  padding-inline: var(--dimension-space-050);
1460
1548
  }
1461
1549
 
1550
+ :where(.ds-table__group-primary),
1551
+ :where(.ds-table__group-accessories) {
1552
+ box-sizing: border-box;
1553
+ display: inline-flex;
1554
+ align-items: center;
1555
+ min-inline-size: 0;
1556
+ min-block-size: var(--_table-cell-track-min-block-size);
1557
+ gap: var(--dimension-space-050);
1558
+ }
1559
+
1560
+ :where(.ds-table__group-accessories ds-tooltip),
1561
+ :where(.ds-table__group-accessory-tip) {
1562
+ display: inline-flex;
1563
+ align-items: center;
1564
+ min-inline-size: 0;
1565
+ max-inline-size: 100%;
1566
+ min-block-size: var(--_table-cell-track-min-block-size);
1567
+ }
1568
+
1462
1569
  :where(.ds-table__table--selectable .ds-table__group-copy),
1463
1570
  :where(.ds-table__sticky-group--selectable .ds-table__group-copy) {
1464
- padding-inline-start: calc(var(--dimension-space-100) + var(--_table-cell-track-label-inset));
1571
+ /* 8px cell chrome + 4px text-track inset matches header 8+2+2 and body copy. */
1572
+ padding-inline-start: calc(var(--dimension-space-100) + var(--_table-cell-track-padding-inline));
1573
+ }
1574
+
1575
+ :where(.ds-table__table--selectable .ds-table__group-content--hero .ds-table__group-copy),
1576
+ :where(.ds-table__sticky-group--selectable .ds-table__group-content--hero .ds-table__group-copy) {
1577
+ padding-inline-start: var(--dimension-space-050);
1465
1578
  }
1466
1579
 
1467
1580
  :where(.ds-table__group-separator),
1468
- :where(.ds-table__group-count) {
1581
+ :where(.ds-table__group-count),
1582
+ :where(.ds-table__group-accessory-separator) {
1469
1583
  flex: 0 0 auto;
1470
1584
  }
1471
1585
 
1472
1586
  :where(.ds-table__group-toggle) {
1473
- align-self: center;
1587
+ --color-interaction-hover: transparent;
1588
+ --color-interaction-pressed: transparent;
1474
1589
  flex: 0 0 auto;
1475
1590
  margin-inline-start: auto;
1476
1591
  }
@@ -1623,6 +1738,10 @@
1623
1738
  background: var(--ds-forced-color-surface);
1624
1739
  }
1625
1740
 
1741
+ :where(.ds-table__group-hero)::after {
1742
+ border-color: var(--ds-forced-color-content);
1743
+ }
1744
+
1626
1745
  :where(.ds-table__row--disabled) {
1627
1746
  color: var(--ds-forced-color-disabled);
1628
1747
  opacity: 1;
@@ -1,4 +1,5 @@
1
- import type { CardOverviewVariant, OverviewMetric, SafetyScoreLevel } from './card-overview-types';
1
+ import type { CardOverviewVariant, OverviewMetric } from './card-overview-types';
2
+ export { resolveSafetyScoreLevel } from '../Score/score-model';
2
3
  export interface CardOverviewCollapseGeometry {
3
4
  active: boolean;
4
5
  expandedHeight: number;
@@ -33,7 +34,6 @@ export declare function resolveCardOverviewCollapseGeometry(options: {
33
34
  expandedHeight: number;
34
35
  compactHeight: number;
35
36
  }): CardOverviewCollapseGeometry;
36
- export declare function resolveSafetyScoreLevel(value: string | number): SafetyScoreLevel | undefined;
37
37
  export declare function resolveOverviewRovingIndex(metrics: readonly OverviewMetric[], focusedIndex: number): number;
38
38
  export declare function findNextOverviewMetricIndex(metrics: readonly OverviewMetric[], from: number, step: -1 | 1): number;
39
39
  //# sourceMappingURL=card-overview-controller.d.ts.map
@@ -1,7 +1,8 @@
1
1
  import type { MetricTrend } from '../../utils/metric-change';
2
+ import type { SafetyScoreLevel } from '../Score/score-types';
3
+ export type { SafetyScoreLevel } from '../Score/score-types';
2
4
  export type CardOverviewVariant = 'default' | 'compact';
3
5
  export type CardOverviewLayout = 'auto' | 'stacked';
4
- export type SafetyScoreLevel = 'fair' | 'good' | 'excellent';
5
6
  /**
6
7
  * Leading summary block — the headline figure the rest of the bar contextualises.
7
8
  *
@@ -0,0 +1,21 @@
1
+ import type { SafetyScoreLevel, ScoreSize } from './score-types';
2
+ export declare class Score {
3
+ /** Display-ready headline figure. */
4
+ value: string | number;
5
+ /**
6
+ * Visual density matching control height: `sm` 24px, `md` 32px, `lg` 40px.
7
+ * `lg` is the Card Overview recipe.
8
+ */
9
+ size: ScoreSize;
10
+ /**
11
+ * Safety-score color level. Numeric values from 0–100 infer fair (0–50),
12
+ * good (51–80), or excellent (81–100) when this is omitted.
13
+ */
14
+ level: SafetyScoreLevel | undefined;
15
+ /** Replace the figure with a skeleton while data resolves. */
16
+ isLoading: boolean;
17
+ /** Accessible name prefix, for example “Safety score”. */
18
+ label: string;
19
+ render(): any;
20
+ }
21
+ //# sourceMappingURL=Score.d.ts.map
@@ -0,0 +1,3 @@
1
+ export type { SafetyScoreLevel, ScoreSize } from './score-types';
2
+ export { resolveSafetyScoreLevel, resolveScoreLevel } from './score-model';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,14 @@
1
+ import { type SafetyScoreLevel } from './score-types';
2
+ export declare function isSafetyScoreLevel(value: unknown): value is SafetyScoreLevel;
3
+ /**
4
+ * Infer a safety-score color level from a 0–100 figure. Non-numeric or out-of-range
5
+ * values return undefined so the owner can supply `level` explicitly.
6
+ */
7
+ export declare function resolveSafetyScoreLevel(value: string | number): SafetyScoreLevel | undefined;
8
+ export declare function resolveScoreLevel(value: string | number, level?: SafetyScoreLevel): SafetyScoreLevel | undefined;
9
+ export declare const SCORE_VALUE_VARIANT: {
10
+ readonly sm: "text-title-small";
11
+ readonly md: "text-title-large";
12
+ readonly lg: "text-display-small";
13
+ };
14
+ //# sourceMappingURL=score-model.d.ts.map
@@ -0,0 +1,5 @@
1
+ export type SafetyScoreLevel = 'fair' | 'good' | 'excellent';
2
+ export type ScoreSize = 'sm' | 'md' | 'lg';
3
+ export declare const SCORE_SIZES: readonly ["sm", "md", "lg"];
4
+ export declare const SAFETY_SCORE_LEVELS: readonly ["fair", "good", "excellent"];
5
+ //# sourceMappingURL=score-types.d.ts.map
@@ -248,6 +248,8 @@ export declare class Table {
248
248
  private emitAllSelection;
249
249
  private emitGroupSelection;
250
250
  private rowEventOwnsActivation;
251
+ private groupRowEventOwnsCollapse;
252
+ private handleGroupRowClick;
251
253
  private emitRowActivation;
252
254
  private syncActionMenu;
253
255
  private closeActionMenu;
@@ -275,6 +277,7 @@ export declare class Table {
275
277
  private renderRow;
276
278
  private emitGroupCollapse;
277
279
  private emitAllGroupsCollapse;
280
+ private renderGroupAccessory;
278
281
  private renderGroupContent;
279
282
  private formatGroupLoadLabel;
280
283
  private renderGroupLoadRow;
@@ -1,2 +1,2 @@
1
- export type { TableCaptionVisibility, TableCellAlign, TableCellAction, TableCellActionDetail, TableCellActionDivider, TableCellActionMenuEntry, TableCellActionMenuItem, TableCellBlank, TableCellEmpty, TableCellLinkTarget, TableCellIcon, TableCellIconText, TableCellImage, TableCellImageTracks, TableCellPrimaryText, TableCellSkeleton, TableCellText, TableCellTextRun, TableCellTextTrack, TableCellTag, TableCellTagItem, TableCellTags, TableCellTagVariant, TableCellValue, TableSkeletonWidth, TableColumn, TableColumnsConfigChangeDetail, TableColumnSticky, TableColumnWidth, TableDataMode, TableDataModeChangeDetail, TableGroup, TableGroupCollapseChangeDetail, TableGroupLoadMoreDetail, TableGroupIntent, TableHeaderSegment, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason, TablePaginationState, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortDirection, TableSortState, } from './table-types';
1
+ export type { TableCaptionVisibility, TableCellAlign, TableCellAction, TableCellActionDetail, TableCellActionDivider, TableCellActionMenuEntry, TableCellActionMenuItem, TableCellBlank, TableCellEmpty, TableCellLinkTarget, TableCellIcon, TableCellIconText, TableCellScoreText, TableCellImage, TableCellImageTracks, TableCellPrimaryText, TableCellSkeleton, TableCellText, TableCellTextRun, TableCellTextTrack, TableCellTag, TableCellTagItem, TableCellTags, TableCellTagVariant, TableCellValue, TableSkeletonWidth, TableColumn, TableColumnsConfigChangeDetail, TableColumnSticky, TableColumnWidth, TableDataMode, TableDataModeChangeDetail, TableGroup, TableGroupAccessory, TableGroupHero, TableGroupCollapseChangeDetail, TableGroupLoadMoreDetail, TableGroupIntent, TableHeaderSegment, TableGroupingState, TableLoadMoreDetail, TableLoadMoreMode, TableLoadMoreReason, TablePaginationState, TableRow, TableRowActivateDetail, TableSelectionChangeDetail, TableSelectionMode, TableSortChangeDetail, TableSortDirection, TableSortState, } from './table-types';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,6 @@
1
1
  import type { TableCellAction, TableCellBlank, TableCellEmpty, TableCellIcon, TableCellImage, TableCellImageTracks, TableCellTag, TableCellTags, TableCellTagVariant, TableCellTextRun, TableCellTextTrack, TableCellValue, TableCellLinkTarget, TableCellLineClamp, TableCellMaxLines, TableColumn } from './table-types';
2
2
  import type { IconColor } from '../Icon/Icon';
3
+ import type { SafetyScoreLevel } from '../Score/score-types';
3
4
  import type { TextColor } from '../Text/text-types';
4
5
  /** Maximum independently colored runs on one secondary or tertiary track. */
5
6
  export declare const TABLE_CELL_TEXT_RUN_LIMIT = 3;
@@ -36,6 +37,17 @@ export type TableCellPresentation = {
36
37
  variant: 'single' | 'multi' | 'triple';
37
38
  wraps: boolean;
38
39
  lineClamp: TableCellLineClamp;
40
+ } | {
41
+ kind: 'score-text';
42
+ cellType: 'score-text';
43
+ score: string | number;
44
+ scoreLevel?: SafetyScoreLevel;
45
+ scoreLabel: string;
46
+ scoreLoading: boolean;
47
+ value: ResolvedTableCellText;
48
+ variant: 'single' | 'multi' | 'triple';
49
+ wraps: boolean;
50
+ lineClamp: TableCellLineClamp;
39
51
  } | {
40
52
  kind: 'image';
41
53
  cellType: 'image';
@@ -1,4 +1,4 @@
1
- import type { TableCellBlank, TableCellAction, TableCellEmpty, TableCellIcon, TableCellIconText, TableCellImage, TableCellPrimaryText, TableCellText, TableCellTag, TableCellTags, TableCellValue, TableColumn, TableGroup, TableRow, TableSortState } from './table-types';
1
+ import type { TableCellBlank, TableCellAction, TableCellEmpty, TableCellIcon, TableCellIconText, TableCellScoreText, TableCellImage, TableCellPrimaryText, TableCellText, TableCellTag, TableCellTags, TableCellValue, TableColumn, TableGroup, TableGroupAccessory, TableGroupHero, TableRow, TableSortState } from './table-types';
2
2
  export interface TableSelectionState {
3
3
  selectableRowIds: string[];
4
4
  selectedLoadedCount: number;
@@ -11,6 +11,7 @@ export declare function isTableCellTag(value: TableCellValue): value is TableCel
11
11
  export declare function isTableCellTags(value: TableCellValue): value is TableCellTags;
12
12
  export declare function isTableCellIcon(value: TableCellValue): value is TableCellIcon;
13
13
  export declare function isTableCellIconText(value: TableCellValue): value is TableCellIconText;
14
+ export declare function isTableCellScoreText(value: TableCellValue): value is TableCellScoreText;
14
15
  export declare function isTableCellImage(value: TableCellValue): value is TableCellImage;
15
16
  export declare function isTableCellAction(value: TableCellValue): value is TableCellAction;
16
17
  export declare function isTableCellEmpty(value: TableCellValue): value is TableCellEmpty;
@@ -44,6 +45,14 @@ export declare function toggleAllLoadedTableRows(selectedRowIds: readonly string
44
45
  /** Toggle every selectable loaded row that belongs to a group. */
45
46
  export declare function toggleTableGroupSelection(selectedRowIds: readonly string[], groupRows: TableRow[]): string[];
46
47
  export declare function resolvedTableGroupCount(group: TableGroup): number;
48
+ /** Accessory items shown on a group header's second track. */
49
+ export declare const TABLE_GROUP_ACCESSORY_LIMIT = 4;
50
+ /** Trim, drop empty copy, and cap accessories at the second-track limit. */
51
+ export declare function tableGroupAccessories(group: TableGroup): TableGroupAccessory[];
52
+ /** Group-header score fill. Same sm density on one- and two-track headers. */
53
+ export declare const TABLE_GROUP_HERO_SCORE_SIZE: "sm";
54
+ /** Resolve a supported group-header hero, or undefined when none is supplied. */
55
+ export declare function tableGroupHero(group: TableGroup): TableGroupHero | undefined;
47
56
  export declare const TABLE_GROUP_INTENTS: readonly ["brand", "neutral", "negative", "warning", "caution", "positive"];
48
57
  export declare function isTableGroupIntent(value: unknown): value is (typeof TABLE_GROUP_INTENTS)[number];
49
58
  export declare function tableGroupIntentClass(intent: (typeof TABLE_GROUP_INTENTS)[number] | undefined): string | undefined;
@@ -1,5 +1,5 @@
1
1
  import { tableGroupLabelColor, type TableCollapseAllHost, type TableSelectionState } from './table-model';
2
- import type { TableColumn, TableGroup, TableGroupIntent, TableRow, TableSelectionMode } from './table-types';
2
+ import type { TableColumn, TableGroup, TableGroupAccessory, TableGroupHero, TableGroupIntent, TableRow, TableSelectionMode } from './table-types';
3
3
  export type TableGroupCountPresentation = 'loaded-progress' | 'total';
4
4
  export interface TableGroupRenderModel {
5
5
  group: TableGroup;
@@ -11,6 +11,8 @@ export interface TableGroupRenderModel {
11
11
  intentClass: string | undefined;
12
12
  labelColor: ReturnType<typeof tableGroupLabelColor>;
13
13
  collapsed: boolean;
14
+ accessories: TableGroupAccessory[];
15
+ hero: TableGroupHero | undefined;
14
16
  selection: TableSelectionState | null;
15
17
  }
16
18
  export interface TableRenderModel {