@ni/nimble-components 30.0.1 → 30.0.3
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/dist/all-components-bundle.js +85 -40
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +43 -37
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/table/components/row/index.d.ts +1 -0
- package/dist/esm/table/components/row/index.js +4 -0
- package/dist/esm/table/components/row/index.js.map +1 -1
- package/dist/esm/table/components/row/styles.js +1 -1
- package/dist/esm/table/components/row/styles.js.map +1 -1
- package/dist/esm/table/components/row/template.js +1 -1
- package/dist/esm/table/components/row/template.js.map +1 -1
- package/dist/esm/table/index.d.ts +11 -6
- package/dist/esm/table/index.js +52 -15
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/styles.js +9 -0
- package/dist/esm/table/styles.js.map +1 -1
- package/dist/esm/table/template.js +18 -23
- package/dist/esm/table/template.js.map +1 -1
- package/dist/esm/table/testing/table.pageobject.d.ts +1 -0
- package/dist/esm/table/testing/table.pageobject.js +7 -0
- package/dist/esm/table/testing/table.pageobject.js.map +1 -1
- package/dist/esm/table/types.d.ts +1 -1
- package/dist/esm/table/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -16,6 +16,7 @@ export class TableRow extends FoundationElement {
|
|
|
16
16
|
this.selected = false;
|
|
17
17
|
this.hideSelection = false;
|
|
18
18
|
this.expanded = false;
|
|
19
|
+
this.reserveCollapseSpace = false;
|
|
19
20
|
/**
|
|
20
21
|
* @internal
|
|
21
22
|
* */
|
|
@@ -240,6 +241,9 @@ __decorate([
|
|
|
240
241
|
__decorate([
|
|
241
242
|
attr({ mode: 'boolean' })
|
|
242
243
|
], TableRow.prototype, "expanded", void 0);
|
|
244
|
+
__decorate([
|
|
245
|
+
attr({ attribute: 'reserve-collapse-space', mode: 'boolean' })
|
|
246
|
+
], TableRow.prototype, "reserveCollapseSpace", void 0);
|
|
243
247
|
__decorate([
|
|
244
248
|
observable
|
|
245
249
|
], TableRow.prototype, "dataRecord", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/row/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Notifier,\n Observable,\n attr,\n observable,\n volatile\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { styles } from './styles';\nimport { template } from './template';\nimport type { TableCellState } from '../../../table-column/base/types';\nimport type {\n CellViewSlotRequestEventDetail,\n RowSlotRequestEventDetail,\n TableActionMenuToggleEventDetail,\n TableFieldName,\n TableRecord,\n TableRowExpansionToggleEventDetail,\n TableRowFocusableElements,\n TableRowSelectionToggleEventDetail\n} from '../../types';\nimport type { TableColumn } from '../../../table-column/base';\nimport type { MenuButtonToggleEventDetail } from '../../../menu-button/types';\nimport { tableCellTag } from '../cell';\nimport {\n ColumnInternals,\n isColumnInternalsProperty\n} from '../../../table-column/base/models/column-internals';\nimport type { Checkbox } from '../../../checkbox';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-row': TableRow;\n }\n}\n\n/** Represents a single row (element) in the Table's data */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface TableDataRecord extends TableRecord {}\n\n/**\n * A styled row that is used within the nimble-table.\n * @internal\n */\nexport class TableRow<\n TDataRecord extends TableDataRecord = TableDataRecord\n> extends FoundationElement {\n @attr({ attribute: 'record-id' })\n public recordId?: string;\n\n @attr({ mode: 'boolean' })\n public selectable = false;\n\n @attr({ mode: 'boolean' })\n public selected = false;\n\n @attr({ attribute: 'hide-selection', mode: 'boolean' })\n public hideSelection = false;\n\n @attr({ mode: 'boolean' })\n public expanded = false;\n\n @observable\n public dataRecord?: TDataRecord;\n\n /**\n * @internal\n * */\n public columnNotifiers: Notifier[] = [];\n\n @observable\n public columns: TableColumn[] = [];\n\n @observable\n public currentActionMenuColumn?: TableColumn;\n\n @observable\n public nestingLevel = 0;\n\n /**\n * Row index in the flattened set of all regular and group header rows.\n * Represents the index in table.tableData (TableRowState[]).\n */\n @observable\n public resolvedRowIndex?: number;\n\n @attr({ attribute: 'is-parent-row', mode: 'boolean' })\n public isParentRow = false;\n\n @attr({ attribute: 'menu-open', mode: 'boolean' })\n public menuOpen = false;\n\n @attr({ attribute: 'row-operation-grid-cell-hidden', mode: 'boolean' })\n public rowOperationGridCellHidden = false;\n\n @attr({ mode: 'boolean' })\n public loading = false;\n\n /**\n * @internal\n * An array that parallels the `columns` array and contains the indent\n * level of each column's cell.\n * */\n @observable\n public cellIndentLevels: number[] = [];\n\n /**\n * @internal\n * An array that parallels the `columns` array and contains the cell state\n * of each column's cell.\n * */\n @observable\n public cellStates: (TableCellState | undefined)[] = [];\n\n /** @internal */\n @observable\n public readonly selectionCheckbox?: Checkbox;\n\n /** @internal */\n public readonly cellContainer!: HTMLSpanElement;\n\n /**\n * @internal\n */\n public readonly expandIcon?: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public animationClass = '';\n\n @volatile\n public get isTopLevelParentRow(): boolean {\n return this.isParentRow && this.nestingLevel === 0;\n }\n\n @volatile\n public get isNestedParent(): boolean {\n return this.isParentRow && this.nestingLevel > 0;\n }\n\n /** @internal */\n @volatile\n public get showSelectionCheckbox(): boolean {\n return this.selectable && !this.hideSelection;\n }\n\n // Programmatically updating the selection state of a checkbox fires the 'change' event.\n // Therefore, selection change events that occur due to programmatically updating\n // the selection checkbox 'checked' value should be ingored.\n // https://github.com/microsoft/fast/issues/5750\n private ignoreSelectionChangeEvents = false;\n\n @volatile\n public override get ariaSelected(): 'true' | 'false' | null {\n if (this.selectable) {\n return this.selected ? 'true' : 'false';\n }\n\n return null;\n }\n\n /** @internal */\n public onSelectionCheckboxChange(event: CustomEvent): void {\n if (this.ignoreSelectionChangeEvents) {\n return;\n }\n\n const checkbox = event.target as Checkbox;\n const checked = checkbox.checked;\n this.onSelectionChange(!checked, checked);\n }\n\n /** @internal */\n public onSelectionChange(oldState: boolean, newState: boolean): void {\n this.selected = newState;\n const detail: TableRowSelectionToggleEventDetail = {\n oldState,\n newState\n };\n this.$emit('row-selection-toggle', detail);\n }\n\n /** @internal */\n public onCellActionMenuBeforeToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>,\n column: TableColumn\n ): void {\n this.currentActionMenuColumn = column;\n this.emitActionMenuToggleEvent(\n 'row-action-menu-beforetoggle',\n event.detail,\n column\n );\n }\n\n /** @internal */\n public onCellActionMenuToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>,\n column: TableColumn\n ): void {\n this.menuOpen = event.detail.newState;\n this.emitActionMenuToggleEvent(\n 'row-action-menu-toggle',\n event.detail,\n column\n );\n }\n\n /** @internal */\n public handleChange(source: unknown, args: unknown): void {\n if (\n source instanceof ColumnInternals\n && typeof args === 'string'\n && (isColumnInternalsProperty(args, 'columnConfig')\n || isColumnInternalsProperty(args, 'dataRecordFieldNames'))\n ) {\n this.updateCellStates();\n }\n }\n\n /** @internal */\n public getFocusableElements(): TableRowFocusableElements {\n return {\n selectionCheckbox: this.showSelectionCheckbox\n ? this.selectionCheckbox\n : undefined,\n cells: Array.from(\n this.cellContainer.querySelectorAll(tableCellTag)\n ).map(cell => ({\n cell,\n actionMenuButton: cell.hasActionMenu\n ? cell.actionMenuButton\n : undefined\n }))\n };\n }\n\n public onRowExpandToggle(event?: Event): void {\n const expandEventDetail: TableRowExpansionToggleEventDetail = {\n oldState: this.expanded,\n newState: !this.expanded,\n recordId: this.recordId!\n };\n this.$emit('row-expand-toggle', expandEventDetail);\n event?.stopImmediatePropagation();\n // To avoid a visual glitch with improper expand/collapse icons performing an\n // animation (due to visual re-use apparently), we apply a class to the\n // contained expand-collapse button temporarily. We use the 'transitionend' event\n // to remove the temporary class and register a function reference as the handler\n // to avoid issues that may result from the 'transitionend' event not firing, as it\n // will never result in multiple event listeners being registered.\n this.animationClass = 'animating';\n this.expandIcon?.addEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n }\n\n public onCellViewSlotsRequest(\n column: TableColumn,\n event: CustomEvent<CellViewSlotRequestEventDetail>\n ): void {\n event.stopImmediatePropagation();\n if (typeof this.recordId !== 'string') {\n // The recordId is expected to be defined on any row that can be interacted with, but if\n // it isn't defined, nothing can be done with the request to slot content into the row.\n return;\n }\n\n const eventDetails: RowSlotRequestEventDetail = {\n recordId: this.recordId,\n columnInternalId: column.columnInternals.uniqueId,\n slots: event.detail.slots\n };\n this.$emit('row-slots-request', eventDetails);\n }\n\n private readonly removeAnimatingClass = (): void => {\n this.animationClass = '';\n this.expandIcon?.removeEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n };\n\n private emitActionMenuToggleEvent(\n eventType: string,\n menuButtonEventDetail: MenuButtonToggleEventDetail,\n column: TableColumn\n ): void {\n const detail: TableActionMenuToggleEventDetail = {\n newState: menuButtonEventDetail.newState,\n oldState: menuButtonEventDetail.oldState,\n recordIds: [this.recordId!],\n columnId: column.columnId\n };\n this.$emit(eventType, detail);\n }\n\n private columnsChanged(): void {\n this.updateCellIndentLevels();\n this.updateCellStates();\n\n this.observeColumns();\n }\n\n private dataRecordChanged(): void {\n this.updateCellStates();\n }\n\n private nestingLevelChanged(): void {\n this.updateCellIndentLevels();\n }\n\n private updateCellIndentLevels(): void {\n this.cellIndentLevels = this.columns.map((_, i) => {\n return i === 0 ? this.nestingLevel : 0;\n });\n }\n\n private removeColumnObservers(): void {\n this.columnNotifiers.forEach(notifier => {\n notifier.unsubscribe(this);\n });\n this.columnNotifiers = [];\n }\n\n private observeColumns(): void {\n this.removeColumnObservers();\n\n this.columnNotifiers = this.columns.map(column => {\n const notifier = Observable.getNotifier(column.columnInternals);\n notifier.subscribe(this);\n return notifier;\n });\n }\n\n private updateCellStates(): void {\n this.cellStates = this.columns.map(column => {\n const fieldNames = column.columnInternals.dataRecordFieldNames;\n let cellState: TableCellState | undefined;\n if (this.hasValidFieldNames(fieldNames) && this.dataRecord) {\n const cellDataValues = fieldNames.map(\n field => this.dataRecord![field]\n );\n const cellRecord = Object.fromEntries(\n column.columnInternals.cellRecordFieldNames.map((k, j) => [\n k,\n cellDataValues[j]\n ])\n );\n const columnConfig = column.columnInternals.columnConfig;\n cellState = {\n cellRecord,\n columnConfig\n };\n }\n return cellState;\n });\n }\n\n private hasValidFieldNames(\n keys: readonly (TableFieldName | undefined)[]\n ): keys is TableFieldName[] {\n return keys.every(key => key !== undefined);\n }\n\n private selectedChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private selectionCheckboxChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private setSelectionCheckboxState(): void {\n if (this.selectionCheckbox) {\n this.ignoreSelectionChangeEvents = true;\n this.selectionCheckbox.checked = this.selected;\n this.ignoreSelectionChangeEvents = false;\n }\n }\n}\n\nconst nimbleTableRow = TableRow.compose({\n baseName: 'table-row',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableRow());\nexport const tableRowTag = 'nimble-table-row';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/row/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Notifier,\n Observable,\n attr,\n observable,\n volatile\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { styles } from './styles';\nimport { template } from './template';\nimport type { TableCellState } from '../../../table-column/base/types';\nimport type {\n CellViewSlotRequestEventDetail,\n RowSlotRequestEventDetail,\n TableActionMenuToggleEventDetail,\n TableFieldName,\n TableRecord,\n TableRowExpansionToggleEventDetail,\n TableRowFocusableElements,\n TableRowSelectionToggleEventDetail\n} from '../../types';\nimport type { TableColumn } from '../../../table-column/base';\nimport type { MenuButtonToggleEventDetail } from '../../../menu-button/types';\nimport { tableCellTag } from '../cell';\nimport {\n ColumnInternals,\n isColumnInternalsProperty\n} from '../../../table-column/base/models/column-internals';\nimport type { Checkbox } from '../../../checkbox';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-row': TableRow;\n }\n}\n\n/** Represents a single row (element) in the Table's data */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface TableDataRecord extends TableRecord {}\n\n/**\n * A styled row that is used within the nimble-table.\n * @internal\n */\nexport class TableRow<\n TDataRecord extends TableDataRecord = TableDataRecord\n> extends FoundationElement {\n @attr({ attribute: 'record-id' })\n public recordId?: string;\n\n @attr({ mode: 'boolean' })\n public selectable = false;\n\n @attr({ mode: 'boolean' })\n public selected = false;\n\n @attr({ attribute: 'hide-selection', mode: 'boolean' })\n public hideSelection = false;\n\n @attr({ mode: 'boolean' })\n public expanded = false;\n\n @attr({ attribute: 'reserve-collapse-space', mode: 'boolean' })\n public reserveCollapseSpace = false;\n\n @observable\n public dataRecord?: TDataRecord;\n\n /**\n * @internal\n * */\n public columnNotifiers: Notifier[] = [];\n\n @observable\n public columns: TableColumn[] = [];\n\n @observable\n public currentActionMenuColumn?: TableColumn;\n\n @observable\n public nestingLevel = 0;\n\n /**\n * Row index in the flattened set of all regular and group header rows.\n * Represents the index in table.tableData (TableRowState[]).\n */\n @observable\n public resolvedRowIndex?: number;\n\n @attr({ attribute: 'is-parent-row', mode: 'boolean' })\n public isParentRow = false;\n\n @attr({ attribute: 'menu-open', mode: 'boolean' })\n public menuOpen = false;\n\n @attr({ attribute: 'row-operation-grid-cell-hidden', mode: 'boolean' })\n public rowOperationGridCellHidden = false;\n\n @attr({ mode: 'boolean' })\n public loading = false;\n\n /**\n * @internal\n * An array that parallels the `columns` array and contains the indent\n * level of each column's cell.\n * */\n @observable\n public cellIndentLevels: number[] = [];\n\n /**\n * @internal\n * An array that parallels the `columns` array and contains the cell state\n * of each column's cell.\n * */\n @observable\n public cellStates: (TableCellState | undefined)[] = [];\n\n /** @internal */\n @observable\n public readonly selectionCheckbox?: Checkbox;\n\n /** @internal */\n public readonly cellContainer!: HTMLSpanElement;\n\n /**\n * @internal\n */\n public readonly expandIcon?: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public animationClass = '';\n\n @volatile\n public get isTopLevelParentRow(): boolean {\n return this.isParentRow && this.nestingLevel === 0;\n }\n\n @volatile\n public get isNestedParent(): boolean {\n return this.isParentRow && this.nestingLevel > 0;\n }\n\n /** @internal */\n @volatile\n public get showSelectionCheckbox(): boolean {\n return this.selectable && !this.hideSelection;\n }\n\n // Programmatically updating the selection state of a checkbox fires the 'change' event.\n // Therefore, selection change events that occur due to programmatically updating\n // the selection checkbox 'checked' value should be ingored.\n // https://github.com/microsoft/fast/issues/5750\n private ignoreSelectionChangeEvents = false;\n\n @volatile\n public override get ariaSelected(): 'true' | 'false' | null {\n if (this.selectable) {\n return this.selected ? 'true' : 'false';\n }\n\n return null;\n }\n\n /** @internal */\n public onSelectionCheckboxChange(event: CustomEvent): void {\n if (this.ignoreSelectionChangeEvents) {\n return;\n }\n\n const checkbox = event.target as Checkbox;\n const checked = checkbox.checked;\n this.onSelectionChange(!checked, checked);\n }\n\n /** @internal */\n public onSelectionChange(oldState: boolean, newState: boolean): void {\n this.selected = newState;\n const detail: TableRowSelectionToggleEventDetail = {\n oldState,\n newState\n };\n this.$emit('row-selection-toggle', detail);\n }\n\n /** @internal */\n public onCellActionMenuBeforeToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>,\n column: TableColumn\n ): void {\n this.currentActionMenuColumn = column;\n this.emitActionMenuToggleEvent(\n 'row-action-menu-beforetoggle',\n event.detail,\n column\n );\n }\n\n /** @internal */\n public onCellActionMenuToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>,\n column: TableColumn\n ): void {\n this.menuOpen = event.detail.newState;\n this.emitActionMenuToggleEvent(\n 'row-action-menu-toggle',\n event.detail,\n column\n );\n }\n\n /** @internal */\n public handleChange(source: unknown, args: unknown): void {\n if (\n source instanceof ColumnInternals\n && typeof args === 'string'\n && (isColumnInternalsProperty(args, 'columnConfig')\n || isColumnInternalsProperty(args, 'dataRecordFieldNames'))\n ) {\n this.updateCellStates();\n }\n }\n\n /** @internal */\n public getFocusableElements(): TableRowFocusableElements {\n return {\n selectionCheckbox: this.showSelectionCheckbox\n ? this.selectionCheckbox\n : undefined,\n cells: Array.from(\n this.cellContainer.querySelectorAll(tableCellTag)\n ).map(cell => ({\n cell,\n actionMenuButton: cell.hasActionMenu\n ? cell.actionMenuButton\n : undefined\n }))\n };\n }\n\n public onRowExpandToggle(event?: Event): void {\n const expandEventDetail: TableRowExpansionToggleEventDetail = {\n oldState: this.expanded,\n newState: !this.expanded,\n recordId: this.recordId!\n };\n this.$emit('row-expand-toggle', expandEventDetail);\n event?.stopImmediatePropagation();\n // To avoid a visual glitch with improper expand/collapse icons performing an\n // animation (due to visual re-use apparently), we apply a class to the\n // contained expand-collapse button temporarily. We use the 'transitionend' event\n // to remove the temporary class and register a function reference as the handler\n // to avoid issues that may result from the 'transitionend' event not firing, as it\n // will never result in multiple event listeners being registered.\n this.animationClass = 'animating';\n this.expandIcon?.addEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n }\n\n public onCellViewSlotsRequest(\n column: TableColumn,\n event: CustomEvent<CellViewSlotRequestEventDetail>\n ): void {\n event.stopImmediatePropagation();\n if (typeof this.recordId !== 'string') {\n // The recordId is expected to be defined on any row that can be interacted with, but if\n // it isn't defined, nothing can be done with the request to slot content into the row.\n return;\n }\n\n const eventDetails: RowSlotRequestEventDetail = {\n recordId: this.recordId,\n columnInternalId: column.columnInternals.uniqueId,\n slots: event.detail.slots\n };\n this.$emit('row-slots-request', eventDetails);\n }\n\n private readonly removeAnimatingClass = (): void => {\n this.animationClass = '';\n this.expandIcon?.removeEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n };\n\n private emitActionMenuToggleEvent(\n eventType: string,\n menuButtonEventDetail: MenuButtonToggleEventDetail,\n column: TableColumn\n ): void {\n const detail: TableActionMenuToggleEventDetail = {\n newState: menuButtonEventDetail.newState,\n oldState: menuButtonEventDetail.oldState,\n recordIds: [this.recordId!],\n columnId: column.columnId\n };\n this.$emit(eventType, detail);\n }\n\n private columnsChanged(): void {\n this.updateCellIndentLevels();\n this.updateCellStates();\n\n this.observeColumns();\n }\n\n private dataRecordChanged(): void {\n this.updateCellStates();\n }\n\n private nestingLevelChanged(): void {\n this.updateCellIndentLevels();\n }\n\n private updateCellIndentLevels(): void {\n this.cellIndentLevels = this.columns.map((_, i) => {\n return i === 0 ? this.nestingLevel : 0;\n });\n }\n\n private removeColumnObservers(): void {\n this.columnNotifiers.forEach(notifier => {\n notifier.unsubscribe(this);\n });\n this.columnNotifiers = [];\n }\n\n private observeColumns(): void {\n this.removeColumnObservers();\n\n this.columnNotifiers = this.columns.map(column => {\n const notifier = Observable.getNotifier(column.columnInternals);\n notifier.subscribe(this);\n return notifier;\n });\n }\n\n private updateCellStates(): void {\n this.cellStates = this.columns.map(column => {\n const fieldNames = column.columnInternals.dataRecordFieldNames;\n let cellState: TableCellState | undefined;\n if (this.hasValidFieldNames(fieldNames) && this.dataRecord) {\n const cellDataValues = fieldNames.map(\n field => this.dataRecord![field]\n );\n const cellRecord = Object.fromEntries(\n column.columnInternals.cellRecordFieldNames.map((k, j) => [\n k,\n cellDataValues[j]\n ])\n );\n const columnConfig = column.columnInternals.columnConfig;\n cellState = {\n cellRecord,\n columnConfig\n };\n }\n return cellState;\n });\n }\n\n private hasValidFieldNames(\n keys: readonly (TableFieldName | undefined)[]\n ): keys is TableFieldName[] {\n return keys.every(key => key !== undefined);\n }\n\n private selectedChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private selectionCheckboxChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private setSelectionCheckboxState(): void {\n if (this.selectionCheckbox) {\n this.ignoreSelectionChangeEvents = true;\n this.selectionCheckbox.checked = this.selected;\n this.ignoreSelectionChangeEvents = false;\n }\n }\n}\n\nconst nimbleTableRow = TableRow.compose({\n baseName: 'table-row',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableRow());\nexport const tableRowTag = 'nimble-table-row';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/table/components/row/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EACH,0BAA0B,EAC1B,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,eAAe,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,MAAM,IAAI,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC;MACf,oBAAoB;;;;;4BAKE,0BAA0B;uBAC/B,aAAa,UAAU,WAAW;+BAC1B,WAAW;;;;;;;kBAOxB,aAAa;;;;;;;4BAOH,cAAc;;;;4BAId,iBAAiB;;;;4BAIjB,sBAAsB;;;YAGtC,YAAY;4BACI,WAAW,WAAW,gBAAgB;oCAC9B,WAAW;;;;;;;kBAO7B,aAAa;;sBAET,aAAa;;;;;;;;iBAQlB,iBAAiB;kBAChB,iBAAiB;;;;;;;kBAOjB,aAAa;;sBAET,aAAa;;;;;;;;;;;;uBAYZ,eAAe;;;;;;;;iBAQrB,aAAa;;;;;iBAKb,aAAa;;;;;;;;;;;;;eAaf,aAAa;;;;;;;;;;;;uBAYL,YAAY;;;;qCAIE,YAAY;;oBAE7B,aAAa,MAAM,YAAY;;;eAGpC,aAAa,MAAM,aAAa;;kBAE7B,aAAa;;;;qCAIM,YAAY;;;;;sBAK3B,aAAa;;0BAET,YAAY;;;kBAGpB,aAAa;;;;;;;;;;;YAWnB,YAAY;;;CAGvB,CAAC,aAAa,CACX,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;oCAEyB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;;;;oCAI9B,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;;;;oCAI9B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC;;SAExD,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { White } from '@ni/nimble-tokens/dist/styledictionary/js/tokens';\nimport { display } from '../../../utilities/style/display';\nimport {\n applicationBackgroundColor,\n borderHoverColor,\n borderWidth,\n controlHeight,\n controlSlimHeight,\n fillHoverColor,\n fillHoverSelectedColor,\n fillSelectedColor,\n mediumPadding,\n smallPadding,\n standardPadding\n} from '../../../theme-provider/design-tokens';\nimport { Theme } from '../../../theme-provider/types';\nimport { hexToRgbaCssColor } from '../../../utilities/style/colors';\nimport { themeBehavior } from '../../../utilities/style/theme';\nimport { styles as expandCollapseStyles } from '../../../patterns/expand-collapse/styles';\nimport { focusVisible } from '../../../utilities/style/focus';\n\nexport const styles = css`\n ${display('flex')}\n ${expandCollapseStyles}\n\n :host {\n width: fit-content;\n min-width: 100%;\n background-color: ${applicationBackgroundColor};\n height: calc(${controlHeight} + 2 * ${borderWidth});\n border-top: calc(2 * ${borderWidth}) solid transparent;\n background-clip: padding-box;\n }\n\n :host::before {\n content: '';\n width: 100%;\n height: ${controlHeight};\n pointer-events: none;\n bottom: 0px;\n position: absolute;\n }\n\n :host([selectable]:not([selected]):hover)::before {\n background-color: ${fillHoverColor};\n }\n\n :host([selected])::before {\n background-color: ${fillSelectedColor};\n }\n\n :host([selected]:hover)::before {\n background-color: ${fillHoverSelectedColor};\n }\n\n :host(${focusVisible}) {\n outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};\n outline-offset: calc(-2 * ${borderWidth});\n }\n\n .expand-collapse-button {\n flex: 0 0 auto;\n margin-left: max(\n calc(\n ${mediumPadding} +\n (var(--ni-private-table-row-indent-level) - 1) *\n ${controlHeight}\n ),\n 0px\n );\n }\n\n .spinner-container {\n flex: 0 0 auto;\n width: ${controlSlimHeight};\n height: ${controlSlimHeight};\n align-self: center;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: max(\n calc(\n ${mediumPadding} +\n (var(--ni-private-table-row-indent-level) - 1) *\n ${controlHeight}\n ),\n 0px\n );\n }\n\n .row-operations-container {\n flex: 0 0 auto;\n display: flex;\n }\n\n .selection-checkbox {\n margin-left: ${standardPadding};\n }\n\n .selection-checkbox::part(label) {\n padding-left: 0px;\n }\n\n .row-front-spacer {\n width: ${controlHeight};\n flex: 0 0 auto;\n }\n\n .row-front-spacer.
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/table/components/row/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EACH,0BAA0B,EAC1B,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,eAAe,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,MAAM,IAAI,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC;MACf,oBAAoB;;;;;4BAKE,0BAA0B;uBAC/B,aAAa,UAAU,WAAW;+BAC1B,WAAW;;;;;;;kBAOxB,aAAa;;;;;;;4BAOH,cAAc;;;;4BAId,iBAAiB;;;;4BAIjB,sBAAsB;;;YAGtC,YAAY;4BACI,WAAW,WAAW,gBAAgB;oCAC9B,WAAW;;;;;;;kBAO7B,aAAa;;sBAET,aAAa;;;;;;;;iBAQlB,iBAAiB;kBAChB,iBAAiB;;;;;;;kBAOjB,aAAa;;sBAET,aAAa;;;;;;;;;;;;uBAYZ,eAAe;;;;;;;;iBAQrB,aAAa;;;;;iBAKb,aAAa;;;;;;;;;;;;;eAaf,aAAa;;;;;;;;;;;;uBAYL,YAAY;;;;qCAIE,YAAY;;oBAE7B,aAAa,MAAM,YAAY;;;eAGpC,aAAa,MAAM,aAAa;;kBAE7B,aAAa;;;;qCAIM,YAAY;;;;;sBAK3B,aAAa;;0BAET,YAAY;;;kBAGpB,aAAa;;;;;;;;;;;YAWnB,YAAY;;;CAGvB,CAAC,aAAa,CACX,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;oCAEyB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;;;;oCAI9B,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;;;;oCAI9B,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC;;SAExD,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { White } from '@ni/nimble-tokens/dist/styledictionary/js/tokens';\nimport { display } from '../../../utilities/style/display';\nimport {\n applicationBackgroundColor,\n borderHoverColor,\n borderWidth,\n controlHeight,\n controlSlimHeight,\n fillHoverColor,\n fillHoverSelectedColor,\n fillSelectedColor,\n mediumPadding,\n smallPadding,\n standardPadding\n} from '../../../theme-provider/design-tokens';\nimport { Theme } from '../../../theme-provider/types';\nimport { hexToRgbaCssColor } from '../../../utilities/style/colors';\nimport { themeBehavior } from '../../../utilities/style/theme';\nimport { styles as expandCollapseStyles } from '../../../patterns/expand-collapse/styles';\nimport { focusVisible } from '../../../utilities/style/focus';\n\nexport const styles = css`\n ${display('flex')}\n ${expandCollapseStyles}\n\n :host {\n width: fit-content;\n min-width: 100%;\n background-color: ${applicationBackgroundColor};\n height: calc(${controlHeight} + 2 * ${borderWidth});\n border-top: calc(2 * ${borderWidth}) solid transparent;\n background-clip: padding-box;\n }\n\n :host::before {\n content: '';\n width: 100%;\n height: ${controlHeight};\n pointer-events: none;\n bottom: 0px;\n position: absolute;\n }\n\n :host([selectable]:not([selected]):hover)::before {\n background-color: ${fillHoverColor};\n }\n\n :host([selected])::before {\n background-color: ${fillSelectedColor};\n }\n\n :host([selected]:hover)::before {\n background-color: ${fillHoverSelectedColor};\n }\n\n :host(${focusVisible}) {\n outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};\n outline-offset: calc(-2 * ${borderWidth});\n }\n\n .expand-collapse-button {\n flex: 0 0 auto;\n margin-left: max(\n calc(\n ${mediumPadding} +\n (var(--ni-private-table-row-indent-level) - 1) *\n ${controlHeight}\n ),\n 0px\n );\n }\n\n .spinner-container {\n flex: 0 0 auto;\n width: ${controlSlimHeight};\n height: ${controlSlimHeight};\n align-self: center;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: max(\n calc(\n ${mediumPadding} +\n (var(--ni-private-table-row-indent-level) - 1) *\n ${controlHeight}\n ),\n 0px\n );\n }\n\n .row-operations-container {\n flex: 0 0 auto;\n display: flex;\n }\n\n .selection-checkbox {\n margin-left: ${standardPadding};\n }\n\n .selection-checkbox::part(label) {\n padding-left: 0px;\n }\n\n .row-front-spacer {\n width: ${controlHeight};\n flex: 0 0 auto;\n }\n\n .row-front-spacer.reduced-size-spacer {\n width: ${mediumPadding};\n }\n\n .cell-container {\n display: grid;\n width: 100%;\n grid-auto-flow: column;\n grid-auto-columns: 1fr;\n grid-template-columns: var(--ni-private-table-row-grid-columns) auto;\n }\n\n .cell-container.nested-parent {\n margin-left: calc(\n (${controlHeight} * var(--ni-private-table-row-indent-level)) * -1\n );\n }\n\n nimble-table-cell {\n --ni-private-table-cell-action-menu-display: none;\n }\n\n nimble-table-cell[menu-open] {\n --ni-private-table-cell-action-menu-display: block;\n }\n\n nimble-table-cell${focusVisible} {\n --ni-private-table-cell-action-menu-display: block;\n }\n\n nimble-table-cell:first-of-type${focusVisible} {\n margin-left: calc(\n -1 * (${controlHeight} - ${smallPadding}) * var(--ni-private-table-cell-focus-offset-multiplier)\n );\n padding-left: calc(\n (${controlHeight} - ${mediumPadding}) *\n var(--ni-private-table-cell-focus-offset-multiplier) +\n ${mediumPadding}\n );\n }\n\n nimble-table-cell:first-of-type${focusVisible}::before {\n content: '';\n display: block;\n width: calc(\n (\n ${controlHeight} *\n var(--ni-private-table-cell-nesting-level) +\n ${smallPadding}\n ) * var(--ni-private-table-cell-focus-offset-multiplier)\n );\n height: ${controlHeight};\n }\n\n :host(:hover) nimble-table-cell {\n --ni-private-table-cell-action-menu-display: block;\n }\n\n :host([selected]) nimble-table-cell {\n --ni-private-table-cell-action-menu-display: block;\n }\n\n :host(${focusVisible}) nimble-table-cell {\n --ni-private-table-cell-action-menu-display: block;\n }\n`.withBehaviors(\n themeBehavior(\n Theme.color,\n css`\n :host([selectable]:not([selected]):hover)::before {\n background-color: ${hexToRgbaCssColor(White, 0.05)};\n }\n\n :host([selected])::before {\n background-color: ${hexToRgbaCssColor(White, 0.25)};\n }\n\n :host([selected]:hover)::before {\n background-color: ${hexToRgbaCssColor(White, 0.2)};\n }\n `\n )\n);\n"]}
|
|
@@ -33,7 +33,7 @@ export const template = html `
|
|
|
33
33
|
`)}
|
|
34
34
|
</span>
|
|
35
35
|
`)}
|
|
36
|
-
<span class="row-front-spacer ${x => (x.isTopLevelParentRow ? '
|
|
36
|
+
<span class="row-front-spacer ${x => (x.isTopLevelParentRow || !x.reserveCollapseSpace ? 'reduced-size-spacer' : '')}"></span>
|
|
37
37
|
${when(x => x.isParentRow, html `
|
|
38
38
|
${when(x => x.loading, html `
|
|
39
39
|
<span class="spinner-container">
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/row/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EACH,gBAAgB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACH,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACtB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAU;;;wBAGd,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;wBACnB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;sDACe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;;UAE/D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAU;;kBAE/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAU;uBAC5C,WAAW;0BACR,GAAG,CAAC,mBAAmB,CAAC;;0BAExB,EAAE,CAAC,+DAA+D;;mCAEzD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAoB,CAAC;kCAC9D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE;iCACpC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;sCAClC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;;wBAErD,WAAW;iBAClB,CAAC;;SAET,CAAC;wCAC8B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/row/template.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, ref, repeat, when } from '@microsoft/fast-element';\nimport type { TableRow } from '.';\nimport {\n ButtonAppearance,\n type MenuButtonToggleEventDetail\n} from '../../../menu-button/types';\nimport { tableCellTag } from '../cell';\nimport { checkboxTag } from '../../../checkbox';\nimport {\n tableRowCollapseLabel,\n tableRowExpandLabel,\n tableRowLoadingLabel,\n tableRowSelectLabel\n} from '../../../label-provider/table/label-tokens';\nimport type { TableColumn } from '../../../table-column/base';\nimport { buttonTag } from '../../../button';\nimport { iconArrowExpanderRightTag } from '../../../icons/arrow-expander-right';\nimport { spinnerTag } from '../../../spinner';\nimport { SpinnerAppearance } from '../../../spinner/types';\nimport type { CellViewSlotRequestEventDetail } from '../../types';\nimport { uniquifySlotNameForColumn } from '../../models/utilities';\n\n// prettier-ignore\nexport const template = html<TableRow>`\n <template \n role=\"row\"\n aria-selected=${x => x.ariaSelected}\n aria-expanded=${x => x.expanded}\n style=\"--ni-private-table-row-indent-level: ${x => x.nestingLevel};\"\n >\n ${when(x => !x.rowOperationGridCellHidden, html<TableRow>`\n <span role=\"gridcell\" class=\"row-operations-container\">\n ${when(x => x.showSelectionCheckbox, html<TableRow>`\n <${checkboxTag}\n ${ref('selectionCheckbox')}\n class=\"selection-checkbox\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n @change=\"${(x, c) => x.onSelectionCheckboxChange(c.event as CustomEvent)}\"\n @click=\"${(_, c) => c.event.stopPropagation()}\"\n title=\"${x => tableRowSelectLabel.getValueFor(x)}\"\n aria-label=\"${x => tableRowSelectLabel.getValueFor(x)}\"\n >\n </${checkboxTag}>\n `)}\n </span>\n `)}\n <span class=\"row-front-spacer ${x => (x.isTopLevelParentRow || !x.reserveCollapseSpace ? 'reduced-size-spacer' : '')}\"></span>\n ${when(x => x.isParentRow, html<TableRow>`\n ${when(x => x.loading, html<TableRow>`\n <span class=\"spinner-container\">\n <${spinnerTag}\n appearance=\"${SpinnerAppearance.accent}\"\n aria-label=\"${x => tableRowLoadingLabel.getValueFor(x)}\"\n title=\"${x => tableRowLoadingLabel.getValueFor(x)}\"\n >\n </${spinnerTag}>\n </span>\n `)}\n ${when(x => !x.loading, html<TableRow>`\n <${buttonTag}\n appearance=\"${ButtonAppearance.ghost}\"\n content-hidden\n class=\"expand-collapse-button\"\n tabindex=\"-1\"\n @click=\"${(x, c) => x.onRowExpandToggle(c.event)}\"\n title=\"${x => (x.expanded ? tableRowCollapseLabel.getValueFor(x) : tableRowExpandLabel.getValueFor(x))}\"\n aria-hidden=\"true\"\n >\n <${iconArrowExpanderRightTag} ${ref('expandIcon')} slot=\"start\" class=\"expander-icon ${x => x.animationClass}\"></${iconArrowExpanderRightTag}>\n </${buttonTag}>\n `)}\n `)}\n\n <span ${ref('cellContainer')} \n class=\"cell-container ${x => (x.isNestedParent ? 'nested-parent' : '')}\"\n >\n ${repeat(x => x.columns, html<TableColumn, TableRow>`\n ${when(x => !x.columnHidden, html<TableColumn, TableRow>`\n <${tableCellTag}\n class=\"cell\"\n :cellState=\"${(_, c) => c.parent.cellStates[c.index]}\"\n :cellViewTemplate=\"${x => x.columnInternals.cellViewTemplate}\"\n :column=\"${x => x}\"\n column-id=\"${x => x.columnId}\"\n :recordId=\"${(_, c) => c.parent.recordId}\"\n ?has-action-menu=\"${x => !!x.actionMenuSlot}\"\n action-menu-label=\"${x => x.actionMenuLabel}\"\n @cell-action-menu-beforetoggle=\"${(x, c) => c.parent.onCellActionMenuBeforeToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>, x)}\"\n @cell-action-menu-toggle=\"${(x, c) => c.parent.onCellActionMenuToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>, x)}\"\n @cell-view-slots-request=\"${(x, c) => c.parent.onCellViewSlotsRequest(x, c.event as CustomEvent<CellViewSlotRequestEventDetail>)}\"\n :nestingLevel=\"${(_, c) => c.parent.cellIndentLevels[c.index]}\"\n >\n\n ${when((x, c) => ((c.parent as TableRow).currentActionMenuColumn === x) && x.actionMenuSlot, html<TableColumn, TableRow>`\n <slot\n name=\"${x => `row-action-menu-${x.actionMenuSlot!}`}\"\n slot=\"cellActionMenu\"\n ></slot>\n `)}\n\n ${repeat(x => x.columnInternals.slotNames, html<string, TableColumn>`\n <slot\n name=\"${(x, c) => uniquifySlotNameForColumn(c.parent, x)}\"\n slot=\"${(x, c) => uniquifySlotNameForColumn(c.parent, x)}\"\n ></slot>\n `)}\n </${tableCellTag}>\n `)}\n `, { recycle: false, positioning: true })}\n </span>\n </template>\n`;\n"]}
|
|
@@ -35,10 +35,6 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
|
|
|
35
35
|
* @internal
|
|
36
36
|
*/
|
|
37
37
|
readonly rowElements: (TableRow | TableGroupRow)[];
|
|
38
|
-
/**
|
|
39
|
-
* @internal
|
|
40
|
-
*/
|
|
41
|
-
actionMenuSlots: string[];
|
|
42
38
|
/**
|
|
43
39
|
* @internal
|
|
44
40
|
*/
|
|
@@ -80,6 +76,14 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
|
|
|
80
76
|
* @internal
|
|
81
77
|
*/
|
|
82
78
|
showCollapseAll: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
canHaveCollapsibleRows: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
get collapseButtonVisibility(): string;
|
|
83
87
|
/**
|
|
84
88
|
* @internal
|
|
85
89
|
*/
|
|
@@ -130,7 +134,8 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
|
|
|
130
134
|
private readonly layoutManagerNotifier;
|
|
131
135
|
private isInitialized;
|
|
132
136
|
private ignoreSelectionChangeEvents;
|
|
133
|
-
private readonly
|
|
137
|
+
private readonly requestedSlots;
|
|
138
|
+
private actionMenuSlots;
|
|
134
139
|
constructor();
|
|
135
140
|
setData(newData: readonly TData[]): Promise<void>;
|
|
136
141
|
getSelectedRecordIds(): Promise<string[]>;
|
|
@@ -202,7 +207,7 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
|
|
|
202
207
|
protected idFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
|
|
203
208
|
protected parentIdFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
|
|
204
209
|
protected columnsChanged(_prev: TableColumn[] | undefined, _next: TableColumn[]): void;
|
|
205
|
-
private
|
|
210
|
+
private updateRequestedSlotsForOpeningActionMenu;
|
|
206
211
|
private handleActionMenuBeforeToggleEvent;
|
|
207
212
|
private handleRowActionMenuToggleEvent;
|
|
208
213
|
private getActionMenuToggleEventDetail;
|
package/dist/esm/table/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { attr, Observable, observable, DOM } from '@microsoft/fast-element';
|
|
2
|
+
import { attr, Observable, observable, DOM, volatile } from '@microsoft/fast-element';
|
|
3
3
|
import { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';
|
|
4
4
|
import { createTable as tanStackCreateTable, getCoreRowModel as tanStackGetCoreRowModel, getSortedRowModel as tanStackGetSortedRowModel, getGroupedRowModel as tanStackGetGroupedRowModel, getExpandedRowModel as tanStackGetExpandedRowModel } from '@tanstack/table-core';
|
|
5
5
|
import { keyEnter } from '@microsoft/fast-web-utilities';
|
|
@@ -34,6 +34,18 @@ export class Table extends FoundationElement {
|
|
|
34
34
|
return (this.selectionMode === TableRowSelectionMode.multiple
|
|
35
35
|
|| this.showCollapseAll);
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
get collapseButtonVisibility() {
|
|
41
|
+
if (!this.canHaveCollapsibleRows) {
|
|
42
|
+
return 'hidden-size-reduced';
|
|
43
|
+
}
|
|
44
|
+
if (this.showCollapseAll) {
|
|
45
|
+
return 'visible';
|
|
46
|
+
}
|
|
47
|
+
return '';
|
|
48
|
+
}
|
|
37
49
|
constructor() {
|
|
38
50
|
super();
|
|
39
51
|
this.selectionMode = TableRowSelectionMode.none;
|
|
@@ -53,10 +65,6 @@ export class Table extends FoundationElement {
|
|
|
53
65
|
* @internal
|
|
54
66
|
*/
|
|
55
67
|
this.rowElements = [];
|
|
56
|
-
/**
|
|
57
|
-
* @internal
|
|
58
|
-
*/
|
|
59
|
-
this.actionMenuSlots = [];
|
|
60
68
|
/**
|
|
61
69
|
* @internal
|
|
62
70
|
*/
|
|
@@ -73,6 +81,10 @@ export class Table extends FoundationElement {
|
|
|
73
81
|
* @internal
|
|
74
82
|
*/
|
|
75
83
|
this.showCollapseAll = false;
|
|
84
|
+
/**
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
this.canHaveCollapsibleRows = false;
|
|
76
88
|
/**
|
|
77
89
|
* @internal
|
|
78
90
|
*/
|
|
@@ -95,7 +107,8 @@ export class Table extends FoundationElement {
|
|
|
95
107
|
this.ignoreSelectionChangeEvents = false;
|
|
96
108
|
// Map from the external slot name to the record ID of the row that should have the slot
|
|
97
109
|
// and the unique slot name that the slot should be slotted into.
|
|
98
|
-
this.
|
|
110
|
+
this.requestedSlots = new Map();
|
|
111
|
+
this.actionMenuSlots = [];
|
|
99
112
|
this.onViewPortScroll = (event) => {
|
|
100
113
|
this.scrollX = event.target.scrollLeft;
|
|
101
114
|
};
|
|
@@ -293,7 +306,7 @@ export class Table extends FoundationElement {
|
|
|
293
306
|
event.stopImmediatePropagation();
|
|
294
307
|
for (const slotMetadata of event.detail.slots) {
|
|
295
308
|
const uniqueSlot = uniquifySlotNameForColumnId(event.detail.columnInternalId, slotMetadata.slot);
|
|
296
|
-
this.
|
|
309
|
+
this.requestedSlots.set(slotMetadata.name, {
|
|
297
310
|
recordId: event.detail.recordId,
|
|
298
311
|
uniqueSlot
|
|
299
312
|
});
|
|
@@ -395,6 +408,12 @@ export class Table extends FoundationElement {
|
|
|
395
408
|
if (this.tableUpdateTracker.requiresTanStackUpdate) {
|
|
396
409
|
this.updateTanStack();
|
|
397
410
|
}
|
|
411
|
+
if (this.tableUpdateTracker.updateRowParentIds
|
|
412
|
+
|| this.tableUpdateTracker.updateGroupRows) {
|
|
413
|
+
const hierarchyEnabled = this.isHierarchyEnabled();
|
|
414
|
+
const hasGroupableColumns = this.columns.some(x => !x.columnInternals.groupingDisabled);
|
|
415
|
+
this.canHaveCollapsibleRows = hierarchyEnabled || hasGroupableColumns;
|
|
416
|
+
}
|
|
398
417
|
if (this.tableUpdateTracker.updateActionMenuSlots) {
|
|
399
418
|
this.updateActionMenuSlots();
|
|
400
419
|
}
|
|
@@ -472,9 +491,12 @@ export class Table extends FoundationElement {
|
|
|
472
491
|
this.observeColumns();
|
|
473
492
|
this.tableUpdateTracker.trackColumnInstancesChanged();
|
|
474
493
|
}
|
|
475
|
-
|
|
494
|
+
updateRequestedSlotsForOpeningActionMenu(openActionMenuRecordId) {
|
|
476
495
|
for (const actionMenuSlot of this.actionMenuSlots) {
|
|
477
|
-
this.
|
|
496
|
+
this.requestedSlots.set(actionMenuSlot, {
|
|
497
|
+
recordId: openActionMenuRecordId,
|
|
498
|
+
uniqueSlot: `row-action-menu-${actionMenuSlot}`
|
|
499
|
+
});
|
|
478
500
|
}
|
|
479
501
|
this.refreshRows();
|
|
480
502
|
}
|
|
@@ -484,7 +506,7 @@ export class Table extends FoundationElement {
|
|
|
484
506
|
await this.emitSelectionChangeEvent();
|
|
485
507
|
}
|
|
486
508
|
this.openActionMenuRecordId = event.detail.recordIds[0];
|
|
487
|
-
this.
|
|
509
|
+
this.updateRequestedSlotsForOpeningActionMenu(this.openActionMenuRecordId);
|
|
488
510
|
const detail = await this.getActionMenuToggleEventDetail(event);
|
|
489
511
|
this.$emit('action-menu-beforetoggle', detail);
|
|
490
512
|
}
|
|
@@ -612,6 +634,13 @@ export class Table extends FoundationElement {
|
|
|
612
634
|
this.updateTableOptions(updatedOptions);
|
|
613
635
|
}
|
|
614
636
|
updateActionMenuSlots() {
|
|
637
|
+
if (this.openActionMenuRecordId !== undefined) {
|
|
638
|
+
// If the action menu is open, delete all the slots associated
|
|
639
|
+
// with the old action menu slots.
|
|
640
|
+
for (const actionMenuSlot of this.actionMenuSlots) {
|
|
641
|
+
this.requestedSlots.delete(actionMenuSlot);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
615
644
|
const slots = new Set();
|
|
616
645
|
for (const column of this.columns) {
|
|
617
646
|
if (column.actionMenuSlot) {
|
|
@@ -619,6 +648,11 @@ export class Table extends FoundationElement {
|
|
|
619
648
|
}
|
|
620
649
|
}
|
|
621
650
|
this.actionMenuSlots = Array.from(slots);
|
|
651
|
+
if (this.openActionMenuRecordId !== undefined) {
|
|
652
|
+
// If the action menu is open, create slots for all the new
|
|
653
|
+
// action menu slots.
|
|
654
|
+
this.updateRequestedSlotsForOpeningActionMenu(this.openActionMenuRecordId);
|
|
655
|
+
}
|
|
622
656
|
}
|
|
623
657
|
validate() {
|
|
624
658
|
this.tableValidator.validateIdFieldConfiguration(this.selectionMode, this.idFieldName, this.parentIdFieldName);
|
|
@@ -703,7 +737,7 @@ export class Table extends FoundationElement {
|
|
|
703
737
|
groupColumn: this.getGroupRowColumn(row),
|
|
704
738
|
resolvedRowIndex: row.index,
|
|
705
739
|
isLoadingChildren: this.expansionManager.isLoadingChildren(row.id),
|
|
706
|
-
|
|
740
|
+
requestedSlots: slotsByRecordId[row.id] ?? []
|
|
707
741
|
};
|
|
708
742
|
hasDataHierarchy = hasDataHierarchy || isParent;
|
|
709
743
|
return rowState;
|
|
@@ -715,7 +749,7 @@ export class Table extends FoundationElement {
|
|
|
715
749
|
getRequestedSlotsByRecordId() {
|
|
716
750
|
const slotsByRecordId = {};
|
|
717
751
|
for (const [slotName, { recordId, uniqueSlot }] of this
|
|
718
|
-
.
|
|
752
|
+
.requestedSlots) {
|
|
719
753
|
if (!Object.prototype.hasOwnProperty.call(slotsByRecordId, recordId)) {
|
|
720
754
|
slotsByRecordId[recordId] = [];
|
|
721
755
|
}
|
|
@@ -863,9 +897,6 @@ __decorate([
|
|
|
863
897
|
__decorate([
|
|
864
898
|
observable
|
|
865
899
|
], Table.prototype, "rowElements", void 0);
|
|
866
|
-
__decorate([
|
|
867
|
-
observable
|
|
868
|
-
], Table.prototype, "actionMenuSlots", void 0);
|
|
869
900
|
__decorate([
|
|
870
901
|
observable
|
|
871
902
|
], Table.prototype, "openActionMenuRecordId", void 0);
|
|
@@ -890,6 +921,12 @@ __decorate([
|
|
|
890
921
|
__decorate([
|
|
891
922
|
observable
|
|
892
923
|
], Table.prototype, "showCollapseAll", void 0);
|
|
924
|
+
__decorate([
|
|
925
|
+
observable
|
|
926
|
+
], Table.prototype, "canHaveCollapsibleRows", void 0);
|
|
927
|
+
__decorate([
|
|
928
|
+
volatile
|
|
929
|
+
], Table.prototype, "collapseButtonVisibility", null);
|
|
893
930
|
__decorate([
|
|
894
931
|
observable
|
|
895
932
|
], Table.prototype, "firstSortedColumn", void 0);
|