@ds-mo/ui 13.12.0 → 13.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +22 -3
  4. package/dist/angular/ds-button-filled.d.ts +1 -1
  5. package/dist/angular/ds-button-filled.js +3 -3
  6. package/dist/angular/ds-button-unfilled.d.ts +1 -1
  7. package/dist/angular/ds-button-unfilled.js +3 -3
  8. package/dist/angular/ds-table.d.ts +4 -1
  9. package/dist/angular/ds-table.js +5 -2
  10. package/dist/components/ds-agent-response.js +1 -1
  11. package/dist/components/ds-banner.js +1 -1
  12. package/dist/components/ds-bar-nav.js +1 -1
  13. package/dist/components/ds-bar-title.js +1 -1
  14. package/dist/components/ds-bar-workflow.js +1 -1
  15. package/dist/components/ds-button-filled.js +1 -1
  16. package/dist/components/ds-button-unfilled.js +1 -1
  17. package/dist/components/ds-card-chart.js +1 -1
  18. package/dist/components/ds-card-overview.js +1 -1
  19. package/dist/components/ds-card-overview.js.map +1 -1
  20. package/dist/components/ds-card-setting.js +1 -1
  21. package/dist/components/ds-chart-legend.js +1 -1
  22. package/dist/components/ds-chart-legend.js.map +1 -1
  23. package/dist/components/ds-checkbox.js +1 -1
  24. package/dist/components/ds-chip.js +1 -1
  25. package/dist/components/ds-chip.js.map +1 -1
  26. package/dist/components/ds-code-block.js +1 -1
  27. package/dist/components/ds-conversation-list-item.js +1 -1
  28. package/dist/components/ds-conversation-list-item.js.map +1 -1
  29. package/dist/components/ds-input.js +1 -1
  30. package/dist/components/ds-input.js.map +1 -1
  31. package/dist/components/ds-markdown.js +1 -1
  32. package/dist/components/ds-menu.js +1 -1
  33. package/dist/components/ds-message-actions.js +1 -1
  34. package/dist/components/ds-message-composer.js +1 -1
  35. package/dist/components/ds-message-scroller.js +1 -1
  36. package/dist/components/ds-mobile-bar-nav.js +1 -1
  37. package/dist/components/ds-mobile-header.js +1 -1
  38. package/dist/components/ds-mobile-section-switcher.js +1 -1
  39. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  40. package/dist/components/ds-modal.js +1 -1
  41. package/dist/components/ds-panel-nav.js +1 -1
  42. package/dist/components/ds-panel-sub-nav.js +1 -1
  43. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  44. package/dist/components/ds-panel-tool-header.js +1 -1
  45. package/dist/components/ds-panel-tool-search.js +1 -1
  46. package/dist/components/ds-panel-tools.js +1 -1
  47. package/dist/components/ds-radio.js +1 -1
  48. package/dist/components/ds-radio.js.map +1 -1
  49. package/dist/components/ds-select.js +1 -1
  50. package/dist/components/ds-select.js.map +1 -1
  51. package/dist/components/ds-shell-app.js +1 -1
  52. package/dist/components/ds-shell-tools.js +1 -1
  53. package/dist/components/ds-tab-group.js +1 -1
  54. package/dist/components/ds-table.js +1 -1
  55. package/dist/components/ds-table.js.map +1 -1
  56. package/dist/components/ds-tag.js +1 -1
  57. package/dist/components/ds-toast.js +1 -1
  58. package/dist/components/ds-typing-indicator.js +1 -1
  59. package/dist/components/p-B1JB0Zn-.js +2 -0
  60. package/dist/components/{p-BYre-ZDg.js.map → p-B1JB0Zn-.js.map} +1 -1
  61. package/dist/components/p-B2t8alvH.js +2 -0
  62. package/dist/components/{p-DK4PGrHm.js.map → p-B2t8alvH.js.map} +1 -1
  63. package/dist/components/{p-DxygUurH.js → p-BAGTb6cZ.js} +2 -2
  64. package/dist/components/p-BEEYhbIb.js +2 -0
  65. package/dist/components/{p-CFNG0K3m.js.map → p-BEEYhbIb.js.map} +1 -1
  66. package/dist/components/{p-BRajO-Za.js → p-BFMV9TJO.js} +2 -2
  67. package/dist/components/p-BNHPCCw8.js +2 -0
  68. package/dist/components/{p-x9jO4lZ7.js.map → p-BNHPCCw8.js.map} +1 -1
  69. package/dist/components/{p-DKftz0O8.js → p-BUZLhvs1.js} +2 -2
  70. package/dist/components/p-BgaF83uh.js +2 -0
  71. package/dist/components/{p-C5gZHZHU.js.map → p-BgaF83uh.js.map} +1 -1
  72. package/dist/components/p-Br0fwWUG.js +2 -0
  73. package/dist/components/{p-BFXN4ioL.js.map → p-Br0fwWUG.js.map} +1 -1
  74. package/dist/components/{p-DcmqsAMP.js → p-BydCwx7x.js} +2 -2
  75. package/dist/components/p-C3Z01Glr.js +2 -0
  76. package/dist/components/p-C3Z01Glr.js.map +1 -0
  77. package/dist/components/{p-BX57q1Lo.js → p-CSlTJWFG.js} +2 -2
  78. package/dist/components/p-Cw1bbiCG.js +2 -0
  79. package/dist/components/{p-B_eqa09C.js.map → p-Cw1bbiCG.js.map} +1 -1
  80. package/dist/components/p-CzV4gIxd.js +2 -0
  81. package/dist/components/{p-BxJurXEn.js.map → p-CzV4gIxd.js.map} +1 -1
  82. package/dist/components/p-D-F8eyXy.js +2 -0
  83. package/dist/components/p-D-F8eyXy.js.map +1 -0
  84. package/dist/components/p-DGvzGGcu.js +2 -0
  85. package/dist/components/{p-CIlO_j3q.js.map → p-DGvzGGcu.js.map} +1 -1
  86. package/dist/components/{p-DkhE3BsH.js → p-bLCbOPYa.js} +2 -2
  87. package/dist/components/p-cPh32CFB.js +2 -0
  88. package/dist/components/{p-Bj7KrXzw.js.map → p-cPh32CFB.js.map} +1 -1
  89. package/dist/docs/components.json +87 -3
  90. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +2 -0
  91. package/dist/mcp-data/registry/button-filled.json +20 -1
  92. package/dist/mcp-data/registry/button-unfilled.json +20 -1
  93. package/dist/mcp-data/registry/registry.json +21 -2
  94. package/dist/mcp-data/registry/table.json +24 -5
  95. package/dist/react/ds-table.d.ts +2 -1
  96. package/dist/react/ds-table.js +2 -1
  97. package/dist/styles/table.css +258 -61
  98. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +2 -0
  99. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -0
  100. package/dist/types/components/Table/Table.d.ts +12 -1
  101. package/dist/types/components/Table/index.d.ts +1 -1
  102. package/dist/types/components/Table/table-types.d.ts +11 -0
  103. package/dist/types/components.d.ts +26 -2
  104. package/package.json +1 -1
  105. package/dist/components/p-BFXN4ioL.js +0 -2
  106. package/dist/components/p-BYre-ZDg.js +0 -2
  107. package/dist/components/p-B_eqa09C.js +0 -2
  108. package/dist/components/p-Bj7KrXzw.js +0 -2
  109. package/dist/components/p-BxJurXEn.js +0 -2
  110. package/dist/components/p-C5gZHZHU.js +0 -2
  111. package/dist/components/p-CFNG0K3m.js +0 -2
  112. package/dist/components/p-CIlO_j3q.js +0 -2
  113. package/dist/components/p-DAbaMtEX.js +0 -2
  114. package/dist/components/p-DAbaMtEX.js.map +0 -1
  115. package/dist/components/p-DK4PGrHm.js +0 -2
  116. package/dist/components/p-c1pY-Mqq.js +0 -2
  117. package/dist/components/p-c1pY-Mqq.js.map +0 -1
  118. package/dist/components/p-x9jO4lZ7.js +0 -2
  119. /package/dist/components/{p-DxygUurH.js.map → p-BAGTb6cZ.js.map} +0 -0
  120. /package/dist/components/{p-BRajO-Za.js.map → p-BFMV9TJO.js.map} +0 -0
  121. /package/dist/components/{p-DKftz0O8.js.map → p-BUZLhvs1.js.map} +0 -0
  122. /package/dist/components/{p-DcmqsAMP.js.map → p-BydCwx7x.js.map} +0 -0
  123. /package/dist/components/{p-BX57q1Lo.js.map → p-CSlTJWFG.js.map} +0 -0
  124. /package/dist/components/{p-DkhE3BsH.js.map → p-bLCbOPYa.js.map} +0 -0
