@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.149 → 2.0.0-next.150
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.
- package/bundle/openbridge-webcomponents.bundle.js +4443 -3841
- package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
- package/custom-elements.json +381 -2
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.css.js +94 -0
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.css.js.map +1 -0
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts +72 -0
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts.map +1 -0
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js +396 -0
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js.map +1 -0
- package/dist/components/table/table.css.js +43 -0
- package/dist/components/table/table.css.js.map +1 -1
- package/dist/components/table/table.d.ts +31 -1
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/table/table.js +124 -11
- package/dist/components/table/table.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/src/components/alert-list-details-experimental/alert-list-details-experimental.css +70 -0
- package/src/components/alert-list-details-experimental/alert-list-details-experimental.stories.ts +510 -0
- package/src/components/alert-list-details-experimental/alert-list-details-experimental.ts +457 -0
- package/src/components/table/table.css +42 -0
- package/src/components/table/table.stories.ts +279 -0
- package/src/components/table/table.ts +177 -13
- package/src/types.ts +6 -4
|
@@ -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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"}
|
|
@@ -5,6 +5,7 @@ import { property, state } from "lit/decorators.js";
|
|
|
5
5
|
import { ObcTableHeaderItemType } from "../table-header-item/table-header-item.js";
|
|
6
6
|
import { classMap } from "lit/directives/class-map.js";
|
|
7
7
|
import "../button/button.js";
|
|
8
|
+
import "../../icons/icon-chevron-right-google.js";
|
|
8
9
|
import { CheckboxStatus } from "../checkbox/checkbox.js";
|
|
9
10
|
import { TagColor } from "../tag/tag.js";
|
|
10
11
|
import "../../building-blocks/bar-horizontal/bar-horizontal.js";
|
|
@@ -54,6 +55,41 @@ let ObcTable = class extends LitElement {
|
|
|
54
55
|
this._previousPositions = [];
|
|
55
56
|
this._hasRenderedRows = false;
|
|
56
57
|
}
|
|
58
|
+
get hasHierarchy() {
|
|
59
|
+
return this.data.some(
|
|
60
|
+
(row) => row.parentId !== void 0 || (row.level ?? 0) > 0 || row.expandable === true
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
sortWithinSiblings(rows, compare) {
|
|
64
|
+
const ids = new Set(rows.map((row) => row.id));
|
|
65
|
+
const childrenByParent = /* @__PURE__ */ new Map();
|
|
66
|
+
const roots = [];
|
|
67
|
+
for (const row of rows) {
|
|
68
|
+
const parentId = row.parentId;
|
|
69
|
+
if (parentId !== void 0 && parentId !== row.id && ids.has(parentId)) {
|
|
70
|
+
const siblings = childrenByParent.get(parentId) ?? [];
|
|
71
|
+
siblings.push(row);
|
|
72
|
+
childrenByParent.set(parentId, siblings);
|
|
73
|
+
} else {
|
|
74
|
+
roots.push(row);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const sorted = [];
|
|
78
|
+
const visited = /* @__PURE__ */ new Set();
|
|
79
|
+
const visit = (siblings) => {
|
|
80
|
+
for (const row of [...siblings].sort(compare)) {
|
|
81
|
+
if (visited.has(row.id)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
visited.add(row.id);
|
|
85
|
+
sorted.push(row);
|
|
86
|
+
visit(childrenByParent.get(row.id) ?? []);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
visit(roots);
|
|
90
|
+
visit(rows.filter((row) => !visited.has(row.id)));
|
|
91
|
+
return sorted;
|
|
92
|
+
}
|
|
57
93
|
get sortedData() {
|
|
58
94
|
if (this._sortByColumnIdx === void 0) {
|
|
59
95
|
return this.data;
|
|
@@ -64,8 +100,7 @@ let ObcTable = class extends LitElement {
|
|
|
64
100
|
return this.data;
|
|
65
101
|
}
|
|
66
102
|
const sortDirection = this._sortDirection;
|
|
67
|
-
const
|
|
68
|
-
sortedData.sort((a, b) => {
|
|
103
|
+
const compare = (a, b) => {
|
|
69
104
|
const aValue = a[sortByColumn.key];
|
|
70
105
|
const bValue = b[sortByColumn.key];
|
|
71
106
|
if (sortDirection === "asc") {
|
|
@@ -83,7 +118,12 @@ let ObcTable = class extends LitElement {
|
|
|
83
118
|
a
|
|
84
119
|
);
|
|
85
120
|
}
|
|
86
|
-
}
|
|
121
|
+
};
|
|
122
|
+
if (this.hasHierarchy) {
|
|
123
|
+
return this.sortWithinSiblings(this.data, compare);
|
|
124
|
+
}
|
|
125
|
+
const sortedData = [...this.data];
|
|
126
|
+
sortedData.sort(compare);
|
|
87
127
|
return sortedData;
|
|
88
128
|
}
|
|
89
129
|
_handleSortClick(column) {
|
|
@@ -103,6 +143,38 @@ let ObcTable = class extends LitElement {
|
|
|
103
143
|
new CustomEvent("row-click", { detail: { row } })
|
|
104
144
|
);
|
|
105
145
|
}
|
|
146
|
+
_handleExpandToggle(row, expanded) {
|
|
147
|
+
if (!row.expandable) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
this.dispatchEvent(
|
|
151
|
+
new CustomEvent("expand-toggle", {
|
|
152
|
+
detail: { rowId: row.id, expanded }
|
|
153
|
+
})
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
_renderRowExpander(row) {
|
|
157
|
+
if (!this.hasHierarchy) {
|
|
158
|
+
return nothing;
|
|
159
|
+
}
|
|
160
|
+
const level = row.level ?? 0;
|
|
161
|
+
return html`<span
|
|
162
|
+
class="row-expander"
|
|
163
|
+
style="--row-level: ${level}"
|
|
164
|
+
aria-hidden="true"
|
|
165
|
+
>
|
|
166
|
+
${row.expandable ? html`<span
|
|
167
|
+
class=${classMap({ chevron: true, expanded: row.expanded ?? false })}
|
|
168
|
+
@click=${(event) => {
|
|
169
|
+
event.preventDefault();
|
|
170
|
+
event.stopPropagation();
|
|
171
|
+
this._handleExpandToggle(row, !(row.expanded ?? false));
|
|
172
|
+
}}
|
|
173
|
+
>
|
|
174
|
+
<obi-chevron-right-google></obi-chevron-right-google>
|
|
175
|
+
</span>` : nothing}
|
|
176
|
+
</span>`;
|
|
177
|
+
}
|
|
106
178
|
_focusFirstRow() {
|
|
107
179
|
const firstRow = this.renderRoot.querySelector(
|
|
108
180
|
'button[role="row"].grid-row'
|
|
@@ -153,6 +225,9 @@ let ObcTable = class extends LitElement {
|
|
|
153
225
|
}
|
|
154
226
|
_handleRowKeyDown(event) {
|
|
155
227
|
const key = event.key;
|
|
228
|
+
if (this.hasHierarchy && (key === "ArrowRight" || key === "ArrowLeft") && this._handleRowExpandKey(event, key)) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
156
231
|
if (key !== "ArrowDown" && key !== "ArrowUp" && key !== "Home" && key !== "End") {
|
|
157
232
|
return;
|
|
158
233
|
}
|
|
@@ -195,6 +270,31 @@ let ObcTable = class extends LitElement {
|
|
|
195
270
|
event.stopPropagation();
|
|
196
271
|
}
|
|
197
272
|
}
|
|
273
|
+
_handleRowExpandKey(event, key) {
|
|
274
|
+
const target = event.currentTarget;
|
|
275
|
+
const rowId = target?.dataset.rowId;
|
|
276
|
+
const row = this.sortedData.find((candidate) => candidate.id === rowId);
|
|
277
|
+
if (!row) return false;
|
|
278
|
+
const expanded = row.expanded ?? false;
|
|
279
|
+
if (key === "ArrowRight" && row.expandable && !expanded) {
|
|
280
|
+
this._handleExpandToggle(row, true);
|
|
281
|
+
} else if (key === "ArrowLeft" && row.expandable && expanded) {
|
|
282
|
+
this._handleExpandToggle(row, false);
|
|
283
|
+
} else if (key === "ArrowLeft") {
|
|
284
|
+
const parent = this.renderRoot.querySelector(
|
|
285
|
+
`button[role="row"].grid-row[data-row-id="${CSS.escape(
|
|
286
|
+
row.parentId ?? ""
|
|
287
|
+
)}"]`
|
|
288
|
+
);
|
|
289
|
+
if (!parent) return false;
|
|
290
|
+
parent.focus();
|
|
291
|
+
} else {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
event.preventDefault();
|
|
295
|
+
event.stopPropagation();
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
198
298
|
_getAllPositions() {
|
|
199
299
|
const rows = Array.from(
|
|
200
300
|
this.renderRoot.querySelectorAll(
|
|
@@ -313,7 +413,7 @@ let ObcTable = class extends LitElement {
|
|
|
313
413
|
--grid-columns-rest: ${selectionColumnCount};
|
|
314
414
|
--selection-column-width: var(--menu-navigation-components-table-item-touch-target-size);
|
|
315
415
|
"
|
|
316
|
-
role
|
|
416
|
+
role=${this.hasHierarchy ? "treegrid" : "table"}
|
|
317
417
|
>
|
|
318
418
|
${this.showHeader ? html`
|
|
319
419
|
<div class="grid-header" role="row">
|
|
@@ -410,8 +510,15 @@ let ObcTable = class extends LitElement {
|
|
|
410
510
|
data-row-id=${row.id}
|
|
411
511
|
style="grid-row: ${rowIndex + 1}"
|
|
412
512
|
part="row"
|
|
513
|
+
aria-level=${ifDefined(
|
|
514
|
+
this.hasHierarchy ? (row.level ?? 0) + 1 : void 0
|
|
515
|
+
)}
|
|
516
|
+
aria-expanded=${ifDefined(
|
|
517
|
+
row.expandable ? row.expanded ?? false : void 0
|
|
518
|
+
)}
|
|
413
519
|
>
|
|
414
|
-
${map(effectiveColumns, (col) => {
|
|
520
|
+
${map(effectiveColumns, (col, colIndex) => {
|
|
521
|
+
const expander = colIndex === (this.selectable ? 1 : 0) ? this._renderRowExpander(row) : nothing;
|
|
415
522
|
if (this.selectable && col.key === "__selection__") {
|
|
416
523
|
const checked = this._selectedRowIds.has(row.id);
|
|
417
524
|
return html`<div
|
|
@@ -432,7 +539,9 @@ let ObcTable = class extends LitElement {
|
|
|
432
539
|
}
|
|
433
540
|
const value = row[col.key];
|
|
434
541
|
if (value === void 0) {
|
|
435
|
-
return html`<div class="grid-cell" role="cell"
|
|
542
|
+
return html`<div class="grid-cell" role="cell">
|
|
543
|
+
${expander}
|
|
544
|
+
</div>`;
|
|
436
545
|
}
|
|
437
546
|
if (col.renderCell) {
|
|
438
547
|
return html`<div
|
|
@@ -440,7 +549,7 @@ let ObcTable = class extends LitElement {
|
|
|
440
549
|
role="cell"
|
|
441
550
|
part=${ifDefined(value.cssPart)}
|
|
442
551
|
>
|
|
443
|
-
${col.renderCell(
|
|
552
|
+
${expander}${col.renderCell(
|
|
444
553
|
value,
|
|
445
554
|
row,
|
|
446
555
|
row.id
|
|
@@ -450,7 +559,8 @@ let ObcTable = class extends LitElement {
|
|
|
450
559
|
return this._renderCell(
|
|
451
560
|
value,
|
|
452
561
|
row,
|
|
453
|
-
col
|
|
562
|
+
col,
|
|
563
|
+
expander
|
|
454
564
|
);
|
|
455
565
|
}
|
|
456
566
|
})}
|
|
@@ -568,7 +678,7 @@ let ObcTable = class extends LitElement {
|
|
|
568
678
|
const nextSelection = status === CheckboxStatus.checked ? /* @__PURE__ */ new Set() : new Set(rowIds);
|
|
569
679
|
this._applySelectionChange(nextSelection, "header");
|
|
570
680
|
}
|
|
571
|
-
_renderCell(value, row, column) {
|
|
681
|
+
_renderCell(value, row, column, expander = nothing) {
|
|
572
682
|
if (value.type === "regular") {
|
|
573
683
|
return html`<div
|
|
574
684
|
class=${classMap({
|
|
@@ -584,7 +694,7 @@ let ObcTable = class extends LitElement {
|
|
|
584
694
|
role="cell"
|
|
585
695
|
part=${ifDefined(cssPart(value, "cell"))}
|
|
586
696
|
>
|
|
587
|
-
${value.icon3 ? html`<span class="icon" part=${ifDefined(cssPart(value, "icon3"))}
|
|
697
|
+
${expander}${value.icon3 ? html`<span class="icon" part=${ifDefined(cssPart(value, "icon3"))}
|
|
588
698
|
>${value.icon3}</span
|
|
589
699
|
>` : nothing}
|
|
590
700
|
${value.icon2 ? html`<span class="icon" part=${ifDefined(cssPart(value, "icon2"))}
|
|
@@ -605,6 +715,7 @@ let ObcTable = class extends LitElement {
|
|
|
605
715
|
class="grid-cell button ${column.dividerRight ? "divider-right" : ""}"
|
|
606
716
|
role="cell"
|
|
607
717
|
>
|
|
718
|
+
${expander}
|
|
608
719
|
<obc-button
|
|
609
720
|
variant="normal"
|
|
610
721
|
fullWidth
|
|
@@ -636,6 +747,7 @@ let ObcTable = class extends LitElement {
|
|
|
636
747
|
role="cell"
|
|
637
748
|
part=${ifDefined(cssPart(value, "cell"))}
|
|
638
749
|
>
|
|
750
|
+
${expander}
|
|
639
751
|
<obc-checkbox
|
|
640
752
|
.status=${value.status ?? CheckboxStatus.unchecked}
|
|
641
753
|
.disabled=${value.disabled ?? false}
|
|
@@ -676,7 +788,7 @@ let ObcTable = class extends LitElement {
|
|
|
676
788
|
role="cell"
|
|
677
789
|
part=${ifDefined(cssPart(value, "cell"))}
|
|
678
790
|
>
|
|
679
|
-
${visibleTags.map((tag) => {
|
|
791
|
+
${expander}${visibleTags.map((tag) => {
|
|
680
792
|
const hasIcon = tag.hasIcon ?? tag.icon !== void 0;
|
|
681
793
|
return html`<obc-tag
|
|
682
794
|
.label=${tag.label}
|
|
@@ -711,6 +823,7 @@ let ObcTable = class extends LitElement {
|
|
|
711
823
|
role="cell"
|
|
712
824
|
part=${ifDefined(cssPart(value, "cell"))}
|
|
713
825
|
>
|
|
826
|
+
${expander}
|
|
714
827
|
<obc-bar-horizontal
|
|
715
828
|
.minValue=${value.minValue ?? 0}
|
|
716
829
|
.maxValue=${value.maxValue ?? 100}
|
|
@@ -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 {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 [key: string]: ObcTableCellData | boolean | undefined | string;\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\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 *\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 *\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 *\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 * @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 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 sortedData = [...this.data];\n sortedData.sort((a, b) => {\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 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 _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 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 _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 // Calculate the zoom factor for the first row\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=\"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 >\n ${map(effectiveColumns, (col) => {\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\"></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 ${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 );\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 ) {\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 ${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 <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 <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 ${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 <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\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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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -47,7 +47,9 @@ export interface Alert {
|
|
|
47
47
|
blockedBy?: string;
|
|
48
48
|
};
|
|
49
49
|
noAck?: boolean;
|
|
50
|
+
noSilence?: boolean;
|
|
50
51
|
category?: AlertCategory;
|
|
52
|
+
memberOf?: string[];
|
|
51
53
|
}
|
|
52
54
|
export declare function isActive(alert: Alert): boolean;
|
|
53
55
|
export declare function isAcknowledged(alert: Alert): boolean;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACnB,EAAE,OAAO;IACT,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,oBAAY,SAAS;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,mBAAmB;IAChC,SAAS,eAAe;IACxB,WAAW,iBAAiB;IAC5B,QAAQ,cAAc;IACtB,eAAe,qBAAqB;CACrC;AAED,eAAO,MAAM,uBAAuB,aASnC,CAAC;AAEF,oBAAY,aAAa;IACvB,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;CACR;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EACR,KAAK,GACL;QACE,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,IAAI,CAAC;KACtB,CAAC;IACN,MAAM,EACF,IAAI,GACJ;QACE,aAAa,EAAE,IAAI,CAAC;KACrB,CAAC;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,OAAO,CAAC,EACJ,KAAK,GACL;QACE,gBAAgB,EAAE,IAAI,CAAC;QACvB,cAAc,CAAC,EAAE,IAAI,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACN,OAAO,CAAC,EACJ,KAAK,GACL;QACE,gBAAgB,EAAE,IAAI,CAAC;QACvB,cAAc,CAAC,EAAE,IAAI,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACN,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACnB,EAAE,OAAO;IACT,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,oBAAY,SAAS;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,mBAAmB;IAChC,SAAS,eAAe;IACxB,WAAW,iBAAiB;IAC5B,QAAQ,cAAc;IACtB,eAAe,qBAAqB;CACrC;AAED,eAAO,MAAM,uBAAuB,aASnC,CAAC;AAEF,oBAAY,aAAa;IACvB,CAAC,MAAM;IACP,CAAC,MAAM;IACP,CAAC,MAAM;CACR;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EACR,KAAK,GACL;QACE,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,IAAI,CAAC;KACtB,CAAC;IACN,MAAM,EACF,IAAI,GACJ;QACE,aAAa,EAAE,IAAI,CAAC;KACrB,CAAC;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,OAAO,CAAC,EACJ,KAAK,GACL;QACE,gBAAgB,EAAE,IAAI,CAAC;QACvB,cAAc,CAAC,EAAE,IAAI,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACN,OAAO,CAAC,EACJ,KAAK,GACL;QACE,gBAAgB,EAAE,IAAI,CAAC;QACvB,cAAc,CAAC,EAAE,IAAI,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACN,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,WAEpC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,WAE1C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,WAErC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,WAErC;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,UAgBvD;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;AAEjD,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,UA0BzC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["export enum Direction {\n Up = 'up',\n Down = 'down',\n Left = 'left',\n Right = 'right',\n}\n\nexport enum AlertType {\n Alarm = 'alarm',\n Warning = 'warning',\n Caution = 'caution',\n LevelCritical = 'level-critical',\n LevelHigh = 'level-high',\n LevelMedium = 'level-medium',\n LevelLow = 'level-low',\n LevelDiagnostic = 'level-diagnostic',\n}\n\nexport const ALERT_SEVERITY_PRIORITY = [\n AlertType.LevelCritical,\n AlertType.Alarm,\n AlertType.LevelHigh,\n AlertType.Warning,\n AlertType.LevelMedium,\n AlertType.Caution,\n AlertType.LevelLow,\n AlertType.LevelDiagnostic,\n];\n\nexport enum AlertCategory {\n a = 'a',\n b = 'b',\n c = 'c',\n}\n\nexport interface Alert {\n id: string
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["export enum Direction {\n Up = 'up',\n Down = 'down',\n Left = 'left',\n Right = 'right',\n}\n\nexport enum AlertType {\n Alarm = 'alarm',\n Warning = 'warning',\n Caution = 'caution',\n LevelCritical = 'level-critical',\n LevelHigh = 'level-high',\n LevelMedium = 'level-medium',\n LevelLow = 'level-low',\n LevelDiagnostic = 'level-diagnostic',\n}\n\nexport const ALERT_SEVERITY_PRIORITY = [\n AlertType.LevelCritical,\n AlertType.Alarm,\n AlertType.LevelHigh,\n AlertType.Warning,\n AlertType.LevelMedium,\n AlertType.Caution,\n AlertType.LevelLow,\n AlertType.LevelDiagnostic,\n];\n\nexport enum AlertCategory {\n a = 'a',\n b = 'b',\n c = 'c',\n}\n\nexport interface Alert {\n id: string;\n tagId: string;\n source: string;\n text: string;\n note?: string;\n acknowledged:\n | false\n | {\n acknowledgedBy: string;\n acknowledgedAt: Date;\n };\n active:\n | true\n | {\n rectifiedTime: Date;\n };\n type: AlertType;\n time: Date;\n lastModified?: Date;\n shelved?:\n | false\n | {\n shelvedStartTime: Date;\n shelvedEndTime?: Date;\n shelvedBy?: string;\n };\n blocked?:\n | false\n | {\n blockedStartTime: Date;\n blockedEndTime?: Date;\n blockedBy?: string;\n };\n noAck?: boolean;\n noSilence?: boolean;\n category?: AlertCategory;\n memberOf?: string[];\n}\n\nexport function isActive(alert: Alert) {\n return alert.active === true;\n}\n\nexport function isAcknowledged(alert: Alert) {\n return alert.acknowledged !== false && alert.acknowledged !== undefined;\n}\n\nexport function isShelved(alert: Alert) {\n return alert.shelved !== false && alert.shelved !== undefined;\n}\n\nexport function isBlocked(alert: Alert) {\n return alert.blocked !== false && alert.blocked !== undefined;\n}\n\nexport function comparePriorityAlerts(a: Alert, b: Alert) {\n if (a.type !== b.type) {\n return (\n ALERT_SEVERITY_PRIORITY.indexOf(b.type) -\n ALERT_SEVERITY_PRIORITY.indexOf(a.type)\n );\n }\n\n if (isActive(a) !== isActive(b)) {\n return isActive(a) ? 1 : -1;\n }\n\n if (isAcknowledged(a) !== isAcknowledged(b)) {\n return isAcknowledged(a) ? -1 : 1;\n }\n return a.time.getTime() - b.time.getTime();\n}\n\nexport type TimeSinceFn = (time: Date) => string;\n\nexport function formatTimeSince(time: Date) {\n const now = new Date();\n const diff = now.getTime() - time.getTime();\n const diffInSeconds = diff / 1000;\n if (diffInSeconds < 60) {\n return Math.round(diffInSeconds) + 's';\n }\n const diffInMinutes = diffInSeconds / 60;\n if (diffInMinutes < 60) {\n return (\n Math.round(diffInMinutes) + 'm ' + Math.round(diffInSeconds % 60) + 's'\n );\n }\n const diffInHours = diffInMinutes / 60;\n if (diffInHours < 24) {\n return (\n Math.round(diffInHours) + 'h ' + Math.round(diffInMinutes % 60) + 'm'\n );\n }\n const diffInDays = diffInHours / 24;\n if (diffInDays < 365) {\n return Math.round(diffInDays) + 'd ' + Math.round(diffInHours % 24) + 'h';\n }\n return (\n Math.round(diffInDays / 365) + 'y ' + Math.round(diffInDays % 365) + 'd'\n );\n}\n"],"names":["Direction","AlertType","AlertCategory"],"mappings":"AAAO,IAAK,8BAAAA,eAAL;AACLA,aAAA,IAAA,IAAK;AACLA,aAAA,MAAA,IAAO;AACPA,aAAA,MAAA,IAAO;AACPA,aAAA,OAAA,IAAQ;AAJE,SAAAA;AAAA,GAAA,aAAA,CAAA,CAAA;AAOL,IAAK,8BAAAC,eAAL;AACLA,aAAA,OAAA,IAAQ;AACRA,aAAA,SAAA,IAAU;AACVA,aAAA,SAAA,IAAU;AACVA,aAAA,eAAA,IAAgB;AAChBA,aAAA,WAAA,IAAY;AACZA,aAAA,aAAA,IAAc;AACdA,aAAA,UAAA,IAAW;AACXA,aAAA,iBAAA,IAAkB;AARR,SAAAA;AAAA,GAAA,aAAA,CAAA,CAAA;AAWL,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACF;AAEO,IAAK,kCAAAC,mBAAL;AACLA,iBAAA,GAAA,IAAI;AACJA,iBAAA,GAAA,IAAI;AACJA,iBAAA,GAAA,IAAI;AAHM,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;AA8CL,SAAS,SAAS,OAAc;AACrC,SAAO,MAAM,WAAW;AAC1B;AAEO,SAAS,eAAe,OAAc;AAC3C,SAAO,MAAM,iBAAiB,SAAS,MAAM,iBAAiB;AAChE;AAEO,SAAS,UAAU,OAAc;AACtC,SAAO,MAAM,YAAY,SAAS,MAAM,YAAY;AACtD;AAEO,SAAS,UAAU,OAAc;AACtC,SAAO,MAAM,YAAY,SAAS,MAAM,YAAY;AACtD;AAEO,SAAS,sBAAsB,GAAU,GAAU;AACxD,MAAI,EAAE,SAAS,EAAE,MAAM;AACrB,WACE,wBAAwB,QAAQ,EAAE,IAAI,IACtC,wBAAwB,QAAQ,EAAE,IAAI;AAAA,EAE1C;AAEA,MAAI,SAAS,CAAC,MAAM,SAAS,CAAC,GAAG;AAC/B,WAAO,SAAS,CAAC,IAAI,IAAI;AAAA,EAC3B;AAEA,MAAI,eAAe,CAAC,MAAM,eAAe,CAAC,GAAG;AAC3C,WAAO,eAAe,CAAC,IAAI,KAAK;AAAA,EAClC;AACA,SAAO,EAAE,KAAK,QAAA,IAAY,EAAE,KAAK,QAAA;AACnC;AAIO,SAAS,gBAAgB,MAAY;AAC1C,QAAM,0BAAU,KAAA;AAChB,QAAM,OAAO,IAAI,QAAA,IAAY,KAAK,QAAA;AAClC,QAAM,gBAAgB,OAAO;AAC7B,MAAI,gBAAgB,IAAI;AACtB,WAAO,KAAK,MAAM,aAAa,IAAI;AAAA,EACrC;AACA,QAAM,gBAAgB,gBAAgB;AACtC,MAAI,gBAAgB,IAAI;AACtB,WACE,KAAK,MAAM,aAAa,IAAI,OAAO,KAAK,MAAM,gBAAgB,EAAE,IAAI;AAAA,EAExE;AACA,QAAM,cAAc,gBAAgB;AACpC,MAAI,cAAc,IAAI;AACpB,WACE,KAAK,MAAM,WAAW,IAAI,OAAO,KAAK,MAAM,gBAAgB,EAAE,IAAI;AAAA,EAEtE;AACA,QAAM,aAAa,cAAc;AACjC,MAAI,aAAa,KAAK;AACpB,WAAO,KAAK,MAAM,UAAU,IAAI,OAAO,KAAK,MAAM,cAAc,EAAE,IAAI;AAAA,EACxE;AACA,SACE,KAAK,MAAM,aAAa,GAAG,IAAI,OAAO,KAAK,MAAM,aAAa,GAAG,IAAI;AAEzE;"}
|