@oicl/openbridge-webcomponents 2.0.0-next.153 → 2.0.0-next.155

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 (33) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +438 -238
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +260 -50
  4. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.css.js +3 -7
  5. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.css.js.map +1 -1
  6. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts +133 -14
  7. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts.map +1 -1
  8. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js +330 -233
  9. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js.map +1 -1
  10. package/dist/components/table/table.d.ts.map +1 -1
  11. package/dist/components/table/table.js +10 -2
  12. package/dist/components/table/table.js.map +1 -1
  13. package/dist/components/user-button/user-button.css.js +68 -1
  14. package/dist/components/user-button/user-button.css.js.map +1 -1
  15. package/dist/components/user-button/user-button.d.ts +12 -1
  16. package/dist/components/user-button/user-button.d.ts.map +1 -1
  17. package/dist/components/user-button/user-button.js +12 -3
  18. package/dist/components/user-button/user-button.js.map +1 -1
  19. package/dist/components/user-menu/user-menu.css.js +15 -0
  20. package/dist/components/user-menu/user-menu.css.js.map +1 -1
  21. package/dist/components/user-menu/user-menu.d.ts +30 -2
  22. package/dist/components/user-menu/user-menu.d.ts.map +1 -1
  23. package/dist/components/user-menu/user-menu.js +34 -2
  24. package/dist/components/user-menu/user-menu.js.map +1 -1
  25. package/dist/generated/locales/es-419.d.ts +1 -0
  26. package/dist/generated/locales/es-419.d.ts.map +1 -1
  27. package/dist/generated/locales/es-419.js +1 -0
  28. package/dist/generated/locales/es-419.js.map +1 -1
  29. package/dist/generated/locales/fi-FI.d.ts +1 -0
  30. package/dist/generated/locales/fi-FI.d.ts.map +1 -1
  31. package/dist/generated/locales/fi-FI.js +1 -0
  32. package/dist/generated/locales/fi-FI.js.map +1 -1
  33. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"alert-list-details-experimental.js","sources":["../../../src/components/alert-list-details-experimental/alert-list-details-experimental.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './alert-list-details-experimental.css?inline';\nimport {msg} from '@lit/localize';\nimport {property, query, state} from 'lit/decorators.js';\nimport '../icon-button/icon-button.js';\nimport '../button/button.js';\nimport '../../icons/icon-silence-iec.js';\nimport '../../icons/icon-alerts.js';\nimport '../../icons/icon-alerts-shelf.js';\nimport '../../icons/icon-alerts-active.js';\nimport '../../icons/icon-alarm-rectified-iec.js';\nimport '../../icons/icon-unacknowledged.js';\nimport '../../icons/icon-alarm-noack-iec.js';\nimport '../../icons/icon-warning-noack-iec.js';\nimport '../alert-icon/alert-icon.js';\nimport {\n Alert,\n comparePriorityAlerts,\n isActive,\n isAcknowledged,\n isBlocked,\n isShelved,\n} from '../../types.js';\nimport {\n excludedFromUnackedFilter,\n requiresAcknowledgement,\n usesAlarmNoAckIcon,\n} from '../../alert-severity.js';\nimport {\n ObcTable,\n ObcTableCellClickEvent,\n ObcTableCellData,\n ObcTableCellType,\n ObcTableExpandToggleEvent,\n ObcTableRowClickEvent,\n ObcTableRow,\n ObcTableColumn,\n} from '../table/table.js';\nimport '../scrollbar/scrollbar.js';\n\nexport enum AlertListMode {\n UNACKED = 'unacked',\n ALL = 'all',\n SHELVED = 'shelved',\n BLOCKED = 'blocked',\n RECTIFIED = 'rectified',\n}\n\nexport type ObcAckClickEvent = CustomEvent<{\n alert: Alert;\n}>;\n\nexport type ObcRowClickEvent = CustomEvent<{\n alert: Alert;\n}>;\n\nexport function getAlertListModeData(selectedMode: AlertListMode) {\n if (selectedMode === AlertListMode.ALL)\n return {\n name: AlertListMode.ALL,\n title: msg('All'),\n emptyTitle: msg('No active alerts'),\n emptyIcon: html`<obi-alerts></obi-alerts>`,\n filter: (alert: Alert) => !isShelved(alert) && isActive(alert),\n };\n else if (selectedMode === AlertListMode.UNACKED)\n return {\n name: AlertListMode.UNACKED,\n title: msg('Unacked'),\n emptyTitle: msg('No unacknowledged alerts'),\n emptyIcon: html`<obi-unacknowledged></obi-unacknowledged>`,\n filter: (alert: Alert) =>\n !isAcknowledged(alert) &&\n isActive(alert) &&\n !excludedFromUnackedFilter(alert.type) &&\n !isShelved(alert),\n };\n else if (selectedMode === AlertListMode.SHELVED)\n return {\n name: AlertListMode.SHELVED,\n title: msg('Shelved'),\n emptyTitle: msg('No shelved alerts'),\n emptyIcon: html`<obi-alerts-shelf></obi-alerts-shelf>`,\n filter: (alert: Alert) => isShelved(alert),\n };\n else if (selectedMode === AlertListMode.BLOCKED)\n return {\n name: AlertListMode.BLOCKED,\n title: msg('Blocked'),\n emptyTitle: msg('No blocked alerts'),\n emptyIcon: html`<obi-alerts-active></obi-alerts-active>`,\n filter: (alert: Alert) => isBlocked(alert),\n };\n else if (selectedMode === AlertListMode.RECTIFIED)\n return {\n name: AlertListMode.RECTIFIED,\n title: msg('Rectified'),\n emptyTitle: msg('No rectified alerts'),\n emptyIcon: html`<obi-alarm-rectified-iec></obi-alarm-rectified-iec>`,\n filter: (alert: Alert) => !isActive(alert),\n };\n else throw new Error('Invalid selected mode');\n}\n\nexport function canAckFilter(filter: (alert: Alert) => boolean) {\n return (alert: Alert) =>\n !isAcknowledged(alert) &&\n !alert.noAck &&\n !excludedFromUnackedFilter(alert.type) &&\n filter(alert);\n}\n\n/**\n * @availableWhen timeFormatter showTime==true\n * @property defaultExpanded - Whether groups start expanded. Set false to open the list collapsed.\n * @fires {ObcAckClickEvent} ack-click - Fired when the user clicks the \"ACK\" button.\n * @fires {ObcRowClickEvent} row-click - Fired when the user clicks a row.\n * @experimental\n */\n@customElement('obc-alert-list-details-experimental')\nexport class ObcAlertListDetailsExperimental extends LitElement {\n @property({type: String}) selectedMode: AlertListMode = AlertListMode.ALL;\n @property({type: Array}) alerts: Alert[] = [];\n @property({type: Boolean}) showTime: boolean = false;\n @property({attribute: false}) timeFormatter: (time: Date) => string = (\n time: Date\n ) => time.toLocaleTimeString(undefined, {hour12: false});\n @property({type: Boolean}) small: boolean = false;\n @property({type: Boolean, attribute: false}) defaultExpanded: boolean = true;\n\n @query('obc-table')\n private alertList!: ObcTable;\n\n @state() private expansionOverrides = new Map<string, boolean>();\n\n private alertByRowId = new Map<string, Alert>();\n\n public getVisibleAlerts(): Alert[] {\n const seen = new Set<string>();\n return this.alertList\n .getAllVisibleRows()\n .map((rowId) => this.alertByRowId.get(rowId))\n .filter((alert): alert is Alert => alert !== undefined)\n .filter((alert) => {\n if (seen.has(alert.id)) {\n return false;\n }\n seen.add(alert.id);\n return true;\n });\n }\n\n private onRowClick(e: ObcTableRowClickEvent) {\n const row = this.alertByRowId.get(e.detail.row.id);\n if (row) {\n this.dispatchEvent(\n new CustomEvent('row-click', {detail: {alert: row}}) as ObcRowClickEvent\n );\n }\n }\n\n private onCellButtonClick(e: ObcTableCellClickEvent) {\n const row = this.alertByRowId.get(e.detail.rowId);\n if (row) {\n this.dispatchEvent(\n new CustomEvent('ack-click', {\n detail: {alert: row},\n bubbles: false,\n }) as ObcAckClickEvent\n );\n }\n }\n\n private onExpandToggle(e: ObcTableExpandToggleEvent) {\n const overrides = new Map(this.expansionOverrides);\n overrides.set(e.detail.rowId, e.detail.expanded);\n this.expansionOverrides = overrides;\n }\n\n private isExpanded(rowId: string) {\n return this.expansionOverrides.get(rowId) ?? this.defaultExpanded;\n }\n\n private get columns() {\n if (this.small) {\n const columns: ObcTableColumn<ObcTableCellData, ObcTableRow>[] = [\n {\n label: 'Status',\n key: 'status',\n sortDirection: 'desc',\n sortable: true,\n compareFunction: (_a, _b, aRow, bRow) => {\n const aAlert = this.alertByRowId.get(aRow.id);\n const bAlert = this.alertByRowId.get(bRow.id);\n if (aAlert && bAlert) {\n return comparePriorityAlerts(aAlert, bAlert);\n }\n return 0;\n },\n },\n ];\n if (this.showTime) {\n columns.push({\n label: 'Activated',\n key: 'time',\n });\n }\n columns.push({\n label: 'ACK-status',\n key: 'action',\n });\n return columns;\n } else {\n const columns: ObcTableColumn<ObcTableCellData, ObcTableRow>[] = [\n {\n label: 'Status',\n key: 'status',\n sortDirection: 'desc',\n sortable: true,\n compareFunction: (_a, _b, aRow, bRow) => {\n const aAlert = this.alertByRowId.get(aRow.id);\n const bAlert = this.alertByRowId.get(bRow.id);\n if (aAlert && bAlert) {\n return comparePriorityAlerts(aAlert, bAlert);\n }\n return 0;\n },\n },\n {\n label: 'ACK-status',\n key: 'action',\n dividerRight: true,\n },\n ];\n if (this.showTime) {\n columns.push({\n label: 'Activated',\n key: 'time',\n sortable: true,\n compareFunction: (_a, _b, aRow, bRow) => {\n const aAlert = this.alertByRowId.get(aRow.id);\n const bAlert = this.alertByRowId.get(bRow.id);\n if (aAlert && bAlert) {\n const aTime = new Date(aAlert.time);\n const bTime = new Date(bAlert.time);\n return aTime.getTime() - bTime.getTime();\n }\n return 0;\n },\n });\n }\n columns.push({\n label: 'Tag ID',\n key: 'tagId',\n sortable: true,\n compareFunction: (a, b) => {\n const aText =\n a?.type === ObcTableCellType.Regular ? String(a.text ?? '') : '';\n const bText =\n b?.type === ObcTableCellType.Regular ? String(b.text ?? '') : '';\n return aText.localeCompare(bText);\n },\n });\n return columns;\n }\n }\n\n private get metadata() {\n return getAlertListModeData(this.selectedMode);\n }\n\n private get filteredAlerts() {\n return this.alerts.filter(this.metadata.filter);\n }\n\n private buildVisibleRows(): ObcTableRow[] {\n const alerts = this.filteredAlerts;\n const alertIds = new Set(alerts.map((alert) => alert.id));\n const membersByGroupId = new Map<string, Alert[]>();\n const roots: Alert[] = [];\n for (const alert of alerts) {\n const groupIds = (alert.memberOf ?? []).filter(\n (groupId) => groupId !== alert.id && alertIds.has(groupId)\n );\n if (groupIds.length === 0) {\n roots.push(alert);\n continue;\n }\n for (const groupId of groupIds) {\n const members = membersByGroupId.get(groupId) ?? [];\n members.push(alert);\n membersByGroupId.set(groupId, members);\n }\n }\n\n const reachable = new Set<string>();\n const markReachable = (alert: Alert) => {\n if (reachable.has(alert.id)) {\n return;\n }\n reachable.add(alert.id);\n for (const member of membersByGroupId.get(alert.id) ?? []) {\n markReachable(member);\n }\n };\n roots.forEach(markReachable);\n for (const alert of alerts) {\n if (!reachable.has(alert.id)) {\n roots.push(alert);\n markReachable(alert);\n }\n }\n\n const rows: ObcTableRow[] = [];\n this.alertByRowId = new Map();\n const visit = (\n alert: Alert,\n level: number,\n parentRowId: string | undefined,\n ancestors: Set<string>\n ) => {\n const segment = encodeURIComponent(alert.id);\n const rowId =\n parentRowId === undefined ? segment : `${parentRowId}/${segment}`;\n const members = membersByGroupId.get(alert.id) ?? [];\n // A member can name a group that is also its own descendant.\n const expandableMembers = members.filter(\n (member) => !ancestors.has(member.id)\n );\n const expanded = this.isExpanded(rowId);\n\n this.alertByRowId.set(rowId, alert);\n rows.push({\n ...this.buildRowCells(alert),\n id: rowId,\n parentId: parentRowId,\n level,\n expandable: expandableMembers.length > 0,\n expanded,\n });\n\n if (!expanded) {\n return;\n }\n const nextAncestors = new Set(ancestors).add(alert.id);\n for (const member of expandableMembers) {\n visit(member, level + 1, rowId, nextAncestors);\n }\n };\n\n for (const alert of roots) {\n visit(alert, 0, undefined, new Set());\n }\n return rows;\n }\n\n private buildRowCells(\n alert: Alert\n ): Record<string, ObcTableCellData | undefined> {\n let action: ObcTableCellData = {\n type: ObcTableCellType.Regular,\n };\n if (\n !isAcknowledged(alert) &&\n isActive(alert) &&\n requiresAcknowledgement(alert.type)\n ) {\n if (alert.noAck) {\n const icon = usesAlarmNoAckIcon(alert.type)\n ? html`<obi-alarm-noack-iec usecsscolor></obi-alarm-noack-iec>`\n : html`<obi-warning-noack-iec usecsscolor></obi-warning-noack-iec>`;\n action = {\n type: ObcTableCellType.Regular,\n largeIcon: true,\n icon,\n align: 'center',\n };\n } else {\n action = {\n type: ObcTableCellType.Button,\n text: msg('ACK'),\n };\n }\n }\n\n const status: ObcTableCellData = {\n type: ObcTableCellType.Regular,\n largeIcon: true,\n text: alert.text,\n title: alert.source,\n noWrap: true,\n icon: html`<obc-alert-icon\n .type=${alert.type}\n .acknowledged=${isAcknowledged(alert)}\n .active=${isActive(alert)}\n ></obc-alert-icon>`,\n };\n\n const time: ObcTableCellData | undefined = this.showTime\n ? {\n type: ObcTableCellType.Regular,\n text: this.timeFormatter(alert.time),\n align: 'center',\n neutral: true,\n }\n : undefined;\n\n const tagId: ObcTableCellData | undefined = this.small\n ? undefined\n : {\n type: ObcTableCellType.Regular,\n text: '#' + alert.id,\n align: 'right',\n };\n return {\n status,\n time,\n action,\n tagId,\n };\n }\n\n override render() {\n const selectedList = this.metadata;\n const data = this.buildVisibleRows();\n\n return html`\n <div class=\"wrapper ${this.small ? 'small' : ''}\">\n ${data.length > 0\n ? html` <obc-table\n class=\"alert-list\"\n .data=${data}\n .columns=${this.columns}\n .striped=${true}\n .showHeader=${!this.small}\n @row-click=${this.onRowClick}\n @cell-button-click=${this.onCellButtonClick}\n @expand-toggle=${this.onExpandToggle}\n ></obc-table>\n <div class=\"spacer\"></div>`\n : html` <div class=\"empty-list\">\n <div class=\"icon\">${selectedList.emptyIcon}</div>\n <div class=\"empty-title\">${selectedList.emptyTitle}</div>\n </div>`}\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-list-details-experimental': ObcAlertListDetailsExperimental;\n }\n}\n"],"names":["AlertListMode"],"mappings":"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"}