@@ -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","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","header","headerLabel","groupIds","rowIds","interactionFillCss","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","stickyHeaderTableEl","tableEl","sentinelEl","resizeObserver","intersectionObserver","observedSentinel","requestPending","requestedRowCount","previousLoadedRowCount","previousModelWarning","hasLoaded","reconnectFrame","syncOverflow","viewport","overflows","scrollWidth","clientWidth","scrollHeight","clientHeight","nextStart","scrollLeft","nextEnd","syncStickyHeaderPosition","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","documentStickyHeader","resolvedMaxHeight","hasData","totalColumns","selectedSet","selectionState","maxHeight","tableStyle","caption","unshift","some","headerSegments","segment","sortKey","stickyStart","sticky","stickyEnd","message","console","warn","addEventListener","passive","ResizeObserver","observe","offset","maxOffset","style","setProperty","loadMoreError","threshold","entries","entry","isIntersecting","requestLoadMore","root","rootMargin","reason","dsLoadMore","emit","loadedRowCount","emitSort","dsGroupingChange","sortable","dsSortChange","sortButtonLabel","next","emitRowSelection","includes","dsSelectionChange","scope","changedRowId","emitAllSelection","rowEventOwnsActivation","event","currentTarget","composedPath","target","matches","emitRowActivation","interactive","dsRowActivate","rowId","handleRowKeydown","key","preventDefault","renderSelectionControl","checked","onActivate","h","class","type","role","onClick","presentation","renderStickyEdge","renderColumnHeader","presentational","groupedColumn","activeMemberSegment","find","activeMemberSort","activeSort","align","memberAriaSort","labelControl","index","segmentActive","segmentInteractive","as","variant","emphasis","color","lineTruncation","control","separator","sortControl","icon","hasBorder","activeFill","isActive","pressScale","onDsClick","renderColgroup","renderHeader","selection","renderCellValue","name","src","isInset","isInactive","isLoading","stopPropagation","dsCellAction","actionId","tag","intent","contrast","rounded","text","primaryText","fontFeature","wraps","wrap","secondary","renderRow","rowSelectable","tabIndex","onKeyDown","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","renderDocumentStickyHeader","render","regionLabel","scrollLabel","initialLoading","initialError","viewportStyle","Host"],"sources":["src/wc/components/Table/table-model.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 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 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 }\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 './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\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 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\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 @Event() dsRowActivate!: EventEmitter<TableRowActivateDetail>;\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 stickyHeaderTableEl: HTMLTableElement | 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.syncStickyHeaderPosition();\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 documentStickyHeader(): boolean {\n return this.stickyHeader && this.resolvedMaxHeight === undefined;\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 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 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 this.syncStickyHeaderPosition();\n };\n\n private syncStickyHeaderPosition(): void {\n if (!this.viewportEl || !this.stickyHeaderTableEl) return;\n const offset = this.viewportEl.scrollLeft;\n const maxOffset = Math.max(0, this.viewportEl.scrollWidth - this.viewportEl.clientWidth);\n this.stickyHeaderTableEl.style.setProperty('--ds-table-inline-scroll-offset', `${offset}px`);\n this.stickyHeaderTableEl.style.setProperty('--ds-table-inline-scroll-max-offset', `${maxOffset}px`);\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.resolvedMaxHeight === undefined ? null : 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 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 renderColumnHeader(\n column: TableColumn,\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\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 }}\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 <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 {this.renderStickyEdge(column.sticky)}\n </th>\n );\n }\n\n private renderColgroup() {\n return (\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 );\n }\n\n private renderHeader(interactive = true, presentational = false) {\n const selection = this.selectionState;\n return (\n <thead class={{\n 'ds-table__head': true,\n 'ds-table__head--semantic-copy': !interactive,\n }}>\n <tr class=\"ds-table__header-row\">\n {this.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, interactive, presentational)\n ))}\n </tr>\n </thead>\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=\"md\"\n isInset={true}\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 '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 {this.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 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 '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={cellType}\n data-cell-variant={tagVariant ?? textVariant}\n >\n <span class=\"ds-table__cell-content ds-interaction-fill__content\">\n {this.renderCellValue(value, column, row)}\n </span>\n {this.renderStickyEdge(column.sticky)}\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 ds-table__cell--sticky-start\">\n <ds-skeleton variant=\"icon\" iconSize=\"md\" />\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--sticky-start': column.sticky === 'start',\n 'ds-table__cell--sticky-end': column.sticky === 'end',\n }}\n key={`skeleton-${index}:${column.id}`}\n >\n <span class=\"ds-table__cell-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') {\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 private renderDocumentStickyHeader() {\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': this.selectable,\n }}\n style={this.tableStyle}\n role=\"presentation\"\n ref={element => {\n this.stickyHeaderTableEl = element ?? null;\n }}\n >\n {this.renderColgroup()}\n {this.renderHeader(true, true)}\n </table>\n </div>\n );\n }\n\n render() {\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 'ds-table--document-sticky-header': this.documentStickyHeader,\n 'ds-table--contained-sticky-header': this.stickyHeader && !this.documentStickyHeader,\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 {this.renderDocumentStickyHeader()}\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 {this.renderColgroup()}\n {this.renderHeader(!this.documentStickyHeader)}\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,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-BEEYhbIb.js";const t=o;const p=s;export{t as DsTag,p as defineCustomElement};
2
2
  //# sourceMappingURL=ds-tag.js.map
