@ds-mo/ui 13.12.0 → 13.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +68 -16
  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 +7 -1
  9. package/dist/angular/ds-table.js +10 -4
  10. package/dist/angular/ds-tag.d.ts +1 -1
  11. package/dist/angular/ds-tag.js +3 -3
  12. package/dist/components/ds-agent-activity.js +1 -1
  13. package/dist/components/ds-agent-response.js +1 -1
  14. package/dist/components/ds-agent-source-list.js +1 -1
  15. package/dist/components/ds-agent-tool-call.js +1 -1
  16. package/dist/components/ds-attachment-list.js +1 -1
  17. package/dist/components/ds-avatar.js +1 -1
  18. package/dist/components/ds-banner.js +1 -1
  19. package/dist/components/ds-bar-nav.js +1 -1
  20. package/dist/components/ds-bar-title.js +1 -1
  21. package/dist/components/ds-bar-workflow.js +1 -1
  22. package/dist/components/ds-button-filled.js +1 -1
  23. package/dist/components/ds-button-unfilled.js +1 -1
  24. package/dist/components/ds-card-chart.js +1 -1
  25. package/dist/components/ds-card-overview.js +1 -1
  26. package/dist/components/ds-card-overview.js.map +1 -1
  27. package/dist/components/ds-card-setting.js +1 -1
  28. package/dist/components/ds-chart-legend.js +1 -1
  29. package/dist/components/ds-chart-legend.js.map +1 -1
  30. package/dist/components/ds-checkbox.js +1 -1
  31. package/dist/components/ds-chip.js +1 -1
  32. package/dist/components/ds-chip.js.map +1 -1
  33. package/dist/components/ds-code-block.js +1 -1
  34. package/dist/components/ds-conversation-list-item.js +1 -1
  35. package/dist/components/ds-conversation-list-item.js.map +1 -1
  36. package/dist/components/ds-empty-state.js +1 -1
  37. package/dist/components/ds-icon.js +1 -1
  38. package/dist/components/ds-input.js +1 -1
  39. package/dist/components/ds-input.js.map +1 -1
  40. package/dist/components/ds-markdown.js +1 -1
  41. package/dist/components/ds-menu.js +1 -1
  42. package/dist/components/ds-message-actions.js +1 -1
  43. package/dist/components/ds-message-composer.js +1 -1
  44. package/dist/components/ds-message-scroller.js +1 -1
  45. package/dist/components/ds-mobile-bar-nav.js +1 -1
  46. package/dist/components/ds-mobile-header.js +1 -1
  47. package/dist/components/ds-mobile-section-switcher.js +1 -1
  48. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  49. package/dist/components/ds-modal.js +1 -1
  50. package/dist/components/ds-panel-nav.js +1 -1
  51. package/dist/components/ds-panel-sub-nav.js +1 -1
  52. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  53. package/dist/components/ds-panel-tool-header.js +1 -1
  54. package/dist/components/ds-panel-tool-search.js +1 -1
  55. package/dist/components/ds-panel-tools.js +1 -1
  56. package/dist/components/ds-radio.js +1 -1
  57. package/dist/components/ds-radio.js.map +1 -1
  58. package/dist/components/ds-select.js +1 -1
  59. package/dist/components/ds-select.js.map +1 -1
  60. package/dist/components/ds-shell-app.js +1 -1
  61. package/dist/components/ds-shell-tools.js +1 -1
  62. package/dist/components/ds-tab-group.js +1 -1
  63. package/dist/components/ds-table.js +1 -1
  64. package/dist/components/ds-table.js.map +1 -1
  65. package/dist/components/ds-tag.js +1 -1
  66. package/dist/components/ds-toast.js +1 -1
  67. package/dist/components/ds-typing-indicator.js +1 -1
  68. package/dist/components/p-Azjx2SsL.js +2 -0
  69. package/dist/components/p-Azjx2SsL.js.map +1 -0
  70. package/dist/components/p-B1JB0Zn-.js +2 -0
  71. package/dist/components/{p-BYre-ZDg.js.map → p-B1JB0Zn-.js.map} +1 -1
  72. package/dist/components/p-B2t8alvH.js +2 -0
  73. package/dist/components/{p-DK4PGrHm.js.map → p-B2t8alvH.js.map} +1 -1
  74. package/dist/components/{p-DBchq8Zw.js → p-B6linhwY.js} +2 -2
  75. package/dist/components/p-B8HG9OFh.js +2 -0
  76. package/dist/components/p-B8HG9OFh.js.map +1 -0
  77. package/dist/components/{p-DcmqsAMP.js → p-BJVzrR_P.js} +2 -2
  78. package/dist/components/p-BL0JHLJp.js +2 -0
  79. package/dist/components/{p-BFXN4ioL.js.map → p-BL0JHLJp.js.map} +1 -1
  80. package/dist/components/p-BPS17WvI.js +2 -0
  81. package/dist/components/{p-x9jO4lZ7.js.map → p-BPS17WvI.js.map} +1 -1
  82. package/dist/components/{p-BX57q1Lo.js → p-BSdAFIcG.js} +2 -2
  83. package/dist/components/{p-DGkWMhHO.js → p-BULWzaBs.js} +2 -2
  84. package/dist/components/{p-B_eqa09C.js → p-C-aCs6ID.js} +2 -2
  85. package/dist/components/{p-BRajO-Za.js → p-C5ecLNZA.js} +2 -2
  86. package/dist/components/p-C8U5BsJf.js +2 -0
  87. package/dist/components/p-C8U5BsJf.js.map +1 -0
  88. package/dist/components/{p-DKftz0O8.js → p-COmqMfQo.js} +2 -2
  89. package/dist/components/{p-DxygUurH.js → p-CeyoHpPn.js} +2 -2
  90. package/dist/components/{p-CdFnvBem.js → p-CiUciD5Z.js} +2 -2
  91. package/dist/components/p-CuwopElg.js.map +1 -1
  92. package/dist/components/p-DAM4CDXT.js +2 -0
  93. package/dist/components/{p-BxJurXEn.js.map → p-DAM4CDXT.js.map} +1 -1
  94. package/dist/components/{p-DBJJiSP0.js → p-DMJEOAwP.js} +2 -2
  95. package/dist/components/p-DYAQVvOu.js +2 -0
  96. package/dist/components/{p-CIlO_j3q.js.map → p-DYAQVvOu.js.map} +1 -1
  97. package/dist/components/p-DyDkQ8H9.js +2 -0
  98. package/dist/components/p-DyDkQ8H9.js.map +1 -0
  99. package/dist/components/{p-DkhE3BsH.js → p-Dz3Ufmr4.js} +2 -2
  100. package/dist/components/p-cPh32CFB.js +2 -0
  101. package/dist/components/{p-Bj7KrXzw.js.map → p-cPh32CFB.js.map} +1 -1
  102. package/dist/components/{p-Doz2uwRv.js → p-fkQhr5s9.js} +2 -2
  103. package/dist/components/p-oOKTL-yx.js +2 -0
  104. package/dist/components/{p-C5gZHZHU.js.map → p-oOKTL-yx.js.map} +1 -1
  105. package/dist/docs/components.json +362 -10
  106. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +6 -0
  107. package/dist/lib/utils/control-text.d.ts +2 -0
  108. package/dist/lib/utils/index.d.ts +1 -1
  109. package/dist/lib/utils/index.js.map +2 -2
  110. package/dist/mcp-data/registry/agent-activity.json +1 -1
  111. package/dist/mcp-data/registry/agent-response.json +1 -1
  112. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  113. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  114. package/dist/mcp-data/registry/attachment-list.json +1 -1
  115. package/dist/mcp-data/registry/avatar.json +1 -1
  116. package/dist/mcp-data/registry/badge.json +1 -1
  117. package/dist/mcp-data/registry/banner.json +1 -1
  118. package/dist/mcp-data/registry/bar-nav.json +1 -1
  119. package/dist/mcp-data/registry/bar-title.json +1 -1
  120. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  121. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  122. package/dist/mcp-data/registry/button-filled.json +39 -2
  123. package/dist/mcp-data/registry/button-unfilled.json +45 -6
  124. package/dist/mcp-data/registry/card-chart.json +1 -1
  125. package/dist/mcp-data/registry/card-overview.json +1 -1
  126. package/dist/mcp-data/registry/card-setting.json +1 -1
  127. package/dist/mcp-data/registry/chart-legend.json +1 -1
  128. package/dist/mcp-data/registry/chart.json +1 -1
  129. package/dist/mcp-data/registry/checkbox.json +1 -1
  130. package/dist/mcp-data/registry/chip.json +1 -1
  131. package/dist/mcp-data/registry/code-block.json +1 -1
  132. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  133. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  134. package/dist/mcp-data/registry/conversation-list.json +1 -1
  135. package/dist/mcp-data/registry/divider.json +1 -1
  136. package/dist/mcp-data/registry/empty-state.json +1 -1
  137. package/dist/mcp-data/registry/field.json +1 -1
  138. package/dist/mcp-data/registry/icon.json +2 -2
  139. package/dist/mcp-data/registry/input.json +1 -1
  140. package/dist/mcp-data/registry/loader.json +1 -1
  141. package/dist/mcp-data/registry/markdown.json +1 -1
  142. package/dist/mcp-data/registry/menu.json +1 -1
  143. package/dist/mcp-data/registry/message-actions.json +1 -1
  144. package/dist/mcp-data/registry/message-bubble.json +1 -1
  145. package/dist/mcp-data/registry/message-composer.json +1 -1
  146. package/dist/mcp-data/registry/message-scroller.json +1 -1
  147. package/dist/mcp-data/registry/message.json +1 -1
  148. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  149. package/dist/mcp-data/registry/mobile-header.json +1 -1
  150. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  151. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  152. package/dist/mcp-data/registry/modal.json +1 -1
  153. package/dist/mcp-data/registry/panel-nav.json +1 -1
  154. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  155. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  156. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  157. package/dist/mcp-data/registry/panel-tools.json +1 -1
  158. package/dist/mcp-data/registry/radio.json +1 -1
  159. package/dist/mcp-data/registry/registry.json +68 -16
  160. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  161. package/dist/mcp-data/registry/select.json +1 -1
  162. package/dist/mcp-data/registry/shell-app.json +1 -1
  163. package/dist/mcp-data/registry/shell-page.json +1 -1
  164. package/dist/mcp-data/registry/shell-tools.json +1 -1
  165. package/dist/mcp-data/registry/skeleton.json +1 -1
  166. package/dist/mcp-data/registry/slider.json +1 -1
  167. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  168. package/dist/mcp-data/registry/switch.json +1 -1
  169. package/dist/mcp-data/registry/tab-group.json +1 -1
  170. package/dist/mcp-data/registry/table.json +141 -21
  171. package/dist/mcp-data/registry/tag.json +23 -5
  172. package/dist/mcp-data/registry/text.json +1 -1
  173. package/dist/mcp-data/registry/toast.json +1 -1
  174. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  175. package/dist/mcp-data/registry/tooltip.json +1 -1
  176. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  177. package/dist/react/ds-table.d.ts +3 -1
  178. package/dist/react/ds-table.js +3 -1
  179. package/dist/styles/table.css +491 -76
  180. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +6 -0
  181. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +13 -1
  182. package/dist/types/components/Table/Table.d.ts +41 -22
  183. package/dist/types/components/Table/index.d.ts +1 -1
  184. package/dist/types/components/Table/table-cell-model.d.ts +44 -0
  185. package/dist/types/components/Table/table-layout-controller.d.ts +65 -0
  186. package/dist/types/components/Table/table-load-controller.d.ts +49 -0
  187. package/dist/types/components/Table/table-model.d.ts +25 -0
  188. package/dist/types/components/Table/table-render-model.d.ts +41 -0
  189. package/dist/types/components/Table/table-types.d.ts +34 -2
  190. package/dist/types/components/Tag/Tag.d.ts +3 -0
  191. package/dist/types/components.d.ts +108 -8
  192. package/dist/types/utils/control-text.d.ts +2 -0
  193. package/dist/types/utils/index.d.ts +1 -1
  194. package/package.json +3 -3
  195. package/dist/components/p-BFXN4ioL.js +0 -2
  196. package/dist/components/p-BYre-ZDg.js +0 -2
  197. package/dist/components/p-Bj7KrXzw.js +0 -2
  198. package/dist/components/p-BxJurXEn.js +0 -2
  199. package/dist/components/p-C5gZHZHU.js +0 -2
  200. package/dist/components/p-CFNG0K3m.js +0 -2
  201. package/dist/components/p-CFNG0K3m.js.map +0 -1
  202. package/dist/components/p-CIlO_j3q.js +0 -2
  203. package/dist/components/p-DAbaMtEX.js +0 -2
  204. package/dist/components/p-DAbaMtEX.js.map +0 -1
  205. package/dist/components/p-DK4PGrHm.js +0 -2
  206. package/dist/components/p-DumWT7NN.js +0 -2
  207. package/dist/components/p-DumWT7NN.js.map +0 -1
  208. package/dist/components/p-c1pY-Mqq.js +0 -2
  209. package/dist/components/p-c1pY-Mqq.js.map +0 -1
  210. package/dist/components/p-x9jO4lZ7.js +0 -2
  211. /package/dist/components/{p-DBchq8Zw.js.map → p-B6linhwY.js.map} +0 -0
  212. /package/dist/components/{p-DcmqsAMP.js.map → p-BJVzrR_P.js.map} +0 -0
  213. /package/dist/components/{p-BX57q1Lo.js.map → p-BSdAFIcG.js.map} +0 -0
  214. /package/dist/components/{p-DGkWMhHO.js.map → p-BULWzaBs.js.map} +0 -0
  215. /package/dist/components/{p-B_eqa09C.js.map → p-C-aCs6ID.js.map} +0 -0
  216. /package/dist/components/{p-BRajO-Za.js.map → p-C5ecLNZA.js.map} +0 -0
  217. /package/dist/components/{p-DKftz0O8.js.map → p-COmqMfQo.js.map} +0 -0
  218. /package/dist/components/{p-DxygUurH.js.map → p-CeyoHpPn.js.map} +0 -0
  219. /package/dist/components/{p-CdFnvBem.js.map → p-CiUciD5Z.js.map} +0 -0
  220. /package/dist/components/{p-DBJJiSP0.js.map → p-DMJEOAwP.js.map} +0 -0
  221. /package/dist/components/{p-DkhE3BsH.js.map → p-Dz3Ufmr4.js.map} +0 -0
  222. /package/dist/components/{p-Doz2uwRv.js.map → p-fkQhr5s9.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["TABLE_COLUMN_WIDTH_TOKENS","xs","sm","md","lg","xl","isTableCellText","value","isTableCellPrimaryText","kind","isTableCellTag","isTableCellIcon","isTableCellImage","isTableCellAction","isTableCellEmpty","isTableCellBlank","tableCellPrimary","label","alt","ariaLabel","primary","tableRowSelectionLabel","row","columns","explicit","selectionLabel","trim","column","cells","id","String","nextTableSortState","current","columnId","direction","nextTableGroupOrder","grouping","clampTableColumnSize","size","Number","isFinite","undefined","minimum","minSize","maximum","maxSize","Math","max","POSITIVE_INFINITY","min","tableColumnSize","width","tableExplicitMinWidth","widths","map","filter","length","join","tableRows","rows","groups","grouped","flatMap","group","canSelectRow","selectable","disabled","deriveTableSelectionState","selectedRowIds","selected","Set","selectableRowIds","selectedLoadedCount","reduce","count","has","allSelected","indeterminate","toggleTableRowSelection","delete","add","toggleAllLoadedTableRows","loadedRows","state","resolvedTableGroupCount","total","totalCount","tableModelIssues","issues","columnIds","push","groupIds","rowIds","tableCss","Table","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","sort","captionVisibility","stickyHeader","selectionMode","loading","skeletonRows","emptyHeading","emptyBody","error","errorHeading","errorBody","emptyCellLabel","lazyLoading","loadMoreMode","hasMore","loadingMore","loadIdentity","loadMoreThreshold","loadMoreLabel","retryLabel","loadingMoreLabel","endOfResultsLabel","rowsLoadedLabel","overflowStart","overflowEnd","scrollable","intersectionSupported","announcement","viewportEl","tableEl","sentinelEl","resizeObserver","intersectionObserver","observedSentinel","requestPending","requestedRowCount","previousLoadedRowCount","previousModelWarning","hasLoaded","reconnectFrame","syncOverflow","viewport","overflows","scrollWidth","clientWidth","scrollHeight","clientHeight","nextStart","scrollLeft","nextEnd","componentWillLoad","IntersectionObserver","warnModelIssues","componentDidLoad","connectViewportObserver","connectIntersectionObserver","componentDidRender","connectedCallback","cancelAnimationFrame","requestAnimationFrame","disconnectedCallback","removeEventListener","disconnect","disconnectIntersectionObserver","handleStructureChange","resetLoadRequest","handleDataChange","nextCount","added","replace","handleLoadIdentityChange","handleLazyConfigurationChange","handleLoadingMoreChange","handleLoadMoreErrorChange","handleHasMoreChange","hadMore","hasData","totalColumns","selectedSet","selectionState","resolvedMaxHeight","maxHeight","tableStyle","caption","unshift","some","headerSegments","segment","sortKey","message","console","warn","addEventListener","passive","ResizeObserver","observe","loadMoreError","threshold","entries","entry","isIntersecting","requestLoadMore","root","rootMargin","reason","dsLoadMore","emit","loadedRowCount","emitSort","dsGroupingChange","sortable","dsSortChange","sortButtonLabel","header","next","emitRowSelection","includes","dsSelectionChange","scope","changedRowId","emitAllSelection","renderSelectionControl","checked","onActivate","h","class","type","role","onClick","presentation","renderColumnHeader","groupedColumn","activeMemberSegment","find","activeMemberSort","activeSort","align","memberAriaSort","labelControl","index","segmentActive","segmentInteractive","as","variant","emphasis","color","lineTruncation","control","key","separator","sortControl","icon","hasBorder","activeFill","isActive","pressScale","onDsClick","renderCellValue","name","src","isInactive","isLoading","event","stopPropagation","dsCellAction","actionId","rowId","tag","intent","contrast","rounded","isInset","text","primaryText","fontFeature","wraps","wrap","secondary","renderRow","rowSelectable","tagCell","iconCell","imageCell","actionCell","primaryTextCell","emptyCell","blankCell","textCell","singleTextCell","tagVariant","textVariant","cellType","renderDataBodies","countLabel","colSpan","renderSkeletonBody","round","Array","from","_","iconSize","renderStateBody","heading","body","renderLazyBody","manualFallback","ref","element","render","selection","regionLabel","scrollLabel","initialLoading","initialError","viewportStyle","Host","style","tabIndex"],"sources":["src/wc/components/Table/table-model.ts","src/wc/components/Table/Table.css?tag=ds-table&encapsulation=scoped","src/wc/components/Table/Table.tsx"],"sourcesContent":["import type {\n TableCellBlank,\n TableCellAction,\n TableCellEmpty,\n TableCellIcon,\n TableCellImage,\n TableCellPrimaryText,\n TableCellText,\n TableCellTag,\n TableCellValue,\n TableColumn,\n TableGroup,\n TableGroupingState,\n TableRow,\n TableSortState,\n} from './table-types';\n\nexport interface TableSelectionState {\n selectableRowIds: string[];\n selectedLoadedCount: number;\n allSelected: boolean;\n indeterminate: boolean;\n}\n\nconst TABLE_COLUMN_WIDTH_TOKENS = {\n xs: '--dimension-table-column-width-xs',\n sm: '--dimension-table-column-width-sm',\n md: '--dimension-table-column-width-md',\n lg: '--dimension-table-column-width-lg',\n xl: '--dimension-table-column-width-xl',\n} as const;\n\nexport function isTableCellText(value: TableCellValue): value is TableCellText {\n return typeof value === 'object' && value !== null && 'primary' in value && !('kind' in value);\n}\n\nexport function isTableCellPrimaryText(value: TableCellValue): value is TableCellPrimaryText {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'primary-text';\n}\n\nexport function isTableCellTag(value: TableCellValue): value is TableCellTag {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'tag';\n}\n\nexport function isTableCellIcon(value: TableCellValue): value is TableCellIcon {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'icon';\n}\n\nexport function isTableCellImage(value: TableCellValue): value is TableCellImage {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'image';\n}\n\nexport function isTableCellAction(value: TableCellValue): value is TableCellAction {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'action';\n}\n\nexport function isTableCellEmpty(value: TableCellValue): value is TableCellEmpty {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'empty';\n}\n\nexport function isTableCellBlank(value: TableCellValue): value is TableCellBlank {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'blank';\n}\n\nexport function tableCellPrimary(value: TableCellValue): string | number | null {\n if (value == null) return null;\n if (isTableCellTag(value)) return value.label;\n if (isTableCellIcon(value)) return null;\n if (isTableCellImage(value)) return value.alt;\n if (isTableCellAction(value)) return value.label ?? value.ariaLabel;\n if (isTableCellPrimaryText(value)) return value.primary;\n if (isTableCellEmpty(value) || isTableCellBlank(value)) return null;\n return isTableCellText(value) ? value.primary : value;\n}\n\nexport function tableRowSelectionLabel(row: TableRow, columns: TableColumn[]): string {\n const explicit = row.selectionLabel?.trim();\n if (explicit) return explicit;\n\n for (const column of columns) {\n const primary = tableCellPrimary(row.cells[column.id]);\n if (primary != null && String(primary).trim()) return String(primary);\n }\n\n return row.id;\n}\n\nexport function nextTableSortState(\n current: TableSortState | null | undefined,\n columnId: string,\n): TableSortState {\n if (current?.columnId !== columnId) return { columnId, direction: 'asc' };\n if (current.direction === 'asc') return { columnId, direction: 'desc' };\n return { columnId, direction: 'asc' };\n}\n\nexport function nextTableGroupOrder(grouping: TableGroupingState): TableGroupingState {\n return {\n ...grouping,\n direction: grouping.direction === 'asc' ? 'desc' : 'asc',\n };\n}\n\nexport function clampTableColumnSize(column: TableColumn): number | undefined {\n if (typeof column.size !== 'number' || !Number.isFinite(column.size) || column.size <= 0) {\n return undefined;\n }\n\n const minimum = Number.isFinite(column.minSize) && (column.minSize ?? 0) > 0\n ? column.minSize!\n : 0;\n const maximum = Number.isFinite(column.maxSize) && (column.maxSize ?? 0) > 0\n ? Math.max(column.maxSize!, minimum)\n : Number.POSITIVE_INFINITY;\n\n return Math.min(Math.max(column.size!, minimum), maximum);\n}\n\nexport function tableColumnSize(column: TableColumn): string | undefined {\n if (typeof column.size === 'string') {\n return `var(${TABLE_COLUMN_WIDTH_TOKENS[column.size]})`;\n }\n const width = clampTableColumnSize(column);\n return width == null ? undefined : `${width}px`;\n}\n\nexport function tableExplicitMinWidth(columns: TableColumn[]): string | undefined {\n const widths = columns.map(tableColumnSize).filter((width): width is string => !!width);\n if (widths.length === 0) return undefined;\n return widths.length === 1 ? widths[0] : `calc(${widths.join(' + ')})`;\n}\n\nexport function tableRows(rows: TableRow[], groups: TableGroup[], grouped: boolean): TableRow[] {\n return grouped ? groups.flatMap(group => group.rows) : rows;\n}\n\nfunction canSelectRow(row: TableRow): boolean {\n return row.selectable !== false && !row.disabled;\n}\n\nexport function deriveTableSelectionState(\n rows: TableRow[],\n selectedRowIds: readonly string[],\n): TableSelectionState {\n const selected = new Set(selectedRowIds);\n const selectableRowIds = rows.filter(canSelectRow).map(row => row.id);\n const selectedLoadedCount = selectableRowIds.reduce(\n (count, id) => count + (selected.has(id) ? 1 : 0),\n 0,\n );\n\n return {\n selectableRowIds,\n selectedLoadedCount,\n allSelected: selectableRowIds.length > 0 && selectedLoadedCount === selectableRowIds.length,\n indeterminate: selectedLoadedCount > 0 && selectedLoadedCount < selectableRowIds.length,\n };\n}\n\nexport function toggleTableRowSelection(\n selectedRowIds: readonly string[],\n row: TableRow,\n): string[] {\n if (!canSelectRow(row)) return [...selectedRowIds];\n const selected = new Set(selectedRowIds);\n if (selected.has(row.id)) selected.delete(row.id);\n else selected.add(row.id);\n return [...selected];\n}\n\nexport function toggleAllLoadedTableRows(\n selectedRowIds: readonly string[],\n loadedRows: TableRow[],\n): string[] {\n const selected = new Set(selectedRowIds);\n const state = deriveTableSelectionState(loadedRows, selectedRowIds);\n\n for (const id of state.selectableRowIds) {\n if (state.allSelected) selected.delete(id);\n else selected.add(id);\n }\n\n return [...selected];\n}\n\nexport function resolvedTableGroupCount(group: TableGroup): number {\n const total = Number.isFinite(group.totalCount) ? Math.max(0, group.totalCount!) : 0;\n return Math.max(total, group.rows.length);\n}\n\nexport function tableModelIssues(\n columns: TableColumn[],\n rows: TableRow[],\n groups: TableGroup[],\n grouped: boolean,\n): string[] {\n const issues: string[] = [];\n const columnIds = new Set<string>();\n for (const column of columns) {\n if (!column.id.trim()) issues.push('Every column requires a non-empty id.');\n else if (columnIds.has(column.id)) issues.push(`Duplicate column id: ${column.id}`);\n columnIds.add(column.id);\n }\n\n const groupIds = new Set<string>();\n if (grouped) {\n for (const group of groups) {\n if (!group.id.trim()) issues.push('Every group requires a non-empty id.');\n else if (groupIds.has(group.id)) issues.push(`Duplicate group id: ${group.id}`);\n groupIds.add(group.id);\n if (group.totalCount != null && group.totalCount < group.rows.length) {\n issues.push(`Group ${group.id} totalCount is smaller than its loaded row count.`);\n }\n }\n }\n\n const rowIds = new Set<string>();\n for (const row of tableRows(rows, groups, grouped)) {\n if (!row.id.trim()) issues.push('Every row requires a non-empty id.');\n else if (rowIds.has(row.id)) issues.push(`Duplicate row id: ${row.id}`);\n rowIds.add(row.id);\n }\n\n return [...new Set(issues)];\n}\n","@import '../../styles/table.css';\n\n:host {\n display: block;\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n deriveTableSelectionState,\n isTableCellAction,\n isTableCellBlank,\n isTableCellEmpty,\n isTableCellIcon,\n isTableCellImage,\n isTableCellPrimaryText,\n isTableCellText,\n isTableCellTag,\n nextTableGroupOrder,\n nextTableSortState,\n resolvedTableGroupCount,\n tableColumnSize,\n tableExplicitMinWidth,\n tableModelIssues,\n tableRows,\n tableRowSelectionLabel,\n toggleAllLoadedTableRows,\n toggleTableRowSelection,\n} from './table-model';\nimport type {\n TableCaptionVisibility,\n TableCellActionDetail,\n TableCellValue,\n TableColumn,\n TableGroup,\n TableGroupingChangeDetail,\n TableGroupingState,\n TableLoadMoreDetail,\n TableLoadMoreMode,\n TableLoadMoreReason,\n TableRow,\n TableSelectionChangeDetail,\n TableSelectionMode,\n TableSortChangeDetail,\n TableSortState,\n} from './table-types';\n\n@Component({\n tag: 'ds-table',\n styleUrl: 'Table.css',\n scoped: true,\n})\nexport class Table {\n /** Stable column definitions. Assign through JavaScript. */\n @Prop() columns: TableColumn[] = [];\n /** Ungrouped row data. Ignored while grouping is active. Assign through JavaScript. */\n @Prop() rows: TableRow[] = [];\n /** One level of application-owned grouped data. Assign through JavaScript. */\n @Prop() groups: TableGroup[] = [];\n /** Controlled grouping column and group-order direction. */\n @Prop() grouping: TableGroupingState | null = null;\n /** Controlled member-row sort state. */\n @Prop() sort: TableSortState | null = null;\n\n /** Required accessible table name, rendered as a native caption. */\n @Prop() caption!: string;\n @Prop() captionVisibility: TableCaptionVisibility = 'hidden';\n @Prop() stickyHeader: boolean = false;\n /** Maximum scroll-region height. Numbers resolve to CSS pixels. */\n @Prop() maxHeight: string | number | undefined;\n /** Optional explicit label for the horizontal/vertical scroll region. */\n @Prop() scrollLabel: string | undefined;\n\n @Prop() selectionMode: TableSelectionMode = 'none';\n /** Controlled selected row identities. IDs outside the loaded rows are preserved. */\n @Prop() selectedRowIds: string[] = [];\n\n /** Initial loading state. Existing rows stay visible; incremental loading uses loadingMore. */\n @Prop() loading: boolean = false;\n @Prop() skeletonRows: number = 5;\n @Prop() emptyHeading: string = 'No results';\n @Prop() emptyBody: string = 'No data is available.';\n /** Initial error state. Existing rows stay visible; incremental failures use loadMoreError. */\n @Prop() error: boolean = false;\n @Prop() errorHeading: string = 'Unable to load data';\n @Prop() errorBody: string = 'The data could not be loaded.';\n @Prop() emptyCellLabel: string = 'Not available';\n\n /** Enable application-owned incremental loading without pagination. */\n @Prop() lazyLoading: boolean = false;\n @Prop() loadMoreMode: TableLoadMoreMode = 'auto';\n @Prop() hasMore: boolean = false;\n @Prop() loadingMore: boolean = false;\n @Prop() loadMoreError: string | undefined;\n /** Reset key for a new query/group/sort dataset. */\n @Prop() loadIdentity: string | number = 'default';\n /** IntersectionObserver root margin in CSS pixels. */\n @Prop() loadMoreThreshold: number = 0;\n @Prop() loadMoreLabel: string = 'Load more';\n @Prop() retryLabel: string = 'Retry';\n @Prop() loadingMoreLabel: string = 'Loading more results';\n @Prop() endOfResultsLabel: string = 'All results loaded';\n /** Supports {count} and {total} placeholders. */\n @Prop() rowsLoadedLabel: string = '{count} more rows loaded. {total} rows loaded.';\n\n @Event() dsSortChange!: EventEmitter<TableSortChangeDetail>;\n @Event() dsGroupingChange!: EventEmitter<TableGroupingChangeDetail>;\n @Event() dsSelectionChange!: EventEmitter<TableSelectionChangeDetail>;\n @Event() dsLoadMore!: EventEmitter<TableLoadMoreDetail>;\n @Event() dsCellAction!: EventEmitter<TableCellActionDetail>;\n\n @State() private overflowStart = false;\n @State() private overflowEnd = false;\n @State() private scrollable = false;\n @State() private intersectionSupported = true;\n @State() private announcement = '';\n\n private viewportEl: HTMLElement | null = null;\n private tableEl: HTMLTableElement | null = null;\n private sentinelEl: HTMLElement | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private intersectionObserver: IntersectionObserver | null = null;\n private observedSentinel: HTMLElement | null = null;\n private requestPending = false;\n private requestedRowCount = 0;\n private previousLoadedRowCount = 0;\n private previousModelWarning = '';\n private hasLoaded = false;\n private reconnectFrame: number | null = null;\n\n componentWillLoad(): void {\n this.previousLoadedRowCount = this.loadedRows.length;\n this.intersectionSupported = typeof IntersectionObserver !== 'undefined';\n this.warnModelIssues();\n }\n\n componentDidLoad(): void {\n this.hasLoaded = true;\n this.connectViewportObserver();\n this.syncOverflow();\n this.connectIntersectionObserver();\n }\n\n componentDidRender(): void {\n this.connectIntersectionObserver();\n }\n\n connectedCallback(): void {\n if (!this.hasLoaded) return;\n if (this.reconnectFrame !== null) cancelAnimationFrame(this.reconnectFrame);\n this.reconnectFrame = requestAnimationFrame(() => {\n this.reconnectFrame = null;\n this.connectViewportObserver();\n this.syncOverflow();\n this.connectIntersectionObserver();\n });\n }\n\n disconnectedCallback(): void {\n if (this.reconnectFrame !== null) cancelAnimationFrame(this.reconnectFrame);\n this.reconnectFrame = null;\n this.viewportEl?.removeEventListener('scroll', this.syncOverflow);\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.disconnectIntersectionObserver();\n }\n\n @Watch('columns')\n @Watch('grouping')\n handleStructureChange(): void {\n this.warnModelIssues();\n this.resetLoadRequest();\n }\n\n @Watch('rows')\n @Watch('groups')\n handleDataChange(): void {\n const nextCount = this.loadedRows.length;\n if (nextCount > this.previousLoadedRowCount) {\n const added = nextCount - this.previousLoadedRowCount;\n this.announcement = this.rowsLoadedLabel\n .replace('{count}', String(added))\n .replace('{total}', String(nextCount));\n }\n if (nextCount > this.requestedRowCount) this.requestPending = false;\n this.previousLoadedRowCount = nextCount;\n this.warnModelIssues();\n this.disconnectIntersectionObserver();\n }\n\n @Watch('loadIdentity')\n handleLoadIdentityChange(): void {\n this.previousLoadedRowCount = this.loadedRows.length;\n this.resetLoadRequest();\n }\n\n @Watch('lazyLoading')\n @Watch('loadMoreMode')\n @Watch('loadMoreThreshold')\n handleLazyConfigurationChange(): void {\n this.disconnectIntersectionObserver();\n }\n\n @Watch('loadingMore')\n handleLoadingMoreChange(loading: boolean): void {\n if (loading) {\n this.requestPending = true;\n this.announcement = this.loadingMoreLabel;\n } else if (this.loadMoreMode === 'manual') {\n // A completed manual request may legitimately append no rows. Permit a\n // deliberate follow-up activation; automatic mode stays guarded until\n // the data shape or query identity changes.\n this.requestPending = false;\n }\n this.disconnectIntersectionObserver();\n }\n\n @Watch('loadMoreError')\n handleLoadMoreErrorChange(error: string | undefined): void {\n if (error?.trim()) {\n this.requestPending = false;\n this.announcement = error;\n }\n this.disconnectIntersectionObserver();\n }\n\n @Watch('hasMore')\n handleHasMoreChange(hasMore: boolean, hadMore: boolean): void {\n if (!hasMore) {\n this.requestPending = false;\n if (hadMore) this.announcement = this.endOfResultsLabel;\n }\n this.disconnectIntersectionObserver();\n }\n\n private get grouped(): boolean {\n return this.grouping !== null;\n }\n\n private get selectable(): boolean {\n return this.selectionMode === 'multiple';\n }\n\n private get loadedRows(): TableRow[] {\n return tableRows(this.rows, this.groups, this.grouped);\n }\n\n private get hasData(): boolean {\n return this.loadedRows.length > 0;\n }\n\n private get totalColumns(): number {\n return this.columns.length + (this.selectable ? 1 : 0);\n }\n\n private get selectedSet(): Set<string> {\n return new Set(this.selectedRowIds);\n }\n\n private get selectionState() {\n return deriveTableSelectionState(this.loadedRows, this.selectedRowIds);\n }\n\n private get resolvedMaxHeight(): string | undefined {\n if (this.maxHeight == null || this.maxHeight === '') return undefined;\n return typeof this.maxHeight === 'number' ? `${Math.max(0, this.maxHeight)}px` : this.maxHeight;\n }\n\n private get tableStyle(): Record<string, string> | undefined {\n const width = tableExplicitMinWidth(this.columns);\n return width == null ? undefined : { '--ds-table-explicit-min-inline-size': width };\n }\n\n private warnModelIssues(): void {\n const issues = tableModelIssues(this.columns, this.rows, this.groups, this.grouped);\n if (!this.caption?.trim()) issues.unshift('A non-empty caption is required.');\n if (this.grouping && !this.columns.some(column => column.id === this.grouping!.columnId)) {\n issues.push(`Grouping references unknown column id: ${this.grouping.columnId}`);\n }\n if (\n this.sort &&\n !this.columns.some(column =>\n column.id === this.sort!.columnId ||\n column.headerSegments?.some(segment => segment.sortKey === this.sort!.columnId),\n )\n ) {\n issues.push(`Sorting references unknown column id: ${this.sort.columnId}`);\n }\n const message = issues.join(' ');\n if (!message || message === this.previousModelWarning) return;\n this.previousModelWarning = message;\n console.warn(`[ds-table] ${message}`);\n }\n\n private connectViewportObserver(): void {\n if (!this.viewportEl) return;\n this.viewportEl.removeEventListener('scroll', this.syncOverflow);\n this.viewportEl.addEventListener('scroll', this.syncOverflow, { passive: true });\n\n this.resizeObserver?.disconnect();\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver(this.syncOverflow);\n this.resizeObserver.observe(this.viewportEl);\n if (this.tableEl) this.resizeObserver.observe(this.tableEl);\n }\n\n private syncOverflow = (): void => {\n const viewport = this.viewportEl;\n if (!viewport) return;\n const overflows = viewport.scrollWidth - viewport.clientWidth > 1;\n const scrollable = overflows || viewport.scrollHeight - viewport.clientHeight > 1;\n const nextStart = overflows && viewport.scrollLeft > 1;\n const nextEnd = overflows && viewport.scrollLeft + viewport.clientWidth < viewport.scrollWidth - 1;\n if (nextStart !== this.overflowStart) this.overflowStart = nextStart;\n if (nextEnd !== this.overflowEnd) this.overflowEnd = nextEnd;\n if (scrollable !== this.scrollable) this.scrollable = scrollable;\n };\n\n private resetLoadRequest(): void {\n this.requestPending = false;\n this.requestedRowCount = this.loadedRows.length;\n this.disconnectIntersectionObserver();\n }\n\n private disconnectIntersectionObserver(): void {\n this.intersectionObserver?.disconnect();\n this.intersectionObserver = null;\n this.observedSentinel = null;\n }\n\n private connectIntersectionObserver(): void {\n if (\n !this.lazyLoading ||\n this.loadMoreMode !== 'auto' ||\n !this.hasMore ||\n !!this.loadMoreError?.trim() ||\n !this.intersectionSupported ||\n !this.viewportEl ||\n !this.sentinelEl\n ) {\n this.disconnectIntersectionObserver();\n return;\n }\n\n if (this.intersectionObserver && this.observedSentinel === this.sentinelEl) return;\n this.disconnectIntersectionObserver();\n\n const threshold = Number.isFinite(this.loadMoreThreshold)\n ? Math.max(0, this.loadMoreThreshold)\n : 0;\n this.intersectionObserver = new IntersectionObserver(\n entries => {\n if (entries.some(entry => entry.isIntersecting)) this.requestLoadMore('auto');\n },\n {\n root: this.viewportEl,\n rootMargin: `0px 0px ${threshold}px 0px`,\n },\n );\n this.observedSentinel = this.sentinelEl;\n this.intersectionObserver.observe(this.sentinelEl);\n }\n\n private requestLoadMore(reason: TableLoadMoreReason): void {\n if (\n !this.lazyLoading ||\n !this.hasMore ||\n this.loadingMore ||\n (reason !== 'retry' && !!this.loadMoreError?.trim()) ||\n this.requestPending\n ) return;\n\n this.requestPending = true;\n this.requestedRowCount = this.loadedRows.length;\n this.announcement = this.loadingMoreLabel;\n this.dsLoadMore.emit({\n reason,\n loadIdentity: this.loadIdentity,\n loadedRowCount: this.requestedRowCount,\n });\n }\n\n private emitSort(column: TableColumn, sortKey = column.id): void {\n if (this.grouping?.columnId === column.id && sortKey === column.id) {\n this.dsGroupingChange.emit({ grouping: nextTableGroupOrder(this.grouping) });\n return;\n }\n if (!column.sortable) return;\n this.dsSortChange.emit({ sort: nextTableSortState(this.sort, sortKey) });\n }\n\n private sortButtonLabel(column: TableColumn, sortKey = column.id, label = column.header): string {\n if (this.grouping?.columnId === column.id && sortKey === column.id) {\n const next = this.grouping.direction === 'asc' ? 'descending' : 'ascending';\n return `Sort ${column.header} groups ${next}. Currently grouped ${this.grouping.direction === 'asc' ? 'ascending' : 'descending'}.`;\n }\n\n if (this.sort?.columnId !== sortKey) return `Sort ${label} ascending`;\n if (this.sort.direction === 'asc') return `Sort ${label} descending. Currently ascending.`;\n return `Sort ${label} ascending. Currently descending.`;\n }\n\n private emitRowSelection(row: TableRow): void {\n const next = toggleTableRowSelection(this.selectedRowIds, row);\n const selected = next.includes(row.id);\n this.dsSelectionChange.emit({\n selectedRowIds: next,\n scope: 'row',\n changedRowId: row.id,\n selected,\n });\n }\n\n private emitAllSelection(): void {\n this.dsSelectionChange.emit({\n selectedRowIds: toggleAllLoadedTableRows(this.selectedRowIds, this.loadedRows),\n scope: 'all-loaded',\n selected: !this.selectionState.allSelected,\n });\n }\n\n private renderSelectionControl(\n label: string,\n checked: boolean,\n indeterminate: boolean,\n disabled: boolean,\n onActivate: () => void,\n ) {\n return (\n <button\n class=\"ds-table__selection-control\"\n type=\"button\"\n role=\"checkbox\"\n aria-label={label}\n aria-checked={indeterminate ? 'mixed' : String(checked)}\n disabled={disabled}\n onClick={onActivate}\n >\n <ds-checkbox\n label=\"\"\n size=\"md\"\n checked={checked}\n indeterminate={indeterminate}\n presentation={true}\n />\n </button>\n );\n }\n\n private renderColumnHeader(column: TableColumn) {\n const groupedColumn = this.grouping?.columnId === column.id;\n const headerSegments = column.headerSegments?.length\n ? column.headerSegments\n : [{ label: column.header, sortKey: column.id }];\n const activeMemberSegment = !groupedColumn\n ? headerSegments.find(segment => segment.sortKey === this.sort?.columnId)\n : undefined;\n const activeMemberSort = !!activeMemberSegment;\n const activeSort = groupedColumn || activeMemberSort;\n const align = column.align ?? 'start';\n const direction = groupedColumn\n ? this.grouping!.direction\n : activeMemberSort\n ? this.sort!.direction\n : undefined;\n const memberAriaSort = activeMemberSort\n ? (this.sort!.direction === 'asc' ? 'ascending' : 'descending')\n : undefined;\n\n const labelControl = (\n <span class=\"ds-table__header-labels\">\n {headerSegments.map((segment, index) => {\n const segmentActive = groupedColumn\n ? headerSegments.length === 1\n : activeMemberSegment?.sortKey === segment.sortKey;\n const segmentInteractive = !!column.sortable || (groupedColumn && segment.sortKey === column.id);\n const label = (\n <ds-text\n class=\"ds-table__header-label-box ds-control-label-box\"\n as=\"span\"\n variant=\"text-caption\"\n emphasis={segmentActive}\n color=\"inherit\"\n lineTruncation={1}\n >\n {segment.label}\n </ds-text>\n );\n const control = segmentInteractive ? (\n <button\n class=\"ds-table__header-label ds-table__header-label--interactive\"\n type=\"button\"\n aria-label={this.sortButtonLabel(column, segment.sortKey, segment.label)}\n data-sort-control=\"label\"\n data-sort-key={segment.sortKey}\n data-sort-active={segmentActive ? 'true' : undefined}\n onClick={() => this.emitSort(column, segment.sortKey)}\n >\n {label}\n </button>\n ) : (\n <span class=\"ds-table__header-label ds-table__header-static\">{label}</span>\n );\n\n return (\n <span class=\"ds-table__header-segment\" key={segment.sortKey}>\n {control}\n {index < headerSegments.length - 1 && (\n <ds-text\n class=\"ds-table__header-separator\"\n as=\"span\"\n variant=\"text-caption\"\n color=\"tertiary\"\n aria-hidden=\"true\"\n >\n {segment.separator ?? '/'}\n </ds-text>\n )}\n </span>\n );\n })}\n </span>\n );\n const sortControl = (\n <span class=\"ds-table__sort-slot\">\n {activeSort && (\n <ds-button-unfilled\n class=\"ds-table__sort-direction\"\n variant=\"icon\"\n icon={direction === 'asc' ? 'ArrowUp' : 'ArrowDown'}\n size=\"xs\"\n aria-label={this.sortButtonLabel(\n column,\n activeMemberSegment?.sortKey ?? column.id,\n activeMemberSegment?.label ?? column.header,\n )}\n hasBorder={false}\n activeFill={false}\n isActive={true}\n pressScale={false}\n data-sort-control=\"direction\"\n onDsClick={() => this.emitSort(column, activeMemberSegment?.sortKey ?? column.id)}\n />\n )}\n </span>\n );\n\n return (\n <th\n key={column.id}\n class={`ds-table__header-cell ds-table__cell--align-${align}`}\n scope=\"col\"\n aria-sort={memberAriaSort}\n data-column-id={column.id}\n data-grouped={groupedColumn ? 'true' : undefined}\n data-sort-active={activeSort ? 'true' : undefined}\n >\n <span class=\"ds-table__header-content\">\n {align === 'end' && sortControl}\n {align === 'center' && (\n <span\n class=\"ds-table__sort-slot ds-table__sort-slot--balance\"\n data-sort-balance=\"true\"\n aria-hidden=\"true\"\n />\n )}\n {labelControl}\n {align !== 'end' && sortControl}\n </span>\n </th>\n );\n }\n\n private renderCellValue(value: TableCellValue, column: TableColumn, row: TableRow) {\n if (isTableCellBlank(value)) return null;\n\n if (value == null || isTableCellEmpty(value)) {\n return (\n <ds-text\n class=\"ds-table__cell-track ds-table__cell-track--text\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n >\n <span aria-hidden=\"true\">—</span>\n <span class=\"ds-visually-hidden\">{this.emptyCellLabel}</span>\n </ds-text>\n );\n }\n\n if (isTableCellIcon(value)) {\n return (\n <ds-icon\n name={value.icon}\n size=\"md\"\n color={value.color ?? 'secondary'}\n label={value.label}\n />\n );\n }\n\n if (isTableCellImage(value)) {\n return (\n <span class=\"ds-table__cell-image\">\n {value.src ? (\n <img class=\"ds-table__cell-image-content\" src={value.src} alt={value.alt} loading=\"lazy\" />\n ) : (\n <span\n class=\"ds-table__cell-image-placeholder\"\n role=\"img\"\n aria-label={value.alt}\n />\n )}\n </span>\n );\n }\n\n if (isTableCellAction(value)) {\n return (\n <ds-button-unfilled\n variant={value.variant ?? 'label'}\n size=\"sm\"\n label={value.label ?? ''}\n icon={value.icon ?? ''}\n aria-label={value.ariaLabel ?? null}\n hasBorder={value.hasBorder ?? false}\n isInactive={value.isInactive ?? false}\n isLoading={value.isLoading ?? false}\n onDsClick={event => {\n event.stopPropagation();\n this.dsCellAction.emit({\n actionId: value.actionId,\n rowId: row.id,\n columnId: column.id,\n });\n }}\n />\n );\n }\n\n if (isTableCellTag(value)) {\n const variant = value.variant ?? 'tag-only';\n const tag = (\n <ds-tag\n label={value.label}\n intent={value.intent ?? 'neutral'}\n contrast={value.contrast ?? 'faint'}\n size={variant === 'text-with-tag' ? 'sm' : 'md'}\n icon={value.icon ?? ''}\n rounded={value.rounded ?? false}\n isInset\n />\n );\n\n if (variant === 'tag-only') return tag;\n\n return (\n <span class={`ds-table__cell-tag-stack ds-table__cell-tag-stack--${variant}`}>\n {variant === 'tag-with-text' && tag}\n <ds-text\n class=\"ds-table__cell-tag-text ds-table__cell-track\"\n as=\"span\"\n variant={variant === 'tag-with-text' ? 'text-body-small' : 'text-body-medium'}\n color=\"secondary\"\n lineTruncation={1}\n >\n {value.text}\n </ds-text>\n {variant === 'text-with-tag' && (\n <span class=\"ds-table__cell-tag-control-track\">{tag}</span>\n )}\n </span>\n );\n }\n\n const primaryText = isTableCellPrimaryText(value);\n const text = isTableCellText(value) || primaryText\n ? value\n : { primary: value, fontFeature: typeof value === 'number' ? 'tabular-nums' as const : 'normal' as const };\n const wraps = text.wrap ?? column.wrap ?? false;\n\n return (\n <span class={{ 'ds-table__cell-copy': true, 'ds-table__cell-copy--wrap': wraps }}>\n <ds-text\n class=\"ds-table__cell-primary ds-table__cell-track ds-table__cell-track--text\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"primary\"\n lineTruncation={wraps ? 'none' : 1}\n wrap={wraps ? 'wrap' : 'nowrap'}\n fontFeature={text.fontFeature ?? 'normal'}\n >\n {text.primary}\n </ds-text>\n {text.secondary !== undefined && text.secondary !== '' && (\n <ds-text\n class=\"ds-table__cell-secondary ds-table__cell-track ds-table__cell-track--text\"\n as=\"span\"\n variant={primaryText ? 'text-body-medium' : 'text-body-small'}\n color={primaryText ? 'primary' : 'secondary'}\n lineTruncation={wraps ? 'none' : 1}\n wrap={wraps ? 'wrap' : 'nowrap'}\n >\n {text.secondary}\n </ds-text>\n )}\n </span>\n );\n }\n\n private renderRow(row: TableRow) {\n const selected = this.selectedSet.has(row.id);\n const rowSelectable = row.selectable !== false && !row.disabled;\n return (\n <tr\n key={row.id}\n class={{\n 'ds-table__row': true,\n 'ds-table__row--selected': selected,\n 'ds-table__row--disabled': !!row.disabled,\n }}\n data-row-id={row.id}\n data-selected={selected ? 'true' : undefined}\n aria-disabled={row.disabled ? 'true' : undefined}\n >\n {this.selectable && (\n <td class=\"ds-table__cell ds-table__selection-cell\">\n {this.renderSelectionControl(\n `${selected ? 'Deselect' : 'Select'} ${tableRowSelectionLabel(row, this.columns)}`,\n selected,\n false,\n !rowSelectable,\n () => this.emitRowSelection(row),\n )}\n </td>\n )}\n {this.columns.map(column => {\n const align = column.align ?? 'start';\n const value = row.cells[column.id];\n const tagCell = isTableCellTag(value);\n const iconCell = isTableCellIcon(value);\n const imageCell = isTableCellImage(value);\n const actionCell = isTableCellAction(value);\n const primaryTextCell = isTableCellPrimaryText(value);\n const emptyCell = value == null || isTableCellEmpty(value);\n const blankCell = isTableCellBlank(value);\n const textCell = primaryTextCell || (!tagCell && !iconCell && !imageCell && !actionCell && !emptyCell && !blankCell);\n const singleTextCell = textCell && !primaryTextCell && (!isTableCellText(value) || !value.secondary);\n const tagVariant = tagCell ? value.variant ?? 'tag-only' : undefined;\n const textVariant = textCell\n ? primaryTextCell\n ? 'primary-pair'\n : singleTextCell\n ? 'single'\n : 'multi'\n : undefined;\n const cellType = tagCell\n ? 'tag'\n : iconCell\n ? 'icon'\n : imageCell\n ? 'image'\n : actionCell\n ? 'action'\n : primaryTextCell\n ? 'primary-text'\n : emptyCell\n ? 'empty'\n : blankCell\n ? 'blank'\n : 'text';\n return (\n <td\n key={`${row.id}:${column.id}`}\n class={{\n 'ds-table__cell': true,\n [`ds-table__cell--align-${align}`]: true,\n 'ds-table__cell--tag': tagCell,\n [`ds-table__cell--tag-${tagVariant}`]: tagCell,\n 'ds-table__cell--icon': iconCell,\n 'ds-table__cell--image': imageCell,\n 'ds-table__cell--action': actionCell,\n 'ds-table__cell--primary-text': primaryTextCell,\n 'ds-table__cell--text-single': singleTextCell,\n 'ds-table__cell--text-multi': textCell && !singleTextCell,\n 'ds-table__cell--empty': emptyCell,\n 'ds-table__cell--blank': blankCell,\n }}\n data-column-id={column.id}\n data-cell-type={cellType}\n data-cell-variant={tagVariant ?? textVariant}\n >\n <span class=\"ds-table__cell-content\">\n {this.renderCellValue(value, column, row)}\n </span>\n </td>\n );\n })}\n </tr>\n );\n }\n\n private renderDataBodies() {\n if (!this.grouped) {\n return <tbody class=\"ds-table__body\">{this.rows.map(row => this.renderRow(row))}</tbody>;\n }\n\n return this.groups.map(group => {\n const count = resolvedTableGroupCount(group);\n const countLabel = group.countLabel ?? `${count} ${count === 1 ? 'item' : 'items'}`;\n return (\n <tbody class=\"ds-table__body ds-table__group\" data-group-id={group.id} key={group.id}>\n <tr class=\"ds-table__group-row\">\n <th class=\"ds-table__group-cell\" scope=\"rowgroup\" colSpan={this.totalColumns}>\n <span class=\"ds-table__group-content\">\n <ds-icon name=\"GroupBy\" size=\"sm\" color=\"secondary\" aria-hidden=\"true\" />\n <ds-text as=\"span\" variant=\"text-body-small\" emphasis={true} color=\"primary\">\n {group.label}\n </ds-text>\n <ds-text as=\"span\" variant=\"text-body-small\" color=\"secondary\">\n {countLabel}\n </ds-text>\n </span>\n </th>\n </tr>\n {group.rows.map(row => this.renderRow(row))}\n </tbody>\n );\n });\n }\n\n private renderSkeletonBody() {\n const count = Math.min(20, Math.max(1, Math.round(this.skeletonRows) || 1));\n return (\n <tbody class=\"ds-table__body ds-table__skeleton-body\">\n {Array.from({ length: count }, (_, index) => (\n <tr class=\"ds-table__row ds-table__skeleton-row\" key={`skeleton-${index}`}>\n {this.selectable && (\n <td class=\"ds-table__cell ds-table__selection-cell\">\n <ds-skeleton variant=\"icon\" iconSize=\"md\" />\n </td>\n )}\n {this.columns.map(column => (\n <td class=\"ds-table__cell\" key={`skeleton-${index}:${column.id}`}>\n <span class=\"ds-table__cell-content\">\n <ds-skeleton variant=\"text\" textVariant=\"text-body-medium\" width=\"100%\" />\n </span>\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n );\n }\n\n private renderStateBody(kind: 'empty' | 'error') {\n const error = kind === 'error';\n return (\n <tbody class=\"ds-table__body ds-table__state-body\">\n <tr class=\"ds-table__state-row\">\n <td class=\"ds-table__state-cell\" colSpan={this.totalColumns}>\n <ds-empty-state\n icon={error ? 'ErrorTriangle' : 'Inbox'}\n heading={error ? this.errorHeading : this.emptyHeading}\n body={error ? this.errorBody : this.emptyBody}\n />\n </td>\n </tr>\n </tbody>\n );\n }\n\n private renderLazyBody() {\n if (!this.lazyLoading || !this.hasData) return null;\n const error = this.loadMoreError?.trim();\n const manualFallback = this.loadMoreMode === 'manual' || !this.intersectionSupported;\n\n return (\n <tbody class=\"ds-table__body ds-table__load-body\">\n <tr\n class=\"ds-table__load-row\"\n ref={element => {\n this.sentinelEl = element ?? null;\n }}\n >\n <td class=\"ds-table__load-cell\" colSpan={this.totalColumns}>\n {error ? (\n <span class=\"ds-table__load-content ds-table__load-content--error\">\n <ds-icon name=\"ErrorTriangle\" size=\"sm\" color=\"negative\" aria-hidden=\"true\" />\n <ds-text as=\"span\" variant=\"text-body-small\" color=\"secondary\">{error}</ds-text>\n <ds-button-unfilled\n label={this.retryLabel}\n size=\"sm\"\n onDsClick={() => this.requestLoadMore('retry')}\n />\n </span>\n ) : this.loadingMore ? (\n <span class=\"ds-table__load-content\">\n <ds-loader size=\"sm\" color=\"secondary\" />\n <ds-text as=\"span\" variant=\"text-body-small\" color=\"secondary\">\n {this.loadingMoreLabel}\n </ds-text>\n </span>\n ) : this.hasMore && manualFallback ? (\n <ds-button-unfilled\n label={this.loadMoreLabel}\n size=\"sm\"\n onDsClick={() => this.requestLoadMore('manual')}\n />\n ) : this.hasMore ? (\n <span class=\"ds-table__auto-sentinel\" aria-hidden=\"true\" />\n ) : (\n <ds-text as=\"span\" variant=\"text-body-small\" color=\"secondary\">\n {this.endOfResultsLabel}\n </ds-text>\n )}\n </td>\n </tr>\n </tbody>\n );\n }\n\n render() {\n const selection = this.selectionState;\n const regionLabel = this.scrollLabel?.trim() || `${this.caption} scroll area`;\n const initialLoading = this.loading && !this.hasData;\n const initialError = !this.hasData && this.error;\n const viewportStyle = this.resolvedMaxHeight\n ? { '--ds-table-max-block-size': this.resolvedMaxHeight }\n : undefined;\n\n return (\n <Host class=\"table-host\">\n <div class={{\n 'ds-table': true,\n 'ds-table--sticky-header': this.stickyHeader,\n }}>\n <div\n class={{\n 'ds-table__frame': true,\n 'ds-table__frame--overflow-start': this.overflowStart,\n 'ds-table__frame--overflow-end': this.overflowEnd,\n }}\n >\n <div\n class=\"ds-table__viewport\"\n style={viewportStyle}\n ref={element => {\n this.viewportEl = element ?? null;\n }}\n role={this.scrollable ? 'region' : undefined}\n aria-label={this.scrollable ? regionLabel : undefined}\n tabIndex={this.scrollable ? 0 : undefined}\n >\n <table\n class={{\n 'ds-table__table': true,\n 'ds-table__table--selectable': this.selectable,\n }}\n style={this.tableStyle}\n aria-busy={initialLoading || this.loadingMore ? 'true' : undefined}\n ref={element => {\n this.tableEl = element ?? null;\n }}\n >\n <caption\n class={{\n 'ds-table__caption': true,\n 'ds-visually-hidden': this.captionVisibility === 'hidden',\n }}\n >\n <ds-text as=\"span\" variant=\"text-title-small\" emphasis={true} color=\"primary\">\n {this.caption}\n </ds-text>\n </caption>\n <colgroup>\n {this.selectable && <col class=\"ds-table__selection-column\" />}\n {this.columns.map(column => {\n const width = tableColumnSize(column);\n return <col key={column.id} style={width ? { width } : undefined} />;\n })}\n </colgroup>\n <thead class=\"ds-table__head\">\n <tr class=\"ds-table__header-row\">\n {this.selectable && (\n <th class=\"ds-table__header-cell ds-table__selection-cell\" scope=\"col\">\n {this.renderSelectionControl(\n selection.allSelected ? 'Deselect all loaded rows' : 'Select all loaded rows',\n selection.allSelected,\n selection.indeterminate,\n selection.selectableRowIds.length === 0,\n () => this.emitAllSelection(),\n )}\n </th>\n )}\n {this.columns.map(column => this.renderColumnHeader(column))}\n </tr>\n </thead>\n {initialLoading\n ? this.renderSkeletonBody()\n : initialError\n ? this.renderStateBody('error')\n : this.hasData\n ? this.renderDataBodies()\n : this.renderStateBody('empty')}\n {!initialLoading && !initialError && this.renderLazyBody()}\n </table>\n </div>\n </div>\n <div class=\"ds-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {this.announcement}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["TABLE_COLUMN_WIDTH_TOKENS","xs","sm","md","lg","xl","isTableCellText","value","isTableCellPrimaryText","kind","isTableCellTag","isTableCellIcon","isTableCellImage","isTableCellAction","isTableCellEmpty","isTableCellBlank","tableCellPrimary","label","alt","ariaLabel","primary","tableRowSelectionLabel","row","columns","explicit","selectionLabel","trim","column","cells","id","String","nextTableSortState","current","columnId","direction","nextTableGroupOrder","grouping","toggleTableGroupCollapsed","collapsedGroupIds","groupId","next","Set","has","delete","add","nextTableGroupsCollapsed","groupIds","length","collapsed","allCollapsed","every","tableCollapseAllHost","undefined","index","mode","clampTableColumnSize","size","Number","isFinite","minimum","minSize","maximum","maxSize","Math","max","POSITIVE_INFINITY","min","tableColumnSize","width","tableFlexibleColumnId","some","sticky","tableExplicitMinWidth","widths","map","filter","join","tableRows","rows","groups","grouped","flatMap","group","canSelectRow","selectable","disabled","deriveTableSelectionState","selectedRowIds","selected","selectableRowIds","selectedLoadedCount","reduce","count","allSelected","indeterminate","toggleTableRowSelection","toggleAllLoadedTableRows","loadedRows","state","toggleTableGroupSelection","groupRows","resolvedTableGroupCount","total","totalCount","TABLE_GROUP_INTENTS","isTableGroupIntent","includes","tableGroupIntentClass","intent","tableGroupLabelColor","formatTableResultSummary","displayed","locale","formatter","Intl","NumberFormat","replace","format","tableModelIssues","issues","columnIds","push","header","headerLabel","rowIds","resolveTableCellPresentation","cellType","variant","primaryText","text","fontFeature","singleLine","secondary","wraps","wrap","createTableRenderModel","input","selectionMode","allGroupsCollapsed","showCollapseAll","explicitMinWidth","hasData","selection","countLabel","countIntent","intentClass","labelColor","totalColumns","collapseAllHost","flexibleColumnId","tableStyle","resolveTableLayoutMetrics","horizontalOverflow","scrollInlineSize","viewportInlineSize","visibleInlineSize","tableInlineSize","overflow","start","scrollInlineOffset","end","scrollable","scrollBlockSize","viewportBlockSize","inlineOffset","maxInlineOffset","collapseBlockOffset","collapseHeadBlockStart","collapseFrameBlockStart","TableLayoutController","constructor","options","this","connected","connectedViewport","observedTable","resizeObserver","frame","schedule","requestAnimationFrame","sync","connect","refresh","disconnect","cancelAnimationFrame","removeEventListener","viewport","table","elements","elementsChanged","addEventListener","passive","ResizeObserver","observe","measureCollapse","floatingCollapseAll","documentStickyHeader","collapseAllOverlay","interactiveHead","metrics","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollLeft","getBoundingClientRect","top","setProperty","stickyHeaderTable","overflowChanged","element","property","style","getPropertyValue","TableLoadController","intersectionSupported","IntersectionObserver","intersectionObserver","observedSentinel","requestPending","requestedRowCount","previousLoadedRowCount","initialize","loadedRowCount","disconnectObserver","lazyLoading","loadMoreMode","hasMore","loadMoreError","sentinel","threshold","loadMoreThreshold","entries","entry","isIntersecting","request","root","containedScroll","rootMargin","structureChanged","resetRequest","dataChanged","nextCount","added","announce","rowsLoadedLabel","identityChanged","configurationChanged","loadingChanged","loading","loadingMoreLabel","errorChanged","error","hasMoreChanged","hadMore","endOfResultsLabel","reason","loadingMore","loadIdentity","interactionFillCss","tableCss","Table","__stencil_proxyCustomElement","HTMLElement","registerHost","sort","captionVisibility","resultSummaryLabel","stickyHeader","skeletonRows","emptyHeading","emptyBody","errorHeading","errorBody","emptyCellLabel","loadMoreLabel","retryLabel","overflowStart","overflowEnd","announcement","viewportEl","frameEl","interactiveHeadEl","collapseAllOverlayEl","stickyHeaderTableEl","tableEl","sentinelEl","previousModelWarning","hasLoaded","renderedModel","layoutController","loadController","resolvedMaxHeight","currentLoadedRowCount","message","detail","dsLoadMore","emit","componentWillLoad","warnModelIssues","componentDidLoad","componentDidRender","connectedCallback","disconnectedCallback","handleStructureChange","handleDataChange","handleLoadIdentityChange","handleLazyConfigurationChange","handleLoadingMoreChange","handleLoadMoreErrorChange","handleHasMoreChange","currentLoadedRows","createRenderModel","maxHeight","caption","unshift","headerSegments","segment","sortKey","stickyStart","stickyEnd","console","warn","emitSort","dsGroupingChange","sortable","dsSortChange","sortButtonLabel","emitRowSelection","dsSelectionChange","scope","changedRowId","emitAllSelection","emitGroupSelection","rowEventOwnsActivation","event","currentTarget","composedPath","target","matches","emitRowActivation","interactive","dsRowActivate","rowId","handleRowKeydown","key","preventDefault","renderSelectionControl","checked","onActivate","h","class","type","role","onClick","presentation","renderStickyEdge","renderCollapseAllButton","icon","hasBorder","activeFill","pressScale","onDsClick","stopPropagation","emitAllGroupsCollapse","renderFloatingCollapseAll","model","ref","renderColumnHeader","presentational","groupedColumn","activeMemberSegment","find","activeMemberSort","activeSort","align","memberAriaSort","labelControl","segmentActive","segmentInteractive","as","emphasis","color","lineTruncation","control","separator","sortControl","isActive","collapseHost","actionCollapseHost","blankActionCollapseHost","collapseControl","renderColgroup","flexible","renderHeader","renderCellValue","cell","name","src","isInset","insetDepth","isInactive","isLoading","dsCellAction","actionId","tag","contrast","rounded","renderRow","rowSelectable","tabIndex","onKeyDown","tagCell","iconCell","imageCell","actionCell","textCell","primaryTextCell","singleTextCell","emptyCell","blankCell","tagVariant","textVariant","emitGroupCollapse","dsGroupCollapseChange","renderDataBodies","groupModel","isCollapsed","groupSelection","colSpan","expanded","renderSkeletonBody","round","Array","from","_","iconSize","renderStateBody","heading","body","renderLazyBody","manualFallback","renderDocumentStickyHeader","resultSummary","displayedCount","renderResultFooter","summary","renderCaptionBar","render","regionLabel","scrollLabel","initialLoading","initialError","viewportStyle","Host"],"sources":["src/wc/components/Table/table-model.ts","src/wc/components/Table/table-cell-model.ts","src/wc/components/Table/table-render-model.ts","src/wc/components/Table/table-layout-controller.ts","src/wc/components/Table/table-load-controller.ts","src/wc/utils/interaction-fill.css?tag=ds-table&encapsulation=scoped","src/wc/components/Table/Table.css?tag=ds-table&encapsulation=scoped","src/wc/components/Table/Table.tsx"],"sourcesContent":["import type {\n TableCellBlank,\n TableCellAction,\n TableCellEmpty,\n TableCellIcon,\n TableCellImage,\n TableCellPrimaryText,\n TableCellText,\n TableCellTag,\n TableCellValue,\n TableColumn,\n TableGroup,\n TableGroupingState,\n TableRow,\n TableSortState,\n} from './table-types';\n\nexport interface TableSelectionState {\n selectableRowIds: string[];\n selectedLoadedCount: number;\n allSelected: boolean;\n indeterminate: boolean;\n}\n\nconst TABLE_COLUMN_WIDTH_TOKENS = {\n xs: '--dimension-table-column-width-xs',\n sm: '--dimension-table-column-width-sm',\n md: '--dimension-table-column-width-md',\n lg: '--dimension-table-column-width-lg',\n xl: '--dimension-table-column-width-xl',\n} as const;\n\nexport function isTableCellText(value: TableCellValue): value is TableCellText {\n return typeof value === 'object' && value !== null && 'primary' in value && !('kind' in value);\n}\n\nexport function isTableCellPrimaryText(value: TableCellValue): value is TableCellPrimaryText {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'primary-text';\n}\n\nexport function isTableCellTag(value: TableCellValue): value is TableCellTag {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'tag';\n}\n\nexport function isTableCellIcon(value: TableCellValue): value is TableCellIcon {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'icon';\n}\n\nexport function isTableCellImage(value: TableCellValue): value is TableCellImage {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'image';\n}\n\nexport function isTableCellAction(value: TableCellValue): value is TableCellAction {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'action';\n}\n\nexport function isTableCellEmpty(value: TableCellValue): value is TableCellEmpty {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'empty';\n}\n\nexport function isTableCellBlank(value: TableCellValue): value is TableCellBlank {\n return typeof value === 'object' && value !== null && 'kind' in value && value.kind === 'blank';\n}\n\nexport function tableCellPrimary(value: TableCellValue): string | number | null {\n if (value == null) return null;\n if (isTableCellTag(value)) return value.label;\n if (isTableCellIcon(value)) return null;\n if (isTableCellImage(value)) return value.alt;\n if (isTableCellAction(value)) return value.label ?? value.ariaLabel;\n if (isTableCellPrimaryText(value)) return value.primary;\n if (isTableCellEmpty(value) || isTableCellBlank(value)) return null;\n return isTableCellText(value) ? value.primary : value;\n}\n\nexport function tableRowSelectionLabel(row: TableRow, columns: TableColumn[]): string {\n const explicit = row.selectionLabel?.trim();\n if (explicit) return explicit;\n\n for (const column of columns) {\n const primary = tableCellPrimary(row.cells[column.id]);\n if (primary != null && String(primary).trim()) return String(primary);\n }\n\n return row.id;\n}\n\nexport function nextTableSortState(\n current: TableSortState | null | undefined,\n columnId: string,\n): TableSortState {\n if (current?.columnId !== columnId) return { columnId, direction: 'asc' };\n if (current.direction === 'asc') return { columnId, direction: 'desc' };\n return { columnId, direction: 'asc' };\n}\n\nexport function nextTableGroupOrder(grouping: TableGroupingState): TableGroupingState {\n return {\n ...grouping,\n direction: grouping.direction === 'asc' ? 'desc' : 'asc',\n };\n}\n\nexport function toggleTableGroupCollapsed(\n collapsedGroupIds: string[],\n groupId: string,\n): string[] {\n const next = new Set(collapsedGroupIds);\n if (next.has(groupId)) next.delete(groupId);\n else next.add(groupId);\n return [...next];\n}\n\nexport function nextTableGroupsCollapsed(\n collapsedGroupIds: string[],\n groupIds: string[],\n): string[] {\n if (groupIds.length === 0) return [];\n const collapsed = new Set(collapsedGroupIds);\n const allCollapsed = groupIds.every(id => collapsed.has(id));\n return allCollapsed ? [] : [...groupIds];\n}\n\n/** Host for grouped collapse-all: the trailing action lane or a scrollport-owned overlay. */\nexport type TableCollapseAllHost =\n | { columnId: string; mode: 'action' }\n | { mode: 'floating' };\n\nexport function tableCollapseAllHost(\n columns: TableColumn[],\n): TableCollapseAllHost | undefined {\n if (columns.length === 0) return undefined;\n for (let index = columns.length - 1; index >= 0; index -= 1) {\n const column = columns[index]!;\n if (column.kind === 'action') return { columnId: column.id, mode: 'action' };\n }\n return { mode: 'floating' };\n}\n\nexport function clampTableColumnSize(column: TableColumn): number | undefined {\n if (typeof column.size !== 'number' || !Number.isFinite(column.size) || column.size <= 0) {\n return undefined;\n }\n\n const minimum = Number.isFinite(column.minSize) && (column.minSize ?? 0) > 0\n ? column.minSize!\n : 0;\n const maximum = Number.isFinite(column.maxSize) && (column.maxSize ?? 0) > 0\n ? Math.max(column.maxSize!, minimum)\n : Number.POSITIVE_INFINITY;\n\n return Math.min(Math.max(column.size!, minimum), maximum);\n}\n\nexport function tableColumnSize(column: TableColumn): string | undefined {\n if (typeof column.size === 'string') {\n return `var(${TABLE_COLUMN_WIDTH_TOKENS[column.size]})`;\n }\n const width = clampTableColumnSize(column);\n if (width != null) return `${width}px`;\n return column.kind === 'action' ? 'var(--dimension-size-500)' : undefined;\n}\n\n/**\n * When every column has an explicit width, one ordinary lane must absorb spare\n * table width so fixed selection and action lanes are not expanded by the\n * native fixed-table layout algorithm.\n */\nexport function tableFlexibleColumnId(columns: TableColumn[]): string | undefined {\n if (columns.some(column => !tableColumnSize(column))) return undefined;\n for (let index = columns.length - 1; index >= 0; index -= 1) {\n const column = columns[index]!;\n if (column.kind !== 'action' && !column.sticky) return column.id;\n }\n for (let index = columns.length - 1; index >= 0; index -= 1) {\n const column = columns[index]!;\n if (column.kind !== 'action') return column.id;\n }\n return columns[columns.length - 1]?.id;\n}\n\nexport function tableExplicitMinWidth(columns: TableColumn[]): string | undefined {\n const widths = columns.map(tableColumnSize).filter((width): width is string => !!width);\n if (widths.length === 0) return undefined;\n return widths.length === 1 ? widths[0] : `calc(${widths.join(' + ')})`;\n}\n\nexport function tableRows(rows: TableRow[], groups: TableGroup[], grouped: boolean): TableRow[] {\n return grouped ? groups.flatMap(group => group.rows) : rows;\n}\n\nfunction canSelectRow(row: TableRow): boolean {\n return row.selectable !== false && !row.disabled;\n}\n\nexport function deriveTableSelectionState(\n rows: TableRow[],\n selectedRowIds: readonly string[],\n): TableSelectionState {\n const selected = new Set(selectedRowIds);\n const selectableRowIds = rows.filter(canSelectRow).map(row => row.id);\n const selectedLoadedCount = selectableRowIds.reduce(\n (count, id) => count + (selected.has(id) ? 1 : 0),\n 0,\n );\n\n return {\n selectableRowIds,\n selectedLoadedCount,\n allSelected: selectableRowIds.length > 0 && selectedLoadedCount === selectableRowIds.length,\n indeterminate: selectedLoadedCount > 0 && selectedLoadedCount < selectableRowIds.length,\n };\n}\n\nexport function toggleTableRowSelection(\n selectedRowIds: readonly string[],\n row: TableRow,\n): string[] {\n if (!canSelectRow(row)) return [...selectedRowIds];\n const selected = new Set(selectedRowIds);\n if (selected.has(row.id)) selected.delete(row.id);\n else selected.add(row.id);\n return [...selected];\n}\n\nexport function toggleAllLoadedTableRows(\n selectedRowIds: readonly string[],\n loadedRows: TableRow[],\n): string[] {\n const selected = new Set(selectedRowIds);\n const state = deriveTableSelectionState(loadedRows, selectedRowIds);\n\n for (const id of state.selectableRowIds) {\n if (state.allSelected) selected.delete(id);\n else selected.add(id);\n }\n\n return [...selected];\n}\n\n/** Toggle every selectable loaded row that belongs to a group. */\nexport function toggleTableGroupSelection(\n selectedRowIds: readonly string[],\n groupRows: TableRow[],\n): string[] {\n return toggleAllLoadedTableRows(selectedRowIds, groupRows);\n}\n\nexport function resolvedTableGroupCount(group: TableGroup): number {\n const total = Number.isFinite(group.totalCount) ? Math.max(0, group.totalCount!) : 0;\n return Math.max(total, group.rows.length);\n}\n\nexport const TABLE_GROUP_INTENTS = [\n 'brand',\n 'neutral',\n 'negative',\n 'warning',\n 'caution',\n 'positive',\n] as const;\n\nexport function isTableGroupIntent(\n value: unknown,\n): value is (typeof TABLE_GROUP_INTENTS)[number] {\n return (\n typeof value === 'string' &&\n (TABLE_GROUP_INTENTS as readonly string[]).includes(value)\n );\n}\n\nexport function tableGroupIntentClass(\n intent: (typeof TABLE_GROUP_INTENTS)[number] | undefined,\n): string | undefined {\n return isTableGroupIntent(intent) ? `ds-table__group-cell--intent-${intent}` : undefined;\n}\n\n/** Title color for an intentful group label; defaults to primary when unset. */\nexport function tableGroupLabelColor(\n intent: (typeof TABLE_GROUP_INTENTS)[number] | undefined,\n): 'primary' | 'brand' | 'negative' | 'warning' | 'caution' | 'positive' | `var(--${string})` {\n if (!isTableGroupIntent(intent)) return 'primary';\n if (intent === 'neutral') return 'var(--color-foreground-bold-neutral)';\n return intent;\n}\n\n/** Formats the optional table result footer. Returns null when either count is missing. */\nexport function formatTableResultSummary(\n displayed: number | null | undefined,\n total: number | null | undefined,\n label = 'Displaying {displayed} of {total}',\n locale?: string,\n): string | null {\n if (!Number.isFinite(displayed) || !Number.isFinite(total)) return null;\n const formatter = new Intl.NumberFormat(locale);\n return label\n .replace('{displayed}', formatter.format(displayed as number))\n .replace('{total}', formatter.format(total as number));\n}\n\nexport function tableModelIssues(\n columns: TableColumn[],\n rows: TableRow[],\n groups: TableGroup[],\n grouped: boolean,\n): string[] {\n const issues: string[] = [];\n const columnIds = new Set<string>();\n for (const column of columns) {\n if (!column.id.trim()) issues.push('Every column requires a non-empty id.');\n else if (columnIds.has(column.id)) issues.push(`Duplicate column id: ${column.id}`);\n if (!column.header.trim() && !column.headerLabel?.trim()) {\n issues.push(`Column ${column.id || '(missing id)'} requires a visible header or headerLabel.`);\n }\n columnIds.add(column.id);\n }\n\n const groupIds = new Set<string>();\n if (grouped) {\n for (const group of groups) {\n if (!group.id.trim()) issues.push('Every group requires a non-empty id.');\n else if (groupIds.has(group.id)) issues.push(`Duplicate group id: ${group.id}`);\n groupIds.add(group.id);\n if (group.totalCount != null && group.totalCount < group.rows.length) {\n issues.push(`Group ${group.id} totalCount is smaller than its loaded row count.`);\n }\n if (group.intent != null && !isTableGroupIntent(group.intent)) {\n issues.push(`Group ${group.id} has an unsupported intent.`);\n }\n }\n }\n\n const rowIds = new Set<string>();\n for (const row of tableRows(rows, groups, grouped)) {\n if (!row.id.trim()) issues.push('Every row requires a non-empty id.');\n else if (rowIds.has(row.id)) issues.push(`Duplicate row id: ${row.id}`);\n rowIds.add(row.id);\n }\n\n return [...new Set(issues)];\n}\n","import {\n isTableCellAction,\n isTableCellBlank,\n isTableCellEmpty,\n isTableCellIcon,\n isTableCellImage,\n isTableCellPrimaryText,\n isTableCellTag,\n isTableCellText,\n} from './table-model';\nimport type {\n TableCellAction,\n TableCellBlank,\n TableCellEmpty,\n TableCellIcon,\n TableCellImage,\n TableCellTag,\n TableCellTagVariant,\n TableCellValue,\n TableColumn,\n} from './table-types';\n\nexport interface ResolvedTableCellText {\n primary: string | number;\n secondary?: string | number;\n wrap?: boolean;\n fontFeature?: 'normal' | 'tabular-nums';\n}\n\nexport type TableCellPresentation =\n | { kind: 'blank'; cellType: 'blank'; value: TableCellBlank }\n | { kind: 'empty'; cellType: 'empty'; value: TableCellEmpty | null | undefined }\n | { kind: 'icon'; cellType: 'icon'; value: TableCellIcon }\n | { kind: 'image'; cellType: 'image'; value: TableCellImage }\n | { kind: 'action'; cellType: 'action'; value: TableCellAction }\n | {\n kind: 'tag';\n cellType: 'tag';\n value: TableCellTag;\n variant: TableCellTagVariant;\n }\n | {\n kind: 'text';\n cellType: 'text' | 'primary-text';\n value: ResolvedTableCellText;\n primaryText: boolean;\n singleLine: boolean;\n variant: 'single' | 'multi' | 'primary-pair';\n wraps: boolean;\n };\n\n/** Resolve a cell's semantic and visual recipe once for both markup and classes. */\nexport function resolveTableCellPresentation(\n value: TableCellValue,\n column: TableColumn,\n): TableCellPresentation {\n if (isTableCellBlank(value)) return { kind: 'blank', cellType: 'blank', value };\n if (value == null || isTableCellEmpty(value)) {\n return { kind: 'empty', cellType: 'empty', value };\n }\n if (isTableCellIcon(value)) return { kind: 'icon', cellType: 'icon', value };\n if (isTableCellImage(value)) return { kind: 'image', cellType: 'image', value };\n if (isTableCellAction(value)) return { kind: 'action', cellType: 'action', value };\n if (isTableCellTag(value)) {\n return {\n kind: 'tag',\n cellType: 'tag',\n value,\n variant: value.variant ?? 'tag-only',\n };\n }\n\n const primaryText = isTableCellPrimaryText(value);\n const text: ResolvedTableCellText = isTableCellText(value) || primaryText\n ? value\n : {\n primary: value,\n fontFeature: typeof value === 'number' ? 'tabular-nums' : 'normal',\n };\n const singleLine = !primaryText && (text.secondary === undefined || text.secondary === '');\n return {\n kind: 'text',\n cellType: primaryText ? 'primary-text' : 'text',\n value: text,\n primaryText,\n singleLine,\n variant: primaryText ? 'primary-pair' : singleLine ? 'single' : 'multi',\n wraps: text.wrap ?? column.wrap ?? false,\n };\n}\n","import {\n deriveTableSelectionState,\n isTableGroupIntent,\n resolvedTableGroupCount,\n tableCollapseAllHost,\n tableExplicitMinWidth,\n tableFlexibleColumnId,\n tableGroupIntentClass,\n tableGroupLabelColor,\n tableRows,\n type TableCollapseAllHost,\n type TableSelectionState,\n} from './table-model';\nimport type {\n TableColumn,\n TableGroup,\n TableGroupIntent,\n TableRow,\n TableSelectionMode,\n} from './table-types';\n\nexport interface TableGroupRenderModel {\n group: TableGroup;\n count: number;\n countLabel: string;\n countIntent: TableGroupIntent;\n intent: TableGroupIntent | undefined;\n intentClass: string | undefined;\n labelColor: ReturnType<typeof tableGroupLabelColor>;\n collapsed: boolean;\n selection: TableSelectionState | null;\n}\n\nexport interface TableRenderModel {\n grouped: boolean;\n selectable: boolean;\n loadedRows: TableRow[];\n hasData: boolean;\n selectedRowIds: ReadonlySet<string>;\n selection: TableSelectionState;\n collapsedGroupIds: ReadonlySet<string>;\n groups: TableGroupRenderModel[];\n totalColumns: number;\n allGroupsCollapsed: boolean;\n showCollapseAll: boolean;\n collapseAllHost: TableCollapseAllHost | undefined;\n flexibleColumnId: string | undefined;\n tableStyle: Record<string, string> | undefined;\n}\n\nexport interface TableRenderModelInput {\n columns: TableColumn[];\n rows: TableRow[];\n groups: TableGroup[];\n grouped: boolean;\n selectionMode: TableSelectionMode;\n selectedRowIds: string[];\n collapsedGroupIds: string[];\n}\n\n/** Create one immutable snapshot of all derived state consumed during a render. */\nexport function createTableRenderModel(input: TableRenderModelInput): TableRenderModel {\n const selectable = input.selectionMode === 'multiple';\n const loadedRows = tableRows(input.rows, input.groups, input.grouped);\n const selectedRowIds = new Set(input.selectedRowIds);\n const collapsedGroupIds = new Set(input.collapsedGroupIds);\n const allGroupsCollapsed = input.grouped && input.groups.length > 0 &&\n input.groups.every(group => collapsedGroupIds.has(group.id));\n const showCollapseAll = input.grouped && input.groups.length > 0 && !allGroupsCollapsed;\n const explicitMinWidth = tableExplicitMinWidth(input.columns);\n\n return {\n grouped: input.grouped,\n selectable,\n loadedRows,\n hasData: loadedRows.length > 0,\n selectedRowIds,\n selection: deriveTableSelectionState(loadedRows, input.selectedRowIds),\n collapsedGroupIds,\n groups: input.groups.map(group => {\n const count = resolvedTableGroupCount(group);\n const intent = isTableGroupIntent(group.intent) ? group.intent : undefined;\n return {\n group,\n count,\n countLabel: group.countLabel ?? `${count} ${count === 1 ? 'item' : 'items'}`,\n countIntent: intent ?? 'neutral',\n intent,\n intentClass: tableGroupIntentClass(intent),\n labelColor: tableGroupLabelColor(intent),\n collapsed: collapsedGroupIds.has(group.id),\n selection: selectable\n ? deriveTableSelectionState(group.rows, input.selectedRowIds)\n : null,\n };\n }),\n totalColumns: input.columns.length + (selectable ? 1 : 0),\n allGroupsCollapsed,\n showCollapseAll,\n collapseAllHost: showCollapseAll ? tableCollapseAllHost(input.columns) : undefined,\n flexibleColumnId: tableFlexibleColumnId(input.columns),\n tableStyle: explicitMinWidth == null\n ? undefined\n : { '--ds-table-explicit-min-inline-size': explicitMinWidth },\n };\n}\n","export interface TableLayoutElements {\n viewport: HTMLElement | null;\n table: HTMLTableElement | null;\n stickyHeaderTable: HTMLTableElement | null;\n collapseAllOverlay: HTMLElement | null;\n frame: HTMLElement | null;\n interactiveHead: HTMLTableSectionElement | null;\n}\n\nexport interface TableLayoutMode {\n documentStickyHeader: boolean;\n floatingCollapseAll: boolean;\n}\n\nexport interface TableOverflowState {\n start: boolean;\n end: boolean;\n scrollable: boolean;\n}\n\nexport interface TableLayoutControllerOptions {\n elements: () => TableLayoutElements;\n mode: () => TableLayoutMode;\n overflowChanged: (state: TableOverflowState) => void;\n}\n\nexport interface TableLayoutMetricInput {\n viewportInlineSize: number;\n viewportBlockSize: number;\n scrollInlineSize: number;\n scrollBlockSize: number;\n scrollInlineOffset: number;\n tableInlineSize: number;\n collapseHeadBlockStart?: number;\n collapseFrameBlockStart?: number;\n}\n\nexport interface TableLayoutMetrics {\n visibleInlineSize: number;\n overflow: TableOverflowState;\n inlineOffset: number;\n maxInlineOffset: number;\n collapseBlockOffset: number | null;\n}\n\n/** Pure geometry resolution shared by the controller and focused tests. */\nexport function resolveTableLayoutMetrics(input: TableLayoutMetricInput): TableLayoutMetrics {\n const horizontalOverflow = input.scrollInlineSize - input.viewportInlineSize > 1;\n return {\n visibleInlineSize: Math.min(input.viewportInlineSize, input.tableInlineSize),\n overflow: {\n start: horizontalOverflow && input.scrollInlineOffset > 1,\n end: horizontalOverflow &&\n input.scrollInlineOffset + input.viewportInlineSize < input.scrollInlineSize - 1,\n scrollable: horizontalOverflow || input.scrollBlockSize - input.viewportBlockSize > 1,\n },\n inlineOffset: input.scrollInlineOffset,\n maxInlineOffset: Math.max(0, input.scrollInlineSize - input.viewportInlineSize),\n collapseBlockOffset: input.collapseHeadBlockStart == null ||\n input.collapseFrameBlockStart == null\n ? null\n : Math.max(0, input.collapseHeadBlockStart - input.collapseFrameBlockStart),\n };\n}\n\n/**\n * Owns table viewport observation. It resolves newly rendered geometry\n * immediately so the first paint has the correct viewport-width chrome, then\n * batches observer-driven scroll and resize reads/writes into one animation frame.\n * The component remains responsible only for refs and reactive overflow state.\n */\nexport class TableLayoutController {\n private connected = false;\n private connectedViewport: HTMLElement | null = null;\n private observedTable: HTMLTableElement | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private frame: number | null = null;\n private overflow: TableOverflowState | null = null;\n\n constructor(private readonly options: TableLayoutControllerOptions) {}\n\n connect(): void {\n this.connected = true;\n this.refresh();\n }\n\n disconnect(): void {\n this.connected = false;\n if (this.frame !== null) cancelAnimationFrame(this.frame);\n this.frame = null;\n this.connectedViewport?.removeEventListener('scroll', this.schedule);\n this.connectedViewport = null;\n this.observedTable = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n /** Reconcile newly rendered refs, observers, and pending geometry. */\n refresh(): void {\n if (!this.connected) return;\n const { viewport, table } = this.options.elements();\n const elementsChanged = viewport !== this.connectedViewport || table !== this.observedTable;\n if (elementsChanged) {\n this.connectedViewport?.removeEventListener('scroll', this.schedule);\n this.resizeObserver?.disconnect();\n this.connectedViewport = viewport;\n this.observedTable = table;\n viewport?.addEventListener('scroll', this.schedule, { passive: true });\n\n if (typeof ResizeObserver !== 'undefined' && viewport) {\n this.resizeObserver ??= new ResizeObserver(this.schedule);\n this.resizeObserver.observe(viewport);\n if (table) this.resizeObserver.observe(table);\n }\n }\n // Rendering can change the table's intrinsic width without replacing either\n // element. Resolve that geometry before componentDidRender returns so WebKit\n // cannot paint or expose one frame using the full spanning-cell width.\n this.sync();\n }\n\n private schedule = (): void => {\n if (!this.connected || this.frame !== null) return;\n this.frame = requestAnimationFrame(() => {\n this.frame = null;\n this.sync();\n });\n };\n\n private sync(): void {\n const elements = this.options.elements();\n const viewport = elements.viewport;\n if (!viewport) return;\n\n // Read every layout value before writing styles or reactive state.\n const mode = this.options.mode();\n const measureCollapse = mode.floatingCollapseAll && !mode.documentStickyHeader &&\n elements.collapseAllOverlay && elements.frame && elements.interactiveHead;\n const metrics = resolveTableLayoutMetrics({\n viewportInlineSize: viewport.clientWidth,\n viewportBlockSize: viewport.clientHeight,\n scrollInlineSize: viewport.scrollWidth,\n scrollBlockSize: viewport.scrollHeight,\n scrollInlineOffset: viewport.scrollLeft,\n tableInlineSize: elements.table?.getBoundingClientRect().width ?? viewport.clientWidth,\n collapseHeadBlockStart: measureCollapse\n ? elements.interactiveHead!.getBoundingClientRect().top\n : undefined,\n collapseFrameBlockStart: measureCollapse\n ? elements.frame!.getBoundingClientRect().top\n : undefined,\n });\n\n this.setProperty(\n viewport,\n '--ds-table-visible-inline-size',\n `${metrics.visibleInlineSize}px`,\n );\n if (elements.stickyHeaderTable) {\n this.setProperty(\n elements.stickyHeaderTable,\n '--ds-table-inline-scroll-offset',\n `${metrics.inlineOffset}px`,\n );\n this.setProperty(\n elements.stickyHeaderTable,\n '--ds-table-inline-scroll-max-offset',\n `${metrics.maxInlineOffset}px`,\n );\n }\n if (metrics.collapseBlockOffset !== null && elements.collapseAllOverlay) {\n this.setProperty(\n elements.collapseAllOverlay,\n '--ds-table-collapse-all-block-offset',\n `${metrics.collapseBlockOffset}px`,\n );\n }\n\n if (\n !this.overflow ||\n this.overflow.start !== metrics.overflow.start ||\n this.overflow.end !== metrics.overflow.end ||\n this.overflow.scrollable !== metrics.overflow.scrollable\n ) {\n this.overflow = metrics.overflow;\n this.options.overflowChanged(metrics.overflow);\n }\n }\n\n private setProperty(element: HTMLElement, property: string, value: string): void {\n if (element.style.getPropertyValue(property) !== value) {\n element.style.setProperty(property, value);\n }\n }\n}\n","import type {\n TableLoadMoreDetail,\n TableLoadMoreMode,\n TableLoadMoreReason,\n} from './table-types';\n\nexport interface TableLoadControllerState {\n lazyLoading: boolean;\n loadMoreMode: TableLoadMoreMode;\n hasMore: boolean;\n loadingMore: boolean;\n loadMoreError: string | undefined;\n loadIdentity: string | number;\n loadMoreThreshold: number;\n containedScroll: boolean;\n loadingMoreLabel: string;\n endOfResultsLabel: string;\n rowsLoadedLabel: string;\n loadedRowCount: number;\n viewport: HTMLElement | null;\n sentinel: HTMLElement | null;\n}\n\nexport interface TableLoadControllerOptions {\n state: () => TableLoadControllerState;\n announce: (message: string) => void;\n request: (detail: TableLoadMoreDetail) => void;\n}\n\n/** Owns incremental-loading request guards, announcements, and observation. */\nexport class TableLoadController {\n readonly intersectionSupported = typeof IntersectionObserver !== 'undefined';\n\n private connected = false;\n private intersectionObserver: IntersectionObserver | null = null;\n private observedSentinel: HTMLElement | null = null;\n private requestPending = false;\n private requestedRowCount = 0;\n private previousLoadedRowCount = 0;\n\n constructor(private readonly options: TableLoadControllerOptions) {}\n\n initialize(): void {\n this.previousLoadedRowCount = this.options.state().loadedRowCount;\n }\n\n connect(): void {\n this.connected = true;\n this.refresh();\n }\n\n disconnect(): void {\n this.connected = false;\n this.disconnectObserver();\n }\n\n refresh(): void {\n if (!this.connected) return;\n const state = this.options.state();\n if (\n !state.lazyLoading ||\n state.loadMoreMode !== 'auto' ||\n !state.hasMore ||\n !!state.loadMoreError?.trim() ||\n !this.intersectionSupported ||\n !state.viewport ||\n !state.sentinel\n ) {\n this.disconnectObserver();\n return;\n }\n\n if (this.intersectionObserver && this.observedSentinel === state.sentinel) return;\n this.disconnectObserver();\n const threshold = Number.isFinite(state.loadMoreThreshold)\n ? Math.max(0, state.loadMoreThreshold)\n : 0;\n this.intersectionObserver = new IntersectionObserver(\n entries => {\n if (entries.some(entry => entry.isIntersecting)) this.request('auto');\n },\n {\n root: state.containedScroll ? state.viewport : null,\n rootMargin: `0px 0px ${threshold}px 0px`,\n },\n );\n this.observedSentinel = state.sentinel;\n this.intersectionObserver.observe(state.sentinel);\n }\n\n structureChanged(): void {\n this.resetRequest();\n }\n\n dataChanged(): void {\n const state = this.options.state();\n const nextCount = state.loadedRowCount;\n if (nextCount > this.previousLoadedRowCount) {\n const added = nextCount - this.previousLoadedRowCount;\n this.options.announce(\n state.rowsLoadedLabel\n .replace('{count}', String(added))\n .replace('{total}', String(nextCount)),\n );\n }\n if (nextCount > this.requestedRowCount) this.requestPending = false;\n this.previousLoadedRowCount = nextCount;\n this.disconnectObserver();\n }\n\n identityChanged(): void {\n this.previousLoadedRowCount = this.options.state().loadedRowCount;\n this.resetRequest();\n }\n\n configurationChanged(): void {\n this.disconnectObserver();\n }\n\n loadingChanged(loading: boolean): void {\n const state = this.options.state();\n if (loading) {\n this.requestPending = true;\n this.options.announce(state.loadingMoreLabel);\n } else if (state.loadMoreMode === 'manual') {\n // A completed manual request may append no rows; permit another explicit activation.\n this.requestPending = false;\n }\n this.disconnectObserver();\n }\n\n errorChanged(error: string | undefined): void {\n if (error?.trim()) {\n this.requestPending = false;\n this.options.announce(error);\n }\n this.disconnectObserver();\n }\n\n hasMoreChanged(hasMore: boolean, hadMore: boolean): void {\n if (!hasMore) {\n this.requestPending = false;\n if (hadMore) this.options.announce(this.options.state().endOfResultsLabel);\n }\n this.disconnectObserver();\n }\n\n request(reason: TableLoadMoreReason): void {\n const state = this.options.state();\n if (\n !state.lazyLoading ||\n !state.hasMore ||\n state.loadingMore ||\n (reason !== 'retry' && !!state.loadMoreError?.trim()) ||\n this.requestPending\n ) return;\n\n this.requestPending = true;\n this.requestedRowCount = state.loadedRowCount;\n this.options.announce(state.loadingMoreLabel);\n this.options.request({\n reason,\n loadIdentity: state.loadIdentity,\n loadedRowCount: this.requestedRowCount,\n });\n }\n\n private resetRequest(): void {\n this.requestPending = false;\n this.requestedRowCount = this.options.state().loadedRowCount;\n this.disconnectObserver();\n }\n\n private disconnectObserver(): void {\n this.intersectionObserver?.disconnect();\n this.intersectionObserver = null;\n this.observedSentinel = null;\n }\n}\n","@import './forced-colors.css';\n\n/**\n * Interaction fill — selected (`::before`) + hover/press (`::after`) overlays.\n *\n * Paint translucent interaction tokens *over* the control’s own background —\n * never by swapping `background-color` on `:hover` / `:active`, and never via\n * `color-mix(bg, fg)` for control chrome.\n *\n * Paint order (bottom → top):\n * 1. Element background (intent / surface)\n * 2. `::before` — selected / active (opt-in via `.ds-interaction-fill--selected`)\n * 3. Label / icon / badge content (`.ds-interaction-fill__content` or z-index: 2)\n * 4. `::after` — hover / press wash + optional inset border + inset focus ring\n *\n * Apply `.ds-interaction-fill` on the interactive element (host or inner row).\n * Omit `.ds-interaction-fill--selected` when chrome wants icon-color-only\n * selection (`activeFill={false}` on unfilled icon buttons).\n *\n * Fills use positive z-index so they paint *above* an opaque host background\n * (Chip, ButtonFilled). Content sits under the hover wash so badge dots are\n * covered; raise label/icon with `.ds-interaction-fill__content` (z-index: 2)\n * — never above `::after` (z-index: 3).\n *\n * Inset borders must paint on `::after` (not the element’s own `box-shadow`)\n * so the stroke stays visible above selected / hover washes. Set\n * `--ds-interaction-border-*` or use `.ds-interaction-fill--bordered`.\n * Do not use a layout `border` on interaction targets.\n *\n * If the control uses `all: unset`, re-assert `position: relative; z-index: 0`\n * after the unset so this util’s stacking context still applies.\n *\n * Surface helpers remap tokens + `--ds-focus-ring-color`:\n * `.ds-interaction-fill--on-faint|medium|bold|strong|translucent|inverted|media|always-dark|navigation`\n *\n * Override hooks: `--ds-interaction-hover`, `--ds-interaction-pressed`,\n * `--ds-interaction-active`, `--ds-interaction-border-color`,\n * `--ds-interaction-border-width`, `--ds-interaction-divider-color`, and\n * `--ds-interaction-divider-width`, plus the corresponding inline-start/end\n * divider hooks.\n *\n * @see AGENTS.md — \"Interaction fill\"\n */\n\n:host(.ds-interaction-fill),\n.ds-interaction-fill {\n position: var(--ds-interaction-position, relative);\n z-index: var(--ds-interaction-z-index, 0);\n cursor: default;\n --ds-interaction-hover: var(--color-interaction-hover);\n --ds-interaction-pressed: var(--color-interaction-pressed);\n --ds-interaction-active: var(--color-interaction-active-brand);\n /* Inset stroke on ::after — default off (transparent / zero width). */\n --ds-interaction-border-width: 0px;\n --ds-interaction-border-color: transparent;\n --ds-interaction-divider-width: 0px;\n --ds-interaction-divider-color: transparent;\n --ds-interaction-divider-inline-start-width: 0px;\n --ds-interaction-divider-inline-start-color: transparent;\n --ds-interaction-divider-inline-end-width: 0px;\n --ds-interaction-divider-inline-end-color: transparent;\n}\n\n:host(.ds-interaction-fill)::before,\n.ds-interaction-fill::before,\n:host(.ds-interaction-fill)::after,\n.ds-interaction-fill::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: transparent;\n pointer-events: none;\n cursor: inherit;\n transition: none;\n}\n\n/* Layer stack (bottom → top): selected → content → hover/press + border (topmost). */\n:host(.ds-interaction-fill)::before,\n.ds-interaction-fill::before {\n z-index: 1;\n}\n\n:host(.ds-interaction-fill)::after,\n.ds-interaction-fill::after {\n z-index: 3;\n /* Border above selected (::before) and this pseudo’s own hover wash. */\n box-shadow:\n inset 0 calc(-1 * var(--ds-interaction-divider-width)) 0 var(--ds-interaction-divider-color),\n inset var(--ds-interaction-divider-inline-start-width) 0 0\n var(--ds-interaction-divider-inline-start-color),\n inset calc(-1 * var(--ds-interaction-divider-inline-end-width)) 0 0\n var(--ds-interaction-divider-inline-end-color),\n inset 0 0 0 var(--ds-interaction-border-width) var(--ds-interaction-border-color);\n}\n\n/* Opt-in secondary inset border (override color via `--ds-interaction-border-color`). */\n:host(.ds-interaction-fill--bordered),\n.ds-interaction-fill--bordered {\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--color-border-secondary);\n}\n\n:host(.ds-interaction-fill--selected)::before,\n.ds-interaction-fill--selected::before {\n background: var(--ds-interaction-active);\n}\n\n/*\n * Notification-dot halo: when selected fill is on, set `--ds-interaction-dot-ring`\n * to the active wash so rings can match. Prefer also remapping the consumer’s\n * surface ring token (e.g. `--ds-button-unfilled-dot-ring`) or passing\n * `background=\"var(--ds-interaction-active)\"` from the parent when selected —\n * custom-property fallbacks through nested scoped hosts are easy to miss.\n * Omit `--selected` (chrome `activeFill={false}`) to keep the surface ring.\n */\n:host(.ds-interaction-fill--selected),\n.ds-interaction-fill--selected {\n --ds-interaction-dot-ring: var(--ds-interaction-active);\n}\n\n/*\n * Touch browsers can latch :hover after a tap. Only hover-capable fine\n * pointers receive the hover wash; touch still receives :active press feedback.\n */\n@media (hover: hover) and (pointer: fine) {\n :host(.ds-interaction-fill:hover:not(:disabled))::after,\n .ds-interaction-fill:hover:not(:disabled)::after {\n background: var(--ds-interaction-hover);\n }\n}\n\n:host(.ds-interaction-fill:active:not(:disabled))::after,\n.ds-interaction-fill:active:not(:disabled)::after {\n background: var(--ds-interaction-pressed);\n}\n\n/* A parent row/list may coordinate one fill across several sibling targets. */\n:host(.ds-interaction-fill--grouped)::after,\n.ds-interaction-fill--grouped::after,\n:host(.ds-interaction-fill--grouped:hover:not(:disabled))::after,\n.ds-interaction-fill--grouped:hover:not(:disabled)::after,\n:host(.ds-interaction-fill--grouped:active:not(:disabled))::after,\n.ds-interaction-fill--grouped:active:not(:disabled)::after {\n background: var(--ds-interaction-group-fill, transparent);\n}\n\n:host(.ds-interaction-fill--grouped),\n.ds-interaction-fill--grouped {\n --ds-interaction-divider-width: var(--ds-interaction-group-divider-width, 0px);\n --ds-interaction-divider-color: var(--ds-interaction-group-divider-color, transparent);\n --ds-interaction-divider-inline-start-width: var(\n --ds-interaction-group-divider-inline-start-width,\n 0px\n );\n --ds-interaction-divider-inline-start-color: var(\n --ds-interaction-group-divider-inline-start-color,\n transparent\n );\n --ds-interaction-divider-inline-end-width: var(\n --ds-interaction-group-divider-inline-end-width,\n 0px\n );\n --ds-interaction-divider-inline-end-color: var(\n --ds-interaction-group-divider-inline-end-color,\n transparent\n );\n}\n\n/* Content under the hover wash (so badge dots are covered by ::after). */\n:host(.ds-interaction-fill) > .ds-interaction-fill__content,\n.ds-interaction-fill > .ds-interaction-fill__content,\n.ds-interaction-fill__content {\n position: relative;\n z-index: 2;\n cursor: inherit;\n}\n\n/* ── Surface context ─────────────────────────────────────────────────────── */\n\n:host(.ds-interaction-fill--on-faint),\n.ds-interaction-fill--on-faint {\n --ds-interaction-active: var(--color-interaction-active);\n}\n\n:host(.ds-interaction-fill--on-medium),\n.ds-interaction-fill--on-medium {\n --ds-interaction-hover: var(--color-interaction-on-medium-background-hover);\n --ds-interaction-pressed: var(--color-interaction-on-medium-background-pressed);\n --ds-interaction-active: var(--color-interaction-on-medium-background-active);\n --ds-focus-ring-color: var(--color-interaction-on-medium-background-focus);\n}\n\n:host(.ds-interaction-fill--on-bold),\n.ds-interaction-fill--on-bold {\n --ds-interaction-hover: var(--color-interaction-on-bold-background-hover);\n --ds-interaction-pressed: var(--color-interaction-on-bold-background-pressed);\n --ds-interaction-active: var(--color-interaction-on-bold-background-active);\n --ds-focus-ring-color: var(--color-interaction-on-bold-background-focus);\n}\n\n:host(.ds-interaction-fill--on-strong),\n.ds-interaction-fill--on-strong {\n --ds-interaction-hover: var(--color-interaction-on-strong-background-hover);\n --ds-interaction-pressed: var(--color-interaction-on-strong-background-pressed);\n --ds-interaction-active: var(--color-interaction-on-strong-background-active);\n --ds-focus-ring-color: var(--color-interaction-on-strong-background-focus);\n}\n\n:host(.ds-interaction-fill--on-translucent),\n.ds-interaction-fill--on-translucent {\n --ds-interaction-hover: var(--color-translucent-interaction-hover);\n --ds-interaction-pressed: var(--color-translucent-interaction-pressed);\n --ds-interaction-active: var(--color-translucent-interaction-active);\n --ds-focus-ring-color: var(--color-translucent-interaction-focus);\n}\n\n:host(.ds-interaction-fill--on-inverted),\n.ds-interaction-fill--on-inverted {\n --ds-interaction-hover: var(--color-inverted-interaction-hover);\n --ds-interaction-pressed: var(--color-inverted-interaction-pressed);\n --ds-interaction-active: var(--color-inverted-interaction-active);\n --ds-focus-ring-color: var(--color-inverted-interaction-focus);\n}\n\n:host(.ds-interaction-fill--on-media),\n.ds-interaction-fill--on-media {\n --ds-interaction-hover: var(--color-media-interaction-hover);\n --ds-interaction-pressed: var(--color-media-interaction-pressed);\n --ds-interaction-active: var(--color-media-interaction-active);\n --ds-focus-ring-color: var(--color-media-interaction-focus);\n}\n\n:host(.ds-interaction-fill--on-always-dark),\n.ds-interaction-fill--on-always-dark {\n --ds-interaction-hover: var(--color-always-dark-interaction-hover);\n --ds-interaction-pressed: var(--color-always-dark-interaction-pressed);\n --ds-interaction-active: var(--color-always-dark-interaction-active);\n --ds-focus-ring-color: var(--color-always-dark-interaction-focus);\n}\n\n:host(.ds-interaction-fill--on-navigation),\n.ds-interaction-fill--on-navigation {\n --ds-interaction-hover: var(--color-navigation-interaction-hover);\n --ds-interaction-pressed: var(--color-navigation-interaction-pressed);\n --ds-interaction-active: var(--color-navigation-interaction-active);\n --ds-focus-ring-color: var(--color-navigation-interaction-focus);\n}\n\n@media (forced-colors: active) {\n /*\n * Forced-colors removes box-shadows and remaps translucent fills. Restore\n * boundaries with outlines and make selection a non-color-only inset ring.\n * Focus-ring selectors remain more specific and replace this outline while\n * keyboard focus is visible.\n */\n :host(.ds-interaction-fill)::after,\n .ds-interaction-fill::after {\n box-shadow: none;\n outline:\n var(--ds-interaction-border-width) solid\n var(--ds-forced-color-control-boundary);\n outline-offset: calc(-1 * var(--ds-interaction-border-width));\n }\n\n :host(.ds-interaction-fill--selected)::before,\n .ds-interaction-fill--selected::before {\n background: transparent;\n outline: var(--dimension-stroke-width-025) solid var(--ds-forced-color-selected);\n outline-offset: calc(-1 * var(--dimension-stroke-width-025));\n }\n}\n\n@media (forced-colors: active) and (hover: hover) and (pointer: fine) {\n :host(.ds-interaction-fill:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible))::after,\n .ds-interaction-fill:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after {\n outline-color: var(--ds-forced-color-selected);\n outline-width: var(--dimension-stroke-width-012);\n }\n}\n","@import '../../styles/table.css';\n@import '../../styles/control-elevation.css';\n\n:host {\n display: block;\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n deriveTableSelectionState,\n formatTableResultSummary,\n nextTableGroupOrder,\n nextTableSortState,\n tableColumnSize,\n tableModelIssues,\n tableRows,\n tableRowSelectionLabel,\n toggleAllLoadedTableRows,\n toggleTableGroupCollapsed,\n toggleTableGroupSelection,\n nextTableGroupsCollapsed,\n toggleTableRowSelection,\n} from './table-model';\nimport {\n resolveTableCellPresentation,\n type TableCellPresentation,\n} from './table-cell-model';\nimport {\n createTableRenderModel,\n type TableRenderModel,\n} from './table-render-model';\nimport { TableLayoutController } from './table-layout-controller';\nimport { TableLoadController } from './table-load-controller';\nimport type {\n TableCaptionVisibility,\n TableCellActionDetail,\n TableColumn,\n TableGroup,\n TableGroupCollapseChangeDetail,\n TableGroupingChangeDetail,\n TableGroupingState,\n TableLoadMoreDetail,\n TableLoadMoreMode,\n TableRow,\n TableRowActivateDetail,\n TableSelectionChangeDetail,\n TableSelectionMode,\n TableSortChangeDetail,\n TableSortState,\n} from './table-types';\n\n@Component({\n tag: 'ds-table',\n styleUrls: [\n '../../utils/interaction-fill.css',\n 'Table.css',\n ],\n scoped: true,\n})\nexport class Table {\n /** Stable column definitions. Assign through JavaScript. */\n @Prop() columns: TableColumn[] = [];\n /** Ungrouped row data. Ignored while grouping is active. Assign through JavaScript. */\n @Prop() rows: TableRow[] = [];\n /** One level of application-owned grouped data. Assign through JavaScript. */\n @Prop() groups: TableGroup[] = [];\n /** Controlled grouping column and group-order direction. */\n @Prop() grouping: TableGroupingState | null = null;\n /** Controlled member-row sort state. */\n @Prop() sort: TableSortState | null = null;\n /** Controlled collapsed group identities. Groups not listed remain expanded. */\n @Prop() collapsedGroupIds: string[] = [];\n\n /** Required accessible table name, retained as a native caption. */\n @Prop() caption!: string;\n /** Shows a matching presentational title bar above the native table frame. */\n @Prop() captionVisibility: TableCaptionVisibility = 'hidden';\n /**\n * Optional result summary footer. When both `displayedCount` and `totalCount`\n * are finite numbers, the table shows “Displaying {displayed} of {total}”.\n */\n @Prop() displayedCount: number | undefined;\n @Prop() totalCount: number | undefined;\n /** Supports {displayed} and {total} placeholders. */\n @Prop() resultSummaryLabel: string = 'Displaying {displayed} of {total}';\n @Prop() stickyHeader: boolean = false;\n /** Maximum scroll-region height. Numbers resolve to CSS pixels. */\n @Prop() maxHeight: string | number | undefined;\n /** Optional explicit label for the horizontal/vertical scroll region. */\n @Prop() scrollLabel: string | undefined;\n\n @Prop() selectionMode: TableSelectionMode = 'none';\n /** Controlled selected row identities. IDs outside the loaded rows are preserved. */\n @Prop() selectedRowIds: string[] = [];\n\n /** Initial loading state. Existing rows stay visible; incremental loading uses loadingMore. */\n @Prop() loading: boolean = false;\n @Prop() skeletonRows: number = 5;\n @Prop() emptyHeading: string = 'No results';\n @Prop() emptyBody: string = 'No data is available.';\n /** Initial error state. Existing rows stay visible; incremental failures use loadMoreError. */\n @Prop() error: boolean = false;\n @Prop() errorHeading: string = 'Unable to load data';\n @Prop() errorBody: string = 'The data could not be loaded.';\n @Prop() emptyCellLabel: string = 'Not available';\n\n /** Enable application-owned incremental loading without pagination. */\n @Prop() lazyLoading: boolean = false;\n @Prop() loadMoreMode: TableLoadMoreMode = 'auto';\n @Prop() hasMore: boolean = false;\n @Prop() loadingMore: boolean = false;\n @Prop() loadMoreError: string | undefined;\n /** Reset key for a new query/group/sort dataset. */\n @Prop() loadIdentity: string | number = 'default';\n /** IntersectionObserver root margin in CSS pixels. */\n @Prop() loadMoreThreshold: number = 0;\n @Prop() loadMoreLabel: string = 'Load more';\n @Prop() retryLabel: string = 'Retry';\n @Prop() loadingMoreLabel: string = 'Loading more results';\n @Prop() endOfResultsLabel: string = 'All results loaded';\n /** Supports {count} and {total} placeholders. */\n @Prop() rowsLoadedLabel: string = '{count} more rows loaded. {total} rows loaded.';\n\n @Event() dsSortChange!: EventEmitter<TableSortChangeDetail>;\n @Event() dsGroupingChange!: EventEmitter<TableGroupingChangeDetail>;\n @Event() dsGroupCollapseChange!: EventEmitter<TableGroupCollapseChangeDetail>;\n @Event() dsSelectionChange!: EventEmitter<TableSelectionChangeDetail>;\n @Event() dsLoadMore!: EventEmitter<TableLoadMoreDetail>;\n @Event() dsCellAction!: EventEmitter<TableCellActionDetail>;\n @Event() dsRowActivate!: EventEmitter<TableRowActivateDetail>;\n\n @State() private overflowStart = false;\n @State() private overflowEnd = false;\n @State() private scrollable = false;\n @State() private announcement = '';\n\n private viewportEl: HTMLElement | null = null;\n private frameEl: HTMLElement | null = null;\n private interactiveHeadEl: HTMLTableSectionElement | null = null;\n private collapseAllOverlayEl: HTMLElement | null = null;\n private stickyHeaderTableEl: HTMLTableElement | null = null;\n private tableEl: HTMLTableElement | null = null;\n private sentinelEl: HTMLElement | null = null;\n private previousModelWarning = '';\n private hasLoaded = false;\n private renderedModel: TableRenderModel | null = null;\n private readonly layoutController = new TableLayoutController({\n elements: () => ({\n viewport: this.viewportEl,\n table: this.tableEl,\n stickyHeaderTable: this.stickyHeaderTableEl,\n collapseAllOverlay: this.collapseAllOverlayEl,\n frame: this.frameEl,\n interactiveHead: this.interactiveHeadEl,\n }),\n mode: () => ({\n documentStickyHeader: this.documentStickyHeader,\n floatingCollapseAll: this.renderedModel?.collapseAllHost?.mode === 'floating',\n }),\n overflowChanged: state => {\n if (state.start !== this.overflowStart) this.overflowStart = state.start;\n if (state.end !== this.overflowEnd) this.overflowEnd = state.end;\n if (state.scrollable !== this.scrollable) this.scrollable = state.scrollable;\n },\n });\n private readonly loadController = new TableLoadController({\n state: () => ({\n lazyLoading: this.lazyLoading,\n loadMoreMode: this.loadMoreMode,\n hasMore: this.hasMore,\n loadingMore: this.loadingMore,\n loadMoreError: this.loadMoreError,\n loadIdentity: this.loadIdentity,\n loadMoreThreshold: this.loadMoreThreshold,\n containedScroll: this.resolvedMaxHeight !== undefined,\n loadingMoreLabel: this.loadingMoreLabel,\n endOfResultsLabel: this.endOfResultsLabel,\n rowsLoadedLabel: this.rowsLoadedLabel,\n loadedRowCount: this.currentLoadedRowCount(),\n viewport: this.viewportEl,\n sentinel: this.sentinelEl,\n }),\n announce: message => {\n this.announcement = message;\n },\n request: detail => {\n this.dsLoadMore.emit(detail);\n },\n });\n\n componentWillLoad(): void {\n this.loadController.initialize();\n this.warnModelIssues();\n }\n\n componentDidLoad(): void {\n this.hasLoaded = true;\n this.layoutController.connect();\n this.loadController.connect();\n }\n\n componentDidRender(): void {\n this.layoutController.refresh();\n this.loadController.refresh();\n }\n\n connectedCallback(): void {\n if (!this.hasLoaded) return;\n this.layoutController.connect();\n this.loadController.connect();\n }\n\n disconnectedCallback(): void {\n this.layoutController.disconnect();\n this.loadController.disconnect();\n }\n\n @Watch('columns')\n @Watch('grouping')\n handleStructureChange(): void {\n this.warnModelIssues();\n this.loadController.structureChanged();\n }\n\n @Watch('rows')\n @Watch('groups')\n handleDataChange(): void {\n this.loadController.dataChanged();\n this.warnModelIssues();\n }\n\n @Watch('loadIdentity')\n handleLoadIdentityChange(): void {\n this.loadController.identityChanged();\n }\n\n @Watch('lazyLoading')\n @Watch('loadMoreMode')\n @Watch('loadMoreThreshold')\n handleLazyConfigurationChange(): void {\n this.loadController.configurationChanged();\n }\n\n @Watch('loadingMore')\n handleLoadingMoreChange(loading: boolean): void {\n this.loadController.loadingChanged(loading);\n }\n\n @Watch('loadMoreError')\n handleLoadMoreErrorChange(error: string | undefined): void {\n this.loadController.errorChanged(error);\n }\n\n @Watch('hasMore')\n handleHasMoreChange(hasMore: boolean, hadMore: boolean): void {\n this.loadController.hasMoreChanged(hasMore, hadMore);\n }\n\n private get grouped(): boolean {\n return this.grouping !== null;\n }\n\n private get selectable(): boolean {\n return this.selectionMode === 'multiple';\n }\n\n private get documentStickyHeader(): boolean {\n return this.stickyHeader && this.resolvedMaxHeight === undefined;\n }\n\n private currentLoadedRows(): TableRow[] {\n return tableRows(this.rows, this.groups, this.grouped);\n }\n\n private currentLoadedRowCount(): number {\n return this.grouped\n ? this.groups.reduce((count, group) => count + group.rows.length, 0)\n : this.rows.length;\n }\n\n private createRenderModel(): TableRenderModel {\n return createTableRenderModel({\n columns: this.columns,\n rows: this.rows,\n groups: this.groups,\n grouped: this.grouped,\n selectionMode: this.selectionMode,\n selectedRowIds: this.selectedRowIds,\n collapsedGroupIds: this.collapsedGroupIds,\n });\n }\n\n private get resolvedMaxHeight(): string | undefined {\n if (this.maxHeight == null || this.maxHeight === '') return undefined;\n return typeof this.maxHeight === 'number' ? `${Math.max(0, this.maxHeight)}px` : this.maxHeight;\n }\n\n private warnModelIssues(): void {\n const issues = tableModelIssues(this.columns, this.rows, this.groups, this.grouped);\n if (!this.caption?.trim()) issues.unshift('A non-empty caption is required.');\n if (this.grouping && !this.columns.some(column => column.id === this.grouping!.columnId)) {\n issues.push(`Grouping references unknown column id: ${this.grouping.columnId}`);\n }\n if (\n this.sort &&\n !this.columns.some(column =>\n column.id === this.sort!.columnId ||\n column.headerSegments?.some(segment => segment.sortKey === this.sort!.columnId),\n )\n ) {\n issues.push(`Sorting references unknown column id: ${this.sort.columnId}`);\n }\n const stickyStart = this.columns.filter(column => column.sticky === 'start');\n const stickyEnd = this.columns.filter(column => column.sticky === 'end');\n if (stickyStart.length > 1 || (this.selectable && stickyStart.length > 0)) {\n issues.push('Only one sticky start column is supported, and row selection already owns that lane.');\n }\n if (stickyEnd.length > 1) issues.push('Only one sticky end column is supported.');\n for (const column of [...stickyStart, ...stickyEnd]) {\n if (!tableColumnSize(column)) issues.push(`Sticky column ${column.id} requires an explicit size.`);\n }\n const message = issues.join(' ');\n if (!message || message === this.previousModelWarning) return;\n this.previousModelWarning = message;\n console.warn(`[ds-table] ${message}`);\n }\n\n private emitSort(column: TableColumn, sortKey = column.id): void {\n if (this.grouping?.columnId === column.id && sortKey === column.id) {\n this.dsGroupingChange.emit({ grouping: nextTableGroupOrder(this.grouping) });\n return;\n }\n if (!column.sortable) return;\n this.dsSortChange.emit({ sort: nextTableSortState(this.sort, sortKey) });\n }\n\n private sortButtonLabel(column: TableColumn, sortKey = column.id, label = column.header): string {\n if (this.grouping?.columnId === column.id && sortKey === column.id) {\n const next = this.grouping.direction === 'asc' ? 'descending' : 'ascending';\n return `Sort ${column.header} groups ${next}. Currently grouped ${this.grouping.direction === 'asc' ? 'ascending' : 'descending'}.`;\n }\n\n if (this.sort?.columnId !== sortKey) return `Sort ${label} ascending`;\n if (this.sort.direction === 'asc') return `Sort ${label} descending. Currently ascending.`;\n return `Sort ${label} ascending. Currently descending.`;\n }\n\n private emitRowSelection(row: TableRow): void {\n const next = toggleTableRowSelection(this.selectedRowIds, row);\n const selected = next.includes(row.id);\n this.dsSelectionChange.emit({\n selectedRowIds: next,\n scope: 'row',\n changedRowId: row.id,\n selected,\n });\n }\n\n private emitAllSelection(): void {\n const loadedRows = this.currentLoadedRows();\n const selection = deriveTableSelectionState(loadedRows, this.selectedRowIds);\n this.dsSelectionChange.emit({\n selectedRowIds: toggleAllLoadedTableRows(this.selectedRowIds, loadedRows),\n scope: 'all-loaded',\n selected: !selection.allSelected,\n });\n }\n\n private emitGroupSelection(group: TableGroup): void {\n const state = deriveTableSelectionState(group.rows, this.selectedRowIds);\n this.dsSelectionChange.emit({\n selectedRowIds: toggleTableGroupSelection(this.selectedRowIds, group.rows),\n scope: 'group',\n groupId: group.id,\n selected: !state.allSelected,\n });\n }\n\n private rowEventOwnsActivation(event: Event): boolean {\n const currentTarget = event.currentTarget;\n return !event.composedPath().some(target => {\n if (!(target instanceof HTMLElement) || target === currentTarget) return false;\n return target.matches(\n 'button, a, input, select, textarea, [role=\"button\"], [role=\"checkbox\"], ds-button-unfilled',\n );\n });\n }\n\n private emitRowActivation(row: TableRow, event: Event): void {\n if (!row.interactive || row.disabled || !this.rowEventOwnsActivation(event)) return;\n this.dsRowActivate.emit({ rowId: row.id });\n }\n\n private handleRowKeydown(row: TableRow, event: KeyboardEvent): void {\n if (event.target !== event.currentTarget || (event.key !== 'Enter' && event.key !== ' ')) return;\n event.preventDefault();\n this.emitRowActivation(row, event);\n }\n\n private renderSelectionControl(\n label: string,\n checked: boolean,\n indeterminate: boolean,\n disabled: boolean,\n onActivate: () => void,\n ) {\n return (\n <button\n class=\"ds-table__selection-control ds-interaction-fill__content\"\n type=\"button\"\n role=\"checkbox\"\n aria-label={label}\n aria-checked={indeterminate ? 'mixed' : String(checked)}\n disabled={disabled}\n onClick={onActivate}\n >\n <ds-checkbox\n label=\"\"\n size=\"md\"\n checked={checked}\n indeterminate={indeterminate}\n presentation={true}\n />\n </button>\n );\n }\n\n private renderStickyEdge(sticky: TableColumn['sticky']) {\n if (!sticky) return null;\n return (\n <span\n class={`ds-table__sticky-edge ds-table__sticky-edge--${sticky}`}\n aria-hidden=\"true\"\n />\n );\n }\n\n private renderCollapseAllButton() {\n return (\n <ds-button-unfilled\n class=\"ds-table__collapse-all\"\n variant=\"icon\"\n icon=\"ChevronDownUp\"\n size=\"xs\"\n style={{ width: 'var(--dimension-size-300)' }}\n aria-label=\"Collapse all groups\"\n hasBorder={false}\n activeFill={false}\n pressScale={false}\n onDsClick={event => {\n event.stopPropagation();\n this.emitAllGroupsCollapse();\n }}\n />\n );\n }\n\n private renderFloatingCollapseAll(model: TableRenderModel) {\n if (model.collapseAllHost?.mode !== 'floating') return null;\n return (\n <span\n class=\"ds-table__collapse-all-overlay\"\n ref={element => {\n this.collapseAllOverlayEl = element ?? null;\n }}\n >\n <span class=\"ds-table__collapse-all-surface ds-control-elevation ds-control-elevation--md\">\n {this.renderCollapseAllButton()}\n </span>\n </span>\n );\n }\n\n private renderColumnHeader(\n column: TableColumn,\n model: TableRenderModel,\n interactive = true,\n presentational = false,\n ) {\n const groupedColumn = this.grouping?.columnId === column.id;\n const headerSegments = column.headerSegments?.length\n ? column.headerSegments\n : [{ label: column.header, sortKey: column.id }];\n const activeMemberSegment = !groupedColumn\n ? headerSegments.find(segment => segment.sortKey === this.sort?.columnId)\n : undefined;\n const activeMemberSort = !!activeMemberSegment;\n const activeSort = groupedColumn || activeMemberSort;\n const align = column.align ?? 'start';\n const direction = groupedColumn\n ? this.grouping!.direction\n : activeMemberSort\n ? this.sort!.direction\n : undefined;\n const memberAriaSort = activeMemberSort\n ? (this.sort!.direction === 'asc' ? 'ascending' : 'descending')\n : undefined;\n\n const labelControl = (\n <span class=\"ds-table__header-labels\">\n {headerSegments.map((segment, index) => {\n const segmentActive = groupedColumn\n ? headerSegments.length === 1\n : activeMemberSegment?.sortKey === segment.sortKey;\n const segmentInteractive = interactive && (\n !!column.sortable || (groupedColumn && segment.sortKey === column.id)\n );\n const label = (\n <ds-text\n class=\"ds-table__header-label-box ds-control-label-box\"\n as=\"span\"\n variant=\"text-caption\"\n emphasis={segmentActive}\n color=\"inherit\"\n lineTruncation={1}\n >\n {segment.label}\n </ds-text>\n );\n const control = segmentInteractive ? (\n <button\n class=\"ds-table__header-label ds-table__header-label--interactive\"\n type=\"button\"\n aria-label={this.sortButtonLabel(column, segment.sortKey, segment.label)}\n data-sort-control=\"label\"\n data-sort-key={segment.sortKey}\n data-sort-active={segmentActive ? 'true' : undefined}\n onClick={() => this.emitSort(column, segment.sortKey)}\n >\n {label}\n </button>\n ) : (\n <span class=\"ds-table__header-label ds-table__header-static\">{label}</span>\n );\n\n return (\n <span class=\"ds-table__header-segment\" key={segment.sortKey}>\n {control}\n {index < headerSegments.length - 1 && (\n <ds-text\n class=\"ds-table__header-separator\"\n as=\"span\"\n variant=\"text-caption\"\n color=\"tertiary\"\n aria-hidden=\"true\"\n >\n {segment.separator ?? '/'}\n </ds-text>\n )}\n </span>\n );\n })}\n </span>\n );\n const sortControl = interactive ? (\n <span class=\"ds-table__sort-slot\">\n {activeSort && (\n <ds-button-unfilled\n class=\"ds-table__sort-direction\"\n variant=\"icon\"\n icon={direction === 'asc' ? 'ArrowUp' : 'ArrowDown'}\n size=\"xs\"\n aria-label={this.sortButtonLabel(\n column,\n activeMemberSegment?.sortKey ?? column.id,\n activeMemberSegment?.label ?? column.header,\n )}\n hasBorder={false}\n activeFill={false}\n isActive={true}\n pressScale={false}\n data-sort-control=\"direction\"\n onDsClick={() => this.emitSort(column, activeMemberSegment?.sortKey ?? column.id)}\n />\n )}\n </span>\n ) : null;\n const collapseHost = model.collapseAllHost;\n const actionCollapseHost = collapseHost?.mode === 'action' && collapseHost.columnId === column.id;\n const blankActionCollapseHost = actionCollapseHost &&\n !column.header.trim() &&\n !column.headerSegments?.length;\n const collapseControl =\n interactive && actionCollapseHost ? (\n <span class=\"ds-table__collapse-slot\">\n {this.renderCollapseAllButton()}\n </span>\n ) : null;\n\n return (\n <th\n key={column.id}\n class={{\n 'ds-table__header-cell': true,\n [`ds-table__cell--align-${align}`]: true,\n 'ds-table__cell--sticky-start': column.sticky === 'start',\n 'ds-table__cell--sticky-end': column.sticky === 'end',\n 'ds-table__header-cell--collapse-all': actionCollapseHost,\n }}\n scope={presentational ? undefined : 'col'}\n aria-sort={presentational ? undefined : memberAriaSort}\n data-column-id={column.id}\n data-grouped={groupedColumn ? 'true' : undefined}\n data-sort-active={activeSort ? 'true' : undefined}\n >\n {!column.header.trim() && column.headerLabel?.trim() && (\n <span class=\"ds-visually-hidden\">{column.headerLabel}</span>\n )}\n {blankActionCollapseHost ? (\n <span class=\"ds-table__header-content ds-table__header-content--collapse-all\">\n {collapseControl}\n </span>\n ) : (\n <span class=\"ds-table__header-content\">\n {align === 'end' && sortControl}\n {align === 'center' && (\n <span\n class=\"ds-table__sort-slot ds-table__sort-slot--balance\"\n data-sort-balance=\"true\"\n aria-hidden=\"true\"\n />\n )}\n {labelControl}\n {align !== 'end' && sortControl}\n {collapseControl}\n </span>\n )}\n {this.renderStickyEdge(column.sticky)}\n </th>\n );\n }\n\n private renderColgroup(model: TableRenderModel) {\n return (\n <colgroup>\n {model.selectable && <col class=\"ds-table__selection-column\" />}\n {this.columns.map(column => {\n const width = tableColumnSize(column);\n const flexible = column.id === model.flexibleColumnId;\n return (\n <col\n key={column.id}\n class={{\n 'ds-table__action-column': column.kind === 'action',\n 'ds-table__flexible-column': flexible,\n }}\n style={width && !flexible ? { width } : undefined}\n />\n );\n })}\n </colgroup>\n );\n }\n\n private renderHeader(\n model: TableRenderModel,\n interactive = true,\n presentational = false,\n ) {\n const selection = model.selection;\n return (\n <thead class={{\n 'ds-table__head': true,\n 'ds-table__head--semantic-copy': !interactive,\n }} ref={element => {\n if (interactive) this.interactiveHeadEl = element ?? null;\n }}>\n <tr class=\"ds-table__header-row\">\n {model.selectable && (\n <th\n class=\"ds-table__header-cell ds-table__selection-cell ds-table__cell--sticky-start\"\n scope={presentational ? undefined : 'col'}\n >\n {interactive ? this.renderSelectionControl(\n selection.allSelected ? 'Deselect all loaded rows' : 'Select all loaded rows',\n selection.allSelected,\n selection.indeterminate,\n selection.selectableRowIds.length === 0,\n () => this.emitAllSelection(),\n ) : (\n <span class=\"ds-visually-hidden\">Select rows</span>\n )}\n {this.renderStickyEdge('start')}\n </th>\n )}\n {this.columns.map(column => (\n this.renderColumnHeader(column, model, interactive, presentational)\n ))}\n </tr>\n </thead>\n );\n }\n\n private renderCellValue(\n cell: TableCellPresentation,\n column: TableColumn,\n row: TableRow,\n ) {\n if (cell.kind === 'blank') return null;\n\n if (cell.kind === 'empty') {\n return (\n <ds-text\n class=\"ds-table__cell-track ds-table__cell-track--text\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n >\n <span aria-hidden=\"true\">—</span>\n <span class=\"ds-visually-hidden\">{this.emptyCellLabel}</span>\n </ds-text>\n );\n }\n\n if (cell.kind === 'icon') {\n const value = cell.value;\n return (\n <ds-icon\n name={value.icon}\n size=\"md\"\n color={value.color ?? 'secondary'}\n label={value.label}\n />\n );\n }\n\n if (cell.kind === 'image') {\n const value = cell.value;\n return (\n <span class=\"ds-table__cell-image\">\n {value.src ? (\n <img class=\"ds-table__cell-image-content\" src={value.src} alt={value.alt} loading=\"lazy\" />\n ) : (\n <span\n class=\"ds-table__cell-image-placeholder\"\n role=\"img\"\n aria-label={value.alt}\n />\n )}\n </span>\n );\n }\n\n if (cell.kind === 'action') {\n const value = cell.value;\n return (\n <ds-button-unfilled\n variant={value.variant ?? 'label'}\n size=\"md\"\n isInset={true}\n insetDepth=\"double\"\n label={value.label ?? ''}\n icon={value.icon ?? ''}\n aria-label={value.ariaLabel ?? null}\n hasBorder={value.hasBorder ?? false}\n isInactive={value.isInactive ?? false}\n isLoading={value.isLoading ?? false}\n onDsClick={event => {\n event.stopPropagation();\n this.dsCellAction.emit({\n actionId: value.actionId,\n rowId: row.id,\n columnId: column.id,\n });\n }}\n />\n );\n }\n\n if (cell.kind === 'tag') {\n const value = cell.value;\n const variant = cell.variant;\n const tag = (\n <ds-tag\n label={value.label}\n intent={value.intent ?? 'neutral'}\n contrast={value.contrast ?? 'faint'}\n size={variant === 'text-with-tag' ? 'sm' : 'md'}\n icon={value.icon ?? ''}\n rounded={value.rounded ?? false}\n isInset\n insetDepth=\"double\"\n />\n );\n\n if (variant === 'tag-only') return tag;\n\n return (\n <span class={`ds-table__cell-tag-stack ds-table__cell-tag-stack--${variant}`}>\n {variant === 'tag-with-text' && tag}\n <ds-text\n class=\"ds-table__cell-tag-text ds-table__cell-track\"\n as=\"span\"\n variant={variant === 'tag-with-text' ? 'text-body-small' : 'text-body-medium'}\n color=\"secondary\"\n lineTruncation={1}\n >\n {value.text}\n </ds-text>\n {variant === 'text-with-tag' && (\n <span class=\"ds-table__cell-tag-control-track\">{tag}</span>\n )}\n </span>\n );\n }\n\n const text = cell.value;\n const wraps = cell.wraps;\n\n return (\n <span class={{ 'ds-table__cell-copy': true, 'ds-table__cell-copy--wrap': wraps }}>\n <ds-text\n class=\"ds-table__cell-primary ds-table__cell-track ds-table__cell-track--text\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"primary\"\n lineTruncation={wraps ? 'none' : 1}\n wrap={wraps ? 'wrap' : 'nowrap'}\n fontFeature={text.fontFeature ?? 'normal'}\n >\n {text.primary}\n </ds-text>\n {text.secondary !== undefined && text.secondary !== '' && (\n <ds-text\n class=\"ds-table__cell-secondary ds-table__cell-track ds-table__cell-track--text\"\n as=\"span\"\n variant={cell.primaryText ? 'text-body-medium' : 'text-body-small'}\n color={cell.primaryText ? 'primary' : 'secondary'}\n lineTruncation={wraps ? 'none' : 1}\n wrap={wraps ? 'wrap' : 'nowrap'}\n >\n {text.secondary}\n </ds-text>\n )}\n </span>\n );\n }\n\n private renderRow(row: TableRow, model: TableRenderModel) {\n const selected = model.selectedRowIds.has(row.id);\n const rowSelectable = row.selectable !== false && !row.disabled;\n return (\n <tr\n key={row.id}\n class={{\n 'ds-table__row': true,\n 'ds-table__row--selected': selected,\n 'ds-table__row--disabled': !!row.disabled,\n 'ds-table__row--interactive': !!row.interactive && !row.disabled,\n }}\n data-row-id={row.id}\n data-selected={selected ? 'true' : undefined}\n aria-disabled={row.disabled ? 'true' : undefined}\n tabIndex={row.interactive && !row.disabled ? 0 : undefined}\n onClick={event => this.emitRowActivation(row, event)}\n onKeyDown={event => this.handleRowKeydown(row, event)}\n >\n {model.selectable && (\n <td class={{\n 'ds-table__cell': true,\n 'ds-table__selection-cell': true,\n 'ds-table__cell--sticky-start': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--grouped': true,\n 'ds-interaction-fill--selected': selected,\n }}>\n {this.renderSelectionControl(\n `${selected ? 'Deselect' : 'Select'} ${tableRowSelectionLabel(row, this.columns)}`,\n selected,\n false,\n !rowSelectable,\n () => this.emitRowSelection(row),\n )}\n {this.renderStickyEdge('start')}\n </td>\n )}\n {this.columns.map(column => {\n const align = column.align ?? 'start';\n const cell = resolveTableCellPresentation(row.cells[column.id], column);\n const tagCell = cell.kind === 'tag';\n const iconCell = cell.kind === 'icon';\n const imageCell = cell.kind === 'image';\n const actionCell = cell.kind === 'action';\n const textCell = cell.kind === 'text';\n const primaryTextCell = textCell && cell.primaryText;\n const singleTextCell = textCell && cell.singleLine;\n const emptyCell = cell.kind === 'empty';\n const blankCell = cell.kind === 'blank';\n const tagVariant = tagCell ? cell.variant : undefined;\n const textVariant = textCell ? cell.variant : undefined;\n return (\n <td\n key={`${row.id}:${column.id}`}\n class={{\n 'ds-table__cell': true,\n [`ds-table__cell--align-${align}`]: true,\n 'ds-table__cell--tag': tagCell,\n [`ds-table__cell--tag-${tagVariant}`]: tagCell,\n 'ds-table__cell--icon': iconCell,\n 'ds-table__cell--image': imageCell,\n 'ds-table__cell--action': actionCell,\n 'ds-table__cell--primary-text': primaryTextCell,\n 'ds-table__cell--text-single': singleTextCell,\n 'ds-table__cell--text-multi': textCell && !singleTextCell,\n 'ds-table__cell--empty': emptyCell,\n 'ds-table__cell--blank': blankCell,\n 'ds-table__cell--sticky-start': column.sticky === 'start',\n 'ds-table__cell--sticky-end': column.sticky === 'end',\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--grouped': true,\n 'ds-interaction-fill--selected': selected,\n }}\n data-column-id={column.id}\n data-cell-type={cell.cellType}\n data-cell-variant={tagVariant ?? textVariant}\n >\n <span class=\"ds-table__cell-content ds-interaction-fill__content\">\n {this.renderCellValue(cell, column, row)}\n </span>\n {this.renderStickyEdge(column.sticky)}\n </td>\n );\n })}\n </tr>\n );\n }\n\n private emitGroupCollapse(group: TableGroup) {\n const collapsedGroupIds = toggleTableGroupCollapsed(this.collapsedGroupIds, group.id);\n this.dsGroupCollapseChange.emit({\n scope: 'group',\n groupId: group.id,\n collapsed: collapsedGroupIds.includes(group.id),\n collapsedGroupIds,\n });\n }\n\n private emitAllGroupsCollapse() {\n const groupIds = this.groups.map(group => group.id);\n const collapsedGroupIds = nextTableGroupsCollapsed(this.collapsedGroupIds, groupIds);\n this.dsGroupCollapseChange.emit({\n scope: 'all',\n collapsed: collapsedGroupIds.length > 0,\n collapsedGroupIds,\n });\n }\n\n private renderDataBodies(model: TableRenderModel) {\n if (!model.grouped) {\n return (\n <tbody class=\"ds-table__body\">\n {this.rows.map(row => this.renderRow(row, model))}\n </tbody>\n );\n }\n\n return model.groups.map(groupModel => {\n const {\n group,\n count,\n countLabel,\n countIntent,\n collapsed: isCollapsed,\n intent,\n intentClass,\n labelColor,\n selection: groupSelection,\n } = groupModel;\n return (\n <tbody\n class=\"ds-table__body ds-table__group\"\n data-group-id={group.id}\n data-group-intent={intent}\n data-collapsed={isCollapsed ? 'true' : undefined}\n key={group.id}\n >\n <tr class=\"ds-table__group-row\">\n <th\n class={{\n 'ds-table__group-cell': true,\n [intentClass ?? '']: !!intentClass,\n }}\n scope=\"rowgroup\"\n colSpan={model.totalColumns}\n >\n <span class=\"ds-table__group-content\">\n {groupSelection && (\n <span class=\"ds-table__group-selection\">\n {this.renderSelectionControl(\n groupSelection.allSelected\n ? `Deselect ${group.label} group`\n : `Select ${group.label} group`,\n groupSelection.allSelected,\n groupSelection.indeterminate,\n groupSelection.selectableRowIds.length === 0,\n () => this.emitGroupSelection(group),\n )}\n </span>\n )}\n <span class=\"ds-table__group-copy\">\n <ds-text\n class=\"ds-table__group-label\"\n as=\"span\"\n variant=\"text-body-medium\"\n emphasis={true}\n color={labelColor}\n >\n {group.label}\n </ds-text>\n <span\n class=\"ds-table__group-count ds-control-elevation ds-control-elevation--sm\"\n aria-hidden=\"true\"\n >\n <ds-tag\n label={String(count)}\n intent={countIntent}\n contrast=\"faint\"\n size=\"sm\"\n rounded={true}\n ></ds-tag>\n </span>\n <span class=\"ds-visually-hidden\">{countLabel}</span>\n </span>\n <ds-button-unfilled\n class=\"ds-table__group-toggle\"\n variant=\"icon\"\n size=\"md\"\n isInset={true}\n insetDepth=\"double\"\n icon={isCollapsed ? 'ChevronDown' : 'ChevronUp'}\n expanded={!isCollapsed}\n aria-label={\n isCollapsed\n ? `Expand ${group.label} group`\n : `Collapse ${group.label} group`\n }\n hasBorder={false}\n onDsClick={event => {\n event.stopPropagation();\n this.emitGroupCollapse(group);\n }}\n />\n </span>\n </th>\n </tr>\n {!isCollapsed && group.rows.map(row => this.renderRow(row, model))}\n </tbody>\n );\n });\n }\n\n private renderSkeletonBody(model: TableRenderModel) {\n const count = Math.min(20, Math.max(1, Math.round(this.skeletonRows) || 1));\n return (\n <tbody class=\"ds-table__body ds-table__skeleton-body\">\n {Array.from({ length: count }, (_, index) => (\n <tr class=\"ds-table__row ds-table__skeleton-row\" key={`skeleton-${index}`}>\n {model.selectable && (\n <td class=\"ds-table__cell ds-table__selection-cell ds-table__cell--sticky-start ds-table__skeleton-cell ds-interaction-fill ds-interaction-fill--grouped\">\n <span class=\"ds-interaction-fill__content\">\n <ds-skeleton variant=\"icon\" iconSize=\"md\" />\n </span>\n {this.renderStickyEdge('start')}\n </td>\n )}\n {this.columns.map(column => (\n <td\n class={{\n 'ds-table__cell': true,\n 'ds-table__cell--text-single': true,\n 'ds-table__skeleton-cell': true,\n 'ds-table__cell--sticky-start': column.sticky === 'start',\n 'ds-table__cell--sticky-end': column.sticky === 'end',\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--grouped': true,\n }}\n key={`skeleton-${index}:${column.id}`}\n >\n <span class=\"ds-table__cell-content ds-interaction-fill__content\">\n <ds-skeleton variant=\"text\" textVariant=\"text-body-medium\" width=\"100%\" />\n </span>\n {this.renderStickyEdge(column.sticky)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n );\n }\n\n private renderStateBody(kind: 'empty' | 'error', totalColumns: number) {\n const error = kind === 'error';\n return (\n <tbody class=\"ds-table__body ds-table__state-body\">\n <tr class=\"ds-table__state-row\">\n <td class=\"ds-table__state-cell\" colSpan={totalColumns}>\n <ds-empty-state\n icon={error ? 'ErrorTriangle' : 'Inbox'}\n heading={error ? this.errorHeading : this.emptyHeading}\n body={error ? this.errorBody : this.emptyBody}\n />\n </td>\n </tr>\n </tbody>\n );\n }\n\n private renderLazyBody(model: TableRenderModel) {\n if (!this.lazyLoading || !model.hasData) return null;\n const error = this.loadMoreError?.trim();\n const manualFallback = this.loadMoreMode === 'manual' ||\n !this.loadController.intersectionSupported;\n\n return (\n <tbody class=\"ds-table__body ds-table__load-body\">\n <tr\n class=\"ds-table__load-row\"\n ref={element => {\n this.sentinelEl = element ?? null;\n }}\n >\n <td class=\"ds-table__load-cell\" colSpan={model.totalColumns}>\n {error ? (\n <span class=\"ds-table__load-content ds-table__load-content--error\">\n <span class=\"ds-table__load-copy\">\n <ds-icon name=\"ErrorTriangle\" size=\"md\" color=\"secondary\" aria-hidden=\"true\" />\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">{error}</ds-text>\n </span>\n <ds-button-unfilled\n label={this.retryLabel}\n size=\"md\"\n onDsClick={() => this.loadController.request('retry')}\n />\n </span>\n ) : this.loadingMore ? (\n <span class=\"ds-table__load-content\">\n <ds-loader size=\"md\" color=\"secondary\" />\n <ds-text as=\"span\" variant=\"text-body-medium\" color=\"secondary\">\n {this.loadingMoreLabel}\n </ds-text>\n </span>\n ) : this.hasMore && manualFallback ? (\n <span class=\"ds-table__load-content\">\n <ds-button-unfilled\n label={this.loadMoreLabel}\n size=\"md\"\n onDsClick={() => this.loadController.request('manual')}\n />\n </span>\n ) : this.hasMore ? (\n <span class=\"ds-table__auto-sentinel\" aria-hidden=\"true\" />\n ) : (\n <ds-text\n class=\"ds-table__load-content\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n >\n {this.endOfResultsLabel}\n </ds-text>\n )}\n </td>\n </tr>\n </tbody>\n );\n }\n\n private renderDocumentStickyHeader(model: TableRenderModel) {\n if (!this.documentStickyHeader) return null;\n return (\n <div\n class=\"ds-table__document-sticky-header\"\n >\n <table\n class={{\n 'ds-table__table': true,\n 'ds-table__sticky-header-table': true,\n 'ds-table__table--selectable': model.selectable,\n 'ds-table__table--grouped': model.grouped,\n }}\n style={model.tableStyle}\n role=\"presentation\"\n ref={element => {\n this.stickyHeaderTableEl = element ?? null;\n }}\n >\n {this.renderColgroup(model)}\n {this.renderHeader(model, true, true)}\n </table>\n {this.renderFloatingCollapseAll(model)}\n </div>\n );\n }\n\n private get resultSummary(): string | null {\n return formatTableResultSummary(\n this.displayedCount,\n this.totalCount,\n this.resultSummaryLabel,\n );\n }\n\n private renderResultFooter() {\n const summary = this.resultSummary;\n if (!summary) return null;\n return (\n <ds-text\n class=\"ds-table__footer\"\n as=\"div\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n >\n {summary}\n </ds-text>\n );\n }\n\n private renderCaptionBar() {\n if (this.captionVisibility !== 'visible') return null;\n return (\n <ds-text\n class=\"ds-table__caption-bar\"\n as=\"div\"\n variant=\"text-title-small\"\n emphasis={true}\n color=\"primary\"\n aria-hidden=\"true\"\n >\n {this.caption}\n </ds-text>\n );\n }\n\n render() {\n const model = this.createRenderModel();\n this.renderedModel = model;\n const regionLabel = this.scrollLabel?.trim() || `${this.caption} scroll area`;\n const initialLoading = this.loading && !model.hasData;\n const initialError = !model.hasData && this.error;\n const viewportStyle = this.resolvedMaxHeight\n ? { '--ds-table-max-block-size': this.resolvedMaxHeight }\n : undefined;\n\n return (\n <Host class=\"table-host\">\n <div class={{\n 'ds-table': true,\n 'ds-table--sticky-header': this.stickyHeader,\n 'ds-table--document-sticky-header': this.documentStickyHeader,\n 'ds-table--contained-sticky-header': this.stickyHeader && !this.documentStickyHeader,\n }}>\n {this.renderCaptionBar()}\n <div\n class={{\n 'ds-table__frame': true,\n 'ds-table__frame--overflow-start': this.overflowStart,\n 'ds-table__frame--overflow-end': this.overflowEnd,\n }}\n ref={element => {\n this.frameEl = element ?? null;\n }}\n >\n {this.renderDocumentStickyHeader(model)}\n {!this.documentStickyHeader && this.renderFloatingCollapseAll(model)}\n <div\n class=\"ds-table__viewport\"\n style={viewportStyle}\n ref={element => {\n this.viewportEl = element ?? null;\n }}\n role={this.scrollable ? 'region' : undefined}\n aria-label={this.scrollable ? regionLabel : undefined}\n tabIndex={this.scrollable ? 0 : undefined}\n >\n <table\n class={{\n 'ds-table__table': true,\n 'ds-table__table--selectable': model.selectable,\n 'ds-table__table--grouped': model.grouped,\n }}\n style={model.tableStyle}\n aria-busy={initialLoading || this.loadingMore ? 'true' : undefined}\n ref={element => {\n this.tableEl = element ?? null;\n }}\n >\n <caption class=\"ds-table__caption ds-visually-hidden\">\n <ds-text as=\"span\" variant=\"text-title-small\" emphasis={true} color=\"primary\">\n {this.caption}\n </ds-text>\n </caption>\n {this.renderColgroup(model)}\n {this.renderHeader(model, !this.documentStickyHeader)}\n {initialLoading\n ? this.renderSkeletonBody(model)\n : initialError\n ? this.renderStateBody('error', model.totalColumns)\n : model.hasData\n ? this.renderDataBodies(model)\n : this.renderStateBody('empty', model.totalColumns)}\n {!initialLoading && !initialError && this.renderLazyBody(model)}\n </table>\n </div>\n </div>\n {this.renderResultFooter()}\n <div class=\"ds-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {this.announcement}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{T as o,d as s}from"./p-CFNG0K3m.js";const t=o;const m=s;export{t as DsTag,m as defineCustomElement};
1
+ import{T as o,d as s}from"./p-B8HG9OFh.js";const t=o;const p=s;export{t as DsTag,p as defineCustomElement};
2
2
  //# sourceMappingURL=ds-tag.js.map