1
+ {"version":3,"file":"alert-list-details-experimental.js","sources":["../../../src/components/alert-list-details-experimental/alert-list-details-experimental.ts"],"sourcesContent":["import {LitElement, PropertyValues, html, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './alert-list-details-experimental.css?inline';\nimport {msg} from '@lit/localize';\nimport {property, query, state} from 'lit/decorators.js';\nimport {repeat} from 'lit/directives/repeat.js';\nimport '../icon-button/icon-button.js';\nimport '../button/button.js';\nimport '../../icons/icon-silence-iec.js';\nimport '../../icons/icon-alerts.js';\nimport '../../icons/icon-alerts-shelf.js';\nimport '../../icons/icon-alerts-active.js';\nimport '../../icons/icon-alarm-rectified-iec.js';\nimport '../../icons/icon-unacknowledged.js';\nimport '../../icons/icon-alarm-noack-iec.js';\nimport '../../icons/icon-warning-noack-iec.js';\nimport '../alert-icon/alert-icon.js';\nimport {\n Alert,\n comparePriorityAlerts,\n isActive,\n isAcknowledged,\n isBlocked,\n isShelved,\n} from '../../types.js';\nimport {\n excludedFromUnackedFilter,\n requiresAcknowledgement,\n usesAlarmNoAckIcon,\n} from '../../alert-severity.js';\nimport {\n ObcTable,\n ObcTableCellClickEvent,\n ObcTableCellData,\n ObcTableCellType,\n ObcTableExpandToggleEvent,\n ObcTableRowClickEvent,\n ObcTableRow,\n ObcTableColumn,\n} from '../table/table.js';\nimport '../scrollbar/scrollbar.js';\n\nexport enum FilterModes {\n UNACKED = 'unacked',\n ALL = 'all',\n SHELVED = 'shelved',\n BLOCKED = 'blocked',\n RECTIFIED = 'rectified',\n}\n\nexport type ObcAlertListCellClickEvent = CustomEvent<{\n alert: Alert;\n columnKey: string;\n rowId: string;\n}>;\n\nexport type ObcRowClickEvent = CustomEvent<{\n alert: Alert;\n rowId: string;\n}>;\n\nexport interface AlertListColumnBase {\n /** Unique within the list; part of the cell slot name. */\n key: string;\n label: string;\n /** CSS grid track size. Defaults to `1fr` for the first column, `min-content` for the rest. */\n width?: string;\n dividerRight?: boolean;\n}\n\n/** A column whose cells the list renders from `cell(alert)`. */\nexport interface AlertListDataColumn extends AlertListColumnBase {\n cell: (alert: Alert) => ObcTableCellData | undefined;\n /** Makes the column sortable. */\n compare?: (a: Alert, b: Alert) => number;\n sortDirection?: 'asc' | 'desc';\n}\n\n/** A column whose cells the consumer supplies through `cell-<key>:<rowId>` slots. */\nexport interface AlertListSlotColumn extends AlertListColumnBase {\n slot: true;\n}\n\nexport type AlertListColumn = AlertListDataColumn | AlertListSlotColumn;\n\nexport type AlertListColumnOptions = Partial<AlertListColumnBase>;\n\n/** One cell of a slot column, for every row including rows in collapsed groups. */\nexport interface AlertListCellSlot {\n name: string;\n alert: Alert;\n rowId: string;\n columnKey: string;\n}\n\nexport type ObcAlertListCellSlotsChangeEvent = CustomEvent<AlertListCellSlot[]>;\n\nexport interface AlertListRow {\n rowId: string;\n parentRowId?: string;\n alert: Alert;\n level: number;\n expandable: boolean;\n}\n\nexport function getFilterModeData(filterMode: FilterModes) {\n if (filterMode === FilterModes.ALL)\n return {\n name: FilterModes.ALL,\n title: msg('All'),\n emptyTitle: msg('No active alerts'),\n emptyIcon: html`<obi-alerts></obi-alerts>`,\n filter: (alert: Alert) => !isShelved(alert) && isActive(alert),\n };\n else if (filterMode === FilterModes.UNACKED)\n return {\n name: FilterModes.UNACKED,\n title: msg('Unacked'),\n emptyTitle: msg('No unacknowledged alerts'),\n emptyIcon: html`<obi-unacknowledged></obi-unacknowledged>`,\n filter: (alert: Alert) =>\n !isAcknowledged(alert) &&\n isActive(alert) &&\n !excludedFromUnackedFilter(alert.type) &&\n !isShelved(alert),\n };\n else if (filterMode === FilterModes.SHELVED)\n return {\n name: FilterModes.SHELVED,\n title: msg('Shelved'),\n emptyTitle: msg('No shelved alerts'),\n emptyIcon: html`<obi-alerts-shelf></obi-alerts-shelf>`,\n filter: (alert: Alert) => isShelved(alert),\n };\n else if (filterMode === FilterModes.BLOCKED)\n return {\n name: FilterModes.BLOCKED,\n title: msg('Blocked'),\n emptyTitle: msg('No blocked alerts'),\n emptyIcon: html`<obi-alerts-active></obi-alerts-active>`,\n filter: (alert: Alert) => isBlocked(alert),\n };\n else if (filterMode === FilterModes.RECTIFIED)\n return {\n name: FilterModes.RECTIFIED,\n title: msg('Rectified'),\n emptyTitle: msg('No rectified alerts'),\n emptyIcon: html`<obi-alarm-rectified-iec></obi-alarm-rectified-iec>`,\n filter: (alert: Alert) => !isActive(alert),\n };\n else throw new Error('Invalid filter mode');\n}\n\nexport function canAckFilter(filter: (alert: Alert) => boolean) {\n return (alert: Alert) =>\n !isAcknowledged(alert) &&\n !alert.noAck &&\n !excludedFromUnackedFilter(alert.type) &&\n filter(alert);\n}\n\n/** Name of the slot that fills the cell of a slot column in one row. */\nexport function alertListCellSlotName(columnKey: string, rowId: string) {\n // Row ids are URI-encoded too, so neither part can contain the `:` separator.\n return `cell-${encodeURIComponent(columnKey)}:${rowId}`;\n}\n\n/** Alert icon, text and source; sorted by priority. */\nexport function statusColumn(\n options: AlertListColumnOptions = {}\n): AlertListDataColumn {\n return {\n key: 'status',\n label: 'Status',\n sortDirection: 'desc',\n compare: comparePriorityAlerts,\n cell: (alert) => ({\n type: ObcTableCellType.Regular,\n largeIcon: true,\n text: alert.text,\n title: alert.source,\n noWrap: true,\n icon: html`<obc-alert-icon\n .type=${alert.type}\n .acknowledged=${isAcknowledged(alert)}\n .active=${isActive(alert)}\n ></obc-alert-icon>`,\n }),\n ...options,\n };\n}\n\n/** ACK button, or the no-ack icon, for alerts that await acknowledgement. The button fires `cell-click`. */\nexport function ackColumn(\n options: AlertListColumnOptions = {}\n): AlertListDataColumn {\n return {\n key: 'ack',\n label: 'ACK-status',\n cell: (alert) => {\n if (\n isAcknowledged(alert) ||\n !isActive(alert) ||\n !requiresAcknowledgement(alert.type)\n ) {\n return {type: ObcTableCellType.Regular};\n }\n if (alert.noAck) {\n const icon = usesAlarmNoAckIcon(alert.type)\n ? html`<obi-alarm-noack-iec usecsscolor></obi-alarm-noack-iec>`\n : html`<obi-warning-noack-iec usecsscolor></obi-warning-noack-iec>`;\n return {\n type: ObcTableCellType.Regular,\n largeIcon: true,\n icon,\n align: 'center',\n };\n }\n return {type: ObcTableCellType.Button, text: msg('ACK')};\n },\n ...options,\n };\n}\n\n/** Activation time; sorted by time. */\nexport function timeColumn({\n formatter = (time: Date) =>\n time.toLocaleTimeString(undefined, {hour12: false}),\n ...options\n}: AlertListColumnOptions & {\n formatter?: (time: Date) => string;\n} = {}): AlertListDataColumn {\n return {\n key: 'time',\n label: 'Activated',\n compare: (a, b) => new Date(a.time).getTime() - new Date(b.time).getTime(),\n cell: (alert) => ({\n type: ObcTableCellType.Regular,\n text: formatter(alert.time),\n align: 'center',\n neutral: true,\n }),\n ...options,\n };\n}\n\n/** Tag ID prefixed with `#`; sorted alphabetically. */\nexport function tagIdColumn(\n options: AlertListColumnOptions = {}\n): AlertListDataColumn {\n return {\n key: 'tagId',\n label: 'Tag ID',\n compare: (a, b) => a.tagId.localeCompare(b.tagId),\n cell: (alert) => ({\n type: ObcTableCellType.Regular,\n text: '#' + alert.tagId,\n align: 'right',\n }),\n ...options,\n };\n}\n\nfunction isSlotColumn(column: AlertListColumn): column is AlertListSlotColumn {\n return 'slot' in column && column.slot === true;\n}\n\n/** Row ids join URI-encoded alert ids with `/`, so the last `/` separates the parent. */\nfunction parentRowIdOf(rowId: string): string | undefined {\n const separatorIndex = rowId.lastIndexOf('/');\n return separatorIndex === -1 ? undefined : rowId.slice(0, separatorIndex);\n}\n\n/** Keeps column keys clear of the row fields `obc-table` reserves (`id`, `level`, …). */\nconst TABLE_KEY_PREFIX = 'column-';\n\nfunction walkAlertRows(\n alerts: Alert[],\n isExpanded: (rowId: string) => boolean\n): AlertListRow[] {\n const alertIds = new Set(alerts.map((alert) => alert.id));\n const membersByGroupId = new Map<string, Alert[]>();\n const roots: Alert[] = [];\n for (const alert of alerts) {\n const groupIds = (alert.memberOf ?? []).filter(\n (groupId) => groupId !== alert.id && alertIds.has(groupId)\n );\n if (groupIds.length === 0) {\n roots.push(alert);\n continue;\n }\n for (const groupId of groupIds) {\n const members = membersByGroupId.get(groupId) ?? [];\n members.push(alert);\n membersByGroupId.set(groupId, members);\n }\n }\n\n const reachable = new Set<string>();\n const markReachable = (alert: Alert) => {\n if (reachable.has(alert.id)) {\n return;\n }\n reachable.add(alert.id);\n for (const member of membersByGroupId.get(alert.id) ?? []) {\n markReachable(member);\n }\n };\n roots.forEach(markReachable);\n for (const alert of alerts) {\n if (!reachable.has(alert.id)) {\n roots.push(alert);\n markReachable(alert);\n }\n }\n\n const rows: AlertListRow[] = [];\n const visit = (\n alert: Alert,\n level: number,\n parentRowId: string | undefined,\n ancestors: Set<string>\n ) => {\n const segment = encodeURIComponent(alert.id);\n const rowId =\n parentRowId === undefined ? segment : `${parentRowId}/${segment}`;\n const members = membersByGroupId.get(alert.id) ?? [];\n // A member can name a group that is also its own descendant.\n const expandableMembers = members.filter(\n (member) => !ancestors.has(member.id)\n );\n\n rows.push({\n rowId,\n parentRowId,\n alert,\n level,\n expandable: expandableMembers.length > 0,\n });\n\n if (!isExpanded(rowId)) {\n return;\n }\n const nextAncestors = new Set(ancestors).add(alert.id);\n for (const member of expandableMembers) {\n visit(member, level + 1, rowId, nextAncestors);\n }\n };\n\n for (const alert of roots) {\n visit(alert, 0, undefined, new Set());\n }\n return rows;\n}\n\n/**\n * Every row `obc-alert-list-details-experimental` can show for these alerts\n * and filter mode, rows inside collapsed groups included. An alert that is a member\n * of several groups gets one row, and one `rowId`, under each.\n */\nexport function getAlertRows(\n alerts: Alert[],\n filterMode: FilterModes\n): AlertListRow[] {\n const {filter} = getFilterModeData(filterMode);\n return walkAlertRows(alerts.filter(filter), () => true);\n}\n\n/**\n * `<obc-alert-list-details-experimental>` lists alerts in a table with\n * consumer-defined columns, grouping alerts through `memberOf`.\n *\n * ## Features\n * - **Columns:** `columns` sets which columns show and in what order. A data\n * column renders each cell from `cell(alert)`; a slot column renders\n * whatever the consumer places in the cell's slot.\n * - **Column factories:** `statusColumn()`, `ackColumn()`, `timeColumn()` and\n * `tagIdColumn()` build the standard data columns; each takes overrides\n * such as `label`, `width` or `dividerRight`.\n * - **Filter modes:** `filterMode` lists unacknowledged, all, shelved,\n * blocked or rectified alerts, with an empty state per filter mode.\n * - **Grouping:** an alert listing group ids in `memberOf` renders under each\n * of those groups; groups nest and can be collapsed.\n * - **Selection:** `selectedRowId` highlights one row. When a collapsed group\n * hides it, the nearest visible group row is highlighted instead.\n *\n * ## Usage Guidelines\n * - Use a slot column when the cell content must be owned by the consumer,\n * for example a button the application disables or removes later. Slotted\n * content stays in the light DOM, so it can be looked up by id.\n * - Slot names are `cell-<key>:<rowId>`. `cellSlots` lists every one, with its\n * alert, row id and column key, and `cell-slots-change` fires when the list\n * changes. The Svelte wrapper renders its `cell` snippet once per entry. An\n * alert in two groups has two rows, so it gets two entries.\n * - Without a wrapper, build the names from `getAlertRows(alerts, filterMode)`\n * and `alertListCellSlotName(key, rowId)`, or read `cellSlots`.\n * - Clicks on buttons, links and inputs in a cell do not fire `row-click`.\n * - The consumer owns the selection: set `selectedRowId` from `row-click`, and\n * set it to `undefined` on a second click to unselect. The list never changes\n * it; clear it when the row is no longer in `getAlertRows(alerts, filterMode)`.\n *\n * ## Example\n * ```html\n * <obc-alert-list-details-experimental>\n * <obc-button slot=\"cell-ack:radar\" id=\"ack-radar\">ACK</obc-button>\n * </obc-alert-list-details-experimental>\n * ```\n * with `columns` set to `[statusColumn(), {key: 'ack', label: 'ACK-status', slot: true}]`.\n *\n * @property filterMode - Which alerts to list.\n * @property alerts - Alerts to list.\n * @property columns - Columns in display order.\n * @property showHeader - Whether to show the column header row.\n * @property defaultExpanded - Whether groups start expanded. Set false to open the list collapsed.\n * @property selectedRowId - Row id to highlight, as given by `row-click` or `getAlertRows()`. Nothing is highlighted when no row has this id.\n * @slot cell-<key>:<rowId> - Content of the cell in slot column `<key>` for row `<rowId>`.\n * @fires {ObcAlertListCellClickEvent} cell-click - Fired when the user clicks a button rendered by a data column, such as the one from `ackColumn()`.\n * @fires {ObcRowClickEvent} row-click - Fired when the user clicks a row.\n * @fires {ObcAlertListCellSlotsChangeEvent} cell-slots-change - Fired when `cellSlots` changes; the detail is the new list.\n * @experimental\n */\n@customElement('obc-alert-list-details-experimental')\nexport class ObcAlertListDetailsExperimental extends LitElement {\n @property({type: String}) filterMode: FilterModes = FilterModes.ALL;\n @property({type: Array}) alerts: Alert[] = [];\n @property({type: Array, attribute: false}) columns: AlertListColumn[] = [\n statusColumn(),\n ackColumn({dividerRight: true}),\n tagIdColumn(),\n ];\n @property({type: Boolean, attribute: false}) showHeader: boolean = true;\n @property({type: Boolean, attribute: false}) defaultExpanded: boolean = true;\n @property({type: String}) selectedRowId?: string;\n\n @query('obc-table')\n private alertList!: ObcTable;\n\n @state() private expansionOverrides = new Map<string, boolean>();\n\n private alertByRowId = new Map<string, Alert>();\n private allRowIds = new Set<string>();\n\n private _cellSlots: AlertListCellSlot[] = [];\n private cellSlotsChanged = false;\n\n /** Slot of every cell in a slot column, rows in collapsed groups included. */\n get cellSlots(): AlertListCellSlot[] {\n return this._cellSlots;\n }\n\n override willUpdate(changed: PropertyValues<this>) {\n if (\n !changed.has('alerts') &&\n !changed.has('columns') &&\n !changed.has('filterMode')\n ) {\n return;\n }\n const rows = getAlertRows(this.alerts, this.filterMode);\n this.allRowIds = new Set(rows.map((row) => row.rowId));\n const slotColumns = this.columns.filter(isSlotColumn);\n const next = getAlertRows(this.alerts, this.filterMode).flatMap((row) =>\n slotColumns.map((column) => ({\n name: alertListCellSlotName(column.key, row.rowId),\n alert: row.alert,\n rowId: row.rowId,\n columnKey: column.key,\n }))\n );\n const unchanged =\n next.length === this._cellSlots.length &&\n next.every(\n (slot, index) =>\n slot.name === this._cellSlots[index].name &&\n slot.alert === this._cellSlots[index].alert\n );\n if (!unchanged) {\n this._cellSlots = next;\n this.cellSlotsChanged = true;\n }\n }\n\n override updated() {\n if (this.cellSlotsChanged) {\n this.cellSlotsChanged = false;\n this.dispatchEvent(\n new CustomEvent('cell-slots-change', {\n detail: this._cellSlots,\n }) as ObcAlertListCellSlotsChangeEvent\n );\n }\n }\n\n public getVisibleAlerts(): Alert[] {\n const seen = new Set<string>();\n return this.alertList\n .getAllVisibleRows()\n .map((rowId) => this.alertByRowId.get(rowId))\n .filter((alert): alert is Alert => alert !== undefined)\n .filter((alert) => {\n if (seen.has(alert.id)) {\n return false;\n }\n seen.add(alert.id);\n return true;\n });\n }\n\n private onRowClick(e: ObcTableRowClickEvent) {\n const rowId = e.detail.row.id;\n const alert = this.alertByRowId.get(rowId);\n if (alert) {\n this.dispatchEvent(\n new CustomEvent('row-click', {\n detail: {alert, rowId},\n }) as ObcRowClickEvent\n );\n }\n }\n\n private onCellButtonClick(e: ObcTableCellClickEvent) {\n const {rowId, columnKey} = e.detail;\n const alert = this.alertByRowId.get(rowId);\n if (alert) {\n this.dispatchEvent(\n new CustomEvent('cell-click', {\n detail: {\n alert,\n columnKey: columnKey.slice(TABLE_KEY_PREFIX.length),\n rowId,\n },\n bubbles: false,\n }) as ObcAlertListCellClickEvent\n );\n }\n }\n\n private onExpandToggle(e: ObcTableExpandToggleEvent) {\n const overrides = new Map(this.expansionOverrides);\n overrides.set(e.detail.rowId, e.detail.expanded);\n this.expansionOverrides = overrides;\n }\n\n private isExpanded(rowId: string) {\n return this.expansionOverrides.get(rowId) ?? this.defaultExpanded;\n }\n\n private compareRows(\n compare: (a: Alert, b: Alert) => number,\n aRow: ObcTableRow,\n bRow: ObcTableRow\n ) {\n const aAlert = this.alertByRowId.get(aRow.id);\n const bAlert = this.alertByRowId.get(bRow.id);\n return aAlert && bAlert ? compare(aAlert, bAlert) : 0;\n }\n\n private get tableColumns(): ObcTableColumn[] {\n return this.columns.map((column): ObcTableColumn => {\n const base = {\n label: column.label,\n key: TABLE_KEY_PREFIX + column.key,\n dividerRight: column.dividerRight,\n };\n if (isSlotColumn(column)) {\n return {\n ...base,\n renderCell: (_value, row) =>\n html`<slot\n name=${alertListCellSlotName(column.key, row.id)}\n ></slot>`,\n };\n }\n const {compare} = column;\n if (compare) {\n return {\n ...base,\n sortable: true,\n sortDirection: column.sortDirection,\n compareFunction: (_a, _b, aRow, bRow) =>\n this.compareRows(compare, aRow, bRow),\n };\n }\n return base;\n });\n }\n\n private get gridColumns() {\n const columnTracks = this.columns.map(\n (column, index) => column.width ?? (index === 0 ? '1fr' : 'min-content')\n );\n // The empty trailing track takes the table body's end padding and\n // scrollbar gutter, which obc-table's subgrids add to the last track.\n return [...columnTracks, 'min-content'].join(' ');\n }\n\n private get metadata() {\n return getFilterModeData(this.filterMode);\n }\n\n private buildVisibleRows(): ObcTableRow[] {\n const rows = walkAlertRows(\n this.alerts.filter(this.metadata.filter),\n (rowId) => this.isExpanded(rowId)\n );\n this.alertByRowId = new Map(rows.map((row) => [row.rowId, row.alert]));\n const highlightedRowId = this.highlightedRowId();\n return rows.map((row) => ({\n ...this.buildRowCells(row.alert),\n id: row.rowId,\n parentId: row.parentRowId,\n level: row.level,\n expandable: row.expandable,\n expanded: this.isExpanded(row.rowId),\n selected: row.rowId === highlightedRowId,\n }));\n }\n\n /** The selected row, or the nearest visible group row when a collapsed group hides it. */\n private highlightedRowId(): string | undefined {\n if (\n this.selectedRowId === undefined ||\n !this.allRowIds.has(this.selectedRowId)\n ) {\n return undefined;\n }\n let rowId: string | undefined = this.selectedRowId;\n while (rowId !== undefined && !this.alertByRowId.has(rowId)) {\n rowId = parentRowIdOf(rowId);\n }\n return rowId;\n }\n\n private buildRowCells(\n alert: Alert\n ): Record<string, ObcTableCellData | undefined> {\n const cells: Record<string, ObcTableCellData | undefined> = {};\n for (const column of this.columns) {\n cells[TABLE_KEY_PREFIX + column.key] = isSlotColumn(column)\n ? // obc-table skips renderCell for an undefined value.\n {type: ObcTableCellType.Regular}\n : column.cell(alert);\n }\n return cells;\n }\n\n private slotNames(rows: ObcTableRow[]) {\n const slotColumns = this.columns.filter(isSlotColumn);\n return rows.flatMap((row) =>\n slotColumns.map((column) => alertListCellSlotName(column.key, row.id))\n );\n }\n\n override render() {\n const selectedList = this.metadata;\n const data = this.buildVisibleRows();\n\n return html`\n <div class=\"wrapper\">\n ${data.length > 0\n ? html` <obc-table\n class=\"alert-list\"\n style=\"--alert-list-grid-columns: ${this.gridColumns}\"\n .data=${data}\n .columns=${this.tableColumns}\n .striped=${true}\n .showHeader=${this.showHeader}\n @row-click=${this.onRowClick}\n @cell-button-click=${this.onCellButtonClick}\n @expand-toggle=${this.onExpandToggle}\n >\n ${repeat(\n this.slotNames(data),\n (name) => name,\n // Forwards the host's slot into the one obc-table renders in the cell.\n (name) => html`<slot name=${name} slot=${name}></slot>`\n )}\n </obc-table>\n <div class=\"spacer\"></div>`\n : html` <div class=\"empty-list\">\n <div class=\"icon\">${selectedList.emptyIcon}</div>\n <div class=\"empty-title\">${selectedList.emptyTitle}</div>\n </div>`}\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-list-details-experimental': ObcAlertListDetailsExperimental;\n }\n}\n"],"names":["FilterModes"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/table/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/table/table.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,7 @@ var ObcTableCellType = /* @__PURE__ */ ((ObcTableCellType2) => {
32
32
  ObcTableCellType2["HorizontalBar"] = "horizontal-bar";
33
33
  return ObcTableCellType2;
34
34
  })(ObcTableCellType || {});
35
+ const INTERACTIVE_SELECTOR = 'button, a[href], input, select, textarea, [role="button"], [role="link"], [role="checkbox"]';
35
36
  function cssPart(value, subpart) {
36
37
  if (value.cssPart) {
37
38
  return `${value.cssPart} ${subpart}`;
@@ -138,7 +139,14 @@ let ObcTable = class extends LitElement {
138
139
  this._sortDirection = "asc";
139
140
  }
140
141
  }
141
- _handleRowClick(row) {
142
+ _handleRowClick(event, row) {
143
+ const rowElement = event.currentTarget;
144
+ for (const node of event.composedPath()) {
145
+ if (node === rowElement) break;
146
+ if (node instanceof Element && node.matches(INTERACTIVE_SELECTOR)) {
147
+ return;
148
+ }
149
+ }
142
150
  this.dispatchEvent(
143
151
  new CustomEvent("row-click", { detail: { row } })
144
152
  );
@@ -505,7 +513,7 @@ let ObcTable = class extends LitElement {
505
513
  "selected-with-next": isRowSelected && hasSelectedNextRow,
506
514
  striped: isStriped
507
515
  })}
508
- @click=${() => this._handleRowClick(row)}
516
+ @click=${(event) => this._handleRowClick(event, row)}
509
517
  @keydown=${this._handleRowKeyDown}
510
518
  data-row-id=${row.id}
511
519
  style="grid-row: ${rowIndex + 1}"
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sources":["../../../src/components/table/table.ts"],"sourcesContent":["import {\n html,\n HTMLTemplateResult,\n LitElement,\n nothing,\n PropertyValues,\n unsafeCSS,\n} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './table.css?inline';\nimport {property, state} from 'lit/decorators.js';\nimport '../table-header-item/table-header-item.js';\nimport {ObcTableHeaderItemType} from '../table-header-item/table-header-item.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport '../button/button.js';\nimport '../../icons/icon-chevron-right-google.js';\nimport {CheckboxStatus, ObcCheckboxChangeEvent} from '../checkbox/checkbox.js';\nimport {TagColor} from '../tag/tag.js';\nimport '../../building-blocks/bar-horizontal/bar-horizontal.js';\nimport {repeat} from 'lit/directives/repeat.js';\nimport {map} from 'lit/directives/map.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {\n ExternalScaleSide,\n FillMode,\n FrameStyle,\n InstrumentState,\n Priority,\n ScaleType,\n} from '../../building-blocks/bar-horizontal/bar-horizontal.js';\n\nexport enum ObcTableCellType {\n Regular = 'regular',\n Button = 'button',\n Checkbox = 'checkbox',\n Tag = 'tag',\n HorizontalBar = 'horizontal-bar',\n}\n\nexport interface ObcTableCellDataRegular {\n type: ObcTableCellType.Regular;\n cssPart?: string;\n neutral?: boolean; // If true, the text will be neutral color\n largeIcon?: boolean;\n noWrap?: boolean; // If true, the text will not wrap\n vertical?: boolean; // If true, the text will be displayed vertically\n align?: 'left' | 'center' | 'right';\n text?: string | HTMLTemplateResult;\n title?: string | HTMLTemplateResult;\n icon?: HTMLTemplateResult;\n icon2?: HTMLTemplateResult;\n icon3?: HTMLTemplateResult;\n}\n\nexport interface ObcTableCellDataButton {\n type: ObcTableCellType.Button;\n disabled?: boolean;\n cssPart?: string;\n text?: string;\n icon?: HTMLTemplateResult;\n}\n\nexport interface ObcTableCellDataCheckbox {\n type: ObcTableCellType.Checkbox;\n cssPart?: string;\n label?: string;\n text?: string;\n status?: CheckboxStatus;\n disabled?: boolean;\n ariaDescribedBy?: string;\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface ObcTableTagData {\n id: string;\n label: string;\n color?: TagColor;\n hasIcon?: boolean;\n icon?: HTMLTemplateResult;\n cssPart?: string;\n}\n\nexport interface ObcTableCellDataTag {\n type: ObcTableCellType.Tag;\n cssPart?: string;\n align?: 'left' | 'center' | 'right';\n label?: string;\n text?: string;\n color?: TagColor;\n hasIcon?: boolean;\n icon?: HTMLTemplateResult;\n tagId?: string;\n tag?: ObcTableTagData;\n tags?: ObcTableTagData[];\n wrap?: boolean;\n maxTags?: number;\n overflowLabel?: string;\n}\n\nexport interface ObcTableCellDataHorizontalBar {\n type: ObcTableCellType.HorizontalBar;\n cssPart?: string;\n align?: 'left' | 'center' | 'right';\n minValue?: number;\n maxValue?: number;\n value?: number;\n setpoint?: number;\n hasBar?: boolean;\n hasScale?: boolean;\n hideLabels?: boolean;\n priority?: Priority;\n fillMode?: FillMode;\n fillMin?: number;\n fillMax?: number;\n barThickness?: number;\n scaleType?: ScaleType;\n frameStyle?: FrameStyle;\n side?: ExternalScaleSide;\n state?: InstrumentState;\n fixedAspectRatio?: boolean;\n scaleReferenceSize?: number;\n}\n\nexport type ObcTableCellData =\n | ObcTableCellDataRegular\n | ObcTableCellDataButton\n | ObcTableCellDataCheckbox\n | ObcTableCellDataTag\n | ObcTableCellDataHorizontalBar;\n\nexport interface ObcTableRow {\n selected?: boolean;\n id: string;\n parentId?: string;\n level?: number;\n expandable?: boolean;\n expanded?: boolean;\n [key: string]: ObcTableCellData | boolean | undefined | string | number;\n}\n\nexport interface ObcTableColumnUnsortable<\n T extends ObcTableCellData,\n S extends ObcTableRow,\n> {\n label: string;\n key: string;\n headerType?: ObcTableHeaderItemType;\n renderHeaderIcon?: () => HTMLTemplateResult;\n renderCell?: (value: T, row: S, rowId: string) => HTMLTemplateResult;\n dividerRight?: boolean;\n}\n\nexport interface ObcTableColumnSortable<\n T extends ObcTableCellData,\n S extends ObcTableRow,\n> extends ObcTableColumnUnsortable<T, S> {\n sortable: true;\n sortDirection?: 'asc' | 'desc';\n compareFunction: (a: T, b: T, aRow: S, bRow: S) => number;\n}\n\nexport type ObcTableColumn<\n T extends ObcTableCellData = ObcTableCellData,\n S extends ObcTableRow = ObcTableRow,\n> = ObcTableColumnUnsortable<T, S> | ObcTableColumnSortable<T, S>;\n\nexport type ObcTableCellClickEvent = CustomEvent<{\n rowId: string;\n columnKey: string;\n}>;\n\nexport type ObcTableCellCheckboxChangeEvent = CustomEvent<{\n rowId: string;\n columnKey: string;\n status: CheckboxStatus;\n disabled: boolean;\n}>;\n\nexport type ObcTableCellTagClickEvent = CustomEvent<{\n rowId: string;\n columnKey: string;\n tagId: string;\n}>;\n\nexport type ObcTableSelectionChangeEvent = CustomEvent<{\n selectedRowIds: string[];\n selectedRows: ObcTableRow[];\n source: 'row' | 'header';\n}>;\n\nexport type ObcTableRowClickEvent = CustomEvent<{\n row: ObcTableRow;\n}>;\n\nexport type ObcTableExpandToggleEvent = CustomEvent<{\n rowId: string;\n expanded: boolean;\n}>;\n\nfunction cssPart(value: ObcTableCellData, subpart: string): string | undefined {\n if (value.cssPart) {\n return `${value.cssPart} ${subpart}`;\n }\n return undefined;\n}\n\n/**\n * `<obc-table>` renders tabular data with configurable columns and cell types.\n *\n * Overview\n * Use this component to display structured datasets with optional selection, sorting, and rich cell\n * rendering. It accepts `data` and `columns` and renders rows based on column configuration.\n *\n * Features/Variants\n * - Selectable rows with header “select all” checkbox via `selectable=true`.\n * - Cell rendering variants: `checkbox`, `tag`, `horizontal-bar`, and `button` cell types.\n * - Visual variants: `rowDivider`, `striped`, `narrowHeader`, and `showHeader`.\n * - Sorting support for sortable columns via column definitions.\n * - Hierarchical rows via `parentId`, `level`, `expandable` and `expanded`.\n *\n * Usage Guidelines\n * - Controlled selection: pass `selectedRowIds` and update it on `selection-change`.\n * - Uncontrolled selection: pass `defaultSelectedRowIds` and listen to `selection-change`.\n * - Use `selectAllAriaLabel` to customize the header checkbox accessibility label.\n * - Hierarchy is controlled, and flat: pass only the rows that are currently\n * visible, each with the `parentId` of its parent row, and drop a collapsed\n * group's descendants from `data` on `expand-toggle`. The table draws the\n * indent and the chevron, keeps each sibling set sorted within its parent,\n * and owns no expansion state of its own.\n *\n * Slots/Content\n * - This component does not expose public slots. Provide content via `data` and `columns`.\n *\n * Events\n * - `row-click` fires when a row is clicked.\n * - `cell-button-click` fires when a button cell is clicked.\n * - `cell-checkbox-change` fires when a checkbox cell changes.\n * - `cell-tag-click` fires when a tag inside a cell is clicked.\n * - `selection-change` fires when row selection changes (source: `row` or `header`).\n * - `expand-toggle` fires when a group row's chevron or expand key is used.\n *\n * Accessibility\n * A table with hierarchical rows renders as a\n * [treegrid](https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/): rows carry\n * `aria-level`, and group rows `aria-expanded`. Right expands a collapsed\n * group, Left collapses an expanded one or moves to the parent row. Cell-level\n * arrow navigation, which the full pattern also specifies, is out of scope —\n * arrow keys move between rows, matching the flat table.\n *\n * Best Practices\n * - Keep column `key` values stable across renders to avoid selection or sorting resets.\n * - Prefer `selectedRowIds` for deterministic state in apps with external stores.\n * - For dense tables, combine `narrowHeader` and `rowDivider` for visual clarity.\n *\n * Example (keywords: table, data grid, grid, tabular, datatable)\n * ```ts\n * html`<obc-table\n * .data=${rows}\n * .columns=${columns}\n * selectable\n * striped\n * @selection-change=${onSelectionChange}\n * ></obc-table>`;\n * ```\n *\n * @availableWhen narrowHeader showHeader==true\n * @availableWhen selectedRowIds selectable==true\n * @availableWhen defaultSelectedRowIds selectable==true && selectedRowIds==undefined\n * @availableWhen selectAllAriaLabel selectable==true && showHeader==true\n * @fires {ObcTableRowClickEvent} row-click - Fired when a row is clicked.\n * @fires {ObcTableCellClickEvent} cell-button-click - Fired when a cell button is clicked.\n * @fires {ObcTableCellCheckboxChangeEvent} cell-checkbox-change - Fired when a cell checkbox is changed.\n * @fires {ObcTableCellTagClickEvent} cell-tag-click - Fired when a tag inside a cell is clicked.\n * @fires {ObcTableSelectionChangeEvent} selection-change - Fired when row selection changes.\n * @fires {ObcTableExpandToggleEvent} expand-toggle - Fired when a group row is expanded or collapsed.\n * @beta\n */\n@customElement('obc-table')\nexport class ObcTable extends LitElement {\n @property({type: Array}) data: ObcTableRow[] = [];\n @property({type: Array}) columns: ObcTableColumn[] = [];\n @property({type: Boolean}) rowDivider = false;\n @property({type: Boolean}) narrowHeader = false;\n @property({type: Boolean, attribute: false}) showHeader = true;\n @property({type: Boolean}) striped = false;\n @property({type: Boolean}) selectable = false;\n @property({type: Array}) selectedRowIds?: string[];\n @property({type: Array}) defaultSelectedRowIds?: string[];\n @property({type: String}) selectAllAriaLabel = 'Select all rows';\n\n @state()\n private _sortByColumnIdx: number | undefined = undefined;\n\n @state()\n private _sortDirection: 'asc' | 'desc' = 'asc';\n\n @state()\n private _selectedRowIds: Set<string> = new Set();\n\n private _previousPositions: {top: number; index: string}[] = [];\n\n private get hasHierarchy() {\n return this.data.some(\n (row) =>\n row.parentId !== undefined ||\n (row.level ?? 0) > 0 ||\n row.expandable === true\n );\n }\n\n private sortWithinSiblings(\n rows: ObcTableRow[],\n compare: (a: ObcTableRow, b: ObcTableRow) => number\n ) {\n const ids = new Set(rows.map((row) => row.id));\n const childrenByParent = new Map<string, ObcTableRow[]>();\n const roots: ObcTableRow[] = [];\n for (const row of rows) {\n const parentId = row.parentId;\n if (parentId !== undefined && parentId !== row.id && ids.has(parentId)) {\n const siblings = childrenByParent.get(parentId) ?? [];\n siblings.push(row);\n childrenByParent.set(parentId, siblings);\n } else {\n roots.push(row);\n }\n }\n\n const sorted: ObcTableRow[] = [];\n const visited = new Set<string>();\n const visit = (siblings: ObcTableRow[]) => {\n for (const row of [...siblings].sort(compare)) {\n if (visited.has(row.id)) {\n continue;\n }\n visited.add(row.id);\n sorted.push(row);\n visit(childrenByParent.get(row.id) ?? []);\n }\n };\n visit(roots);\n visit(rows.filter((row) => !visited.has(row.id)));\n return sorted;\n }\n\n get sortedData() {\n if (this._sortByColumnIdx === undefined) {\n return this.data;\n }\n const sortByColumn = this.columns[this._sortByColumnIdx] as\n | ObcTableColumnSortable<ObcTableCellData, ObcTableRow>\n | undefined;\n if (sortByColumn === undefined) {\n console.warn('Sort by column is undefined');\n return this.data;\n }\n const sortDirection = this._sortDirection;\n const compare = (a: ObcTableRow, b: ObcTableRow) => {\n const aValue = a[sortByColumn.key];\n const bValue = b[sortByColumn.key];\n if (sortDirection === 'asc') {\n return sortByColumn.compareFunction(\n aValue as ObcTableCellData,\n bValue as ObcTableCellData,\n a,\n b\n );\n } else {\n return sortByColumn.compareFunction(\n bValue as ObcTableCellData,\n aValue as ObcTableCellData,\n b,\n a\n );\n }\n };\n if (this.hasHierarchy) {\n return this.sortWithinSiblings(this.data, compare);\n }\n const sortedData = [...this.data];\n sortedData.sort(compare);\n return sortedData;\n }\n\n private _handleSortClick(\n column: ObcTableColumnSortable<ObcTableCellData, ObcTableRow>\n ) {\n if (!column.sortable) {\n return;\n }\n const newSortColumnIdx = this.columns.indexOf(column);\n if (newSortColumnIdx === this._sortByColumnIdx) {\n this._sortDirection = this._sortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this._sortByColumnIdx = newSortColumnIdx;\n this._sortDirection = 'asc';\n }\n }\n\n private _handleRowClick(row: ObcTableRow) {\n this.dispatchEvent(\n new CustomEvent('row-click', {detail: {row}}) as ObcTableRowClickEvent\n );\n }\n\n private _handleExpandToggle(row: ObcTableRow, expanded: boolean) {\n if (!row.expandable) {\n return;\n }\n this.dispatchEvent(\n new CustomEvent('expand-toggle', {\n detail: {rowId: row.id, expanded},\n }) as ObcTableExpandToggleEvent\n );\n }\n\n private _renderRowExpander(row: ObcTableRow) {\n if (!this.hasHierarchy) {\n return nothing;\n }\n const level = row.level ?? 0;\n return html`<span\n class=\"row-expander\"\n style=\"--row-level: ${level}\"\n aria-hidden=\"true\"\n >\n ${row.expandable\n ? html`<span\n class=${classMap({chevron: true, expanded: row.expanded ?? false})}\n @click=${(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n this._handleExpandToggle(row, !(row.expanded ?? false));\n }}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </span>`\n : nothing}\n </span>`;\n }\n\n private _focusFirstRow() {\n const firstRow = this.renderRoot.querySelector<HTMLButtonElement>(\n 'button[role=\"row\"].grid-row'\n );\n firstRow?.focus();\n }\n\n private _focusLeftHeaderItem() {\n this._focusHeaderByIndex(0);\n }\n\n private _focusHeaderByIndex(index: number) {\n const headers = Array.from(\n this.renderRoot.querySelectorAll<HTMLElement>(\n '.grid-header [role=\"columnheader\"]'\n )\n );\n if (headers.length === 0) return;\n const clampedIndex = Math.max(0, Math.min(index, headers.length - 1));\n const headerItem = headers[clampedIndex];\n const innerButton = (headerItem.shadowRoot?.querySelector('button') ??\n null) as HTMLButtonElement | null;\n (innerButton ?? headerItem).focus();\n }\n\n private _handleHeaderKeyDown(event: KeyboardEvent) {\n const key = event.key;\n if (key === 'ArrowDown') {\n this._focusFirstRow();\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (key !== 'ArrowLeft' && key !== 'ArrowRight') {\n return;\n }\n\n const headers = Array.from(\n this.renderRoot.querySelectorAll<HTMLElement>(\n '.grid-header [role=\"columnheader\"]'\n )\n );\n if (headers.length === 0) return;\n\n const currentHeaderEl = event.currentTarget as HTMLElement | null;\n const currentIndex = currentHeaderEl\n ? headers.indexOf(currentHeaderEl)\n : -1;\n if (currentIndex === -1) return;\n\n const nextIndex =\n key === 'ArrowRight'\n ? Math.min(currentIndex + 1, headers.length - 1)\n : Math.max(currentIndex - 1, 0);\n\n if (nextIndex !== currentIndex) {\n this._focusHeaderByIndex(nextIndex);\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n private _handleRowKeyDown(event: KeyboardEvent) {\n const key = event.key;\n if (\n this.hasHierarchy &&\n (key === 'ArrowRight' || key === 'ArrowLeft') &&\n this._handleRowExpandKey(event, key)\n ) {\n return;\n }\n if (\n key !== 'ArrowDown' &&\n key !== 'ArrowUp' &&\n key !== 'Home' &&\n key !== 'End'\n ) {\n return;\n }\n\n const target = event.currentTarget as HTMLButtonElement | null;\n if (!target) return;\n\n const rows = Array.from(\n this.renderRoot.querySelectorAll<HTMLButtonElement>(\n 'button[role=\"row\"].grid-row'\n )\n );\n\n const currentIndex = rows.indexOf(target);\n if (currentIndex === -1) return;\n\n let nextIndex = currentIndex;\n switch (key) {\n case 'ArrowDown':\n nextIndex = Math.min(currentIndex + 1, rows.length - 1);\n break;\n case 'ArrowUp':\n if (currentIndex === 0) {\n this._focusLeftHeaderItem();\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n nextIndex = Math.max(currentIndex - 1, 0);\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = rows.length - 1;\n break;\n }\n\n if (nextIndex !== currentIndex) {\n rows[nextIndex]?.focus();\n event.preventDefault();\n event.stopPropagation();\n } else if (key === 'Home' || key === 'End') {\n // Even if already at boundary, prevent page scroll for Home/End\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n private _handleRowExpandKey(\n event: KeyboardEvent,\n key: 'ArrowRight' | 'ArrowLeft'\n ) {\n const target = event.currentTarget as HTMLButtonElement | null;\n const rowId = target?.dataset.rowId;\n const row = this.sortedData.find((candidate) => candidate.id === rowId);\n if (!row) return false;\n\n const expanded = row.expanded ?? false;\n if (key === 'ArrowRight' && row.expandable && !expanded) {\n this._handleExpandToggle(row, true);\n } else if (key === 'ArrowLeft' && row.expandable && expanded) {\n this._handleExpandToggle(row, false);\n } else if (key === 'ArrowLeft') {\n const parent = this.renderRoot.querySelector<HTMLButtonElement>(\n `button[role=\"row\"].grid-row[data-row-id=\"${CSS.escape(\n row.parentId ?? ''\n )}\"]`\n );\n if (!parent) return false;\n parent.focus();\n } else {\n return false;\n }\n\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n\n private _getAllPositions(): {\n top: number;\n height: number;\n index: string;\n element: HTMLButtonElement;\n }[] {\n const rows = Array.from(\n this.renderRoot.querySelectorAll<HTMLButtonElement>(\n 'button[role=\"row\"].grid-row'\n )\n );\n\n const firstRow = rows[0];\n if (!firstRow) {\n return [];\n }\n const firstRowRect = firstRow.getBoundingClientRect();\n const firstRowHeight = firstRowRect.height;\n const computedStyle = getComputedStyle(firstRow);\n const computedHeight = parseFloat(computedStyle.height);\n const zoomFactor = computedHeight / firstRowHeight;\n\n return rows.map((row) => {\n const rect = row.getBoundingClientRect();\n return {\n top: rect.top * zoomFactor,\n height: rect.height * zoomFactor,\n index: row.getAttribute('data-row-id') ?? '',\n element: row,\n };\n });\n }\n\n private _animateRowChanges() {\n const previousPositions = this._previousPositions;\n const currentPositions = this._getAllPositions();\n currentPositions.forEach((el) => {\n const previousPosition = previousPositions.find(\n (p) => p.index === el.index\n );\n if (!previousPosition) {\n el.element.style.transform = `translateY(-${el.height}px)`;\n el.element.style.opacity = '0';\n } else {\n el.element.style.transform = `translateY(${previousPosition.top - el.top}px)`;\n }\n el.element.style.transition = 'none';\n // Force a reflow to ensure the animation is applied\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n el.element.offsetHeight;\n el.element.style.transition =\n 'transform 100ms ease-in-out, opacity 100ms ease-in-out';\n el.element.style.transform = 'translateY(0px)';\n el.element.style.opacity = '1';\n });\n\n this._previousPositions = currentPositions;\n }\n\n private _hasRenderedRows = false;\n\n override willUpdate(changedProperties: PropertyValues) {\n if (changedProperties.has('defaultSelectedRowIds')) {\n if (\n this.selectedRowIds === undefined &&\n this._selectedRowIds.size === 0\n ) {\n this._selectedRowIds = new Set(this.defaultSelectedRowIds ?? []);\n }\n }\n\n if (changedProperties.has('selectedRowIds')) {\n if (this.selectedRowIds !== undefined) {\n this._selectedRowIds = new Set(this.selectedRowIds);\n }\n }\n\n if (changedProperties.has('data')) {\n const availableIds = new Set(this.data.map((row) => row.id));\n this._selectedRowIds.forEach((id) => {\n if (!availableIds.has(id)) {\n this._selectedRowIds.delete(id);\n }\n });\n }\n\n if (\n changedProperties.has('data') ||\n changedProperties.has('_sortByColumnIdx') ||\n changedProperties.has('_sortDirection')\n ) {\n if (this._hasRenderedRows) {\n this._updatePositions();\n } else {\n this.updateComplete.then(() => {\n this._hasRenderedRows = true;\n });\n }\n }\n }\n\n override updated(changedProperties: PropertyValues) {\n if (changedProperties.has('columns')) {\n this._sortByColumnIdx = this.columns.findIndex(\n (col) => 'sortDirection' in col && col.sortDirection !== undefined\n );\n if (this._sortByColumnIdx === -1) {\n this._sortByColumnIdx = undefined;\n this._sortDirection = 'asc';\n } else {\n this._sortDirection =\n (\n this.columns[this._sortByColumnIdx] as ObcTableColumnSortable<\n ObcTableCellData,\n ObcTableRow\n >\n )?.sortDirection ?? 'asc';\n }\n }\n\n if (\n changedProperties.has('data') ||\n changedProperties.has('_sortByColumnIdx') ||\n changedProperties.has('_sortDirection')\n ) {\n if (this._hasRenderedRows) {\n this._animateRowChanges();\n }\n }\n }\n\n private _updatePositions() {\n const positions = this._getAllPositions();\n this._previousPositions = positions;\n }\n\n override render() {\n const effectiveColumns = this.selectable\n ? ([\n {\n label: '',\n key: '__selection__',\n } as ObcTableColumn,\n ...this.columns,\n ] as ObcTableColumn[])\n : this.columns;\n const selectionColumnCount = this.selectable\n ? Math.max(0, effectiveColumns.length - 1)\n : effectiveColumns.length;\n return html`\n <div\n class=${classMap({\n 'grid-container': true,\n 'has-selection-column': this.selectable,\n })}\n part=\"grid\"\n style=\"\n --grid-columns: ${effectiveColumns.length};\n --grid-columns-rest: ${selectionColumnCount};\n --selection-column-width: var(--menu-navigation-components-table-item-touch-target-size);\n \"\n role=${this.hasHierarchy ? 'treegrid' : 'table'}\n >\n ${this.showHeader\n ? html`\n <div class=\"grid-header\" role=\"row\">\n ${effectiveColumns.map((col) => {\n const isSelectionColumn =\n this.selectable && col.key === '__selection__';\n const isNotLast =\n effectiveColumns.indexOf(col) !==\n effectiveColumns.length - 1;\n const icon = col.renderHeaderIcon\n ? html`<span slot=\"leading-icon\"\n >${col.renderHeaderIcon()}</span\n >`\n : nothing;\n\n const columnIndex = this.columns.findIndex(\n (column) => column.key === col.key\n );\n const sorted =\n 'sortable' in col &&\n col.sortable &&\n this._sortByColumnIdx === columnIndex;\n const sortDirection = sorted ? this._sortDirection : 'none';\n const headerType =\n col.headerType ??\n (this.narrowHeader\n ? ObcTableHeaderItemType.Narrow\n : ObcTableHeaderItemType.Regular);\n if ('sortable' in col && col.sortable && !isSelectionColumn) {\n return html`<obc-table-header-item\n role=\"columnheader\"\n class=${isSelectionColumn ? 'selection-header' : ''}\n .showDivider=${isNotLast}\n ?hasLeadingIcon=${icon !== nothing}\n .sortDirection=${sortDirection}\n .sortable=${true}\n type=${headerType}\n @click=${() =>\n this._handleSortClick(\n col as ObcTableColumnSortable<\n ObcTableCellData,\n ObcTableRow\n >\n )}\n @keydown=${this._handleHeaderKeyDown}\n >${icon}${col.label}</obc-table-header-item\n > `;\n } else {\n if (isSelectionColumn) {\n return html`<div\n role=\"columnheader\"\n class=${classMap({\n 'selection-header': true,\n })}\n tabindex=\"0\"\n @keydown=${this._handleHeaderKeyDown}\n >\n <obc-checkbox\n .status=${this._getSelectionStatus()}\n .disabled=${false}\n aria-label=${this.selectAllAriaLabel}\n @click=${(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n @change=${() => this._toggleAllSelection()}\n ></obc-checkbox>\n </div>`;\n }\n return html`<obc-table-header-item\n role=\"columnheader\"\n class=${isSelectionColumn ? 'selection-header' : ''}\n .showDivider=${isNotLast}\n ?hasLeadingIcon=${icon !== nothing}\n type=${headerType}\n >${icon}${col.label}</obc-table-header-item\n >`;\n }\n })}\n </div>\n <div class=\"grid-header-divider\"></div>\n `\n : nothing}\n <div\n class=\"grid-body\"\n part=\"body\"\n style=\"grid-template-rows: repeat(${this.sortedData\n .length}, min-content)\"\n >\n ${repeat(\n this.sortedData,\n (row) => row.id,\n (row, rowIndex) => {\n const hasDivider =\n this.rowDivider && this.data.length - 1 !== rowIndex;\n const isStriped = this.striped && rowIndex % 2 === 1;\n const isRowSelected =\n (row.selected ?? false) ||\n (this.selectable && this._selectedRowIds.has(row.id));\n const previousRow =\n rowIndex > 0 ? this.sortedData[rowIndex - 1] : undefined;\n const nextRow =\n rowIndex < this.sortedData.length - 1\n ? this.sortedData[rowIndex + 1]\n : undefined;\n const hasSelectedPreviousRow =\n previousRow !== undefined &&\n ((previousRow.selected ?? false) ||\n (this.selectable &&\n this._selectedRowIds.has(previousRow.id)));\n const hasSelectedNextRow =\n nextRow !== undefined &&\n ((nextRow.selected ?? false) ||\n (this.selectable && this._selectedRowIds.has(nextRow.id)));\n return html`\n <button\n role=\"row\"\n class=${classMap({\n 'grid-row': true,\n selected: isRowSelected,\n 'selected-with-prev':\n isRowSelected && hasSelectedPreviousRow,\n 'selected-with-next': isRowSelected && hasSelectedNextRow,\n striped: isStriped,\n })}\n @click=${() => this._handleRowClick(row)}\n @keydown=${this._handleRowKeyDown}\n data-row-id=${row.id}\n style=\"grid-row: ${rowIndex + 1}\"\n part=\"row\"\n aria-level=${ifDefined(\n this.hasHierarchy ? (row.level ?? 0) + 1 : undefined\n )}\n aria-expanded=${ifDefined(\n row.expandable ? (row.expanded ?? false) : undefined\n )}\n >\n ${map(effectiveColumns, (col, colIndex) => {\n const expander =\n colIndex === (this.selectable ? 1 : 0)\n ? this._renderRowExpander(row)\n : nothing;\n if (this.selectable && col.key === '__selection__') {\n const checked = this._selectedRowIds.has(row.id);\n return html`<div\n class=\"grid-cell checkbox align-center selection\"\n role=\"cell\"\n >\n <obc-checkbox\n .status=${checked\n ? CheckboxStatus.checked\n : CheckboxStatus.unchecked}\n .disabled=${false}\n aria-label=${`Select row ${row.id}`}\n @click=${(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n @change=${() => this._toggleRowSelection(row.id)}\n ></obc-checkbox>\n </div>`;\n }\n const value = row[col.key];\n if (value === undefined) {\n return html`<div class=\"grid-cell\" role=\"cell\">\n ${expander}\n </div>`;\n }\n if (col.renderCell) {\n return html`<div\n class=\"grid-cell ${col.dividerRight\n ? 'divider-right'\n : ''}\"\n role=\"cell\"\n part=${ifDefined((value as ObcTableCellData).cssPart)}\n >\n ${expander}${col.renderCell(\n value as ObcTableCellData,\n row,\n row.id\n )}\n </div>`;\n } else {\n return this._renderCell(\n value as ObcTableCellData,\n row,\n col,\n expander\n );\n }\n })}\n ${hasDivider\n ? html`<div class=\"grid-row-divider\"></div>`\n : nothing}\n </button>\n `;\n }\n )}\n ${repeat(\n effectiveColumns,\n (col) => col.key,\n (col, colIndex) =>\n col.dividerRight\n ? html`<div\n class=\"grid-column-divider\"\n style=\"grid-column: ${colIndex + 1}; grid-row: 1/${this\n .sortedData.length + 1}\"\n ></div>`\n : nothing\n )}\n </div>\n </div>\n `;\n }\n\n public getAllVisibleRows(): string[] {\n const rows = Array.from(\n this.renderRoot.querySelectorAll<HTMLButtonElement>(\n 'button[role=\"row\"].grid-row'\n )\n );\n const bodyRect = this.renderRoot\n .querySelector('.grid-body')\n ?.getBoundingClientRect();\n if (!bodyRect) {\n return [];\n }\n const scrollTop = bodyRect.top;\n const scrollHeight = bodyRect.height;\n const scrollBottom = scrollTop + scrollHeight;\n return rows\n .filter((el) => el.checkVisibility())\n .filter(\n (el) =>\n el.getBoundingClientRect().top >= scrollTop &&\n el.getBoundingClientRect().bottom <= scrollBottom\n )\n .map((row) => row.getAttribute('data-row-id'))\n .filter((id): id is string => id !== null);\n }\n\n private _handleCellButtonClick(\n event: MouseEvent,\n row: ObcTableRow,\n columnKey: string\n ) {\n event.preventDefault();\n event.stopPropagation();\n const e: ObcTableCellClickEvent = new CustomEvent('cell-button-click', {\n detail: {rowId: row.id, columnKey},\n });\n this.dispatchEvent(e);\n }\n\n private _handleCellTagClick(\n event: MouseEvent,\n row: ObcTableRow,\n columnKey: string,\n tagId: string\n ) {\n event.preventDefault();\n event.stopPropagation();\n const e: ObcTableCellTagClickEvent = new CustomEvent('cell-tag-click', {\n detail: {rowId: row.id, columnKey, tagId},\n });\n this.dispatchEvent(e);\n }\n\n private _handleCellCheckboxChange(\n event: ObcCheckboxChangeEvent,\n row: ObcTableRow,\n columnKey: string\n ) {\n event.preventDefault();\n event.stopPropagation();\n const e: ObcTableCellCheckboxChangeEvent = new CustomEvent(\n 'cell-checkbox-change',\n {\n detail: {\n rowId: row.id,\n columnKey,\n status: event.detail.status,\n disabled: event.detail.disabled,\n },\n }\n );\n this.dispatchEvent(e);\n }\n\n private _getSelectableRowIds(): string[] {\n return this.data.map((row) => row.id);\n }\n\n private _getSelectionStatus(): CheckboxStatus {\n const rowIds = this._getSelectableRowIds();\n if (rowIds.length === 0) return CheckboxStatus.unchecked;\n const selectedCount = rowIds.filter((id) =>\n this._selectedRowIds.has(id)\n ).length;\n if (selectedCount === 0) return CheckboxStatus.unchecked;\n if (selectedCount === rowIds.length) return CheckboxStatus.checked;\n return CheckboxStatus.mixed;\n }\n\n private _emitSelectionChange(\n selectedRowIds: string[],\n source: 'row' | 'header'\n ) {\n const selectedRows = this.data.filter((row) =>\n selectedRowIds.includes(row.id)\n );\n const e: ObcTableSelectionChangeEvent = new CustomEvent(\n 'selection-change',\n {\n detail: {selectedRowIds, selectedRows, source},\n }\n );\n this.dispatchEvent(e);\n }\n\n private _applySelectionChange(\n nextSelection: Set<string>,\n source: 'row' | 'header'\n ) {\n const selectedRowIds = Array.from(nextSelection);\n this._emitSelectionChange(selectedRowIds, source);\n if (this.selectedRowIds === undefined) {\n this._selectedRowIds = nextSelection;\n this.requestUpdate();\n }\n }\n\n private _toggleRowSelection(rowId: string) {\n const nextSelection = new Set(this._selectedRowIds);\n if (nextSelection.has(rowId)) {\n nextSelection.delete(rowId);\n } else {\n nextSelection.add(rowId);\n }\n this._applySelectionChange(nextSelection, 'row');\n }\n\n private _toggleAllSelection() {\n const rowIds = this._getSelectableRowIds();\n const status = this._getSelectionStatus();\n const nextSelection =\n status === CheckboxStatus.checked ? new Set<string>() : new Set(rowIds);\n this._applySelectionChange(nextSelection, 'header');\n }\n\n private _renderCell(\n value: ObcTableCellData,\n row: ObcTableRow,\n column: ObcTableColumn<ObcTableCellData, ObcTableRow>,\n expander: HTMLTemplateResult | typeof nothing = nothing\n ) {\n if (value.type === ObcTableCellType.Regular) {\n return html`<div\n class=${classMap({\n 'grid-cell': true,\n regular: true,\n neutral: value.neutral ?? false,\n 'large-icon': value.largeIcon ?? false,\n 'no-wrap': value.noWrap ?? false,\n [`align-${value.align ?? 'left'}`]: true,\n 'divider-right': column.dividerRight ?? false,\n vertical: value.vertical ?? false,\n })}\n role=\"cell\"\n part=${ifDefined(cssPart(value, 'cell'))}\n >\n ${expander}${value.icon3\n ? html`<span class=\"icon\" part=${ifDefined(cssPart(value, 'icon3'))}\n >${value.icon3}</span\n >`\n : nothing}\n ${value.icon2\n ? html`<span class=\"icon\" part=${ifDefined(cssPart(value, 'icon2'))}\n >${value.icon2}</span\n >`\n : nothing}\n ${value.icon\n ? html`<span class=\"icon\" part=${ifDefined(cssPart(value, 'icon'))}\n >${value.icon}</span\n >`\n : nothing}\n ${value.title\n ? html`<span class=\"title\" part=${ifDefined(cssPart(value, 'title'))}\n >${value.title}</span\n >`\n : nothing}\n ${value.text\n ? html`<span part=${ifDefined(cssPart(value, 'text'))}\n >${value.text}</span\n >`\n : nothing}\n </div>`;\n } else if (value.type === ObcTableCellType.Button) {\n return html`<div\n class=\"grid-cell button ${column.dividerRight ? 'divider-right' : ''}\"\n role=\"cell\"\n >\n ${expander}\n <obc-button\n variant=\"normal\"\n fullWidth\n .disabled=${value.disabled ?? false}\n ?showLeadingIcon=${value.icon !== undefined}\n part=${ifDefined(cssPart(value, 'button'))}\n @click=${(event: MouseEvent) =>\n this._handleCellButtonClick(event, row, column.key)}\n >\n ${value.icon\n ? html`<span\n slot=\"leading-icon\"\n part=${ifDefined(cssPart(value, 'icon'))}\n >${value.icon}</span\n >`\n : nothing}\n ${value.text\n ? html`<span part=${ifDefined(cssPart(value, 'text'))}\n >${value.text}</span\n >`\n : nothing}\n </obc-button>\n </div>`;\n } else if (value.type === ObcTableCellType.Checkbox) {\n const checkboxLabel = value.label ?? value.text ?? '';\n const ariaLabel =\n checkboxLabel.trim() || column.label?.trim() || 'Checkbox';\n return html`<div\n class=${classMap({\n 'grid-cell': true,\n checkbox: true,\n [`align-${value.align ?? 'center'}`]: true,\n 'divider-right': column.dividerRight ?? false,\n })}\n role=\"cell\"\n part=${ifDefined(cssPart(value, 'cell'))}\n >\n ${expander}\n <obc-checkbox\n .status=${value.status ?? CheckboxStatus.unchecked}\n .disabled=${value.disabled ?? false}\n aria-describedby=${ifDefined(value.ariaDescribedBy)}\n aria-label=${ariaLabel}\n part=${ifDefined(cssPart(value, 'checkbox'))}\n @click=${(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n @change=${(event: ObcCheckboxChangeEvent) =>\n this._handleCellCheckboxChange(event, row, column.key)}\n ></obc-checkbox>\n </div>`;\n } else if (value.type === ObcTableCellType.Tag) {\n const tags: ObcTableTagData[] = value.tags ??\n (value.tag ? [value.tag] : undefined) ?? [\n {\n id: value.tagId ?? 'tag',\n label: value.label ?? value.text ?? 'Label',\n color: value.color,\n hasIcon: value.hasIcon,\n icon: value.icon,\n },\n ];\n const wrap = value.wrap ?? value.tags !== undefined;\n const defaultMaxTags = value.tags ? 2 : undefined;\n const maxTags =\n (value.maxTags ?? defaultMaxTags) !== undefined\n ? Math.max(0, Math.floor(value.maxTags ?? defaultMaxTags ?? 0))\n : undefined;\n const visibleTags = maxTags !== undefined ? tags.slice(0, maxTags) : tags;\n const overflowCount =\n maxTags !== undefined ? Math.max(0, tags.length - maxTags) : 0;\n const overflowLabel =\n value.overflowLabel ?? `+${overflowCount.toString()}`;\n return html`<div\n class=${classMap({\n 'grid-cell': true,\n tags: tags.length > 1,\n wrap,\n [`align-${value.align ?? 'left'}`]: true,\n 'divider-right': column.dividerRight ?? false,\n })}\n role=\"cell\"\n part=${ifDefined(cssPart(value, 'cell'))}\n >\n ${expander}${visibleTags.map((tag) => {\n const hasIcon = tag.hasIcon ?? tag.icon !== undefined;\n return html`<obc-tag\n .label=${tag.label}\n color=${tag.color ?? TagColor.gray}\n ?hasIcon=${hasIcon}\n part=${ifDefined(\n [cssPart(value, 'tag'), tag.cssPart].filter(Boolean).join(' ') ||\n undefined\n )}\n @click=${(event: MouseEvent) =>\n this._handleCellTagClick(event, row, column.key, tag.id)}\n >\n ${hasIcon && tag.icon ? tag.icon : nothing}\n </obc-tag>`;\n })}\n ${overflowCount > 0\n ? html`<span\n class=\"tag-overflow\"\n part=${ifDefined(cssPart(value, 'tag-overflow'))}\n >${overflowLabel}</span\n >`\n : nothing}\n </div>`;\n } else if (value.type === ObcTableCellType.HorizontalBar) {\n const hasBar = value.hasBar ?? true;\n const hasScale = value.hasScale ?? false;\n const showLabels = !(value.hideLabels ?? true);\n const fixedAspectRatio = value.fixedAspectRatio ?? true;\n return html`<div\n class=${classMap({\n 'grid-cell': true,\n 'horizontal-bar': true,\n [`align-${value.align ?? 'left'}`]: true,\n 'divider-right': column.dividerRight ?? false,\n })}\n role=\"cell\"\n part=${ifDefined(cssPart(value, 'cell'))}\n >\n ${expander}\n <obc-bar-horizontal\n .minValue=${value.minValue ?? 0}\n .maxValue=${value.maxValue ?? 100}\n .value=${value.value}\n .setpoint=${value.setpoint}\n .hasBar=${hasBar}\n .hasScale=${hasScale}\n .showLabels=${showLabels}\n .priority=${value.priority ?? Priority.regular}\n .fillMode=${value.fillMode ?? FillMode.fill}\n .fillMin=${value.fillMin}\n .fillMax=${value.fillMax}\n .barThickness=${value.barThickness ?? 24}\n .scaleType=${value.scaleType ?? ScaleType.regular}\n .frameStyle=${value.frameStyle ?? FrameStyle.regular}\n .side=${value.side ?? ExternalScaleSide.bottom}\n .state=${value.state ?? InstrumentState.active}\n .fixedAspectRatio=${fixedAspectRatio}\n .scaleReferenceSize=${value.scaleReferenceSize ?? 384}\n part=${ifDefined(cssPart(value, 'bar'))}\n ></obc-bar-horizontal>\n </div>`;\n } else {\n return nothing;\n }\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-table': ObcTable;\n }\n}\n"],"names":["ObcTableCellType"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sources":["../../../src/components/table/table.ts"],"sourcesContent":["import {\n html,\n HTMLTemplateResult,\n LitElement,\n nothing,\n PropertyValues,\n unsafeCSS,\n} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './table.css?inline';\nimport {property, state} from 'lit/decorators.js';\nimport '../table-header-item/table-header-item.js';\nimport {ObcTableHeaderItemType} from '../table-header-item/table-header-item.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport '../button/button.js';\nimport '../../icons/icon-chevron-right-google.js';\nimport {CheckboxStatus, ObcCheckboxChangeEvent} from '../checkbox/checkbox.js';\nimport {TagColor} from '../tag/tag.js';\nimport '../../building-blocks/bar-horizontal/bar-horizontal.js';\nimport {repeat} from 'lit/directives/repeat.js';\nimport {map} from 'lit/directives/map.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {\n ExternalScaleSide,\n FillMode,\n FrameStyle,\n InstrumentState,\n Priority,\n ScaleType,\n} from '../../building-blocks/bar-horizontal/bar-horizontal.js';\n\nexport enum ObcTableCellType {\n Regular = 'regular',\n Button = 'button',\n Checkbox = 'checkbox',\n Tag = 'tag',\n HorizontalBar = 'horizontal-bar',\n}\n\nexport interface ObcTableCellDataRegular {\n type: ObcTableCellType.Regular;\n cssPart?: string;\n neutral?: boolean; // If true, the text will be neutral color\n largeIcon?: boolean;\n noWrap?: boolean; // If true, the text will not wrap\n vertical?: boolean; // If true, the text will be displayed vertically\n align?: 'left' | 'center' | 'right';\n text?: string | HTMLTemplateResult;\n title?: string | HTMLTemplateResult;\n icon?: HTMLTemplateResult;\n icon2?: HTMLTemplateResult;\n icon3?: HTMLTemplateResult;\n}\n\nexport interface ObcTableCellDataButton {\n type: ObcTableCellType.Button;\n disabled?: boolean;\n cssPart?: string;\n text?: string;\n icon?: HTMLTemplateResult;\n}\n\nexport interface ObcTableCellDataCheckbox {\n type: ObcTableCellType.Checkbox;\n cssPart?: string;\n label?: string;\n text?: string;\n status?: CheckboxStatus;\n disabled?: boolean;\n ariaDescribedBy?: string;\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface ObcTableTagData {\n id: string;\n label: string;\n color?: TagColor;\n hasIcon?: boolean;\n icon?: HTMLTemplateResult;\n cssPart?: string;\n}\n\nexport interface ObcTableCellDataTag {\n type: ObcTableCellType.Tag;\n cssPart?: string;\n align?: 'left' | 'center' | 'right';\n label?: string;\n text?: string;\n color?: TagColor;\n hasIcon?: boolean;\n icon?: HTMLTemplateResult;\n tagId?: string;\n tag?: ObcTableTagData;\n tags?: ObcTableTagData[];\n wrap?: boolean;\n maxTags?: number;\n overflowLabel?: string;\n}\n\nexport interface ObcTableCellDataHorizontalBar {\n type: ObcTableCellType.HorizontalBar;\n cssPart?: string;\n align?: 'left' | 'center' | 'right';\n minValue?: number;\n maxValue?: number;\n value?: number;\n setpoint?: number;\n hasBar?: boolean;\n hasScale?: boolean;\n hideLabels?: boolean;\n priority?: Priority;\n fillMode?: FillMode;\n fillMin?: number;\n fillMax?: number;\n barThickness?: number;\n scaleType?: ScaleType;\n frameStyle?: FrameStyle;\n side?: ExternalScaleSide;\n state?: InstrumentState;\n fixedAspectRatio?: boolean;\n scaleReferenceSize?: number;\n}\n\nexport type ObcTableCellData =\n | ObcTableCellDataRegular\n | ObcTableCellDataButton\n | ObcTableCellDataCheckbox\n | ObcTableCellDataTag\n | ObcTableCellDataHorizontalBar;\n\nexport interface ObcTableRow {\n selected?: boolean;\n id: string;\n parentId?: string;\n level?: number;\n expandable?: boolean;\n expanded?: boolean;\n [key: string]: ObcTableCellData | boolean | undefined | string | number;\n}\n\nexport interface ObcTableColumnUnsortable<\n T extends ObcTableCellData,\n S extends ObcTableRow,\n> {\n label: string;\n key: string;\n headerType?: ObcTableHeaderItemType;\n renderHeaderIcon?: () => HTMLTemplateResult;\n renderCell?: (value: T, row: S, rowId: string) => HTMLTemplateResult;\n dividerRight?: boolean;\n}\n\nexport interface ObcTableColumnSortable<\n T extends ObcTableCellData,\n S extends ObcTableRow,\n> extends ObcTableColumnUnsortable<T, S> {\n sortable: true;\n sortDirection?: 'asc' | 'desc';\n compareFunction: (a: T, b: T, aRow: S, bRow: S) => number;\n}\n\nexport type ObcTableColumn<\n T extends ObcTableCellData = ObcTableCellData,\n S extends ObcTableRow = ObcTableRow,\n> = ObcTableColumnUnsortable<T, S> | ObcTableColumnSortable<T, S>;\n\nexport type ObcTableCellClickEvent = CustomEvent<{\n rowId: string;\n columnKey: string;\n}>;\n\nexport type ObcTableCellCheckboxChangeEvent = CustomEvent<{\n rowId: string;\n columnKey: string;\n status: CheckboxStatus;\n disabled: boolean;\n}>;\n\nexport type ObcTableCellTagClickEvent = CustomEvent<{\n rowId: string;\n columnKey: string;\n tagId: string;\n}>;\n\nexport type ObcTableSelectionChangeEvent = CustomEvent<{\n selectedRowIds: string[];\n selectedRows: ObcTableRow[];\n source: 'row' | 'header';\n}>;\n\nexport type ObcTableRowClickEvent = CustomEvent<{\n row: ObcTableRow;\n}>;\n\nexport type ObcTableExpandToggleEvent = CustomEvent<{\n rowId: string;\n expanded: boolean;\n}>;\n\nconst INTERACTIVE_SELECTOR =\n 'button, a[href], input, select, textarea, [role=\"button\"], [role=\"link\"], [role=\"checkbox\"]';\n\nfunction cssPart(value: ObcTableCellData, subpart: string): string | undefined {\n if (value.cssPart) {\n return `${value.cssPart} ${subpart}`;\n }\n return undefined;\n}\n\n/**\n * `<obc-table>` renders tabular data with configurable columns and cell types.\n *\n * Overview\n * Use this component to display structured datasets with optional selection, sorting, and rich cell\n * rendering. It accepts `data` and `columns` and renders rows based on column configuration.\n *\n * Features/Variants\n * - Selectable rows with header “select all” checkbox via `selectable=true`.\n * - Cell rendering variants: `checkbox`, `tag`, `horizontal-bar`, and `button` cell types.\n * - Visual variants: `rowDivider`, `striped`, `narrowHeader`, and `showHeader`.\n * - Sorting support for sortable columns via column definitions.\n * - Hierarchical rows via `parentId`, `level`, `expandable` and `expanded`.\n *\n * Usage Guidelines\n * - Controlled selection: pass `selectedRowIds` and update it on `selection-change`.\n * - Uncontrolled selection: pass `defaultSelectedRowIds` and listen to `selection-change`.\n * - Use `selectAllAriaLabel` to customize the header checkbox accessibility label.\n * - Hierarchy is controlled, and flat: pass only the rows that are currently\n * visible, each with the `parentId` of its parent row, and drop a collapsed\n * group's descendants from `data` on `expand-toggle`. The table draws the\n * indent and the chevron, keeps each sibling set sorted within its parent,\n * and owns no expansion state of its own.\n *\n * Slots/Content\n * - This component does not expose public slots. Provide content via `data` and `columns`.\n *\n * Events\n * - `row-click` fires when a row is clicked.\n * - `cell-button-click` fires when a button cell is clicked.\n * - `cell-checkbox-change` fires when a checkbox cell changes.\n * - `cell-tag-click` fires when a tag inside a cell is clicked.\n * - `selection-change` fires when row selection changes (source: `row` or `header`).\n * - `expand-toggle` fires when a group row's chevron or expand key is used.\n *\n * Accessibility\n * A table with hierarchical rows renders as a\n * [treegrid](https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/): rows carry\n * `aria-level`, and group rows `aria-expanded`. Right expands a collapsed\n * group, Left collapses an expanded one or moves to the parent row. Cell-level\n * arrow navigation, which the full pattern also specifies, is out of scope —\n * arrow keys move between rows, matching the flat table.\n *\n * Best Practices\n * - Keep column `key` values stable across renders to avoid selection or sorting resets.\n * - Prefer `selectedRowIds` for deterministic state in apps with external stores.\n * - For dense tables, combine `narrowHeader` and `rowDivider` for visual clarity.\n *\n * Example (keywords: table, data grid, grid, tabular, datatable)\n * ```ts\n * html`<obc-table\n * .data=${rows}\n * .columns=${columns}\n * selectable\n * striped\n * @selection-change=${onSelectionChange}\n * ></obc-table>`;\n * ```\n *\n * @availableWhen narrowHeader showHeader==true\n * @availableWhen selectedRowIds selectable==true\n * @availableWhen defaultSelectedRowIds selectable==true && selectedRowIds==undefined\n * @availableWhen selectAllAriaLabel selectable==true && showHeader==true\n * @fires {ObcTableRowClickEvent} row-click - Fired when a row is clicked.\n * @fires {ObcTableCellClickEvent} cell-button-click - Fired when a cell button is clicked.\n * @fires {ObcTableCellCheckboxChangeEvent} cell-checkbox-change - Fired when a cell checkbox is changed.\n * @fires {ObcTableCellTagClickEvent} cell-tag-click - Fired when a tag inside a cell is clicked.\n * @fires {ObcTableSelectionChangeEvent} selection-change - Fired when row selection changes.\n * @fires {ObcTableExpandToggleEvent} expand-toggle - Fired when a group row is expanded or collapsed.\n * @beta\n */\n@customElement('obc-table')\nexport class ObcTable extends LitElement {\n @property({type: Array}) data: ObcTableRow[] = [];\n @property({type: Array}) columns: ObcTableColumn[] = [];\n @property({type: Boolean}) rowDivider = false;\n @property({type: Boolean}) narrowHeader = false;\n @property({type: Boolean, attribute: false}) showHeader = true;\n @property({type: Boolean}) striped = false;\n @property({type: Boolean}) selectable = false;\n @property({type: Array}) selectedRowIds?: string[];\n @property({type: Array}) defaultSelectedRowIds?: string[];\n @property({type: String}) selectAllAriaLabel = 'Select all rows';\n\n @state()\n private _sortByColumnIdx: number | undefined = undefined;\n\n @state()\n private _sortDirection: 'asc' | 'desc' = 'asc';\n\n @state()\n private _selectedRowIds: Set<string> = new Set();\n\n private _previousPositions: {top: number; index: string}[] = [];\n\n private get hasHierarchy() {\n return this.data.some(\n (row) =>\n row.parentId !== undefined ||\n (row.level ?? 0) > 0 ||\n row.expandable === true\n );\n }\n\n private sortWithinSiblings(\n rows: ObcTableRow[],\n compare: (a: ObcTableRow, b: ObcTableRow) => number\n ) {\n const ids = new Set(rows.map((row) => row.id));\n const childrenByParent = new Map<string, ObcTableRow[]>();\n const roots: ObcTableRow[] = [];\n for (const row of rows) {\n const parentId = row.parentId;\n if (parentId !== undefined && parentId !== row.id && ids.has(parentId)) {\n const siblings = childrenByParent.get(parentId) ?? [];\n siblings.push(row);\n childrenByParent.set(parentId, siblings);\n } else {\n roots.push(row);\n }\n }\n\n const sorted: ObcTableRow[] = [];\n const visited = new Set<string>();\n const visit = (siblings: ObcTableRow[]) => {\n for (const row of [...siblings].sort(compare)) {\n if (visited.has(row.id)) {\n continue;\n }\n visited.add(row.id);\n sorted.push(row);\n visit(childrenByParent.get(row.id) ?? []);\n }\n };\n visit(roots);\n visit(rows.filter((row) => !visited.has(row.id)));\n return sorted;\n }\n\n get sortedData() {\n if (this._sortByColumnIdx === undefined) {\n return this.data;\n }\n const sortByColumn = this.columns[this._sortByColumnIdx] as\n | ObcTableColumnSortable<ObcTableCellData, ObcTableRow>\n | undefined;\n if (sortByColumn === undefined) {\n console.warn('Sort by column is undefined');\n return this.data;\n }\n const sortDirection = this._sortDirection;\n const compare = (a: ObcTableRow, b: ObcTableRow) => {\n const aValue = a[sortByColumn.key];\n const bValue = b[sortByColumn.key];\n if (sortDirection === 'asc') {\n return sortByColumn.compareFunction(\n aValue as ObcTableCellData,\n bValue as ObcTableCellData,\n a,\n b\n );\n } else {\n return sortByColumn.compareFunction(\n bValue as ObcTableCellData,\n aValue as ObcTableCellData,\n b,\n a\n );\n }\n };\n if (this.hasHierarchy) {\n return this.sortWithinSiblings(this.data, compare);\n }\n const sortedData = [...this.data];\n sortedData.sort(compare);\n return sortedData;\n }\n\n private _handleSortClick(\n column: ObcTableColumnSortable<ObcTableCellData, ObcTableRow>\n ) {\n if (!column.sortable) {\n return;\n }\n const newSortColumnIdx = this.columns.indexOf(column);\n if (newSortColumnIdx === this._sortByColumnIdx) {\n this._sortDirection = this._sortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this._sortByColumnIdx = newSortColumnIdx;\n this._sortDirection = 'asc';\n }\n }\n\n private _handleRowClick(event: MouseEvent, row: ObcTableRow) {\n const rowElement = event.currentTarget;\n for (const node of event.composedPath()) {\n if (node === rowElement) break;\n // Stopping propagation in the cell instead would break listeners\n // delegated to the document, such as Svelte's.\n if (node instanceof Element && node.matches(INTERACTIVE_SELECTOR)) {\n return;\n }\n }\n this.dispatchEvent(\n new CustomEvent('row-click', {detail: {row}}) as ObcTableRowClickEvent\n );\n }\n\n private _handleExpandToggle(row: ObcTableRow, expanded: boolean) {\n if (!row.expandable) {\n return;\n }\n this.dispatchEvent(\n new CustomEvent('expand-toggle', {\n detail: {rowId: row.id, expanded},\n }) as ObcTableExpandToggleEvent\n );\n }\n\n private _renderRowExpander(row: ObcTableRow) {\n if (!this.hasHierarchy) {\n return nothing;\n }\n const level = row.level ?? 0;\n return html`<span\n class=\"row-expander\"\n style=\"--row-level: ${level}\"\n aria-hidden=\"true\"\n >\n ${row.expandable\n ? html`<span\n class=${classMap({chevron: true, expanded: row.expanded ?? false})}\n @click=${(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n this._handleExpandToggle(row, !(row.expanded ?? false));\n }}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </span>`\n : nothing}\n </span>`;\n }\n\n private _focusFirstRow() {\n const firstRow = this.renderRoot.querySelector<HTMLButtonElement>(\n 'button[role=\"row\"].grid-row'\n );\n firstRow?.focus();\n }\n\n private _focusLeftHeaderItem() {\n this._focusHeaderByIndex(0);\n }\n\n private _focusHeaderByIndex(index: number) {\n const headers = Array.from(\n this.renderRoot.querySelectorAll<HTMLElement>(\n '.grid-header [role=\"columnheader\"]'\n )\n );\n if (headers.length === 0) return;\n const clampedIndex = Math.max(0, Math.min(index, headers.length - 1));\n const headerItem = headers[clampedIndex];\n const innerButton = (headerItem.shadowRoot?.querySelector('button') ??\n null) as HTMLButtonElement | null;\n (innerButton ?? headerItem).focus();\n }\n\n private _handleHeaderKeyDown(event: KeyboardEvent) {\n const key = event.key;\n if (key === 'ArrowDown') {\n this._focusFirstRow();\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (key !== 'ArrowLeft' && key !== 'ArrowRight') {\n return;\n }\n\n const headers = Array.from(\n this.renderRoot.querySelectorAll<HTMLElement>(\n '.grid-header [role=\"columnheader\"]'\n )\n );\n if (headers.length === 0) return;\n\n const currentHeaderEl = event.currentTarget as HTMLElement | null;\n const currentIndex = currentHeaderEl\n ? headers.indexOf(currentHeaderEl)\n : -1;\n if (currentIndex === -1) return;\n\n const nextIndex =\n key === 'ArrowRight'\n ? Math.min(currentIndex + 1, headers.length - 1)\n : Math.max(currentIndex - 1, 0);\n\n if (nextIndex !== currentIndex) {\n this._focusHeaderByIndex(nextIndex);\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n private _handleRowKeyDown(event: KeyboardEvent) {\n const key = event.key;\n if (\n this.hasHierarchy &&\n (key === 'ArrowRight' || key === 'ArrowLeft') &&\n this._handleRowExpandKey(event, key)\n ) {\n return;\n }\n if (\n key !== 'ArrowDown' &&\n key !== 'ArrowUp' &&\n key !== 'Home' &&\n key !== 'End'\n ) {\n return;\n }\n\n const target = event.currentTarget as HTMLButtonElement | null;\n if (!target) return;\n\n const rows = Array.from(\n this.renderRoot.querySelectorAll<HTMLButtonElement>(\n 'button[role=\"row\"].grid-row'\n )\n );\n\n const currentIndex = rows.indexOf(target);\n if (currentIndex === -1) return;\n\n let nextIndex = currentIndex;\n switch (key) {\n case 'ArrowDown':\n nextIndex = Math.min(currentIndex + 1, rows.length - 1);\n break;\n case 'ArrowUp':\n if (currentIndex === 0) {\n this._focusLeftHeaderItem();\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n nextIndex = Math.max(currentIndex - 1, 0);\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = rows.length - 1;\n break;\n }\n\n if (nextIndex !== currentIndex) {\n rows[nextIndex]?.focus();\n event.preventDefault();\n event.stopPropagation();\n } else if (key === 'Home' || key === 'End') {\n // Even if already at boundary, prevent page scroll for Home/End\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n private _handleRowExpandKey(\n event: KeyboardEvent,\n key: 'ArrowRight' | 'ArrowLeft'\n ) {\n const target = event.currentTarget as HTMLButtonElement | null;\n const rowId = target?.dataset.rowId;\n const row = this.sortedData.find((candidate) => candidate.id === rowId);\n if (!row) return false;\n\n const expanded = row.expanded ?? false;\n if (key === 'ArrowRight' && row.expandable && !expanded) {\n this._handleExpandToggle(row, true);\n } else if (key === 'ArrowLeft' && row.expandable && expanded) {\n this._handleExpandToggle(row, false);\n } else if (key === 'ArrowLeft') {\n const parent = this.renderRoot.querySelector<HTMLButtonElement>(\n `button[role=\"row\"].grid-row[data-row-id=\"${CSS.escape(\n row.parentId ?? ''\n )}\"]`\n );\n if (!parent) return false;\n parent.focus();\n } else {\n return false;\n }\n\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n\n private _getAllPositions(): {\n top: number;\n height: number;\n index: string;\n element: HTMLButtonElement;\n }[] {\n const rows = Array.from(\n this.renderRoot.querySelectorAll<HTMLButtonElement>(\n 'button[role=\"row\"].grid-row'\n )\n );\n\n const firstRow = rows[0];\n if (!firstRow) {\n return [];\n }\n const firstRowRect = firstRow.getBoundingClientRect();\n const firstRowHeight = firstRowRect.height;\n const computedStyle = getComputedStyle(firstRow);\n const computedHeight = parseFloat(computedStyle.height);\n const zoomFactor = computedHeight / firstRowHeight;\n\n return rows.map((row) => {\n const rect = row.getBoundingClientRect();\n return {\n top: rect.top * zoomFactor,\n height: rect.height * zoomFactor,\n index: row.getAttribute('data-row-id') ?? '',\n element: row,\n };\n });\n }\n\n private _animateRowChanges() {\n const previousPositions = this._previousPositions;\n const currentPositions = this._getAllPositions();\n currentPositions.forEach((el) => {\n const previousPosition = previousPositions.find(\n (p) => p.index === el.index\n );\n if (!previousPosition) {\n el.element.style.transform = `translateY(-${el.height}px)`;\n el.element.style.opacity = '0';\n } else {\n el.element.style.transform = `translateY(${previousPosition.top - el.top}px)`;\n }\n el.element.style.transition = 'none';\n // Force a reflow to ensure the animation is applied\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n el.element.offsetHeight;\n el.element.style.transition =\n 'transform 100ms ease-in-out, opacity 100ms ease-in-out';\n el.element.style.transform = 'translateY(0px)';\n el.element.style.opacity = '1';\n });\n\n this._previousPositions = currentPositions;\n }\n\n private _hasRenderedRows = false;\n\n override willUpdate(changedProperties: PropertyValues) {\n if (changedProperties.has('defaultSelectedRowIds')) {\n if (\n this.selectedRowIds === undefined &&\n this._selectedRowIds.size === 0\n ) {\n this._selectedRowIds = new Set(this.defaultSelectedRowIds ?? []);\n }\n }\n\n if (changedProperties.has('selectedRowIds')) {\n if (this.selectedRowIds !== undefined) {\n this._selectedRowIds = new Set(this.selectedRowIds);\n }\n }\n\n if (changedProperties.has('data')) {\n const availableIds = new Set(this.data.map((row) => row.id));\n this._selectedRowIds.forEach((id) => {\n if (!availableIds.has(id)) {\n this._selectedRowIds.delete(id);\n }\n });\n }\n\n if (\n changedProperties.has('data') ||\n changedProperties.has('_sortByColumnIdx') ||\n changedProperties.has('_sortDirection')\n ) {\n if (this._hasRenderedRows) {\n this._updatePositions();\n } else {\n this.updateComplete.then(() => {\n this._hasRenderedRows = true;\n });\n }\n }\n }\n\n override updated(changedProperties: PropertyValues) {\n if (changedProperties.has('columns')) {\n this._sortByColumnIdx = this.columns.findIndex(\n (col) => 'sortDirection' in col && col.sortDirection !== undefined\n );\n if (this._sortByColumnIdx === -1) {\n this._sortByColumnIdx = undefined;\n this._sortDirection = 'asc';\n } else {\n this._sortDirection =\n (\n this.columns[this._sortByColumnIdx] as ObcTableColumnSortable<\n ObcTableCellData,\n ObcTableRow\n >\n )?.sortDirection ?? 'asc';\n }\n }\n\n if (\n changedProperties.has('data') ||\n changedProperties.has('_sortByColumnIdx') ||\n changedProperties.has('_sortDirection')\n ) {\n if (this._hasRenderedRows) {\n this._animateRowChanges();\n }\n }\n }\n\n private _updatePositions() {\n const positions = this._getAllPositions();\n this._previousPositions = positions;\n }\n\n override render() {\n const effectiveColumns = this.selectable\n ? ([\n {\n label: '',\n key: '__selection__',\n } as ObcTableColumn,\n ...this.columns,\n ] as ObcTableColumn[])\n : this.columns;\n const selectionColumnCount = this.selectable\n ? Math.max(0, effectiveColumns.length - 1)\n : effectiveColumns.length;\n return html`\n <div\n class=${classMap({\n 'grid-container': true,\n 'has-selection-column': this.selectable,\n })}\n part=\"grid\"\n style=\"\n --grid-columns: ${effectiveColumns.length};\n --grid-columns-rest: ${selectionColumnCount};\n --selection-column-width: var(--menu-navigation-components-table-item-touch-target-size);\n \"\n role=${this.hasHierarchy ? 'treegrid' : 'table'}\n >\n ${this.showHeader\n ? html`\n <div class=\"grid-header\" role=\"row\">\n ${effectiveColumns.map((col) => {\n const isSelectionColumn =\n this.selectable && col.key === '__selection__';\n const isNotLast =\n effectiveColumns.indexOf(col) !==\n effectiveColumns.length - 1;\n const icon = col.renderHeaderIcon\n ? html`<span slot=\"leading-icon\"\n >${col.renderHeaderIcon()}</span\n >`\n : nothing;\n\n const columnIndex = this.columns.findIndex(\n (column) => column.key === col.key\n );\n const sorted =\n 'sortable' in col &&\n col.sortable &&\n this._sortByColumnIdx === columnIndex;\n const sortDirection = sorted ? this._sortDirection : 'none';\n const headerType =\n col.headerType ??\n (this.narrowHeader\n ? ObcTableHeaderItemType.Narrow\n : ObcTableHeaderItemType.Regular);\n if ('sortable' in col && col.sortable && !isSelectionColumn) {\n return html`<obc-table-header-item\n role=\"columnheader\"\n class=${isSelectionColumn ? 'selection-header' : ''}\n .showDivider=${isNotLast}\n ?hasLeadingIcon=${icon !== nothing}\n .sortDirection=${sortDirection}\n .sortable=${true}\n type=${headerType}\n @click=${() =>\n this._handleSortClick(\n col as ObcTableColumnSortable<\n ObcTableCellData,\n ObcTableRow\n >\n )}\n @keydown=${this._handleHeaderKeyDown}\n >${icon}${col.label}</obc-table-header-item\n > `;\n } else {\n if (isSelectionColumn) {\n return html`<div\n role=\"columnheader\"\n class=${classMap({\n 'selection-header': true,\n })}\n tabindex=\"0\"\n @keydown=${this._handleHeaderKeyDown}\n >\n <obc-checkbox\n .status=${this._getSelectionStatus()}\n .disabled=${false}\n aria-label=${this.selectAllAriaLabel}\n @click=${(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n @change=${() => this._toggleAllSelection()}\n ></obc-checkbox>\n </div>`;\n }\n return html`<obc-table-header-item\n role=\"columnheader\"\n class=${isSelectionColumn ? 'selection-header' : ''}\n .showDivider=${isNotLast}\n ?hasLeadingIcon=${icon !== nothing}\n type=${headerType}\n >${icon}${col.label}</obc-table-header-item\n >`;\n }\n })}\n </div>\n <div class=\"grid-header-divider\"></div>\n `\n : nothing}\n <div\n class=\"grid-body\"\n part=\"body\"\n style=\"grid-template-rows: repeat(${this.sortedData\n .length}, min-content)\"\n >\n ${repeat(\n this.sortedData,\n (row) => row.id,\n (row, rowIndex) => {\n const hasDivider =\n this.rowDivider && this.data.length - 1 !== rowIndex;\n const isStriped = this.striped && rowIndex % 2 === 1;\n const isRowSelected =\n (row.selected ?? false) ||\n (this.selectable && this._selectedRowIds.has(row.id));\n const previousRow =\n rowIndex > 0 ? this.sortedData[rowIndex - 1] : undefined;\n const nextRow =\n rowIndex < this.sortedData.length - 1\n ? this.sortedData[rowIndex + 1]\n : undefined;\n const hasSelectedPreviousRow =\n previousRow !== undefined &&\n ((previousRow.selected ?? false) ||\n (this.selectable &&\n this._selectedRowIds.has(previousRow.id)));\n const hasSelectedNextRow =\n nextRow !== undefined &&\n ((nextRow.selected ?? false) ||\n (this.selectable && this._selectedRowIds.has(nextRow.id)));\n return html`\n <button\n role=\"row\"\n class=${classMap({\n 'grid-row': true,\n selected: isRowSelected,\n 'selected-with-prev':\n isRowSelected && hasSelectedPreviousRow,\n 'selected-with-next': isRowSelected && hasSelectedNextRow,\n striped: isStriped,\n })}\n @click=${(event: MouseEvent) =>\n this._handleRowClick(event, row)}\n @keydown=${this._handleRowKeyDown}\n data-row-id=${row.id}\n style=\"grid-row: ${rowIndex + 1}\"\n part=\"row\"\n aria-level=${ifDefined(\n this.hasHierarchy ? (row.level ?? 0) + 1 : undefined\n )}\n aria-expanded=${ifDefined(\n row.expandable ? (row.expanded ?? false) : undefined\n )}\n >\n ${map(effectiveColumns, (col, colIndex) => {\n const expander =\n colIndex === (this.selectable ? 1 : 0)\n ? this._renderRowExpander(row)\n : nothing;\n if (this.selectable && col.key === '__selection__') {\n const checked = this._selectedRowIds.has(row.id);\n return html`<div\n class=\"grid-cell checkbox align-center selection\"\n role=\"cell\"\n >\n <obc-checkbox\n .status=${checked\n ? CheckboxStatus.checked\n : CheckboxStatus.unchecked}\n .disabled=${false}\n aria-label=${`Select row ${row.id}`}\n @click=${(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n @change=${() => this._toggleRowSelection(row.id)}\n ></obc-checkbox>\n </div>`;\n }\n const value = row[col.key];\n if (value === undefined) {\n return html`<div class=\"grid-cell\" role=\"cell\">\n ${expander}\n </div>`;\n }\n if (col.renderCell) {\n return html`<div\n class=\"grid-cell ${col.dividerRight\n ? 'divider-right'\n : ''}\"\n role=\"cell\"\n part=${ifDefined((value as ObcTableCellData).cssPart)}\n >\n ${expander}${col.renderCell(\n value as ObcTableCellData,\n row,\n row.id\n )}\n </div>`;\n } else {\n return this._renderCell(\n value as ObcTableCellData,\n row,\n col,\n expander\n );\n }\n })}\n ${hasDivider\n ? html`<div class=\"grid-row-divider\"></div>`\n : nothing}\n </button>\n `;\n }\n )}\n ${repeat(\n effectiveColumns,\n (col) => col.key,\n (col, colIndex) =>\n col.dividerRight\n ? html`<div\n class=\"grid-column-divider\"\n style=\"grid-column: ${colIndex + 1}; grid-row: 1/${this\n .sortedData.length + 1}\"\n ></div>`\n : nothing\n )}\n </div>\n </div>\n `;\n }\n\n public getAllVisibleRows(): string[] {\n const rows = Array.from(\n this.renderRoot.querySelectorAll<HTMLButtonElement>(\n 'button[role=\"row\"].grid-row'\n )\n );\n const bodyRect = this.renderRoot\n .querySelector('.grid-body')\n ?.getBoundingClientRect();\n if (!bodyRect) {\n return [];\n }\n const scrollTop = bodyRect.top;\n const scrollHeight = bodyRect.height;\n const scrollBottom = scrollTop + scrollHeight;\n return rows\n .filter((el) => el.checkVisibility())\n .filter(\n (el) =>\n el.getBoundingClientRect().top >= scrollTop &&\n el.getBoundingClientRect().bottom <= scrollBottom\n )\n .map((row) => row.getAttribute('data-row-id'))\n .filter((id): id is string => id !== null);\n }\n\n private _handleCellButtonClick(\n event: MouseEvent,\n row: ObcTableRow,\n columnKey: string\n ) {\n event.preventDefault();\n event.stopPropagation();\n const e: ObcTableCellClickEvent = new CustomEvent('cell-button-click', {\n detail: {rowId: row.id, columnKey},\n });\n this.dispatchEvent(e);\n }\n\n private _handleCellTagClick(\n event: MouseEvent,\n row: ObcTableRow,\n columnKey: string,\n tagId: string\n ) {\n event.preventDefault();\n event.stopPropagation();\n const e: ObcTableCellTagClickEvent = new CustomEvent('cell-tag-click', {\n detail: {rowId: row.id, columnKey, tagId},\n });\n this.dispatchEvent(e);\n }\n\n private _handleCellCheckboxChange(\n event: ObcCheckboxChangeEvent,\n row: ObcTableRow,\n columnKey: string\n ) {\n event.preventDefault();\n event.stopPropagation();\n const e: ObcTableCellCheckboxChangeEvent = new CustomEvent(\n 'cell-checkbox-change',\n {\n detail: {\n rowId: row.id,\n columnKey,\n status: event.detail.status,\n disabled: event.detail.disabled,\n },\n }\n );\n this.dispatchEvent(e);\n }\n\n private _getSelectableRowIds(): string[] {\n return this.data.map((row) => row.id);\n }\n\n private _getSelectionStatus(): CheckboxStatus {\n const rowIds = this._getSelectableRowIds();\n if (rowIds.length === 0) return CheckboxStatus.unchecked;\n const selectedCount = rowIds.filter((id) =>\n this._selectedRowIds.has(id)\n ).length;\n if (selectedCount === 0) return CheckboxStatus.unchecked;\n if (selectedCount === rowIds.length) return CheckboxStatus.checked;\n return CheckboxStatus.mixed;\n }\n\n private _emitSelectionChange(\n selectedRowIds: string[],\n source: 'row' | 'header'\n ) {\n const selectedRows = this.data.filter((row) =>\n selectedRowIds.includes(row.id)\n );\n const e: ObcTableSelectionChangeEvent = new CustomEvent(\n 'selection-change',\n {\n detail: {selectedRowIds, selectedRows, source},\n }\n );\n this.dispatchEvent(e);\n }\n\n private _applySelectionChange(\n nextSelection: Set<string>,\n source: 'row' | 'header'\n ) {\n const selectedRowIds = Array.from(nextSelection);\n this._emitSelectionChange(selectedRowIds, source);\n if (this.selectedRowIds === undefined) {\n this._selectedRowIds = nextSelection;\n this.requestUpdate();\n }\n }\n\n private _toggleRowSelection(rowId: string) {\n const nextSelection = new Set(this._selectedRowIds);\n if (nextSelection.has(rowId)) {\n nextSelection.delete(rowId);\n } else {\n nextSelection.add(rowId);\n }\n this._applySelectionChange(nextSelection, 'row');\n }\n\n private _toggleAllSelection() {\n const rowIds = this._getSelectableRowIds();\n const status = this._getSelectionStatus();\n const nextSelection =\n status === CheckboxStatus.checked ? new Set<string>() : new Set(rowIds);\n this._applySelectionChange(nextSelection, 'header');\n }\n\n private _renderCell(\n value: ObcTableCellData,\n row: ObcTableRow,\n column: ObcTableColumn<ObcTableCellData, ObcTableRow>,\n expander: HTMLTemplateResult | typeof nothing = nothing\n ) {\n if (value.type === ObcTableCellType.Regular) {\n return html`<div\n class=${classMap({\n 'grid-cell': true,\n regular: true,\n neutral: value.neutral ?? false,\n 'large-icon': value.largeIcon ?? false,\n 'no-wrap': value.noWrap ?? false,\n [`align-${value.align ?? 'left'}`]: true,\n 'divider-right': column.dividerRight ?? false,\n vertical: value.vertical ?? false,\n })}\n role=\"cell\"\n part=${ifDefined(cssPart(value, 'cell'))}\n >\n ${expander}${value.icon3\n ? html`<span class=\"icon\" part=${ifDefined(cssPart(value, 'icon3'))}\n >${value.icon3}</span\n >`\n : nothing}\n ${value.icon2\n ? html`<span class=\"icon\" part=${ifDefined(cssPart(value, 'icon2'))}\n >${value.icon2}</span\n >`\n : nothing}\n ${value.icon\n ? html`<span class=\"icon\" part=${ifDefined(cssPart(value, 'icon'))}\n >${value.icon}</span\n >`\n : nothing}\n ${value.title\n ? html`<span class=\"title\" part=${ifDefined(cssPart(value, 'title'))}\n >${value.title}</span\n >`\n : nothing}\n ${value.text\n ? html`<span part=${ifDefined(cssPart(value, 'text'))}\n >${value.text}</span\n >`\n : nothing}\n </div>`;\n } else if (value.type === ObcTableCellType.Button) {\n return html`<div\n class=\"grid-cell button ${column.dividerRight ? 'divider-right' : ''}\"\n role=\"cell\"\n >\n ${expander}\n <obc-button\n variant=\"normal\"\n fullWidth\n .disabled=${value.disabled ?? false}\n ?showLeadingIcon=${value.icon !== undefined}\n part=${ifDefined(cssPart(value, 'button'))}\n @click=${(event: MouseEvent) =>\n this._handleCellButtonClick(event, row, column.key)}\n >\n ${value.icon\n ? html`<span\n slot=\"leading-icon\"\n part=${ifDefined(cssPart(value, 'icon'))}\n >${value.icon}</span\n >`\n : nothing}\n ${value.text\n ? html`<span part=${ifDefined(cssPart(value, 'text'))}\n >${value.text}</span\n >`\n : nothing}\n </obc-button>\n </div>`;\n } else if (value.type === ObcTableCellType.Checkbox) {\n const checkboxLabel = value.label ?? value.text ?? '';\n const ariaLabel =\n checkboxLabel.trim() || column.label?.trim() || 'Checkbox';\n return html`<div\n class=${classMap({\n 'grid-cell': true,\n checkbox: true,\n [`align-${value.align ?? 'center'}`]: true,\n 'divider-right': column.dividerRight ?? false,\n })}\n role=\"cell\"\n part=${ifDefined(cssPart(value, 'cell'))}\n >\n ${expander}\n <obc-checkbox\n .status=${value.status ?? CheckboxStatus.unchecked}\n .disabled=${value.disabled ?? false}\n aria-describedby=${ifDefined(value.ariaDescribedBy)}\n aria-label=${ariaLabel}\n part=${ifDefined(cssPart(value, 'checkbox'))}\n @click=${(event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n @change=${(event: ObcCheckboxChangeEvent) =>\n this._handleCellCheckboxChange(event, row, column.key)}\n ></obc-checkbox>\n </div>`;\n } else if (value.type === ObcTableCellType.Tag) {\n const tags: ObcTableTagData[] = value.tags ??\n (value.tag ? [value.tag] : undefined) ?? [\n {\n id: value.tagId ?? 'tag',\n label: value.label ?? value.text ?? 'Label',\n color: value.color,\n hasIcon: value.hasIcon,\n icon: value.icon,\n },\n ];\n const wrap = value.wrap ?? value.tags !== undefined;\n const defaultMaxTags = value.tags ? 2 : undefined;\n const maxTags =\n (value.maxTags ?? defaultMaxTags) !== undefined\n ? Math.max(0, Math.floor(value.maxTags ?? defaultMaxTags ?? 0))\n : undefined;\n const visibleTags = maxTags !== undefined ? tags.slice(0, maxTags) : tags;\n const overflowCount =\n maxTags !== undefined ? Math.max(0, tags.length - maxTags) : 0;\n const overflowLabel =\n value.overflowLabel ?? `+${overflowCount.toString()}`;\n return html`<div\n class=${classMap({\n 'grid-cell': true,\n tags: tags.length > 1,\n wrap,\n [`align-${value.align ?? 'left'}`]: true,\n 'divider-right': column.dividerRight ?? false,\n })}\n role=\"cell\"\n part=${ifDefined(cssPart(value, 'cell'))}\n >\n ${expander}${visibleTags.map((tag) => {\n const hasIcon = tag.hasIcon ?? tag.icon !== undefined;\n return html`<obc-tag\n .label=${tag.label}\n color=${tag.color ?? TagColor.gray}\n ?hasIcon=${hasIcon}\n part=${ifDefined(\n [cssPart(value, 'tag'), tag.cssPart].filter(Boolean).join(' ') ||\n undefined\n )}\n @click=${(event: MouseEvent) =>\n this._handleCellTagClick(event, row, column.key, tag.id)}\n >\n ${hasIcon && tag.icon ? tag.icon : nothing}\n </obc-tag>`;\n })}\n ${overflowCount > 0\n ? html`<span\n class=\"tag-overflow\"\n part=${ifDefined(cssPart(value, 'tag-overflow'))}\n >${overflowLabel}</span\n >`\n : nothing}\n </div>`;\n } else if (value.type === ObcTableCellType.HorizontalBar) {\n const hasBar = value.hasBar ?? true;\n const hasScale = value.hasScale ?? false;\n const showLabels = !(value.hideLabels ?? true);\n const fixedAspectRatio = value.fixedAspectRatio ?? true;\n return html`<div\n class=${classMap({\n 'grid-cell': true,\n 'horizontal-bar': true,\n [`align-${value.align ?? 'left'}`]: true,\n 'divider-right': column.dividerRight ?? false,\n })}\n role=\"cell\"\n part=${ifDefined(cssPart(value, 'cell'))}\n >\n ${expander}\n <obc-bar-horizontal\n .minValue=${value.minValue ?? 0}\n .maxValue=${value.maxValue ?? 100}\n .value=${value.value}\n .setpoint=${value.setpoint}\n .hasBar=${hasBar}\n .hasScale=${hasScale}\n .showLabels=${showLabels}\n .priority=${value.priority ?? Priority.regular}\n .fillMode=${value.fillMode ?? FillMode.fill}\n .fillMin=${value.fillMin}\n .fillMax=${value.fillMax}\n .barThickness=${value.barThickness ?? 24}\n .scaleType=${value.scaleType ?? ScaleType.regular}\n .frameStyle=${value.frameStyle ?? FrameStyle.regular}\n .side=${value.side ?? ExternalScaleSide.bottom}\n .state=${value.state ?? InstrumentState.active}\n .fixedAspectRatio=${fixedAspectRatio}\n .scaleReferenceSize=${value.scaleReferenceSize ?? 384}\n part=${ifDefined(cssPart(value, 'bar'))}\n ></obc-bar-horizontal>\n </div>`;\n } else {\n return nothing;\n }\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-table': ObcTable;\n }\n}\n"],"names":["ObcTableCellType"],"mappings":"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"}
@@ -58,6 +58,39 @@ const compentStyle = css`* {
58
58
  "ss04" on;
59
59
  }
60
60
 
61
+ .wrapper.size-large .user-label {
62
+ font-family: var(--global-typography-font-family);
63
+ font-weight: var(--global-typography-ui-body-font-weight);
64
+ font-size: var(--global-typography-ui-body-font-size);
65
+ line-height: var(--global-typography-ui-body-line-height);
66
+ font-feature-settings:
67
+ "liga" off,
68
+ "clig" off,
69
+ "ss04" on;
70
+ }
71
+
72
+ .wrapper.size-large .user-sublabel {
73
+ font-family: var(--global-typography-font-family);
74
+ font-weight: var(--global-typography-ui-body-font-weight);
75
+ font-size: var(--global-typography-ui-body-font-size);
76
+ line-height: var(--global-typography-ui-body-line-height);
77
+ font-feature-settings:
78
+ "liga" off,
79
+ "clig" off,
80
+ "ss04" on;
81
+ }
82
+
83
+ .wrapper.size-large.has-sublabel .user-label {
84
+ font-family: var(--global-typography-font-family);
85
+ font-weight: var(--global-typography-ui-body-active-font-weight);
86
+ font-size: var(--global-typography-ui-body-active-font-size);
87
+ line-height: var(--global-typography-ui-body-active-line-height);
88
+ font-feature-settings:
89
+ "liga" off,
90
+ "clig" off,
91
+ "ss04" on;
92
+ }
93
+
61
94
  .wrapper.size-large.style-selected .user-initials {
62
95
  font-family: var(--global-typography-font-family);
63
96
  font-weight: var(--font-weight-bold);
@@ -70,6 +103,17 @@ const compentStyle = css`* {
70
103
  "ss04" on;
71
104
  }
72
105
 
106
+ .wrapper.size-large.style-selected .user-label {
107
+ font-family: var(--global-typography-font-family);
108
+ font-weight: var(--global-typography-ui-body-active-font-weight);
109
+ font-size: var(--global-typography-ui-body-active-font-size);
110
+ line-height: var(--global-typography-ui-body-active-line-height);
111
+ font-feature-settings:
112
+ "liga" off,
113
+ "clig" off,
114
+ "ss04" on;
115
+ }
116
+
73
117
  .wrapper.size-large.state-static {
74
118
  width: var(--ui-components-user-button-visual-size-enhanced);
75
119
  height: var(--ui-components-user-button-visual-size-enhanced);
@@ -91,7 +135,30 @@ const compentStyle = css`* {
91
135
  color: var(--element-active-color);
92
136
  }
93
137
 
94
- .wrapper:disabled .user-label {
138
+ .wrapper .user-sublabel {
139
+ font-family: var(--global-typography-font-family);
140
+ font-weight: var(--global-typography-ui-label-font-weight);
141
+ font-size: var(--global-typography-ui-label-font-size);
142
+ line-height: var(--global-typography-ui-label-line-height);
143
+ font-feature-settings:
144
+ "liga" off,
145
+ "clig" off,
146
+ "ss04" on;
147
+ color: var(--element-active-color);
148
+ }
149
+
150
+ .wrapper.has-sublabel .user-label {
151
+ font-family: var(--global-typography-font-family);
152
+ font-weight: var(--global-typography-ui-label-active-font-weight);
153
+ font-size: var(--global-typography-ui-label-active-font-size);
154
+ line-height: var(--global-typography-ui-label-active-line-height);
155
+ font-feature-settings:
156
+ "liga" off,
157
+ "clig" off,
158
+ "ss04" on;
159
+ }
160
+
161
+ .wrapper:disabled .user-label,.wrapper:disabled .user-sublabel {
95
162
  color: var(--element-disabled-color);
96
163
  }
97
164