@@ -1,2 +1,2 @@
1
- import{p as t,H as s,c as i,h as e,a as o,t as n}from"./index.js";import{c as a}from"./p-BX0BMhgz.js";import{d as r}from"./p-DwKC_9u2.js";import{d as h}from"./p-c1pY-Mqq.js";import{d as c}from"./p-DumWT7NN.js";import{d}from"./p-Ca-I2UnB.js";import{d as l}from"./p-BNiIyZCn.js";import{T as f,r as u,a as m}from"./p-CXduurfd.js";import{r as p}from"./p-BJMRBHKW.js";function v(t,s){const i=typeof t==="function"?t(s):t;return typeof i==="string"?{description:i}:i}class g{constructor(){this.records=[];this.listeners=new Set;this.nextId=0}add(t){const s=t.id||`ds-toast-${++this.nextId}`;const i=this.records.findIndex((t=>t.id===s));if(!t.title?.trim()&&!t.description?.trim()){console.warn(`[ds-toast] Toast "${s}" should provide a title or description.`)}if(i>=0){const e=this.records[i];const o={...e,...t,id:s,priority:t.priority??e.priority,transitionStatus:"active",closeReason:undefined,updateKey:e.updateKey+1,timerKey:e.timerKey+1};this.records=[o,...this.records.filter(((t,s)=>s!==i))];this.emit();return s}const e={...t,id:s,priority:t.priority??"low",transitionStatus:"starting",updateKey:0,timerKey:0};this.records=[e,...this.records];this.emit();return s}update(t,s){const i=this.records.findIndex((s=>s.id===t));if(i<0)return;const e=this.records[i];const o=Object.prototype.hasOwnProperty.call(s,"timeout")||e.type==="loading"&&s.type!==undefined&&s.type!=="loading";const n={...e,...s,id:t,priority:s.priority??e.priority,updateKey:e.updateKey+1,timerKey:o?e.timerKey+1:e.timerKey};this.records=this.records.map(((t,s)=>s===i?n:t));this.emit()}close(t,s="programmatic"){const i=this.records.findIndex((s=>s.id===t));if(i<0||this.records[i].transitionStatus==="ending")return;const e={...this.records[i],transitionStatus:"ending",closeReason:s};this.records=this.records.map(((t,s)=>s===i?e:t));this.emit();e.onClose?.({id:t,reason:s,toast:e})}closeAll(t="programmatic"){for(const s of[...this.records])this.close(s.id,t)}async promise(t,s){const i=v(s.loading,undefined);const e=this.add({...i,type:i.type??"loading",timeout:0});try{const i=await t;const o=v(s.success,i);this.update(e,{...o,type:o.type??"success",timeout:o.timeout});return i}catch(t){const i=v(s.error,t);this.update(e,{...i,type:i.type??"error",timeout:i.timeout});throw t}}subscribe(t){this.listeners.add(t);t(this.getSnapshot());return()=>{this.listeners.delete(t)}}getSnapshot(){return this.records.map((t=>({...t})))}activate(t){const s=this.records.find((s=>s.id===t));if(!s||s.transitionStatus!=="starting")return;this.records=this.records.map((s=>s.id===t?{...s,transitionStatus:"active"}:s));this.emit()}remove(t){const s=this.records.find((s=>s.id===t));if(!s||s.transitionStatus!=="ending")return null;const i=s.closeReason??"programmatic";this.records=this.records.filter((s=>s.id!==t));this.emit();const e={id:t,reason:i,toast:s};return e}notifyRemove(t){const{toast:s}=t;s.onRemove?.(t)}emit(){const t=this.getSnapshot();for(const s of this.listeners)s(t)}}function w(){return new g}const b=Symbol.for("@ds-mo/ui/default-toast-manager");const y=globalThis;const x=y[b];const M=x??w();if(!x)y[b]=M;const T=()=>`.ds-visually-hidden.sc-ds-toast-h,.ds-visually-hidden.sc-ds-toast{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}@media (forced-colors: active){.sc-ds-toast:root,.sc-ds-toast-h,.ds-forced-colors-scope.sc-ds-toast{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-toast-h{display:contents}.toast-region.sc-ds-toast{position:fixed;inset:0;z-index:var(--dimension-z-index-floating);pointer-events:none;outline:none}.toast-viewport.sc-ds-toast{position:absolute;right:var(--dimension-space-200);bottom:var(--dimension-space-200);display:grid;width:min( var(--dimension-card-width-sm), calc(100vw - 2 * var(--dimension-space-200)) )}@media (max-width: 767px){[avoid-mobile-shell-bar].sc-ds-toast-h .toast-viewport.sc-ds-toast{bottom:calc( var(--dimension-space-200) + var(--dimension-stroke-width-012) + var(--dimension-space-100) + var(--dimension-size-500) + max(var(--dimension-space-100), env(safe-area-inset-bottom)) )}}.toast-positioner.sc-ds-toast{grid-area:1 / 1;align-self:end;justify-self:center;width:100%;pointer-events:auto;transform:translateY( calc(-1 * var(--toast-index) * var(--dimension-space-100)) );transition:transform var(--effect-motion-short-3), width var(--effect-motion-short-3)}.toast-viewport.sc-ds-toast:not([data-expanded]) .toast-positioner.sc-ds-toast{width:calc( 100% - 2 * var(--toast-index) * var(--dimension-space-100) )}.toast-viewport[data-expanded].sc-ds-toast .toast-positioner.sc-ds-toast{transform:translateY(calc(-1 * var(--toast-offset-y)))}.toast-positioner[data-limited].sc-ds-toast{visibility:hidden;pointer-events:none}.toast-positioner--anchored.sc-ds-toast{position:fixed;width:min( var(--dimension-card-width-sm), calc(100vw - 2 * var(--dimension-space-200)) );transform:none}.toast-positioner--anchored[data-positioned='false'].sc-ds-toast{visibility:hidden}.toast-surface.sc-ds-toast{position:relative;display:block;box-sizing:border-box;width:100%;height:var(--toast-height, auto);padding:var(--dimension-space-200);overflow:hidden;color:var(--color-foreground-primary);background-color:var(--color-background-primary);border-radius:var(--dimension-radius-050);box-shadow:var(--effect-elevation-elevated-floating);transform:translate( var(--toast-swipe-movement-x), var(--toast-swipe-movement-y) );animation:toast-enter var(--effect-motion-short-2) both}.toast-positioner--ending.sc-ds-toast .toast-surface.sc-ds-toast{animation:toast-exit var(--effect-motion-short-3) both}.toast-surface--swiping.sc-ds-toast{transition:none;user-select:none}.toast-content.sc-ds-toast{display:flex;flex-direction:column;min-width:0;padding-inline-end:var(--dimension-size-500);transition:opacity var(--effect-motion-short-3)}.toast-copy.sc-ds-toast{display:flex;flex-direction:column;min-width:0;min-height:var(--typography-lineheight-md);margin-block:calc(-1 * var(--dimension-space-025));gap:var(--dimension-space-050)}.toast-title.sc-ds-toast,.toast-description.sc-ds-toast{min-width:0}.toast-action.sc-ds-toast{align-self:start;margin-top:calc( var(--dimension-space-200) + var(--dimension-space-025) )}.toast-close.sc-ds-toast{position:absolute;top:var(--dimension-space-100);right:var(--dimension-space-100);transition:opacity var(--effect-motion-short-3)}.toast-viewport.sc-ds-toast:not([data-expanded]) .toast-positioner[data-behind].sc-ds-toast .toast-content.sc-ds-toast,.toast-viewport.sc-ds-toast:not([data-expanded]) .toast-positioner[data-behind].sc-ds-toast .toast-close.sc-ds-toast{opacity:0}@keyframes toast-enter{from{opacity:0;transform:translateY(var(--dimension-space-100))}to{opacity:1;transform:translateY(0)}}@keyframes toast-exit{from{opacity:1}to{opacity:0}}@media (prefers-reduced-motion: reduce){.toast-positioner.sc-ds-toast,.toast-surface.sc-ds-toast,.toast-content.sc-ds-toast,.toast-close.sc-ds-toast,.toast-positioner--ending.sc-ds-toast .toast-surface.sc-ds-toast{transition:none;animation:none}.toast-positioner--ending.sc-ds-toast .toast-surface.sc-ds-toast{opacity:0}}@media (forced-colors: active){.toast-surface.sc-ds-toast{box-shadow:none;outline:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);outline-offset:calc(-1 * var(--dimension-stroke-width-012))}}`;const k=40;const A=10;const C="__global-stack__";const P='button,a,input,textarea,select,[role="button"],[data-ds-toast-swipe-ignore]';const S=new WeakMap;const E=new Set;let F=null;let D=0;const z=t(class t extends s{constructor(t){super();if(t!==false){this.__registerHost()}this.dsToastClose=i(this,"dsToastClose");this.dsToastRemove=i(this,"dsToastRemove");this.dsToastAction=i(this,"dsToastAction");this.manager=M;this.limit=3;this.timeout=f.animationDelayLong2;this.label="Notifications";this.closeLabel="Close notification";this.avoidMobileShellBar=false;this.swipeDirections=["down","right"];this.records=[];this.expanded=false;this.keyboardActive=false;this.swipe=null;this.layoutVersion=0;this.instanceId=++D;this.domIds=new Map;this.timers=new Map;this.closeWatchdogs=new Map;this.closeFrames=new Map;this.closeEvents=new Set;this.activationFrames=new Map;this.pauseReasons=new Set;this.hoveredIds=new Set;this.heights=new Map;this.measuredUpdateKeys=new Map;this.anchoredPositions=new Map;this.dismissedSwipeDirections=new Map;this.observedElements=new Set;this.pendingRemovals=[];this.unsubscribe=null;this.attachedManager=null;this.previousFocus=null;this.resizeObserver=null;this.mutationObserver=null;this.layoutFrame=null;this.activeSwipe=null;this.nextDomId=0;this.connected=false;this.pendingHoverLeave=false;this.handleWindowBlur=()=>this.pauseTimers("window");this.handleWindowFocus=()=>this.resumeTimers("window");this.handleVisibilityChange=()=>{if(document.hidden)this.pauseTimers("document");else this.resumeTimers("document")};this.handleFocusIn=()=>{const t=document.activeElement;if(!(t instanceof s)||!t.matches(":focus-visible"))return;F=this;this.keyboardActive=true;this.expanded=true;this.pauseTimers("focus")};this.handleFocusOut=t=>{const s=t.relatedTarget;if(s instanceof Node&&this.el.contains(s))return;if(!this.keyboardActive)return;this.keyboardActive=false;this.expanded=this.hoveredIds.size>0;this.resumeTimers("focus")};this.handleDocumentKeyDown=t=>{if(t.key!=="F6")return;const s=Array.from(E).filter((t=>t.activeRecords.length>0));const i=F&&F.activeRecords.length?F:s[s.length-1];if(i!==this)return;t.preventDefault();if(!this.el.contains(document.activeElement)){this.previousFocus=document.activeElement}this.keyboardActive=true;this.regionElement?.focus()};this.handleRegionKeyDown=t=>{if(t.key==="Escape"){const s=t.target;const i=s.closest(".toast-positioner");const e=i?.dataset["toastId"]??this.activeRecords[0]?.id;if(e){t.preventDefault();this.manager.close(e,"escape")}return}if(t.key==="Tab"&&t.shiftKey&&t.target===this.regionElement){t.preventDefault();this.restorePreviousFocus()}};this.handleWindowResize=()=>{this.heights.clear();this.measuredUpdateKeys.clear();this.layoutVersion+=1;this.scheduleLayout()};this.scheduleLayout=()=>{if(this.layoutFrame!==null)return;this.layoutFrame=requestAnimationFrame((()=>{this.layoutFrame=null;this.measureLayout()}))}}connectedCallback(){this.connect()}componentDidLoad(){this.connect()}connect(){if(this.connected)return;this.connected=true;this.resizeObserver??(this.resizeObserver=new ResizeObserver((()=>this.scheduleLayout())));this.mutationObserver??(this.mutationObserver=new MutationObserver((()=>this.scheduleLayout())));this.mutationObserver.observe(document.body,{childList:true,subtree:true});if(!this.unsubscribe)this.attachManager(this.manager);window.addEventListener("blur",this.handleWindowBlur);window.addEventListener("focus",this.handleWindowFocus);window.addEventListener("resize",this.handleWindowResize);window.addEventListener("scroll",this.scheduleLayout,true);document.addEventListener("keydown",this.handleDocumentKeyDown);document.addEventListener("visibilitychange",this.handleVisibilityChange);E.add(this);if(!F)F=this}componentDidRender(){this.syncObservedElements();this.flushPendingRemovals();this.scheduleLayout()}disconnectedCallback(){this.connected=false;this.flushPendingRemovals();this.detachManager();this.resetManagerState();this.resizeObserver?.disconnect();this.resizeObserver=null;this.mutationObserver?.disconnect();this.mutationObserver=null;this.observedElements.clear();if(this.layoutFrame!==null)cancelAnimationFrame(this.layoutFrame);this.layoutFrame=null;window.removeEventListener("blur",this.handleWindowBlur);window.removeEventListener("focus",this.handleWindowFocus);window.removeEventListener("resize",this.handleWindowResize);window.removeEventListener("scroll",this.scheduleLayout,true);document.removeEventListener("keydown",this.handleDocumentKeyDown);document.removeEventListener("visibilitychange",this.handleVisibilityChange);E.delete(this);if(F===this){const t=Array.from(E);F=t[t.length-1]??null}}onManagerChange(t){this.detachManager();this.resetManagerState();if(this.connected)this.attachManager(t)}onTimeoutChange(){for(const t of this.timers.values()){if(t.handle)clearTimeout(t.handle)}this.timers.clear();this.syncTimers()}attachManager(t){const s=S.get(t);if(s&&s!==this){console.warn("[ds-toast] A manager can control only one connected ds-toast instance.");return}S.set(t,this);this.attachedManager=t;this.unsubscribe=t.subscribe((t=>{this.records=t;this.syncLifecycle(t);this.scheduleLayout()}))}detachManager(){this.unsubscribe?.();this.unsubscribe=null;if(this.attachedManager&&S.get(this.attachedManager)===this){S.delete(this.attachedManager)}this.attachedManager=null}resetManagerState(){this.flushPendingRemovals();if(this.el.contains(document.activeElement))this.restorePreviousFocus();this.clearAllTimers();for(const t of this.activationFrames.values())cancelAnimationFrame(t);for(const t of this.closeFrames.values())cancelAnimationFrame(t);this.activationFrames.clear();this.closeFrames.clear();this.closeEvents.clear();this.pauseReasons.clear();this.hoveredIds.clear();this.pendingHoverLeave=false;this.heights.clear();this.measuredUpdateKeys.clear();this.anchoredPositions.clear();this.dismissedSwipeDirections.clear();this.domIds.clear();this.activeSwipe=null;this.swipe=null;this.expanded=false;this.keyboardActive=false;this.records=[];this.resizeObserver?.disconnect();this.observedElements.clear()}syncObservedElements(){const t=new Set(this.el.querySelectorAll(".toast-positioner"));for(const s of this.records){if(!s.positioner)continue;const i=this.resolveAnchor(s.positioner.anchor);if(i)t.add(i)}for(const s of this.observedElements){if(!t.has(s)){this.resizeObserver?.unobserve(s);this.observedElements.delete(s)}}for(const s of t){if(this.observedElements.has(s))continue;this.resizeObserver?.observe(s);this.observedElements.add(s)}}flushPendingRemovals(){for(const t of this.pendingRemovals.splice(0)){t.manager.notifyRemove(t.context);this.dsToastRemove.emit({id:t.context.id,toast:t.context.toast})}}syncLifecycle(t){const s=new Set(t.map((t=>t.id)));for(const t of this.hoveredIds){if(t!==C&&!s.has(t))this.hoveredIds.delete(t)}const i=t.some((t=>t.transitionStatus==="ending"));if(this.pendingHoverLeave&&!i&&!this.hoveredIds.size){this.pendingHoverLeave=false;this.expanded=false;this.resumeTimers("hover")}else if(!this.hoveredIds.size&&!this.pendingHoverLeave){this.resumeTimers("hover")}for(const[t,i]of this.timers){if(s.has(t))continue;if(i.handle)clearTimeout(i.handle);this.timers.delete(t)}for(const[t,i]of this.closeWatchdogs){if(s.has(t))continue;clearTimeout(i);this.closeWatchdogs.delete(t)}for(const[t,i]of this.activationFrames){if(s.has(t))continue;cancelAnimationFrame(i);this.activationFrames.delete(t)}for(const[t,i]of this.closeFrames){if(s.has(t))continue;cancelAnimationFrame(i);this.closeFrames.delete(t)}for(const t of this.domIds.keys()){if(s.has(t))continue;this.closeEvents.delete(t);this.domIds.delete(t);this.heights.delete(t);this.measuredUpdateKeys.delete(t);this.anchoredPositions.delete(t);this.dismissedSwipeDirections.delete(t)}for(const s of t){this.ensureDomId(s.id);if(s.transitionStatus==="starting"&&!this.activationFrames.has(s.id)){const t=this.attachedManager;const i=requestAnimationFrame((()=>{this.activationFrames.delete(s.id);t?.activate(s.id)}));this.activationFrames.set(s.id,i)}if(s.transitionStatus==="ending"){this.clearToastTimer(s.id);this.beginRemoval(s)}else{const t=this.closeWatchdogs.get(s.id);if(t)clearTimeout(t);this.closeWatchdogs.delete(s.id);const i=this.closeFrames.get(s.id);if(i)cancelAnimationFrame(i);this.closeFrames.delete(s.id);this.closeEvents.delete(s.id)}}this.syncTimers()}syncTimers(){const t=new Set;for(const s of this.records){if(s.transitionStatus!=="active")continue;t.add(s.id);const i=this.resolveToastTimeout(s);if(i<=0){this.clearToastTimer(s.id);continue}const e=this.timers.get(s.id);if(!e||e.timerKey!==s.timerKey){this.clearToastTimer(s.id);this.timers.set(s.id,{timerKey:s.timerKey,remaining:i,startedAt:0,handle:null})}if(!this.isPaused)this.startToastTimer(s.id)}for(const s of this.timers.keys()){if(!t.has(s))this.clearToastTimer(s)}}resolveToastTimeout(t){const s=t.timeout??this.timeout;if(typeof s==="number")return Math.max(0,s);return u(s,f.animationDelayLong2)}startToastTimer(t){const s=this.timers.get(t);if(!s||s.handle||s.remaining<=0)return;s.startedAt=Date.now();s.handle=setTimeout((()=>{s.handle=null;s.remaining=0;this.manager.close(t,"timeout")}),s.remaining)}pauseTimers(t){const s=this.isPaused;this.pauseReasons.add(t);if(s)return;const i=Date.now();for(const t of this.timers.values()){if(!t.handle)continue;clearTimeout(t.handle);t.handle=null;t.remaining=Math.max(0,t.remaining-(i-t.startedAt))}}resumeTimers(t){this.pauseReasons.delete(t);if(this.isPaused)return;for(const t of this.timers.keys())this.startToastTimer(t)}get isPaused(){return this.pauseReasons.size>0}clearToastTimer(t){const s=this.timers.get(t);if(s?.handle)clearTimeout(s.handle);this.timers.delete(t)}clearAllTimers(){for(const t of this.timers.values()){if(t.handle)clearTimeout(t.handle)}for(const t of this.closeWatchdogs.values())clearTimeout(t);this.timers.clear();this.closeWatchdogs.clear()}beginRemoval(t){if(!this.closeEvents.has(t.id)){this.closeEvents.add(t.id);this.dsToastClose.emit({id:t.id,reason:t.closeReason??"programmatic",toast:t});this.moveFocusAfterClose(t.id)}if(this.closeWatchdogs.has(t.id)||this.closeFrames.has(t.id))return;const s=m(f.motionShort3,f.animationDurationShort3);if(s<=0){queueMicrotask((()=>this.completeRemoval(t)));return}const i=requestAnimationFrame((()=>{this.closeFrames.delete(t.id);const i=this.records.find((s=>s.id===t.id));if(!i||i.transitionStatus!=="ending")return;this.closeWatchdogs.set(t.id,setTimeout((()=>this.completeRemoval(i)),s))}));this.closeFrames.set(t.id,i)}completeRemoval(t){const s=this.records.find((s=>s.id===t.id));if(!s||s.transitionStatus!=="ending")return;const i=this.closeWatchdogs.get(t.id);if(i)clearTimeout(i);this.closeWatchdogs.delete(t.id);const e=this.closeFrames.get(t.id);if(e)cancelAnimationFrame(e);this.closeFrames.delete(t.id);const o=this.attachedManager;const n=o?.remove(t.id);if(o&&n)this.pendingRemovals.push({manager:o,context:n})}handleAnimationComplete(t){if(t.transitionStatus==="ending")this.completeRemoval(t)}bindAnimationCancel(t,s){if(!t||t.dataset["cancelBound"]==="true")return;t.dataset["cancelBound"]="true";t.addEventListener("animationcancel",(()=>{const t=this.records.find((t=>t.id===s));if(t)this.handleAnimationComplete(t)}))}handlePointerEnter(t){F=this;this.pendingHoverLeave=false;this.hoveredIds.add(t);this.expanded=true;this.pauseTimers("hover")}handlePointerLeave(t){this.hoveredIds.delete(t);if(this.hoveredIds.size)return;if(this.records.some((t=>t.transitionStatus==="ending"))){this.pendingHoverLeave=true;return}this.expanded=false;this.resumeTimers("hover")}get regionElement(){return this.el.querySelector(".toast-region")}restorePreviousFocus(){this.previousFocus?.focus?.();this.previousFocus=null;this.keyboardActive=false}moveFocusAfterClose(t){const s=document.activeElement;const i=this.positionerElement(t);if(!s||!i?.contains(s))return;requestAnimationFrame((()=>{const s=this.activeRecords.find((s=>s.id!==t));const i=s?this.positionerElement(s.id)?.querySelector("ds-button-unfilled"):null;if(i?.setFocus)void i.setFocus();else if(s)this.regionElement?.focus();else this.restorePreviousFocus()}))}handleAction(t,s){const i={id:t.id,toast:t,originalEvent:s.detail};this.dsToastAction.emit(i);t.action?.onAction?.({id:t.id,data:t.data,manager:this.manager,originalEvent:s.detail})}handlePointerDown(t,s){if(s.button!==0)return;const i=s.target;if(i.closest(P))return;const e=s.currentTarget;e.setPointerCapture(s.pointerId);this.activeSwipe={id:t.id,pointerId:s.pointerId,pointerType:s.pointerType,startX:s.clientX,startY:s.clientY,maxDistance:0,cancelled:false,axis:null};this.swipe={id:t.id,x:0,y:0};if(s.pointerType==="touch")this.pauseTimers("swipe")}handlePointerMove(t){const s=this.activeSwipe;if(!s||s.pointerId!==t.pointerId||s.cancelled)return;const i=t.clientX-s.startX;const e=t.clientY-s.startY;if(!s.axis&&Math.max(Math.abs(i),Math.abs(e))>1){s.axis=Math.abs(i)>=Math.abs(e)?"x":"y"}if(!s.axis)return;const o=s.axis==="x";const n=o?i>=0?"right":"left":e>=0?"down":"up";const a=this.swipeDirections.includes(n);const r=o?Math.abs(i):Math.abs(e);const h=a?r:Math.sqrt(r);const c=(o?i:e)<0?-h:h;const d=o?c:0;const l=o?0:c;if(s.maxDistance-h>=A){s.cancelled=true;this.cancelSwipe();return}s.maxDistance=Math.max(s.maxDistance,h);if(r>1)t.preventDefault();this.swipe={id:s.id,x:d,y:l,direction:a?n:undefined}}handlePointerUp(t){const s=this.activeSwipe;if(!s||s.pointerId!==t.pointerId)return;const i=this.swipe;const e=i?Math.max(Math.abs(i.x),Math.abs(i.y)):0;const o=!s.cancelled&&!!i?.direction&&e>=k;const n=s.id;const a=s.pointerType==="touch";this.activeSwipe=null;this.swipe=null;if(a)this.resumeTimers("swipe");if(o&&i.direction){this.dismissedSwipeDirections.set(n,i.direction);this.manager.close(n,"swipe")}}handlePointerCancel(t){if(this.activeSwipe?.pointerId!==t.pointerId)return;this.cancelSwipe()}cancelSwipe(){const t=this.activeSwipe?.pointerType==="touch";this.activeSwipe=null;this.swipe=null;if(t)this.resumeTimers("swipe")}get touchAction(){const t=this.swipeDirections.includes("left")||this.swipeDirections.includes("right");const s=this.swipeDirections.includes("up")||this.swipeDirections.includes("down");if(t&&s)return"none";if(t)return"pan-y";if(s)return"pan-x";return"auto"}measureNaturalHeight(t,s){const i=t.querySelector(".toast-surface");if(!i)return 0;const e=t.style.width;const o=t.style.transition;const n=i.style.height;if(s){t.style.transition="none";t.style.width="100%"}i.style.height="auto";const a=i.getBoundingClientRect().height;i.style.height=n;if(s){t.style.width=e;t.getBoundingClientRect();t.style.transition=o}return a}measureLayout(){let t=false;for(const s of this.records){const i=this.positionerElement(s.id);if(!i)continue;let e=this.heights.get(s.id)??0;const o=e<=0||this.measuredUpdateKeys.get(s.id)!==s.updateKey;if(o){e=this.measureNaturalHeight(i,!s.positioner);if(e>0){if(this.heights.get(s.id)!==e)t=true;this.heights.set(s.id,e);this.measuredUpdateKeys.set(s.id,s.updateKey)}}if(!s.positioner)continue;const n=this.resolveAnchor(s.positioner.anchor);if(!n||e<=0){if(this.anchoredPositions.delete(s.id))t=true;continue}const r=i.getBoundingClientRect();const h=p(s.positioner.sideOffset,f.space050);const c=p(s.positioner.alignOffset,0);const d=a({anchorRect:n.getBoundingClientRect(),popupWidth:r.width,popupHeight:e,side:s.positioner.side??"top",align:s.positioner.align??"center",sideOffsetPx:h,alignOffsetPx:c,viewportPadPx:p(undefined,f.space200),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight});const l=this.anchoredPositions.get(s.id);if(!l||l.x!==d.x||l.y!==d.y||l.side!==d.resolvedSide){this.anchoredPositions.set(s.id,{x:d.x,y:d.y,side:d.resolvedSide});t=true}}if(t)this.layoutVersion+=1}resolveAnchor(t){return typeof t==="string"?document.getElementById(t):t}positionerElement(t){return Array.from(this.el.querySelectorAll(".toast-positioner")).find((s=>s.dataset["toastId"]===t))??null}ensureDomId(t){const s=this.domIds.get(t);if(s)return s;const i=++this.nextDomId;this.domIds.set(t,i);return i}get activeRecords(){return this.records.filter((t=>t.transitionStatus!=="ending"))}globalLayout(){const t=this.records.filter((t=>!t.positioner));let s=0;let i=0;const e=p(undefined,f.space200);const o=new Map;t.forEach(((t,n)=>{if(t.transitionStatus==="ending"){o.set(t.id,{index:n,offset:s,limited:false});return}const a=i>=Math.max(1,this.limit);o.set(t.id,{index:i,offset:s,limited:a});s+=(this.heights.get(t.id)??0)+e;i+=1}));return o}renderToast(t,s){const i=this.ensureDomId(t.id);const o=`ds-toast-${this.instanceId}-${i}-title`;const n=`ds-toast-${this.instanceId}-${i}-description`;const a=this.swipe?.id===t.id?this.swipe:null;const r=a?.direction??this.dismissedSwipeDirections.get(t.id);const h=!!t.positioner;const c=this.anchoredPositions.get(t.id);const d=t.priority==="high"&&!this.keyboardActive;const l=this.keyboardActive&&!s.limited?0:-1;const f=this.heights.get(t.id);return e("div",{ref:s=>this.bindAnimationCancel(s,t.id),class:{"toast-positioner":true,"toast-positioner--anchored":h,"toast-positioner--ending":t.transitionStatus==="ending"},"data-toast-id":t.id,"data-behind":!h&&s.index>0?"":undefined,"data-limited":s.limited?"":undefined,"data-positioned":h?String(!!c):undefined,"data-side":c?.side,inert:s.limited?true:undefined,"aria-hidden":s.limited?"true":undefined,style:{"--toast-index":String(s.index),"--toast-offset-y":`${s.offset}px`,"--toast-height":f?`${f}px`:undefined,zIndex:String(this.records.length-s.index),left:c?`${c.x}px`:undefined,top:c?`${c.y}px`:undefined},onAnimationEnd:()=>this.handleAnimationComplete(t)},e("div",{class:{"toast-surface":true,"toast-surface--swiping":!!a},role:t.priority==="high"?"alertdialog":"dialog","aria-modal":"false","aria-labelledby":t.title?o:t.description?n:undefined,"aria-describedby":t.title&&t.description?n:undefined,"aria-hidden":d?"true":undefined,"data-type":t.type,"data-priority":t.priority,"data-transition-status":t.transitionStatus,"data-swiping":a?"":undefined,"data-swipe-direction":r,style:{"--toast-swipe-movement-x":`${a?.x??0}px`,"--toast-swipe-movement-y":`${a?.y??0}px`,touchAction:this.touchAction},onPointerDown:s=>this.handlePointerDown(t,s),onPointerMove:t=>this.handlePointerMove(t),onPointerUp:t=>this.handlePointerUp(t),onPointerCancel:t=>this.handlePointerCancel(t),onPointerEnter:h?()=>this.handlePointerEnter(t.id):undefined,onPointerLeave:h?()=>this.handlePointerLeave(t.id):undefined},e("div",{class:"toast-content"},e("div",{class:"toast-copy"},t.title&&e("ds-text",{class:"toast-title",as:"div",variant:"text-title-small",color:"primary",textId:o},t.title),t.description&&e("ds-text",{class:"toast-description",as:"div",variant:"text-body-medium",color:"secondary",textId:n},t.description)),t.action&&e("ds-button-unfilled",{class:"toast-action",variant:"label",size:"md",type:"button",label:t.action.label,"aria-label":t.action.ariaLabel,hasBorder:true,focusTabIndex:l,"aria-hidden":!this.keyboardActive?"true":undefined,onDsClick:s=>this.handleAction(t,s)})),e("ds-button-unfilled",{class:"toast-close",variant:"icon",size:"md",type:"button",icon:"Cross","aria-label":this.closeLabel,hasBorder:false,activeFill:false,focusTabIndex:l,"aria-hidden":!this.keyboardActive?"true":undefined,onDsClick:()=>this.manager.close(t.id,"close-button")})))}render(){const t=this.globalLayout();const s=this.records.filter((t=>!t.positioner));const i=this.records.filter((t=>!!t.positioner));const n=this.records.filter((s=>s.priority==="high"&&s.transitionStatus!=="ending"&&!t.get(s.id)?.limited));return e(o,{key:"2738b78412ec7c4a8f1af8af40d335dc09c51347"},e("section",{key:"29480802b6b7909d541aa92aa7a9adc476ca7d6b",class:"toast-region",role:"region","aria-label":this.label,"aria-live":"polite","aria-atomic":"false","aria-relevant":"additions text",tabIndex:-1,onFocusin:this.handleFocusIn,onFocusout:t=>this.handleFocusOut(t),onKeyDown:t=>this.handleRegionKeyDown(t)},e("div",{key:"ef800b62d39aec905e058607dac0392c182007e0",class:"toast-viewport","data-expanded":this.expanded?"":undefined,onPointerEnter:()=>this.handlePointerEnter(C),onPointerLeave:()=>this.handlePointerLeave(C)},s.map((s=>this.renderToast(s,t.get(s.id)??{index:0,offset:0,limited:false})))),e("div",{key:"c96557d90f8a18cd3e7af549cdbd67bfc2f5442a",class:"toast-anchored-layer"},i.map((t=>this.renderToast(t,{index:0,offset:0,limited:false})))),e("div",{key:"260a666dc3e02a1f726fc5690b97964c58b4d239",class:"toast-assertive-announcer ds-visually-hidden"},n.map((t=>e("div",{role:"alert","aria-atomic":"true"},[t.title,t.description].filter(Boolean).join(". ")))))))}get el(){return this}static get watchers(){return{manager:[{onManagerChange:0}],timeout:[{onTimeoutChange:0}]}}static get style(){return T()}},[2,"ds-toast",{manager:[16],limit:[2],timeout:[8],label:[1],closeLabel:[1,"close-label"],avoidMobileShellBar:[516,"avoid-mobile-shell-bar"],swipeDirections:[16],records:[32],expanded:[32],keyboardActive:[32],swipe:[32],layoutVersion:[32]},undefined,{manager:[{onManagerChange:0}],timeout:[{onTimeoutChange:0}]}]);function R(){if(typeof customElements==="undefined"){return}const t=["ds-toast","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-text"];t.forEach((t=>{switch(t){case"ds-toast":if(!customElements.get(n(t))){customElements.define(n(t),z)}break;case"ds-badge":if(!customElements.get(n(t))){r()}break;case"ds-button-unfilled":if(!customElements.get(n(t))){h()}break;case"ds-icon":if(!customElements.get(n(t))){c()}break;case"ds-loader":if(!customElements.get(n(t))){d()}break;case"ds-text":if(!customElements.get(n(t))){l()}break}}))}R();const $=z;const j=R;export{$ as DsToast,j as defineCustomElement};
1
+ import{p as t,H as s,c as i,h as e,a as o,t as n}from"./index.js";import{c as a}from"./p-BX0BMhgz.js";import{d as r}from"./p-DwKC_9u2.js";import{d as h}from"./p-C3Z01Glr.js";import{d as c}from"./p-DumWT7NN.js";import{d}from"./p-Ca-I2UnB.js";import{d as l}from"./p-BNiIyZCn.js";import{T as f,r as u,a as m}from"./p-CXduurfd.js";import{r as p}from"./p-BJMRBHKW.js";function v(t,s){const i=typeof t==="function"?t(s):t;return typeof i==="string"?{description:i}:i}class g{constructor(){this.records=[];this.listeners=new Set;this.nextId=0}add(t){const s=t.id||`ds-toast-${++this.nextId}`;const i=this.records.findIndex((t=>t.id===s));if(!t.title?.trim()&&!t.description?.trim()){console.warn(`[ds-toast] Toast "${s}" should provide a title or description.`)}if(i>=0){const e=this.records[i];const o={...e,...t,id:s,priority:t.priority??e.priority,transitionStatus:"active",closeReason:undefined,updateKey:e.updateKey+1,timerKey:e.timerKey+1};this.records=[o,...this.records.filter(((t,s)=>s!==i))];this.emit();return s}const e={...t,id:s,priority:t.priority??"low",transitionStatus:"starting",updateKey:0,timerKey:0};this.records=[e,...this.records];this.emit();return s}update(t,s){const i=this.records.findIndex((s=>s.id===t));if(i<0)return;const e=this.records[i];const o=Object.prototype.hasOwnProperty.call(s,"timeout")||e.type==="loading"&&s.type!==undefined&&s.type!=="loading";const n={...e,...s,id:t,priority:s.priority??e.priority,updateKey:e.updateKey+1,timerKey:o?e.timerKey+1:e.timerKey};this.records=this.records.map(((t,s)=>s===i?n:t));this.emit()}close(t,s="programmatic"){const i=this.records.findIndex((s=>s.id===t));if(i<0||this.records[i].transitionStatus==="ending")return;const e={...this.records[i],transitionStatus:"ending",closeReason:s};this.records=this.records.map(((t,s)=>s===i?e:t));this.emit();e.onClose?.({id:t,reason:s,toast:e})}closeAll(t="programmatic"){for(const s of[...this.records])this.close(s.id,t)}async promise(t,s){const i=v(s.loading,undefined);const e=this.add({...i,type:i.type??"loading",timeout:0});try{const i=await t;const o=v(s.success,i);this.update(e,{...o,type:o.type??"success",timeout:o.timeout});return i}catch(t){const i=v(s.error,t);this.update(e,{...i,type:i.type??"error",timeout:i.timeout});throw t}}subscribe(t){this.listeners.add(t);t(this.getSnapshot());return()=>{this.listeners.delete(t)}}getSnapshot(){return this.records.map((t=>({...t})))}activate(t){const s=this.records.find((s=>s.id===t));if(!s||s.transitionStatus!=="starting")return;this.records=this.records.map((s=>s.id===t?{...s,transitionStatus:"active"}:s));this.emit()}remove(t){const s=this.records.find((s=>s.id===t));if(!s||s.transitionStatus!=="ending")return null;const i=s.closeReason??"programmatic";this.records=this.records.filter((s=>s.id!==t));this.emit();const e={id:t,reason:i,toast:s};return e}notifyRemove(t){const{toast:s}=t;s.onRemove?.(t)}emit(){const t=this.getSnapshot();for(const s of this.listeners)s(t)}}function w(){return new g}const b=Symbol.for("@ds-mo/ui/default-toast-manager");const y=globalThis;const x=y[b];const T=x??w();if(!x)y[b]=T;const M=()=>`.ds-visually-hidden.sc-ds-toast-h,.ds-visually-hidden.sc-ds-toast{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}@media (forced-colors: active){.sc-ds-toast:root,.sc-ds-toast-h,.ds-forced-colors-scope.sc-ds-toast{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-toast-h{display:contents}.toast-region.sc-ds-toast{position:fixed;inset:0;z-index:var(--dimension-z-index-floating);pointer-events:none;outline:none}.toast-viewport.sc-ds-toast{position:absolute;right:var(--dimension-space-200);bottom:var(--dimension-space-200);display:grid;width:min( var(--dimension-card-width-sm), calc(100vw - 2 * var(--dimension-space-200)) )}@media (max-width: 767px){[avoid-mobile-shell-bar].sc-ds-toast-h .toast-viewport.sc-ds-toast{bottom:calc( var(--dimension-space-200) + var(--dimension-stroke-width-012) + var(--dimension-space-100) + var(--dimension-size-500) + max(var(--dimension-space-100), env(safe-area-inset-bottom)) )}}.toast-positioner.sc-ds-toast{grid-area:1 / 1;align-self:end;justify-self:center;width:100%;pointer-events:auto;transform:translateY( calc(-1 * var(--toast-index) * var(--dimension-space-100)) );transition:transform var(--effect-motion-short-3), width var(--effect-motion-short-3)}.toast-viewport.sc-ds-toast:not([data-expanded]) .toast-positioner.sc-ds-toast{width:calc( 100% - 2 * var(--toast-index) * var(--dimension-space-100) )}.toast-viewport[data-expanded].sc-ds-toast .toast-positioner.sc-ds-toast{transform:translateY(calc(-1 * var(--toast-offset-y)))}.toast-positioner[data-limited].sc-ds-toast{visibility:hidden;pointer-events:none}.toast-positioner--anchored.sc-ds-toast{position:fixed;width:min( var(--dimension-card-width-sm), calc(100vw - 2 * var(--dimension-space-200)) );transform:none}.toast-positioner--anchored[data-positioned='false'].sc-ds-toast{visibility:hidden}.toast-surface.sc-ds-toast{position:relative;display:block;box-sizing:border-box;width:100%;height:var(--toast-height, auto);padding:var(--dimension-space-200);overflow:hidden;color:var(--color-foreground-primary);background-color:var(--color-background-primary);border-radius:var(--dimension-radius-050);box-shadow:var(--effect-elevation-elevated-floating);transform:translate( var(--toast-swipe-movement-x), var(--toast-swipe-movement-y) );animation:toast-enter var(--effect-motion-short-2) both}.toast-positioner--ending.sc-ds-toast .toast-surface.sc-ds-toast{animation:toast-exit var(--effect-motion-short-3) both}.toast-surface--swiping.sc-ds-toast{transition:none;user-select:none}.toast-content.sc-ds-toast{display:flex;flex-direction:column;min-width:0;padding-inline-end:var(--dimension-size-500);transition:opacity var(--effect-motion-short-3)}.toast-copy.sc-ds-toast{display:flex;flex-direction:column;min-width:0;min-height:var(--typography-lineheight-md);margin-block:calc(-1 * var(--dimension-space-025));gap:var(--dimension-space-050)}.toast-title.sc-ds-toast,.toast-description.sc-ds-toast{min-width:0}.toast-action.sc-ds-toast{align-self:start;margin-top:calc( var(--dimension-space-200) + var(--dimension-space-025) )}.toast-close.sc-ds-toast{position:absolute;top:var(--dimension-space-100);right:var(--dimension-space-100);transition:opacity var(--effect-motion-short-3)}.toast-viewport.sc-ds-toast:not([data-expanded]) .toast-positioner[data-behind].sc-ds-toast .toast-content.sc-ds-toast,.toast-viewport.sc-ds-toast:not([data-expanded]) .toast-positioner[data-behind].sc-ds-toast .toast-close.sc-ds-toast{opacity:0}@keyframes toast-enter{from{opacity:0;transform:translateY(var(--dimension-space-100))}to{opacity:1;transform:translateY(0)}}@keyframes toast-exit{from{opacity:1}to{opacity:0}}@media (prefers-reduced-motion: reduce){.toast-positioner.sc-ds-toast,.toast-surface.sc-ds-toast,.toast-content.sc-ds-toast,.toast-close.sc-ds-toast,.toast-positioner--ending.sc-ds-toast .toast-surface.sc-ds-toast{transition:none;animation:none}.toast-positioner--ending.sc-ds-toast .toast-surface.sc-ds-toast{opacity:0}}@media (forced-colors: active){.toast-surface.sc-ds-toast{box-shadow:none;outline:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);outline-offset:calc(-1 * var(--dimension-stroke-width-012))}}`;const k=40;const A=10;const C="__global-stack__";const P='button,a,input,textarea,select,[role="button"],[data-ds-toast-swipe-ignore]';const S=new WeakMap;const E=new Set;let F=null;let D=0;const z=t(class t extends s{constructor(t){super();if(t!==false){this.__registerHost()}this.dsToastClose=i(this,"dsToastClose");this.dsToastRemove=i(this,"dsToastRemove");this.dsToastAction=i(this,"dsToastAction");this.manager=T;this.limit=3;this.timeout=f.animationDelayLong2;this.label="Notifications";this.closeLabel="Close notification";this.avoidMobileShellBar=false;this.swipeDirections=["down","right"];this.records=[];this.expanded=false;this.keyboardActive=false;this.swipe=null;this.layoutVersion=0;this.instanceId=++D;this.domIds=new Map;this.timers=new Map;this.closeWatchdogs=new Map;this.closeFrames=new Map;this.closeEvents=new Set;this.activationFrames=new Map;this.pauseReasons=new Set;this.hoveredIds=new Set;this.heights=new Map;this.measuredUpdateKeys=new Map;this.anchoredPositions=new Map;this.dismissedSwipeDirections=new Map;this.observedElements=new Set;this.pendingRemovals=[];this.unsubscribe=null;this.attachedManager=null;this.previousFocus=null;this.resizeObserver=null;this.mutationObserver=null;this.layoutFrame=null;this.activeSwipe=null;this.nextDomId=0;this.connected=false;this.pendingHoverLeave=false;this.handleWindowBlur=()=>this.pauseTimers("window");this.handleWindowFocus=()=>this.resumeTimers("window");this.handleVisibilityChange=()=>{if(document.hidden)this.pauseTimers("document");else this.resumeTimers("document")};this.handleFocusIn=()=>{const t=document.activeElement;if(!(t instanceof s)||!t.matches(":focus-visible"))return;F=this;this.keyboardActive=true;this.expanded=true;this.pauseTimers("focus")};this.handleFocusOut=t=>{const s=t.relatedTarget;if(s instanceof Node&&this.el.contains(s))return;if(!this.keyboardActive)return;this.keyboardActive=false;this.expanded=this.hoveredIds.size>0;this.resumeTimers("focus")};this.handleDocumentKeyDown=t=>{if(t.key!=="F6")return;const s=Array.from(E).filter((t=>t.activeRecords.length>0));const i=F&&F.activeRecords.length?F:s[s.length-1];if(i!==this)return;t.preventDefault();if(!this.el.contains(document.activeElement)){this.previousFocus=document.activeElement}this.keyboardActive=true;this.regionElement?.focus()};this.handleRegionKeyDown=t=>{if(t.key==="Escape"){const s=t.target;const i=s.closest(".toast-positioner");const e=i?.dataset["toastId"]??this.activeRecords[0]?.id;if(e){t.preventDefault();this.manager.close(e,"escape")}return}if(t.key==="Tab"&&t.shiftKey&&t.target===this.regionElement){t.preventDefault();this.restorePreviousFocus()}};this.handleWindowResize=()=>{this.heights.clear();this.measuredUpdateKeys.clear();this.layoutVersion+=1;this.scheduleLayout()};this.scheduleLayout=()=>{if(this.layoutFrame!==null)return;this.layoutFrame=requestAnimationFrame((()=>{this.layoutFrame=null;this.measureLayout()}))}}connectedCallback(){this.connect()}componentDidLoad(){this.connect()}connect(){if(this.connected)return;this.connected=true;this.resizeObserver??(this.resizeObserver=new ResizeObserver((()=>this.scheduleLayout())));this.mutationObserver??(this.mutationObserver=new MutationObserver((()=>this.scheduleLayout())));this.mutationObserver.observe(document.body,{childList:true,subtree:true});if(!this.unsubscribe)this.attachManager(this.manager);window.addEventListener("blur",this.handleWindowBlur);window.addEventListener("focus",this.handleWindowFocus);window.addEventListener("resize",this.handleWindowResize);window.addEventListener("scroll",this.scheduleLayout,true);document.addEventListener("keydown",this.handleDocumentKeyDown);document.addEventListener("visibilitychange",this.handleVisibilityChange);E.add(this);if(!F)F=this}componentDidRender(){this.syncObservedElements();this.flushPendingRemovals();this.scheduleLayout()}disconnectedCallback(){this.connected=false;this.flushPendingRemovals();this.detachManager();this.resetManagerState();this.resizeObserver?.disconnect();this.resizeObserver=null;this.mutationObserver?.disconnect();this.mutationObserver=null;this.observedElements.clear();if(this.layoutFrame!==null)cancelAnimationFrame(this.layoutFrame);this.layoutFrame=null;window.removeEventListener("blur",this.handleWindowBlur);window.removeEventListener("focus",this.handleWindowFocus);window.removeEventListener("resize",this.handleWindowResize);window.removeEventListener("scroll",this.scheduleLayout,true);document.removeEventListener("keydown",this.handleDocumentKeyDown);document.removeEventListener("visibilitychange",this.handleVisibilityChange);E.delete(this);if(F===this){const t=Array.from(E);F=t[t.length-1]??null}}onManagerChange(t){this.detachManager();this.resetManagerState();if(this.connected)this.attachManager(t)}onTimeoutChange(){for(const t of this.timers.values()){if(t.handle)clearTimeout(t.handle)}this.timers.clear();this.syncTimers()}attachManager(t){const s=S.get(t);if(s&&s!==this){console.warn("[ds-toast] A manager can control only one connected ds-toast instance.");return}S.set(t,this);this.attachedManager=t;this.unsubscribe=t.subscribe((t=>{this.records=t;this.syncLifecycle(t);this.scheduleLayout()}))}detachManager(){this.unsubscribe?.();this.unsubscribe=null;if(this.attachedManager&&S.get(this.attachedManager)===this){S.delete(this.attachedManager)}this.attachedManager=null}resetManagerState(){this.flushPendingRemovals();if(this.el.contains(document.activeElement))this.restorePreviousFocus();this.clearAllTimers();for(const t of this.activationFrames.values())cancelAnimationFrame(t);for(const t of this.closeFrames.values())cancelAnimationFrame(t);this.activationFrames.clear();this.closeFrames.clear();this.closeEvents.clear();this.pauseReasons.clear();this.hoveredIds.clear();this.pendingHoverLeave=false;this.heights.clear();this.measuredUpdateKeys.clear();this.anchoredPositions.clear();this.dismissedSwipeDirections.clear();this.domIds.clear();this.activeSwipe=null;this.swipe=null;this.expanded=false;this.keyboardActive=false;this.records=[];this.resizeObserver?.disconnect();this.observedElements.clear()}syncObservedElements(){const t=new Set(this.el.querySelectorAll(".toast-positioner"));for(const s of this.records){if(!s.positioner)continue;const i=this.resolveAnchor(s.positioner.anchor);if(i)t.add(i)}for(const s of this.observedElements){if(!t.has(s)){this.resizeObserver?.unobserve(s);this.observedElements.delete(s)}}for(const s of t){if(this.observedElements.has(s))continue;this.resizeObserver?.observe(s);this.observedElements.add(s)}}flushPendingRemovals(){for(const t of this.pendingRemovals.splice(0)){t.manager.notifyRemove(t.context);this.dsToastRemove.emit({id:t.context.id,toast:t.context.toast})}}syncLifecycle(t){const s=new Set(t.map((t=>t.id)));for(const t of this.hoveredIds){if(t!==C&&!s.has(t))this.hoveredIds.delete(t)}const i=t.some((t=>t.transitionStatus==="ending"));if(this.pendingHoverLeave&&!i&&!this.hoveredIds.size){this.pendingHoverLeave=false;this.expanded=false;this.resumeTimers("hover")}else if(!this.hoveredIds.size&&!this.pendingHoverLeave){this.resumeTimers("hover")}for(const[t,i]of this.timers){if(s.has(t))continue;if(i.handle)clearTimeout(i.handle);this.timers.delete(t)}for(const[t,i]of this.closeWatchdogs){if(s.has(t))continue;clearTimeout(i);this.closeWatchdogs.delete(t)}for(const[t,i]of this.activationFrames){if(s.has(t))continue;cancelAnimationFrame(i);this.activationFrames.delete(t)}for(const[t,i]of this.closeFrames){if(s.has(t))continue;cancelAnimationFrame(i);this.closeFrames.delete(t)}for(const t of this.domIds.keys()){if(s.has(t))continue;this.closeEvents.delete(t);this.domIds.delete(t);this.heights.delete(t);this.measuredUpdateKeys.delete(t);this.anchoredPositions.delete(t);this.dismissedSwipeDirections.delete(t)}for(const s of t){this.ensureDomId(s.id);if(s.transitionStatus==="starting"&&!this.activationFrames.has(s.id)){const t=this.attachedManager;const i=requestAnimationFrame((()=>{this.activationFrames.delete(s.id);t?.activate(s.id)}));this.activationFrames.set(s.id,i)}if(s.transitionStatus==="ending"){this.clearToastTimer(s.id);this.beginRemoval(s)}else{const t=this.closeWatchdogs.get(s.id);if(t)clearTimeout(t);this.closeWatchdogs.delete(s.id);const i=this.closeFrames.get(s.id);if(i)cancelAnimationFrame(i);this.closeFrames.delete(s.id);this.closeEvents.delete(s.id)}}this.syncTimers()}syncTimers(){const t=new Set;for(const s of this.records){if(s.transitionStatus!=="active")continue;t.add(s.id);const i=this.resolveToastTimeout(s);if(i<=0){this.clearToastTimer(s.id);continue}const e=this.timers.get(s.id);if(!e||e.timerKey!==s.timerKey){this.clearToastTimer(s.id);this.timers.set(s.id,{timerKey:s.timerKey,remaining:i,startedAt:0,handle:null})}if(!this.isPaused)this.startToastTimer(s.id)}for(const s of this.timers.keys()){if(!t.has(s))this.clearToastTimer(s)}}resolveToastTimeout(t){const s=t.timeout??this.timeout;if(typeof s==="number")return Math.max(0,s);return u(s,f.animationDelayLong2)}startToastTimer(t){const s=this.timers.get(t);if(!s||s.handle||s.remaining<=0)return;s.startedAt=Date.now();s.handle=setTimeout((()=>{s.handle=null;s.remaining=0;this.manager.close(t,"timeout")}),s.remaining)}pauseTimers(t){const s=this.isPaused;this.pauseReasons.add(t);if(s)return;const i=Date.now();for(const t of this.timers.values()){if(!t.handle)continue;clearTimeout(t.handle);t.handle=null;t.remaining=Math.max(0,t.remaining-(i-t.startedAt))}}resumeTimers(t){this.pauseReasons.delete(t);if(this.isPaused)return;for(const t of this.timers.keys())this.startToastTimer(t)}get isPaused(){return this.pauseReasons.size>0}clearToastTimer(t){const s=this.timers.get(t);if(s?.handle)clearTimeout(s.handle);this.timers.delete(t)}clearAllTimers(){for(const t of this.timers.values()){if(t.handle)clearTimeout(t.handle)}for(const t of this.closeWatchdogs.values())clearTimeout(t);this.timers.clear();this.closeWatchdogs.clear()}beginRemoval(t){if(!this.closeEvents.has(t.id)){this.closeEvents.add(t.id);this.dsToastClose.emit({id:t.id,reason:t.closeReason??"programmatic",toast:t});this.moveFocusAfterClose(t.id)}if(this.closeWatchdogs.has(t.id)||this.closeFrames.has(t.id))return;const s=m(f.motionShort3,f.animationDurationShort3);if(s<=0){queueMicrotask((()=>this.completeRemoval(t)));return}const i=requestAnimationFrame((()=>{this.closeFrames.delete(t.id);const i=this.records.find((s=>s.id===t.id));if(!i||i.transitionStatus!=="ending")return;this.closeWatchdogs.set(t.id,setTimeout((()=>this.completeRemoval(i)),s))}));this.closeFrames.set(t.id,i)}completeRemoval(t){const s=this.records.find((s=>s.id===t.id));if(!s||s.transitionStatus!=="ending")return;const i=this.closeWatchdogs.get(t.id);if(i)clearTimeout(i);this.closeWatchdogs.delete(t.id);const e=this.closeFrames.get(t.id);if(e)cancelAnimationFrame(e);this.closeFrames.delete(t.id);const o=this.attachedManager;const n=o?.remove(t.id);if(o&&n)this.pendingRemovals.push({manager:o,context:n})}handleAnimationComplete(t){if(t.transitionStatus==="ending")this.completeRemoval(t)}bindAnimationCancel(t,s){if(!t||t.dataset["cancelBound"]==="true")return;t.dataset["cancelBound"]="true";t.addEventListener("animationcancel",(()=>{const t=this.records.find((t=>t.id===s));if(t)this.handleAnimationComplete(t)}))}handlePointerEnter(t){F=this;this.pendingHoverLeave=false;this.hoveredIds.add(t);this.expanded=true;this.pauseTimers("hover")}handlePointerLeave(t){this.hoveredIds.delete(t);if(this.hoveredIds.size)return;if(this.records.some((t=>t.transitionStatus==="ending"))){this.pendingHoverLeave=true;return}this.expanded=false;this.resumeTimers("hover")}get regionElement(){return this.el.querySelector(".toast-region")}restorePreviousFocus(){this.previousFocus?.focus?.();this.previousFocus=null;this.keyboardActive=false}moveFocusAfterClose(t){const s=document.activeElement;const i=this.positionerElement(t);if(!s||!i?.contains(s))return;requestAnimationFrame((()=>{const s=this.activeRecords.find((s=>s.id!==t));const i=s?this.positionerElement(s.id)?.querySelector("ds-button-unfilled"):null;if(i?.setFocus)void i.setFocus();else if(s)this.regionElement?.focus();else this.restorePreviousFocus()}))}handleAction(t,s){const i={id:t.id,toast:t,originalEvent:s.detail};this.dsToastAction.emit(i);t.action?.onAction?.({id:t.id,data:t.data,manager:this.manager,originalEvent:s.detail})}handlePointerDown(t,s){if(s.button!==0)return;const i=s.target;if(i.closest(P))return;const e=s.currentTarget;e.setPointerCapture(s.pointerId);this.activeSwipe={id:t.id,pointerId:s.pointerId,pointerType:s.pointerType,startX:s.clientX,startY:s.clientY,maxDistance:0,cancelled:false,axis:null};this.swipe={id:t.id,x:0,y:0};if(s.pointerType==="touch")this.pauseTimers("swipe")}handlePointerMove(t){const s=this.activeSwipe;if(!s||s.pointerId!==t.pointerId||s.cancelled)return;const i=t.clientX-s.startX;const e=t.clientY-s.startY;if(!s.axis&&Math.max(Math.abs(i),Math.abs(e))>1){s.axis=Math.abs(i)>=Math.abs(e)?"x":"y"}if(!s.axis)return;const o=s.axis==="x";const n=o?i>=0?"right":"left":e>=0?"down":"up";const a=this.swipeDirections.includes(n);const r=o?Math.abs(i):Math.abs(e);const h=a?r:Math.sqrt(r);const c=(o?i:e)<0?-h:h;const d=o?c:0;const l=o?0:c;if(s.maxDistance-h>=A){s.cancelled=true;this.cancelSwipe();return}s.maxDistance=Math.max(s.maxDistance,h);if(r>1)t.preventDefault();this.swipe={id:s.id,x:d,y:l,direction:a?n:undefined}}handlePointerUp(t){const s=this.activeSwipe;if(!s||s.pointerId!==t.pointerId)return;const i=this.swipe;const e=i?Math.max(Math.abs(i.x),Math.abs(i.y)):0;const o=!s.cancelled&&!!i?.direction&&e>=k;const n=s.id;const a=s.pointerType==="touch";this.activeSwipe=null;this.swipe=null;if(a)this.resumeTimers("swipe");if(o&&i.direction){this.dismissedSwipeDirections.set(n,i.direction);this.manager.close(n,"swipe")}}handlePointerCancel(t){if(this.activeSwipe?.pointerId!==t.pointerId)return;this.cancelSwipe()}cancelSwipe(){const t=this.activeSwipe?.pointerType==="touch";this.activeSwipe=null;this.swipe=null;if(t)this.resumeTimers("swipe")}get touchAction(){const t=this.swipeDirections.includes("left")||this.swipeDirections.includes("right");const s=this.swipeDirections.includes("up")||this.swipeDirections.includes("down");if(t&&s)return"none";if(t)return"pan-y";if(s)return"pan-x";return"auto"}measureNaturalHeight(t,s){const i=t.querySelector(".toast-surface");if(!i)return 0;const e=t.style.width;const o=t.style.transition;const n=i.style.height;if(s){t.style.transition="none";t.style.width="100%"}i.style.height="auto";const a=i.getBoundingClientRect().height;i.style.height=n;if(s){t.style.width=e;t.getBoundingClientRect();t.style.transition=o}return a}measureLayout(){let t=false;for(const s of this.records){const i=this.positionerElement(s.id);if(!i)continue;let e=this.heights.get(s.id)??0;const o=e<=0||this.measuredUpdateKeys.get(s.id)!==s.updateKey;if(o){e=this.measureNaturalHeight(i,!s.positioner);if(e>0){if(this.heights.get(s.id)!==e)t=true;this.heights.set(s.id,e);this.measuredUpdateKeys.set(s.id,s.updateKey)}}if(!s.positioner)continue;const n=this.resolveAnchor(s.positioner.anchor);if(!n||e<=0){if(this.anchoredPositions.delete(s.id))t=true;continue}const r=i.getBoundingClientRect();const h=p(s.positioner.sideOffset,f.space050);const c=p(s.positioner.alignOffset,0);const d=a({anchorRect:n.getBoundingClientRect(),popupWidth:r.width,popupHeight:e,side:s.positioner.side??"top",align:s.positioner.align??"center",sideOffsetPx:h,alignOffsetPx:c,viewportPadPx:p(undefined,f.space200),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight});const l=this.anchoredPositions.get(s.id);if(!l||l.x!==d.x||l.y!==d.y||l.side!==d.resolvedSide){this.anchoredPositions.set(s.id,{x:d.x,y:d.y,side:d.resolvedSide});t=true}}if(t)this.layoutVersion+=1}resolveAnchor(t){return typeof t==="string"?document.getElementById(t):t}positionerElement(t){return Array.from(this.el.querySelectorAll(".toast-positioner")).find((s=>s.dataset["toastId"]===t))??null}ensureDomId(t){const s=this.domIds.get(t);if(s)return s;const i=++this.nextDomId;this.domIds.set(t,i);return i}get activeRecords(){return this.records.filter((t=>t.transitionStatus!=="ending"))}globalLayout(){const t=this.records.filter((t=>!t.positioner));let s=0;let i=0;const e=p(undefined,f.space200);const o=new Map;t.forEach(((t,n)=>{if(t.transitionStatus==="ending"){o.set(t.id,{index:n,offset:s,limited:false});return}const a=i>=Math.max(1,this.limit);o.set(t.id,{index:i,offset:s,limited:a});s+=(this.heights.get(t.id)??0)+e;i+=1}));return o}renderToast(t,s){const i=this.ensureDomId(t.id);const o=`ds-toast-${this.instanceId}-${i}-title`;const n=`ds-toast-${this.instanceId}-${i}-description`;const a=this.swipe?.id===t.id?this.swipe:null;const r=a?.direction??this.dismissedSwipeDirections.get(t.id);const h=!!t.positioner;const c=this.anchoredPositions.get(t.id);const d=t.priority==="high"&&!this.keyboardActive;const l=this.keyboardActive&&!s.limited?0:-1;const f=this.heights.get(t.id);return e("div",{ref:s=>this.bindAnimationCancel(s,t.id),class:{"toast-positioner":true,"toast-positioner--anchored":h,"toast-positioner--ending":t.transitionStatus==="ending"},"data-toast-id":t.id,"data-behind":!h&&s.index>0?"":undefined,"data-limited":s.limited?"":undefined,"data-positioned":h?String(!!c):undefined,"data-side":c?.side,inert:s.limited?true:undefined,"aria-hidden":s.limited?"true":undefined,style:{"--toast-index":String(s.index),"--toast-offset-y":`${s.offset}px`,"--toast-height":f?`${f}px`:undefined,zIndex:String(this.records.length-s.index),left:c?`${c.x}px`:undefined,top:c?`${c.y}px`:undefined},onAnimationEnd:()=>this.handleAnimationComplete(t)},e("div",{class:{"toast-surface":true,"toast-surface--swiping":!!a},role:t.priority==="high"?"alertdialog":"dialog","aria-modal":"false","aria-labelledby":t.title?o:t.description?n:undefined,"aria-describedby":t.title&&t.description?n:undefined,"aria-hidden":d?"true":undefined,"data-type":t.type,"data-priority":t.priority,"data-transition-status":t.transitionStatus,"data-swiping":a?"":undefined,"data-swipe-direction":r,style:{"--toast-swipe-movement-x":`${a?.x??0}px`,"--toast-swipe-movement-y":`${a?.y??0}px`,touchAction:this.touchAction},onPointerDown:s=>this.handlePointerDown(t,s),onPointerMove:t=>this.handlePointerMove(t),onPointerUp:t=>this.handlePointerUp(t),onPointerCancel:t=>this.handlePointerCancel(t),onPointerEnter:h?()=>this.handlePointerEnter(t.id):undefined,onPointerLeave:h?()=>this.handlePointerLeave(t.id):undefined},e("div",{class:"toast-content"},e("div",{class:"toast-copy"},t.title&&e("ds-text",{class:"toast-title",as:"div",variant:"text-title-small",color:"primary",textId:o},t.title),t.description&&e("ds-text",{class:"toast-description",as:"div",variant:"text-body-medium",color:"secondary",textId:n},t.description)),t.action&&e("ds-button-unfilled",{class:"toast-action",variant:"label",size:"md",type:"button",label:t.action.label,"aria-label":t.action.ariaLabel,hasBorder:true,focusTabIndex:l,"aria-hidden":!this.keyboardActive?"true":undefined,onDsClick:s=>this.handleAction(t,s)})),e("ds-button-unfilled",{class:"toast-close",variant:"icon",size:"md",type:"button",icon:"Cross","aria-label":this.closeLabel,hasBorder:false,activeFill:false,focusTabIndex:l,"aria-hidden":!this.keyboardActive?"true":undefined,onDsClick:()=>this.manager.close(t.id,"close-button")})))}render(){const t=this.globalLayout();const s=this.records.filter((t=>!t.positioner));const i=this.records.filter((t=>!!t.positioner));const n=this.records.filter((s=>s.priority==="high"&&s.transitionStatus!=="ending"&&!t.get(s.id)?.limited));return e(o,{key:"2bc2bf38acc78461373e25b68e0613c077e43eb9"},e("section",{key:"452db280766f6958dab74297808654a8d4e8cb1a",class:"toast-region",role:"region","aria-label":this.label,"aria-live":"polite","aria-atomic":"false","aria-relevant":"additions text",tabIndex:-1,onFocusin:this.handleFocusIn,onFocusout:t=>this.handleFocusOut(t),onKeyDown:t=>this.handleRegionKeyDown(t)},e("div",{key:"710b835cfaebd951f73c61664a401b148e72bbd9",class:"toast-viewport","data-expanded":this.expanded?"":undefined,onPointerEnter:()=>this.handlePointerEnter(C),onPointerLeave:()=>this.handlePointerLeave(C)},s.map((s=>this.renderToast(s,t.get(s.id)??{index:0,offset:0,limited:false})))),e("div",{key:"1efe814f9fd8ee351a0fb6fd2963486591eda8d3",class:"toast-anchored-layer"},i.map((t=>this.renderToast(t,{index:0,offset:0,limited:false})))),e("div",{key:"6ca851d419ed54f8b879157e805d1bad25897575",class:"toast-assertive-announcer ds-visually-hidden"},n.map((t=>e("div",{role:"alert","aria-atomic":"true"},[t.title,t.description].filter(Boolean).join(". ")))))))}get el(){return this}static get watchers(){return{manager:[{onManagerChange:0}],timeout:[{onTimeoutChange:0}]}}static get style(){return M()}},[2,"ds-toast",{manager:[16],limit:[2],timeout:[8],label:[1],closeLabel:[1,"close-label"],avoidMobileShellBar:[516,"avoid-mobile-shell-bar"],swipeDirections:[16],records:[32],expanded:[32],keyboardActive:[32],swipe:[32],layoutVersion:[32]},undefined,{manager:[{onManagerChange:0}],timeout:[{onTimeoutChange:0}]}]);function R(){if(typeof customElements==="undefined"){return}const t=["ds-toast","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-text"];t.forEach((t=>{switch(t){case"ds-toast":if(!customElements.get(n(t))){customElements.define(n(t),z)}break;case"ds-badge":if(!customElements.get(n(t))){r()}break;case"ds-button-unfilled":if(!customElements.get(n(t))){h()}break;case"ds-icon":if(!customElements.get(n(t))){c()}break;case"ds-loader":if(!customElements.get(n(t))){d()}break;case"ds-text":if(!customElements.get(n(t))){l()}break}}))}R();const $=z;const j=R;export{$ as DsToast,j as defineCustomElement};
2
2
  //# sourceMappingURL=ds-toast.js.map
@@ -1,2 +1,2 @@
1
- import{p as t,H as e,h as s,a as i,t as n}from"./index.js";import{d as a}from"./p-BNiIyZCn.js";const o=()=>`.sc-ds-typing-indicator-h{display:block;width:100%;min-width:0;box-sizing:border-box}`;const r=t(class t extends e{constructor(t){super();if(t!==false){this.__registerHost()}this.label="Typing..."}render(){return s(i,{key:"48efecb72182260bef9c8005af38545a0ec4821e",role:"status","aria-live":"polite","aria-atomic":"true"},s("ds-text",{key:"b0d8f39ae7b4f61a9c41151397bb40f315294915",as:"span",variant:"text-body-medium",color:"secondary",shimmer:true},this.label))}static get style(){return o()}},[2,"ds-typing-indicator",{label:[1]}]);function c(){if(typeof customElements==="undefined"){return}const t=["ds-typing-indicator","ds-text"];t.forEach((t=>{switch(t){case"ds-typing-indicator":if(!customElements.get(n(t))){customElements.define(n(t),r)}break;case"ds-text":if(!customElements.get(n(t))){a()}break}}))}c();const d=r;const m=c;export{d as DsTypingIndicator,m as defineCustomElement};
1
+ import{p as t,H as e,h as s,a as i,t as c}from"./index.js";import{d as n}from"./p-BNiIyZCn.js";const o=()=>`.sc-ds-typing-indicator-h{display:block;width:100%;min-width:0;box-sizing:border-box}`;const r=t(class t extends e{constructor(t){super();if(t!==false){this.__registerHost()}this.label="Typing..."}render(){return s(i,{key:"69338dc7ade34b11860e75eb476efd16d298c383",role:"status","aria-live":"polite","aria-atomic":"true"},s("ds-text",{key:"42c8d0e6c591ca6379de7cd2c70d412c32c1efc7",as:"span",variant:"text-body-medium",color:"secondary",shimmer:true},this.label))}static get style(){return o()}},[2,"ds-typing-indicator",{label:[1]}]);function d(){if(typeof customElements==="undefined"){return}const t=["ds-typing-indicator","ds-text"];t.forEach((t=>{switch(t){case"ds-typing-indicator":if(!customElements.get(c(t))){customElements.define(c(t),r)}break;case"ds-text":if(!customElements.get(c(t))){n()}break}}))}d();const a=r;const m=d;export{a as DsTypingIndicator,m as defineCustomElement};
2
2
  //# sourceMappingURL=ds-typing-indicator.js.map