@ni/nimble-components 34.9.0 → 34.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/all-components-bundle.js +56 -14
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +16 -16
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/table/components/row/index.js +1 -0
  6. package/dist/esm/table/components/row/index.js.map +1 -1
  7. package/dist/esm/table/index.d.ts +2 -0
  8. package/dist/esm/table/index.js +23 -5
  9. package/dist/esm/table/index.js.map +1 -1
  10. package/dist/esm/table/models/interactive-selection-manager.d.ts +3 -1
  11. package/dist/esm/table/models/interactive-selection-manager.js +12 -7
  12. package/dist/esm/table/models/interactive-selection-manager.js.map +1 -1
  13. package/dist/esm/table/models/selection-managers/multi-selection-manager.js +3 -0
  14. package/dist/esm/table/models/selection-managers/multi-selection-manager.js.map +1 -1
  15. package/dist/esm/table/models/selection-managers/selection-manager-base.d.ts +3 -1
  16. package/dist/esm/table/models/selection-managers/selection-manager-base.js +5 -1
  17. package/dist/esm/table/models/selection-managers/selection-manager-base.js.map +1 -1
  18. package/dist/esm/table/models/selection-managers/single-selection-manager.js +3 -0
  19. package/dist/esm/table/models/selection-managers/single-selection-manager.js.map +1 -1
  20. package/dist/esm/table/models/table-update-tracker.d.ts +3 -1
  21. package/dist/esm/table/models/table-update-tracker.js +9 -1
  22. package/dist/esm/table/models/table-update-tracker.js.map +1 -1
  23. package/dist/esm/table/types.d.ts +1 -0
  24. package/dist/esm/table/types.js.map +1 -1
  25. package/package.json +4 -3
@@ -7,9 +7,10 @@ import { SingleSelectionManager } from './selection-managers/single-selection-ma
7
7
  * handling when the selection mode of the table is changed.
8
8
  */
9
9
  export class InteractiveSelectionManager {
10
- constructor(tanStackTable, selectionMode) {
10
+ constructor(tanStackTable, selectionMode, actionMenusPreserveSelection) {
11
11
  this.tanStackTable = tanStackTable;
12
- this.selectionManager = this.createSelectionManager(selectionMode);
12
+ this.actionMenusPreserveSelection = actionMenusPreserveSelection;
13
+ this.selectionManager = this.createSelectionManager(selectionMode, actionMenusPreserveSelection);
13
14
  }
14
15
  handleRowSelectionToggle(rowState, isSelecting, shiftKey) {
15
16
  if (!rowState) {
@@ -30,7 +31,11 @@ export class InteractiveSelectionManager {
30
31
  return this.selectionManager.handleActionMenuOpening(rowState);
31
32
  }
32
33
  handleSelectionModeChanged(selectionMode) {
33
- this.selectionManager = this.createSelectionManager(selectionMode);
34
+ this.selectionManager = this.createSelectionManager(selectionMode, this.actionMenusPreserveSelection);
35
+ }
36
+ handleActionMenusPreserveSelectionChanged(actionMenusPreserveSelection) {
37
+ this.actionMenusPreserveSelection = actionMenusPreserveSelection;
38
+ this.selectionManager.updateActionMenusPreserveSelection(actionMenusPreserveSelection);
34
39
  }
35
40
  handleSelectionReset() {
36
41
  this.selectionManager.reset();
@@ -48,14 +53,14 @@ export class InteractiveSelectionManager {
48
53
  });
49
54
  return selectedRecordIds;
50
55
  }
51
- createSelectionManager(selectionMode) {
56
+ createSelectionManager(selectionMode, actionMenusPreserveSelection) {
52
57
  switch (selectionMode) {
53
58
  case TableRowSelectionMode.multiple:
54
- return new MultiSelectionManager(this.tanStackTable);
59
+ return new MultiSelectionManager(this.tanStackTable, actionMenusPreserveSelection);
55
60
  case TableRowSelectionMode.single:
56
- return new SingleSelectionManager(this.tanStackTable);
61
+ return new SingleSelectionManager(this.tanStackTable, actionMenusPreserveSelection);
57
62
  case TableRowSelectionMode.none:
58
- return new DisabledSelectionManager(this.tanStackTable);
63
+ return new DisabledSelectionManager(this.tanStackTable, actionMenusPreserveSelection);
59
64
  default:
60
65
  throw new Error('unknown selection mode found');
61
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-selection-manager.js","sourceRoot":"","sources":["../../../../src/table/models/interactive-selection-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAEvF;;;GAGG;AACH,MAAM,OAAO,2BAA2B;IAIpC,YACI,aAA8C,EAC9C,aAAoC;QAEpC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAEM,wBAAwB,CAC3B,QAAmC,EACnC,WAAoB,EACpB,QAAiB;QAEjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CACjD,QAAQ,EACR,WAAW,EACX,QAAQ,CACX,CAAC;IACN,CAAC;IAEM,cAAc,CACjB,QAAmC,EACnC,QAAiB,EACjB,OAAgB;QAEhB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACvC,QAAQ,EACR,QAAQ,EACR,OAAO,CACV,CAAC;IACN,CAAC;IAEM,uBAAuB,CAC1B,QAAmC;QAEnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;IAEM,0BAA0B,CAC7B,aAAoC;QAEpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAEM,2BAA2B;QAC9B,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7E,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAC1C,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;YACvB,IAAI,UAAU,EAAE,CAAC;gBACb,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;QACL,CAAC,CACJ,CAAC;QACF,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAEO,sBAAsB,CAC1B,aAAoC;QAEpC,QAAQ,aAAa,EAAE,CAAC;YACpB,KAAK,qBAAqB,CAAC,QAAQ;gBAC/B,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzD,KAAK,qBAAqB,CAAC,MAAM;gBAC7B,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1D,KAAK,qBAAqB,CAAC,IAAI;gBAC3B,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D;gBACI,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type { Table as TanStackTable } from '@tanstack/table-core';\nimport { TableRowSelectionMode } from '../types';\nimport type { TableRecord, TableRowState, TableNode } from '../types';\nimport type { SelectionManagerBase } from './selection-managers/selection-manager-base';\nimport { DisabledSelectionManager } from './selection-managers/disabled-selection-manager';\nimport { MultiSelectionManager } from './selection-managers/multi-selection-manager';\nimport { SingleSelectionManager } from './selection-managers/single-selection-manager';\n\n/**\n * Manages the behavior associated with interactive row selection for the table, including\n * handling when the selection mode of the table is changed.\n */\nexport class InteractiveSelectionManager<TData extends TableRecord> {\n private readonly tanStackTable: TanStackTable<TableNode<TData>>;\n private selectionManager: SelectionManagerBase<TData>;\n\n public constructor(\n tanStackTable: TanStackTable<TableNode<TData>>,\n selectionMode: TableRowSelectionMode\n ) {\n this.tanStackTable = tanStackTable;\n this.selectionManager = this.createSelectionManager(selectionMode);\n }\n\n public handleRowSelectionToggle(\n rowState: TableRowState | undefined,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleRowSelectionToggle(\n rowState,\n isSelecting,\n shiftKey\n );\n }\n\n public handleRowClick(\n rowState: TableRowState | undefined,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleRowClick(\n rowState,\n shiftKey,\n ctrlKey\n );\n }\n\n public handleActionMenuOpening(\n rowState: TableRowState | undefined\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleActionMenuOpening(rowState);\n }\n\n public handleSelectionModeChanged(\n selectionMode: TableRowSelectionMode\n ): void {\n this.selectionManager = this.createSelectionManager(selectionMode);\n }\n\n public handleSelectionReset(): void {\n this.selectionManager.reset();\n }\n\n public getCurrentSelectedRecordIds(): string[] {\n const tanStackSelectionState = this.tanStackTable.options.state.rowSelection;\n if (!tanStackSelectionState) {\n return [];\n }\n\n const selectedRecordIds: string[] = [];\n Object.entries(tanStackSelectionState).forEach(\n ([recordId, isSelected]) => {\n if (isSelected) {\n selectedRecordIds.push(recordId);\n }\n }\n );\n return selectedRecordIds;\n }\n\n private createSelectionManager(\n selectionMode: TableRowSelectionMode\n ): SelectionManagerBase<TData> {\n switch (selectionMode) {\n case TableRowSelectionMode.multiple:\n return new MultiSelectionManager(this.tanStackTable);\n case TableRowSelectionMode.single:\n return new SingleSelectionManager(this.tanStackTable);\n case TableRowSelectionMode.none:\n return new DisabledSelectionManager(this.tanStackTable);\n default:\n throw new Error('unknown selection mode found');\n }\n }\n}\n"]}
1
+ {"version":3,"file":"interactive-selection-manager.js","sourceRoot":"","sources":["../../../../src/table/models/interactive-selection-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Table as TanStackTable } from '@tanstack/table-core';\nimport { TableRowSelectionMode } from '../types';\nimport type { TableRecord, TableRowState, TableNode } from '../types';\nimport type { SelectionManagerBase } from './selection-managers/selection-manager-base';\nimport { DisabledSelectionManager } from './selection-managers/disabled-selection-manager';\nimport { MultiSelectionManager } from './selection-managers/multi-selection-manager';\nimport { SingleSelectionManager } from './selection-managers/single-selection-manager';\n\n/**\n * Manages the behavior associated with interactive row selection for the table, including\n * handling when the selection mode of the table is changed.\n */\nexport class InteractiveSelectionManager<TData extends TableRecord> {\n private readonly tanStackTable: TanStackTable<TableNode<TData>>;\n private selectionManager: SelectionManagerBase<TData>;\n private actionMenusPreserveSelection: boolean;\n\n public constructor(\n tanStackTable: TanStackTable<TableNode<TData>>,\n selectionMode: TableRowSelectionMode,\n actionMenusPreserveSelection: boolean\n ) {\n this.tanStackTable = tanStackTable;\n this.actionMenusPreserveSelection = actionMenusPreserveSelection;\n this.selectionManager = this.createSelectionManager(\n selectionMode,\n actionMenusPreserveSelection\n );\n }\n\n public handleRowSelectionToggle(\n rowState: TableRowState | undefined,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleRowSelectionToggle(\n rowState,\n isSelecting,\n shiftKey\n );\n }\n\n public handleRowClick(\n rowState: TableRowState | undefined,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleRowClick(\n rowState,\n shiftKey,\n ctrlKey\n );\n }\n\n public handleActionMenuOpening(\n rowState: TableRowState | undefined\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleActionMenuOpening(rowState);\n }\n\n public handleSelectionModeChanged(\n selectionMode: TableRowSelectionMode\n ): void {\n this.selectionManager = this.createSelectionManager(\n selectionMode,\n this.actionMenusPreserveSelection\n );\n }\n\n public handleActionMenusPreserveSelectionChanged(\n actionMenusPreserveSelection: boolean\n ): void {\n this.actionMenusPreserveSelection = actionMenusPreserveSelection;\n\n this.selectionManager.updateActionMenusPreserveSelection(\n actionMenusPreserveSelection\n );\n }\n\n public handleSelectionReset(): void {\n this.selectionManager.reset();\n }\n\n public getCurrentSelectedRecordIds(): string[] {\n const tanStackSelectionState = this.tanStackTable.options.state.rowSelection;\n if (!tanStackSelectionState) {\n return [];\n }\n\n const selectedRecordIds: string[] = [];\n Object.entries(tanStackSelectionState).forEach(\n ([recordId, isSelected]) => {\n if (isSelected) {\n selectedRecordIds.push(recordId);\n }\n }\n );\n return selectedRecordIds;\n }\n\n private createSelectionManager(\n selectionMode: TableRowSelectionMode,\n actionMenusPreserveSelection: boolean\n ): SelectionManagerBase<TData> {\n switch (selectionMode) {\n case TableRowSelectionMode.multiple:\n return new MultiSelectionManager(\n this.tanStackTable,\n actionMenusPreserveSelection\n );\n case TableRowSelectionMode.single:\n return new SingleSelectionManager(\n this.tanStackTable,\n actionMenusPreserveSelection\n );\n case TableRowSelectionMode.none:\n return new DisabledSelectionManager(\n this.tanStackTable,\n actionMenusPreserveSelection\n );\n default:\n throw new Error('unknown selection mode found');\n }\n }\n}\n"]}
@@ -37,6 +37,9 @@ export class MultiSelectionManager extends SelectionManagerBase {
37
37
  return this.selectSingleRow(rowState);
38
38
  }
39
39
  handleActionMenuOpening(rowState) {
40
+ if (this.actionMenusPreserveSelection) {
41
+ return false;
42
+ }
40
43
  if (rowState.selectionState === TableRowSelectionState.selected) {
41
44
  return false;
42
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"multi-selection-manager.js","sourceRoot":"","sources":["../../../../../src/table/models/selection-managers/multi-selection-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Row as TanStackRow,\n RowSelectionState as TanStackRowSelectionState\n} from '@tanstack/table-core';\nimport {\n type TableNode,\n type TableRecord,\n TableRowSelectionState,\n type TableRowState\n} from '../../types';\nimport { SelectionManagerBase } from './selection-manager-base';\n\n/**\n * Selection manager for interactive selection when the selection mode of the table is\n * `TableRowSelectionMode.multiple`.\n */\nexport class MultiSelectionManager<\n TData extends TableRecord\n> extends SelectionManagerBase<TData> {\n private shiftSelectStartRowId?: string;\n private previousShiftSelectRowEndId?: string;\n\n public override handleRowSelectionToggle(\n rowState: TableRowState,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean {\n if (shiftKey) {\n if (this.tryUpdateRangeSelection(rowState.id, true)) {\n // Made a range selection\n return true;\n }\n }\n\n this.shiftSelectStartRowId = isSelecting ? rowState.id : undefined;\n this.previousShiftSelectRowEndId = undefined;\n this.toggleIsRowSelected(rowState, isSelecting);\n return true;\n }\n\n public override handleRowClick(\n rowState: TableRowState,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean {\n if (shiftKey) {\n const additiveSelection = ctrlKey;\n if (this.tryUpdateRangeSelection(rowState.id, additiveSelection)) {\n // Made a range selection\n return true;\n }\n }\n\n if (ctrlKey) {\n const isSelecting = rowState.selectionState !== TableRowSelectionState.selected;\n this.shiftSelectStartRowId = isSelecting ? rowState.id : undefined;\n this.previousShiftSelectRowEndId = undefined;\n this.toggleIsRowSelected(rowState);\n return true;\n }\n\n this.shiftSelectStartRowId = rowState.id;\n this.previousShiftSelectRowEndId = undefined;\n return this.selectSingleRow(rowState);\n }\n\n public override handleActionMenuOpening(rowState: TableRowState): boolean {\n if (rowState.selectionState === TableRowSelectionState.selected) {\n return false;\n }\n return this.selectSingleRow(rowState);\n }\n\n public override reset(): void {\n this.shiftSelectStartRowId = undefined;\n this.previousShiftSelectRowEndId = undefined;\n }\n\n private tryUpdateRangeSelection(\n rowId: string,\n additiveSelection: boolean\n ): boolean {\n if (this.shiftSelectStartRowId === undefined) {\n return false;\n }\n\n const allRows = this.getAllOrderedRows();\n const selectionStartIndex = this.getRowIndexForId(\n this.shiftSelectStartRowId,\n allRows\n );\n if (selectionStartIndex === -1) {\n return false;\n }\n\n let selectionState: TanStackRowSelectionState = {};\n if (additiveSelection) {\n // If the range selection is additive to the existing selection, start with the initial selection state\n // and remove the previous range selection, if any. Otherwise, the range selection will start empty and\n // only contain the new range selection.\n selectionState = this.tanStackTable.getState().rowSelection;\n this.removePreviousRangeSelection(\n selectionState,\n selectionStartIndex,\n allRows\n );\n }\n\n this.addNewRangeSelection(\n selectionState,\n rowId,\n selectionStartIndex,\n allRows\n );\n this.previousShiftSelectRowEndId = rowId;\n this.tanStackTable.setRowSelection(selectionState);\n\n return true;\n }\n\n private removePreviousRangeSelection(\n selection: TanStackRowSelectionState,\n shiftSelectStartRowIndex: number,\n allRows: TanStackRow<TableNode<TData>>[]\n ): void {\n const previousRangeEndIndex = this.getRowIndexForId(\n this.previousShiftSelectRowEndId,\n allRows\n );\n this.updateSelectionStateForRange(\n selection,\n shiftSelectStartRowIndex,\n previousRangeEndIndex,\n allRows,\n false\n );\n }\n\n private addNewRangeSelection(\n selection: TanStackRowSelectionState,\n endRangeRowId: string,\n shiftSelectStartRowIndex: number,\n allRows: TanStackRow<TableNode<TData>>[]\n ): void {\n const newRangeEndIndex = this.getRowIndexForId(endRangeRowId, allRows);\n this.updateSelectionStateForRange(\n selection,\n shiftSelectStartRowIndex,\n newRangeEndIndex,\n allRows,\n true\n );\n }\n\n private updateSelectionStateForRange(\n selection: TanStackRowSelectionState,\n rangeStartIndex: number,\n rangeEndIndex: number,\n allRows: TanStackRow<TableNode<TData>>[],\n isSelecting: boolean\n ): void {\n if (rangeStartIndex === -1 || rangeEndIndex === -1) {\n return;\n }\n\n const firstRowIndex = Math.min(rangeStartIndex, rangeEndIndex);\n const lastRowIndex = Math.max(rangeStartIndex, rangeEndIndex);\n for (let i = firstRowIndex; i <= lastRowIndex; i++) {\n const row = allRows[i]!;\n if (row.getIsGrouped()) {\n continue;\n }\n this.updateSelectionStateForRow(selection, row.id, isSelecting);\n }\n\n const endRangeRow = allRows[rangeEndIndex]!;\n if (endRangeRow.getIsGrouped()) {\n this.getAllLeafRowIds(endRangeRow.id).forEach(id => this.updateSelectionStateForRow(selection, id, isSelecting));\n }\n }\n\n private updateSelectionStateForRow(\n selection: TanStackRowSelectionState,\n rowId: string,\n isSelecting: boolean\n ): void {\n if (isSelecting) {\n selection[rowId] = true;\n } else {\n delete selection[rowId];\n }\n }\n\n private getRowIndexForId(\n id: string | undefined,\n rows: TanStackRow<TableNode<TData>>[]\n ): number {\n if (!id) {\n return -1;\n }\n return rows.findIndex(x => x.id === id);\n }\n}\n"]}
1
+ {"version":3,"file":"multi-selection-manager.js","sourceRoot":"","sources":["../../../../../src/table/models/selection-managers/multi-selection-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Row as TanStackRow,\n RowSelectionState as TanStackRowSelectionState\n} from '@tanstack/table-core';\nimport {\n type TableNode,\n type TableRecord,\n TableRowSelectionState,\n type TableRowState\n} from '../../types';\nimport { SelectionManagerBase } from './selection-manager-base';\n\n/**\n * Selection manager for interactive selection when the selection mode of the table is\n * `TableRowSelectionMode.multiple`.\n */\nexport class MultiSelectionManager<\n TData extends TableRecord\n> extends SelectionManagerBase<TData> {\n private shiftSelectStartRowId?: string;\n private previousShiftSelectRowEndId?: string;\n\n public override handleRowSelectionToggle(\n rowState: TableRowState,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean {\n if (shiftKey) {\n if (this.tryUpdateRangeSelection(rowState.id, true)) {\n // Made a range selection\n return true;\n }\n }\n\n this.shiftSelectStartRowId = isSelecting ? rowState.id : undefined;\n this.previousShiftSelectRowEndId = undefined;\n this.toggleIsRowSelected(rowState, isSelecting);\n return true;\n }\n\n public override handleRowClick(\n rowState: TableRowState,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean {\n if (shiftKey) {\n const additiveSelection = ctrlKey;\n if (this.tryUpdateRangeSelection(rowState.id, additiveSelection)) {\n // Made a range selection\n return true;\n }\n }\n\n if (ctrlKey) {\n const isSelecting = rowState.selectionState !== TableRowSelectionState.selected;\n this.shiftSelectStartRowId = isSelecting ? rowState.id : undefined;\n this.previousShiftSelectRowEndId = undefined;\n this.toggleIsRowSelected(rowState);\n return true;\n }\n\n this.shiftSelectStartRowId = rowState.id;\n this.previousShiftSelectRowEndId = undefined;\n return this.selectSingleRow(rowState);\n }\n\n public override handleActionMenuOpening(rowState: TableRowState): boolean {\n if (this.actionMenusPreserveSelection) {\n return false;\n }\n\n if (rowState.selectionState === TableRowSelectionState.selected) {\n return false;\n }\n return this.selectSingleRow(rowState);\n }\n\n public override reset(): void {\n this.shiftSelectStartRowId = undefined;\n this.previousShiftSelectRowEndId = undefined;\n }\n\n private tryUpdateRangeSelection(\n rowId: string,\n additiveSelection: boolean\n ): boolean {\n if (this.shiftSelectStartRowId === undefined) {\n return false;\n }\n\n const allRows = this.getAllOrderedRows();\n const selectionStartIndex = this.getRowIndexForId(\n this.shiftSelectStartRowId,\n allRows\n );\n if (selectionStartIndex === -1) {\n return false;\n }\n\n let selectionState: TanStackRowSelectionState = {};\n if (additiveSelection) {\n // If the range selection is additive to the existing selection, start with the initial selection state\n // and remove the previous range selection, if any. Otherwise, the range selection will start empty and\n // only contain the new range selection.\n selectionState = this.tanStackTable.getState().rowSelection;\n this.removePreviousRangeSelection(\n selectionState,\n selectionStartIndex,\n allRows\n );\n }\n\n this.addNewRangeSelection(\n selectionState,\n rowId,\n selectionStartIndex,\n allRows\n );\n this.previousShiftSelectRowEndId = rowId;\n this.tanStackTable.setRowSelection(selectionState);\n\n return true;\n }\n\n private removePreviousRangeSelection(\n selection: TanStackRowSelectionState,\n shiftSelectStartRowIndex: number,\n allRows: TanStackRow<TableNode<TData>>[]\n ): void {\n const previousRangeEndIndex = this.getRowIndexForId(\n this.previousShiftSelectRowEndId,\n allRows\n );\n this.updateSelectionStateForRange(\n selection,\n shiftSelectStartRowIndex,\n previousRangeEndIndex,\n allRows,\n false\n );\n }\n\n private addNewRangeSelection(\n selection: TanStackRowSelectionState,\n endRangeRowId: string,\n shiftSelectStartRowIndex: number,\n allRows: TanStackRow<TableNode<TData>>[]\n ): void {\n const newRangeEndIndex = this.getRowIndexForId(endRangeRowId, allRows);\n this.updateSelectionStateForRange(\n selection,\n shiftSelectStartRowIndex,\n newRangeEndIndex,\n allRows,\n true\n );\n }\n\n private updateSelectionStateForRange(\n selection: TanStackRowSelectionState,\n rangeStartIndex: number,\n rangeEndIndex: number,\n allRows: TanStackRow<TableNode<TData>>[],\n isSelecting: boolean\n ): void {\n if (rangeStartIndex === -1 || rangeEndIndex === -1) {\n return;\n }\n\n const firstRowIndex = Math.min(rangeStartIndex, rangeEndIndex);\n const lastRowIndex = Math.max(rangeStartIndex, rangeEndIndex);\n for (let i = firstRowIndex; i <= lastRowIndex; i++) {\n const row = allRows[i]!;\n if (row.getIsGrouped()) {\n continue;\n }\n this.updateSelectionStateForRow(selection, row.id, isSelecting);\n }\n\n const endRangeRow = allRows[rangeEndIndex]!;\n if (endRangeRow.getIsGrouped()) {\n this.getAllLeafRowIds(endRangeRow.id).forEach(id => this.updateSelectionStateForRow(selection, id, isSelecting));\n }\n }\n\n private updateSelectionStateForRow(\n selection: TanStackRowSelectionState,\n rowId: string,\n isSelecting: boolean\n ): void {\n if (isSelecting) {\n selection[rowId] = true;\n } else {\n delete selection[rowId];\n }\n }\n\n private getRowIndexForId(\n id: string | undefined,\n rows: TanStackRow<TableNode<TData>>[]\n ): number {\n if (!id) {\n return -1;\n }\n return rows.findIndex(x => x.id === id);\n }\n}\n"]}
@@ -5,10 +5,12 @@ import { type TableNode, type TableRecord, type TableRowState } from '../../type
5
5
  */
6
6
  export declare abstract class SelectionManagerBase<TData extends TableRecord> {
7
7
  protected tanStackTable: TanStackTable<TableNode<TData>>;
8
- constructor(tanStackTable: TanStackTable<TableNode<TData>>);
8
+ protected actionMenusPreserveSelection: boolean;
9
+ constructor(tanStackTable: TanStackTable<TableNode<TData>>, actionMenusPreserveSelection: boolean);
9
10
  abstract handleRowSelectionToggle(rowState: TableRowState, isSelecting: boolean, shiftKey: boolean): boolean;
10
11
  abstract handleRowClick(rowState: TableRowState, shiftKey: boolean, ctrlKey: boolean): boolean;
11
12
  abstract handleActionMenuOpening(rowState: TableRowState): boolean;
13
+ updateActionMenusPreserveSelection(actionMenusPreserveSelection: boolean): void;
12
14
  reset(): void;
13
15
  protected toggleIsRowSelected(rowState: TableRowState, isSelecting?: boolean): void;
14
16
  protected selectSingleRow(rowState: TableRowState): boolean;
@@ -3,8 +3,12 @@ import { TableRowSelectionState } from '../../types';
3
3
  * Abstract base class for handling behavior associated with interactive row selection of the table.
4
4
  */
5
5
  export class SelectionManagerBase {
6
- constructor(tanStackTable) {
6
+ constructor(tanStackTable, actionMenusPreserveSelection) {
7
7
  this.tanStackTable = tanStackTable;
8
+ this.actionMenusPreserveSelection = actionMenusPreserveSelection;
9
+ }
10
+ updateActionMenusPreserveSelection(actionMenusPreserveSelection) {
11
+ this.actionMenusPreserveSelection = actionMenusPreserveSelection;
8
12
  }
9
13
  reset() { }
10
14
  toggleIsRowSelected(rowState, isSelecting) {
@@ -1 +1 @@
1
- {"version":3,"file":"selection-manager-base.js","sourceRoot":"","sources":["../../../../../src/table/models/selection-managers/selection-manager-base.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Table as TanStackTable,\n Row as TanStackRow,\n RowSelectionState as TanStackRowSelectionState\n} from '@tanstack/table-core';\nimport {\n type TableNode,\n type TableRecord,\n TableRowSelectionState,\n type TableRowState\n} from '../../types';\n\n/**\n * Abstract base class for handling behavior associated with interactive row selection of the table.\n */\nexport abstract class SelectionManagerBase<TData extends TableRecord> {\n protected tanStackTable: TanStackTable<TableNode<TData>>;\n\n public constructor(tanStackTable: TanStackTable<TableNode<TData>>) {\n this.tanStackTable = tanStackTable;\n }\n\n public abstract handleRowSelectionToggle(\n rowState: TableRowState,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean;\n\n public abstract handleRowClick(\n rowState: TableRowState,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean;\n\n public abstract handleActionMenuOpening(rowState: TableRowState): boolean;\n\n public reset(): void {}\n\n protected toggleIsRowSelected(\n rowState: TableRowState,\n isSelecting?: boolean\n ): void {\n if (\n rowState.isGroupRow\n && rowState.selectionState === TableRowSelectionState.selected\n ) {\n // Work around for https://github.com/TanStack/table/issues/4759\n // Manually deselect all leaf rows when a fully selected group is being deselected.\n this.deselectAllLeafRows(rowState.id);\n } else {\n this.tanStackTable.getRow(rowState.id).toggleSelected(isSelecting, {\n selectChildren: rowState.isGroupRow\n });\n }\n }\n\n protected selectSingleRow(rowState: TableRowState): boolean {\n if (rowState.isGroupRow) {\n throw new Error('function not intended to select grouped rows');\n }\n\n const currentSelection = this.tanStackTable.getState().rowSelection;\n const selectedRecordIds: string[] = [];\n Object.entries(currentSelection).forEach(([recordId, isSelected]) => {\n if (isSelected) {\n selectedRecordIds.push(recordId);\n }\n });\n\n if (\n selectedRecordIds.length === 1\n && selectedRecordIds[0] === rowState.id\n ) {\n // The clicked row is already the only selected row. Do nothing.\n return false;\n }\n\n const newSelectionState: TanStackRowSelectionState = {};\n newSelectionState[rowState.id] = true;\n this.tanStackTable.setRowSelection(newSelectionState);\n return true;\n }\n\n protected deselectAllLeafRows(rowId: string): void {\n const groupRow = this.tanStackTable.getRow(rowId);\n const leafRowIds = this.getAllLeafRowIds(groupRow.id);\n\n const selectionState = this.tanStackTable.getState().rowSelection;\n for (const id of leafRowIds) {\n delete selectionState[id];\n }\n\n this.tanStackTable.setRowSelection(selectionState);\n }\n\n protected getAllLeafRowIds(id: string): string[] {\n const row = this.tanStackTable\n .getRowModel()\n .flatRows.find(x => x.id === id);\n if (!row?.getIsGrouped()) {\n return [];\n }\n\n return row\n .getLeafRows()\n .filter(leafRow => !leafRow.getIsGrouped())\n .map(leafRow => leafRow.id);\n }\n\n protected getAllOrderedRows(): TanStackRow<TableNode<TData>>[] {\n const topLevelRows = this.tanStackTable.getPreExpandedRowModel().rows;\n return this.getOrderedRows(topLevelRows);\n }\n\n private getOrderedRows(\n topLevelRows: TanStackRow<TableNode<TData>>[]\n ): TanStackRow<TableNode<TData>>[] {\n const allRows: TanStackRow<TableNode<TData>>[] = [];\n for (const row of topLevelRows) {\n allRows.push(row);\n if (row.subRows?.length) {\n allRows.push(...this.getOrderedRows(row.subRows));\n }\n }\n return allRows;\n }\n}\n"]}
1
+ {"version":3,"file":"selection-manager-base.js","sourceRoot":"","sources":["../../../../../src/table/models/selection-managers/selection-manager-base.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Table as TanStackTable,\n Row as TanStackRow,\n RowSelectionState as TanStackRowSelectionState\n} from '@tanstack/table-core';\nimport {\n type TableNode,\n type TableRecord,\n TableRowSelectionState,\n type TableRowState\n} from '../../types';\n\n/**\n * Abstract base class for handling behavior associated with interactive row selection of the table.\n */\nexport abstract class SelectionManagerBase<TData extends TableRecord> {\n protected tanStackTable: TanStackTable<TableNode<TData>>;\n protected actionMenusPreserveSelection: boolean;\n\n public constructor(\n tanStackTable: TanStackTable<TableNode<TData>>,\n actionMenusPreserveSelection: boolean\n ) {\n this.tanStackTable = tanStackTable;\n this.actionMenusPreserveSelection = actionMenusPreserveSelection;\n }\n\n public abstract handleRowSelectionToggle(\n rowState: TableRowState,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean;\n\n public abstract handleRowClick(\n rowState: TableRowState,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean;\n\n public abstract handleActionMenuOpening(rowState: TableRowState): boolean;\n\n public updateActionMenusPreserveSelection(\n actionMenusPreserveSelection: boolean\n ): void {\n this.actionMenusPreserveSelection = actionMenusPreserveSelection;\n }\n\n public reset(): void {}\n\n protected toggleIsRowSelected(\n rowState: TableRowState,\n isSelecting?: boolean\n ): void {\n if (\n rowState.isGroupRow\n && rowState.selectionState === TableRowSelectionState.selected\n ) {\n // Work around for https://github.com/TanStack/table/issues/4759\n // Manually deselect all leaf rows when a fully selected group is being deselected.\n this.deselectAllLeafRows(rowState.id);\n } else {\n this.tanStackTable.getRow(rowState.id).toggleSelected(isSelecting, {\n selectChildren: rowState.isGroupRow\n });\n }\n }\n\n protected selectSingleRow(rowState: TableRowState): boolean {\n if (rowState.isGroupRow) {\n throw new Error('function not intended to select grouped rows');\n }\n\n const currentSelection = this.tanStackTable.getState().rowSelection;\n const selectedRecordIds: string[] = [];\n Object.entries(currentSelection).forEach(([recordId, isSelected]) => {\n if (isSelected) {\n selectedRecordIds.push(recordId);\n }\n });\n\n if (\n selectedRecordIds.length === 1\n && selectedRecordIds[0] === rowState.id\n ) {\n // The clicked row is already the only selected row. Do nothing.\n return false;\n }\n\n const newSelectionState: TanStackRowSelectionState = {};\n newSelectionState[rowState.id] = true;\n this.tanStackTable.setRowSelection(newSelectionState);\n return true;\n }\n\n protected deselectAllLeafRows(rowId: string): void {\n const groupRow = this.tanStackTable.getRow(rowId);\n const leafRowIds = this.getAllLeafRowIds(groupRow.id);\n\n const selectionState = this.tanStackTable.getState().rowSelection;\n for (const id of leafRowIds) {\n delete selectionState[id];\n }\n\n this.tanStackTable.setRowSelection(selectionState);\n }\n\n protected getAllLeafRowIds(id: string): string[] {\n const row = this.tanStackTable\n .getRowModel()\n .flatRows.find(x => x.id === id);\n if (!row?.getIsGrouped()) {\n return [];\n }\n\n return row\n .getLeafRows()\n .filter(leafRow => !leafRow.getIsGrouped())\n .map(leafRow => leafRow.id);\n }\n\n protected getAllOrderedRows(): TanStackRow<TableNode<TData>>[] {\n const topLevelRows = this.tanStackTable.getPreExpandedRowModel().rows;\n return this.getOrderedRows(topLevelRows);\n }\n\n private getOrderedRows(\n topLevelRows: TanStackRow<TableNode<TData>>[]\n ): TanStackRow<TableNode<TData>>[] {\n const allRows: TanStackRow<TableNode<TData>>[] = [];\n for (const row of topLevelRows) {\n allRows.push(row);\n if (row.subRows?.length) {\n allRows.push(...this.getOrderedRows(row.subRows));\n }\n }\n return allRows;\n }\n}\n"]}
@@ -12,6 +12,9 @@ export class SingleSelectionManager extends SelectionManagerBase {
12
12
  return this.selectSingleRow(rowState);
13
13
  }
14
14
  handleActionMenuOpening(rowState) {
15
+ if (this.actionMenusPreserveSelection) {
16
+ return false;
17
+ }
15
18
  return this.handleRowClick(rowState, false, false);
16
19
  }
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"single-selection-manager.js","sourceRoot":"","sources":["../../../../../src/table/models/selection-managers/single-selection-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;GAGG;AACH,MAAM,OAAO,sBAEX,SAAQ,oBAA2B;IACjB,wBAAwB,CACpC,QAAuB,EACvB,WAAoB,EACpB,SAAkB;QAElB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,cAAc,CAC1B,QAAuB,EACvB,SAAkB,EAClB,QAAiB;QAEjB,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEe,uBAAuB,CAAC,QAAuB;QAC3D,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;CACJ","sourcesContent":["import type { TableRecord, TableRowState } from '../../types';\nimport { SelectionManagerBase } from './selection-manager-base';\n\n/**\n * Selection manager for interactive selection when the selection mode of the table is\n * `TableRowSelectionMode.single`.\n */\nexport class SingleSelectionManager<\n TData extends TableRecord\n> extends SelectionManagerBase<TData> {\n public override handleRowSelectionToggle(\n rowState: TableRowState,\n isSelecting: boolean,\n _shiftKey: boolean\n ): boolean {\n this.toggleIsRowSelected(rowState, isSelecting);\n return true;\n }\n\n public override handleRowClick(\n rowState: TableRowState,\n _shiftKey: boolean,\n _ctrlKey: boolean\n ): boolean {\n return this.selectSingleRow(rowState);\n }\n\n public override handleActionMenuOpening(rowState: TableRowState): boolean {\n return this.handleRowClick(rowState, false, false);\n }\n}\n"]}
1
+ {"version":3,"file":"single-selection-manager.js","sourceRoot":"","sources":["../../../../../src/table/models/selection-managers/single-selection-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;GAGG;AACH,MAAM,OAAO,sBAEX,SAAQ,oBAA2B;IACjB,wBAAwB,CACpC,QAAuB,EACvB,WAAoB,EACpB,SAAkB;QAElB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,cAAc,CAC1B,QAAuB,EACvB,SAAkB,EAClB,QAAiB;QAEjB,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEe,uBAAuB,CAAC,QAAuB;QAC3D,IAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;CACJ","sourcesContent":["import type { TableRecord, TableRowState } from '../../types';\nimport { SelectionManagerBase } from './selection-manager-base';\n\n/**\n * Selection manager for interactive selection when the selection mode of the table is\n * `TableRowSelectionMode.single`.\n */\nexport class SingleSelectionManager<\n TData extends TableRecord\n> extends SelectionManagerBase<TData> {\n public override handleRowSelectionToggle(\n rowState: TableRowState,\n isSelecting: boolean,\n _shiftKey: boolean\n ): boolean {\n this.toggleIsRowSelected(rowState, isSelecting);\n return true;\n }\n\n public override handleRowClick(\n rowState: TableRowState,\n _shiftKey: boolean,\n _ctrlKey: boolean\n ): boolean {\n return this.selectSingleRow(rowState);\n }\n\n public override handleActionMenuOpening(rowState: TableRowState): boolean {\n if (this.actionMenusPreserveSelection) {\n return false;\n }\n\n return this.handleRowClick(rowState, false, false);\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { Table } from '..';
2
2
  import type { TableRecord } from '../types';
3
3
  import { UpdateTracker } from '../../utilities/models/update-tracker';
4
- declare const trackedItems: readonly ["rowIds", "rowParentIds", "groupRows", "columnIds", "columnHidden", "columnSort", "columnSortDisabled", "columnWidths", "columnDefinition", "actionMenuSlots", "selectionMode"];
4
+ declare const trackedItems: readonly ["rowIds", "rowParentIds", "groupRows", "columnIds", "columnHidden", "columnSort", "columnSortDisabled", "columnWidths", "columnDefinition", "actionMenuSlots", "selectionMode", "actionMenusPreserveSelection"];
5
5
  /**
6
6
  * Helper class to track what updates are needed to the table based on configuration
7
7
  * changes.
@@ -19,6 +19,7 @@ export declare class TableUpdateTracker<TData extends TableRecord> extends Updat
19
19
  get updateColumnDefinition(): boolean;
20
20
  get updateActionMenuSlots(): boolean;
21
21
  get updateSelectionMode(): boolean;
22
+ get updateActionMenusPreserveSelection(): boolean;
22
23
  get requiresTanStackUpdate(): boolean;
23
24
  get requiresTanStackDataReset(): boolean;
24
25
  get requiresKeyboardFocusReset(): boolean;
@@ -29,6 +30,7 @@ export declare class TableUpdateTracker<TData extends TableRecord> extends Updat
29
30
  trackIdFieldNameChanged(): void;
30
31
  trackParentIdFieldNameChanged(): void;
31
32
  trackSelectionModeChanged(): void;
33
+ trackActionMenusPreserveSelectionChanged(): void;
32
34
  protected queueUpdate(): void;
33
35
  }
34
36
  export {};
@@ -20,7 +20,8 @@ const trackedItems = [
20
20
  'columnWidths',
21
21
  'columnDefinition',
22
22
  'actionMenuSlots',
23
- 'selectionMode'
23
+ 'selectionMode',
24
+ 'actionMenusPreserveSelection'
24
25
  ];
25
26
  /**
26
27
  * Helper class to track what updates are needed to the table based on configuration
@@ -59,6 +60,9 @@ export class TableUpdateTracker extends UpdateTracker {
59
60
  get updateSelectionMode() {
60
61
  return this.isTracked('selectionMode');
61
62
  }
63
+ get updateActionMenusPreserveSelection() {
64
+ return this.isTracked('actionMenusPreserveSelection');
65
+ }
62
66
  get requiresTanStackUpdate() {
63
67
  return (this.isTracked('rowIds')
64
68
  || this.isTracked('rowParentIds')
@@ -137,6 +141,10 @@ export class TableUpdateTracker extends UpdateTracker {
137
141
  this.track('selectionMode');
138
142
  this.queueUpdate();
139
143
  }
144
+ trackActionMenusPreserveSelectionChanged() {
145
+ this.track('actionMenusPreserveSelection');
146
+ this.queueUpdate();
147
+ }
140
148
  queueUpdate() {
141
149
  if (!this.table.$fastController.isConnected) {
142
150
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"table-update-tracker.js","sourceRoot":"","sources":["../../../../src/table/models/table-update-tracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { DOM } from '@ni/fast-element';\nimport type { Table } from '..';\nimport type { TableColumn } from '../../table-column/base';\nimport type { TableRecord } from '../types';\nimport { UpdateTracker } from '../../utilities/models/update-tracker';\nimport { isColumnInternalsProperty } from '../../table-column/base/models/column-internals';\n\nconst isColumnProperty = (\n changedProperty: string,\n ...args: (keyof TableColumn)[]\n): boolean => {\n for (const arg of args) {\n if (changedProperty === arg) {\n return true;\n }\n }\n return false;\n};\n\nconst trackedItems = [\n 'rowIds',\n 'rowParentIds',\n 'groupRows',\n 'columnIds',\n 'columnHidden',\n 'columnSort',\n 'columnSortDisabled',\n 'columnWidths',\n 'columnDefinition',\n 'actionMenuSlots',\n 'selectionMode'\n] as const;\n\n/**\n * Helper class to track what updates are needed to the table based on configuration\n * changes.\n */\nexport class TableUpdateTracker<\n TData extends TableRecord\n> extends UpdateTracker<typeof trackedItems> {\n private updateQueued = false;\n\n public constructor(private readonly table: Table<TData>) {\n super(trackedItems);\n }\n\n public get updateRowIds(): boolean {\n return this.isTracked('rowIds');\n }\n\n public get updateRowParentIds(): boolean {\n return this.isTracked('rowParentIds');\n }\n\n public get updateGroupRows(): boolean {\n return this.isTracked('groupRows');\n }\n\n public get updateColumnIds(): boolean {\n return this.isTracked('columnIds');\n }\n\n public get updateColumnSort(): boolean {\n return this.isTracked('columnSort');\n }\n\n public get updateColumnWidths(): boolean {\n return this.isTracked('columnWidths');\n }\n\n public get updateColumnDefinition(): boolean {\n return this.isTracked('columnDefinition');\n }\n\n public get updateActionMenuSlots(): boolean {\n return this.isTracked('actionMenuSlots');\n }\n\n public get updateSelectionMode(): boolean {\n return this.isTracked('selectionMode');\n }\n\n public get requiresTanStackUpdate(): boolean {\n return (\n this.isTracked('rowIds')\n || this.isTracked('rowParentIds')\n || this.isTracked('columnSort')\n || this.isTracked('columnDefinition')\n || this.isTracked('groupRows')\n || this.isTracked('selectionMode')\n );\n }\n\n public get requiresTanStackDataReset(): boolean {\n return (\n this.isTracked('rowIds')\n || this.isTracked('columnDefinition')\n || this.isTracked('rowParentIds')\n );\n }\n\n public get requiresKeyboardFocusReset(): boolean {\n return (\n this.isTracked('columnSortDisabled')\n || this.isTracked('columnDefinition')\n || this.isTracked('columnHidden')\n || this.isTracked('selectionMode')\n || this.isTracked('actionMenuSlots')\n );\n }\n\n public trackAllStateChanged(): void {\n this.trackAll();\n this.queueUpdate();\n }\n\n public get hasPendingUpdates(): boolean {\n return this.updateQueued;\n }\n\n public trackColumnPropertyChanged(changedColumnProperty: string): void {\n if (isColumnProperty(changedColumnProperty, 'columnId')) {\n this.track('columnIds');\n } else if (\n isColumnInternalsProperty(\n changedColumnProperty,\n 'operandDataRecordFieldName',\n 'sortOperation'\n )\n ) {\n this.track('columnDefinition');\n } else if (\n isColumnInternalsProperty(changedColumnProperty, 'sortingDisabled')\n ) {\n this.track('columnSort');\n this.track('columnSortDisabled');\n } else if (\n isColumnInternalsProperty(\n changedColumnProperty,\n 'currentSortDirection',\n 'currentSortIndex'\n )\n ) {\n this.track('columnSort');\n } else if (\n isColumnInternalsProperty(\n changedColumnProperty,\n 'currentFractionalWidth',\n 'currentPixelWidth',\n 'minPixelWidth',\n 'resizingDisabled'\n )\n ) {\n this.track('columnWidths');\n } else if (isColumnProperty(changedColumnProperty, 'columnHidden')) {\n this.track('columnWidths');\n this.track('columnHidden');\n } else if (isColumnProperty(changedColumnProperty, 'actionMenuSlot')) {\n this.track('actionMenuSlots');\n } else if (\n isColumnInternalsProperty(\n changedColumnProperty,\n 'groupIndex',\n 'groupingDisabled'\n )\n ) {\n this.track('groupRows');\n }\n\n this.queueUpdate();\n }\n\n public trackColumnInstancesChanged(): void {\n this.track('columnIds');\n this.track('columnDefinition');\n this.track('columnSort');\n this.track('columnSortDisabled');\n this.track('columnWidths');\n this.track('actionMenuSlots');\n this.track('groupRows');\n\n this.queueUpdate();\n }\n\n public trackIdFieldNameChanged(): void {\n this.track('rowIds');\n this.queueUpdate();\n }\n\n public trackParentIdFieldNameChanged(): void {\n this.track('rowParentIds');\n this.queueUpdate();\n }\n\n public trackSelectionModeChanged(): void {\n this.track('selectionMode');\n this.queueUpdate();\n }\n\n protected override queueUpdate(): void {\n if (!this.table.$fastController.isConnected) {\n return;\n }\n\n if (!this.updateQueued) {\n this.updateQueued = true;\n DOM.queueUpdate(() => {\n this.table.update();\n this.untrackAll();\n this.updateQueued = false;\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"table-update-tracker.js","sourceRoot":"","sources":["../../../../src/table/models/table-update-tracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { DOM } from '@ni/fast-element';\nimport type { Table } from '..';\nimport type { TableColumn } from '../../table-column/base';\nimport type { TableRecord } from '../types';\nimport { UpdateTracker } from '../../utilities/models/update-tracker';\nimport { isColumnInternalsProperty } from '../../table-column/base/models/column-internals';\n\nconst isColumnProperty = (\n changedProperty: string,\n ...args: (keyof TableColumn)[]\n): boolean => {\n for (const arg of args) {\n if (changedProperty === arg) {\n return true;\n }\n }\n return false;\n};\n\nconst trackedItems = [\n 'rowIds',\n 'rowParentIds',\n 'groupRows',\n 'columnIds',\n 'columnHidden',\n 'columnSort',\n 'columnSortDisabled',\n 'columnWidths',\n 'columnDefinition',\n 'actionMenuSlots',\n 'selectionMode',\n 'actionMenusPreserveSelection'\n] as const;\n\n/**\n * Helper class to track what updates are needed to the table based on configuration\n * changes.\n */\nexport class TableUpdateTracker<\n TData extends TableRecord\n> extends UpdateTracker<typeof trackedItems> {\n private updateQueued = false;\n\n public constructor(private readonly table: Table<TData>) {\n super(trackedItems);\n }\n\n public get updateRowIds(): boolean {\n return this.isTracked('rowIds');\n }\n\n public get updateRowParentIds(): boolean {\n return this.isTracked('rowParentIds');\n }\n\n public get updateGroupRows(): boolean {\n return this.isTracked('groupRows');\n }\n\n public get updateColumnIds(): boolean {\n return this.isTracked('columnIds');\n }\n\n public get updateColumnSort(): boolean {\n return this.isTracked('columnSort');\n }\n\n public get updateColumnWidths(): boolean {\n return this.isTracked('columnWidths');\n }\n\n public get updateColumnDefinition(): boolean {\n return this.isTracked('columnDefinition');\n }\n\n public get updateActionMenuSlots(): boolean {\n return this.isTracked('actionMenuSlots');\n }\n\n public get updateSelectionMode(): boolean {\n return this.isTracked('selectionMode');\n }\n\n public get updateActionMenusPreserveSelection(): boolean {\n return this.isTracked('actionMenusPreserveSelection');\n }\n\n public get requiresTanStackUpdate(): boolean {\n return (\n this.isTracked('rowIds')\n || this.isTracked('rowParentIds')\n || this.isTracked('columnSort')\n || this.isTracked('columnDefinition')\n || this.isTracked('groupRows')\n || this.isTracked('selectionMode')\n );\n }\n\n public get requiresTanStackDataReset(): boolean {\n return (\n this.isTracked('rowIds')\n || this.isTracked('columnDefinition')\n || this.isTracked('rowParentIds')\n );\n }\n\n public get requiresKeyboardFocusReset(): boolean {\n return (\n this.isTracked('columnSortDisabled')\n || this.isTracked('columnDefinition')\n || this.isTracked('columnHidden')\n || this.isTracked('selectionMode')\n || this.isTracked('actionMenuSlots')\n );\n }\n\n public trackAllStateChanged(): void {\n this.trackAll();\n this.queueUpdate();\n }\n\n public get hasPendingUpdates(): boolean {\n return this.updateQueued;\n }\n\n public trackColumnPropertyChanged(changedColumnProperty: string): void {\n if (isColumnProperty(changedColumnProperty, 'columnId')) {\n this.track('columnIds');\n } else if (\n isColumnInternalsProperty(\n changedColumnProperty,\n 'operandDataRecordFieldName',\n 'sortOperation'\n )\n ) {\n this.track('columnDefinition');\n } else if (\n isColumnInternalsProperty(changedColumnProperty, 'sortingDisabled')\n ) {\n this.track('columnSort');\n this.track('columnSortDisabled');\n } else if (\n isColumnInternalsProperty(\n changedColumnProperty,\n 'currentSortDirection',\n 'currentSortIndex'\n )\n ) {\n this.track('columnSort');\n } else if (\n isColumnInternalsProperty(\n changedColumnProperty,\n 'currentFractionalWidth',\n 'currentPixelWidth',\n 'minPixelWidth',\n 'resizingDisabled'\n )\n ) {\n this.track('columnWidths');\n } else if (isColumnProperty(changedColumnProperty, 'columnHidden')) {\n this.track('columnWidths');\n this.track('columnHidden');\n } else if (isColumnProperty(changedColumnProperty, 'actionMenuSlot')) {\n this.track('actionMenuSlots');\n } else if (\n isColumnInternalsProperty(\n changedColumnProperty,\n 'groupIndex',\n 'groupingDisabled'\n )\n ) {\n this.track('groupRows');\n }\n\n this.queueUpdate();\n }\n\n public trackColumnInstancesChanged(): void {\n this.track('columnIds');\n this.track('columnDefinition');\n this.track('columnSort');\n this.track('columnSortDisabled');\n this.track('columnWidths');\n this.track('actionMenuSlots');\n this.track('groupRows');\n\n this.queueUpdate();\n }\n\n public trackIdFieldNameChanged(): void {\n this.track('rowIds');\n this.queueUpdate();\n }\n\n public trackParentIdFieldNameChanged(): void {\n this.track('rowParentIds');\n this.queueUpdate();\n }\n\n public trackSelectionModeChanged(): void {\n this.track('selectionMode');\n this.queueUpdate();\n }\n\n public trackActionMenusPreserveSelectionChanged(): void {\n this.track('actionMenusPreserveSelection');\n this.queueUpdate();\n }\n\n protected override queueUpdate(): void {\n if (!this.table.$fastController.isConnected) {\n return;\n }\n\n if (!this.updateQueued) {\n this.updateQueued = true;\n DOM.queueUpdate(() => {\n this.table.update();\n this.untrackAll();\n this.updateQueued = false;\n });\n }\n }\n}\n"]}
@@ -92,6 +92,7 @@ export interface TableActionMenuToggleEventDetail {
92
92
  newState: boolean;
93
93
  oldState: boolean;
94
94
  recordIds: string[];
95
+ operatingRecordId: string;
95
96
  columnId?: string;
96
97
  }
97
98
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/table/types.ts"],"names":[],"mappings":"AAkGA,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC5C,IAAI,EAAE,SAAS;IACf,eAAe,EAAE,mBAAmB;IACpC,eAAe,EAAE,kBAAkB;CAC7B,CAAC;AAUX;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;CAClB,CAAC;AAGX;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACd,CAAC;AAGX;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,WAAW,EAAE,cAAc;IAC3B,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,oBAAoB;CACjC,CAAC;AA2EX;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACR,CAAC;AAGX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,GAAG,EAAE,KAAK;IACV,oBAAoB,EAAE,sBAAsB;IAC5C,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;CACpB,CAAC","sourcesContent":["import type { Checkbox } from '../checkbox';\nimport type { MenuButton } from '../menu-button';\nimport type { TableColumn } from '../table-column/base';\nimport type { ValidityObject } from '../utilities/models/validator';\nimport type { TableCell } from './components/cell';\n\n/**\n * TableFieldName describes the type associated with keys within\n * a table's records.\n */\nexport type TableFieldName = string;\n\n/**\n * TableFieldValue describes the type associated with values within\n * a table's records.\n */\nexport type TableFieldValue = string | number | boolean | null | undefined;\n\n/**\n * TableStringFieldValue describes the type associated with values within\n * a table's string records.\n */\nexport type TableStringFieldValue = string | null | undefined;\n\n/**\n * TableBooleanFieldValue describes the type associated with values within\n * a table's boolean records.\n */\nexport type TableBooleanFieldValue = boolean | null | undefined;\n\n/**\n * TableNumberFieldValue describes the type associated with values within\n * a table's number records.\n */\nexport type TableNumberFieldValue = number | null | undefined;\n\n/**\n * TableRecord describes the data structure that backs a single row in a table.\n * It is made up of fields, which are key/value pairs that have a key of type\n * TableFieldName and a value of type TableFieldValue.\n */\nexport interface TableRecord {\n [key: TableFieldName]: TableFieldValue;\n}\n\n/**\n * @internal\n *\n * Describes a hierarchical data structure that is used for\n * the internal representation of the data, and allows us to represent data with\n * parent-child relationships within Tanstack.\n */\nexport interface TableNode<TRecord extends TableRecord = TableRecord> {\n subRows?: TableNode<TRecord>[];\n originalIndex: number;\n clientRecord: TRecord;\n}\n\nexport type TableStringField<FieldName extends TableFieldName> = {\n [name in FieldName]: TableStringFieldValue;\n};\n\nexport type TableBooleanField<FieldName extends TableFieldName> = {\n [name in FieldName]: TableBooleanFieldValue;\n};\n\nexport type TableNumberField<FieldName extends TableFieldName> = {\n [name in FieldName]: TableNumberFieldValue;\n};\n\nexport interface TableValidity extends ValidityObject {\n readonly duplicateRecordId: boolean;\n readonly missingRecordId: boolean;\n readonly invalidRecordId: boolean;\n readonly duplicateColumnId: boolean;\n readonly missingColumnId: boolean;\n readonly duplicateSortIndex: boolean;\n readonly duplicateGroupIndex: boolean;\n readonly idFieldNameNotConfigured: boolean;\n readonly invalidColumnConfiguration: boolean;\n readonly invalidParentIdConfiguration: boolean;\n}\n\n/**\n * The hierarachy options for a record in the table.\n */\nexport interface TableSetRecordHierarchyOptions {\n recordId: string;\n options: TableRecordHierarchyOptions;\n}\n\n/**\n * Describes the hierarchy options that can be configured for a record in the table.\n */\nexport interface TableRecordHierarchyOptions {\n delayedHierarchyState: TableRecordDelayedHierarchyState;\n}\n\nexport const TableRecordDelayedHierarchyState = {\n none: undefined,\n canLoadChildren: 'can-load-children',\n loadingChildren: 'loading-children'\n} as const;\nexport type TableRecordDelayedHierarchyState = (typeof TableRecordDelayedHierarchyState)[keyof typeof TableRecordDelayedHierarchyState];\n\nexport interface TableActionMenuToggleEventDetail {\n newState: boolean;\n oldState: boolean;\n recordIds: string[];\n columnId?: string;\n}\n\n/**\n * The possible directions a table column can be sorted in.\n */\nexport const TableColumnSortDirection = {\n none: undefined,\n ascending: 'ascending',\n descending: 'descending'\n} as const;\nexport type TableColumnSortDirection = (typeof TableColumnSortDirection)[keyof typeof TableColumnSortDirection];\n\n/**\n * The selection modes of rows in the table.\n */\nexport const TableRowSelectionMode = {\n none: undefined,\n single: 'single',\n multiple: 'multiple'\n} as const;\nexport type TableRowSelectionMode = (typeof TableRowSelectionMode)[keyof typeof TableRowSelectionMode];\n\n/**\n * @internal\n *\n * The possible selection states that the table or a table row can be in.\n */\nexport const TableRowSelectionState = {\n notSelected: 'not-selected',\n selected: 'selected',\n partiallySelected: 'partially-selected'\n} as const;\nexport type TableRowSelectionState = (typeof TableRowSelectionState)[keyof typeof TableRowSelectionState];\n\n/**\n * @internal\n *\n * Internal event detail type for a row's selection state changing\n */\nexport interface TableRowSelectionToggleEventDetail {\n oldState: boolean;\n newState: boolean;\n}\n\n/**\n * Event detail type for row selection events in the table.\n */\nexport interface TableRowSelectionEventDetail {\n selectedRecordIds: string[];\n}\n\n/**\n * Event detail type for row toggle events in the table.\n */\nexport interface TableRowExpansionToggleEventDetail {\n oldState: boolean;\n newState: boolean;\n recordId: string;\n}\n\n/**\n * Event detail type for interactive column configuration changes.\n *\n * The column-configuration-change event is emitted when a column's configuration\n * is modified programmatically, such as by clicking on the column's header to sort\n * the column. The items in the `columns` array are specified in the same order as\n * the columns are listed in the DOM.\n */\nexport interface TableColumnConfigurationChangeEventDetail {\n columns: TableColumnConfiguration[];\n}\n\n/**\n * A representation of the current configuration of a column within the table.\n */\nexport interface TableColumnConfiguration {\n columnId?: string;\n sortIndex?: number;\n sortDirection: TableColumnSortDirection;\n groupIndex?: number;\n hidden: boolean;\n fractionalWidth: number;\n pixelWidth?: number;\n}\n\n/**\n * @internal\n *\n * Internal representation of a row in the table\n */\nexport interface TableRowState<TData extends TableRecord = TableRecord> {\n record: TData;\n id: string;\n selectionState: TableRowSelectionState;\n isGroupRow: boolean;\n groupRowValue?: unknown;\n isExpanded: boolean;\n nestingLevel?: number;\n immediateChildCount?: number;\n groupColumn?: TableColumn;\n isParentRow: boolean;\n isLoadingChildren: boolean;\n requestedSlots: SlotMetadata[];\n resolvedRowIndex?: number;\n}\n\n/**\n * @internal\n *\n * Alignment of column content\n */\nexport const TableColumnAlignment = {\n left: 'left',\n right: 'right'\n} as const;\nexport type TableColumnAlignment = (typeof TableColumnAlignment)[keyof typeof TableColumnAlignment];\n\n/**\n * Table keyboard focus types\n */\nexport const TableFocusType = {\n none: 'none',\n columnHeader: 'columnHeader',\n headerActions: 'headerActions',\n row: 'row',\n rowSelectionCheckbox: 'rowSelectionCheckbox',\n cell: 'cell',\n cellActionMenu: 'cellActionMenu',\n cellContent: 'cellContent'\n} as const;\nexport type TableFocusType = (typeof TableFocusType)[keyof typeof TableFocusType];\n\n/**\n * @internal\n *\n * Focusable elements of a table row\n */\nexport interface TableRowFocusableElements {\n selectionCheckbox?: Checkbox;\n cells: {\n cell: TableCell,\n actionMenuButton?: MenuButton\n }[];\n}\n\n/**\n * Focusable elements of a table's header\n */\nexport interface TableHeaderFocusableElements {\n headerActions: HTMLElement[];\n columnHeaders: HTMLElement[];\n}\n\n/**\n * @internal\n */\nexport interface CellViewSlotRequestEventDetail {\n slots: SlotMetadata[];\n}\n\n/**\n * @internal\n */\nexport interface RowSlotRequestEventDetail {\n columnInternalId: string;\n recordId: string;\n slots: SlotMetadata[];\n}\n\n/**\n * @internal\n */\nexport interface SlotMetadata {\n slot: string;\n name: string;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/table/types.ts"],"names":[],"mappings":"AAkGA,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC5C,IAAI,EAAE,SAAS;IACf,eAAe,EAAE,mBAAmB;IACpC,eAAe,EAAE,kBAAkB;CAC7B,CAAC;AAWX;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;CAClB,CAAC;AAGX;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACd,CAAC;AAGX;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,WAAW,EAAE,cAAc;IAC3B,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,oBAAoB;CACjC,CAAC;AA2EX;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACR,CAAC;AAGX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,GAAG,EAAE,KAAK;IACV,oBAAoB,EAAE,sBAAsB;IAC5C,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;CACpB,CAAC","sourcesContent":["import type { Checkbox } from '../checkbox';\nimport type { MenuButton } from '../menu-button';\nimport type { TableColumn } from '../table-column/base';\nimport type { ValidityObject } from '../utilities/models/validator';\nimport type { TableCell } from './components/cell';\n\n/**\n * TableFieldName describes the type associated with keys within\n * a table's records.\n */\nexport type TableFieldName = string;\n\n/**\n * TableFieldValue describes the type associated with values within\n * a table's records.\n */\nexport type TableFieldValue = string | number | boolean | null | undefined;\n\n/**\n * TableStringFieldValue describes the type associated with values within\n * a table's string records.\n */\nexport type TableStringFieldValue = string | null | undefined;\n\n/**\n * TableBooleanFieldValue describes the type associated with values within\n * a table's boolean records.\n */\nexport type TableBooleanFieldValue = boolean | null | undefined;\n\n/**\n * TableNumberFieldValue describes the type associated with values within\n * a table's number records.\n */\nexport type TableNumberFieldValue = number | null | undefined;\n\n/**\n * TableRecord describes the data structure that backs a single row in a table.\n * It is made up of fields, which are key/value pairs that have a key of type\n * TableFieldName and a value of type TableFieldValue.\n */\nexport interface TableRecord {\n [key: TableFieldName]: TableFieldValue;\n}\n\n/**\n * @internal\n *\n * Describes a hierarchical data structure that is used for\n * the internal representation of the data, and allows us to represent data with\n * parent-child relationships within Tanstack.\n */\nexport interface TableNode<TRecord extends TableRecord = TableRecord> {\n subRows?: TableNode<TRecord>[];\n originalIndex: number;\n clientRecord: TRecord;\n}\n\nexport type TableStringField<FieldName extends TableFieldName> = {\n [name in FieldName]: TableStringFieldValue;\n};\n\nexport type TableBooleanField<FieldName extends TableFieldName> = {\n [name in FieldName]: TableBooleanFieldValue;\n};\n\nexport type TableNumberField<FieldName extends TableFieldName> = {\n [name in FieldName]: TableNumberFieldValue;\n};\n\nexport interface TableValidity extends ValidityObject {\n readonly duplicateRecordId: boolean;\n readonly missingRecordId: boolean;\n readonly invalidRecordId: boolean;\n readonly duplicateColumnId: boolean;\n readonly missingColumnId: boolean;\n readonly duplicateSortIndex: boolean;\n readonly duplicateGroupIndex: boolean;\n readonly idFieldNameNotConfigured: boolean;\n readonly invalidColumnConfiguration: boolean;\n readonly invalidParentIdConfiguration: boolean;\n}\n\n/**\n * The hierarachy options for a record in the table.\n */\nexport interface TableSetRecordHierarchyOptions {\n recordId: string;\n options: TableRecordHierarchyOptions;\n}\n\n/**\n * Describes the hierarchy options that can be configured for a record in the table.\n */\nexport interface TableRecordHierarchyOptions {\n delayedHierarchyState: TableRecordDelayedHierarchyState;\n}\n\nexport const TableRecordDelayedHierarchyState = {\n none: undefined,\n canLoadChildren: 'can-load-children',\n loadingChildren: 'loading-children'\n} as const;\nexport type TableRecordDelayedHierarchyState = (typeof TableRecordDelayedHierarchyState)[keyof typeof TableRecordDelayedHierarchyState];\n\nexport interface TableActionMenuToggleEventDetail {\n newState: boolean;\n oldState: boolean;\n recordIds: string[];\n operatingRecordId: string;\n columnId?: string;\n}\n\n/**\n * The possible directions a table column can be sorted in.\n */\nexport const TableColumnSortDirection = {\n none: undefined,\n ascending: 'ascending',\n descending: 'descending'\n} as const;\nexport type TableColumnSortDirection = (typeof TableColumnSortDirection)[keyof typeof TableColumnSortDirection];\n\n/**\n * The selection modes of rows in the table.\n */\nexport const TableRowSelectionMode = {\n none: undefined,\n single: 'single',\n multiple: 'multiple'\n} as const;\nexport type TableRowSelectionMode = (typeof TableRowSelectionMode)[keyof typeof TableRowSelectionMode];\n\n/**\n * @internal\n *\n * The possible selection states that the table or a table row can be in.\n */\nexport const TableRowSelectionState = {\n notSelected: 'not-selected',\n selected: 'selected',\n partiallySelected: 'partially-selected'\n} as const;\nexport type TableRowSelectionState = (typeof TableRowSelectionState)[keyof typeof TableRowSelectionState];\n\n/**\n * @internal\n *\n * Internal event detail type for a row's selection state changing\n */\nexport interface TableRowSelectionToggleEventDetail {\n oldState: boolean;\n newState: boolean;\n}\n\n/**\n * Event detail type for row selection events in the table.\n */\nexport interface TableRowSelectionEventDetail {\n selectedRecordIds: string[];\n}\n\n/**\n * Event detail type for row toggle events in the table.\n */\nexport interface TableRowExpansionToggleEventDetail {\n oldState: boolean;\n newState: boolean;\n recordId: string;\n}\n\n/**\n * Event detail type for interactive column configuration changes.\n *\n * The column-configuration-change event is emitted when a column's configuration\n * is modified programmatically, such as by clicking on the column's header to sort\n * the column. The items in the `columns` array are specified in the same order as\n * the columns are listed in the DOM.\n */\nexport interface TableColumnConfigurationChangeEventDetail {\n columns: TableColumnConfiguration[];\n}\n\n/**\n * A representation of the current configuration of a column within the table.\n */\nexport interface TableColumnConfiguration {\n columnId?: string;\n sortIndex?: number;\n sortDirection: TableColumnSortDirection;\n groupIndex?: number;\n hidden: boolean;\n fractionalWidth: number;\n pixelWidth?: number;\n}\n\n/**\n * @internal\n *\n * Internal representation of a row in the table\n */\nexport interface TableRowState<TData extends TableRecord = TableRecord> {\n record: TData;\n id: string;\n selectionState: TableRowSelectionState;\n isGroupRow: boolean;\n groupRowValue?: unknown;\n isExpanded: boolean;\n nestingLevel?: number;\n immediateChildCount?: number;\n groupColumn?: TableColumn;\n isParentRow: boolean;\n isLoadingChildren: boolean;\n requestedSlots: SlotMetadata[];\n resolvedRowIndex?: number;\n}\n\n/**\n * @internal\n *\n * Alignment of column content\n */\nexport const TableColumnAlignment = {\n left: 'left',\n right: 'right'\n} as const;\nexport type TableColumnAlignment = (typeof TableColumnAlignment)[keyof typeof TableColumnAlignment];\n\n/**\n * Table keyboard focus types\n */\nexport const TableFocusType = {\n none: 'none',\n columnHeader: 'columnHeader',\n headerActions: 'headerActions',\n row: 'row',\n rowSelectionCheckbox: 'rowSelectionCheckbox',\n cell: 'cell',\n cellActionMenu: 'cellActionMenu',\n cellContent: 'cellContent'\n} as const;\nexport type TableFocusType = (typeof TableFocusType)[keyof typeof TableFocusType];\n\n/**\n * @internal\n *\n * Focusable elements of a table row\n */\nexport interface TableRowFocusableElements {\n selectionCheckbox?: Checkbox;\n cells: {\n cell: TableCell,\n actionMenuButton?: MenuButton\n }[];\n}\n\n/**\n * Focusable elements of a table's header\n */\nexport interface TableHeaderFocusableElements {\n headerActions: HTMLElement[];\n columnHeaders: HTMLElement[];\n}\n\n/**\n * @internal\n */\nexport interface CellViewSlotRequestEventDetail {\n slots: SlotMetadata[];\n}\n\n/**\n * @internal\n */\nexport interface RowSlotRequestEventDetail {\n columnInternalId: string;\n recordId: string;\n slots: SlotMetadata[];\n}\n\n/**\n * @internal\n */\nexport interface SlotMetadata {\n slot: string;\n name: string;\n}\n"]}
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@ni/nimble-components",
3
- "version": "34.9.0",
3
+ "version": "34.10.0",
4
4
  "description": "Styled web components for the NI Nimble Design System",
5
5
  "scripts": {
6
- "build": "npm run generate-icons && npm run generate-workers && npm run build-components && npm run bundle-components && npm run generate-scss",
6
+ "build": "npm run generate-icons && npm run generate-workers && npm run build-components && npm run generate-scss",
7
+ "build-bundle": "npm run bundle-components",
7
8
  "lint": "eslint .",
8
9
  "format": "eslint . --fix",
9
10
  "pack": "npm pack",
@@ -37,7 +38,7 @@
37
38
  "test-webkit:debugger": "karma start karma.conf.js --browsers=WebkitDebugging --skip-tags SkipWebkit",
38
39
  "test-webkit:watch": "karma start karma.conf.headless.js --browsers=WebkitHeadless --skip-tags SkipWebkit --watch-extensions js",
39
40
  "test-webkit": "karma start karma.conf.headless.js --browsers=WebkitHeadless --single-run --skip-tags SkipWebkit",
40
- "test-concurrent": "concurrently --pad-prefix --timings --group \"npm:test-chrome\" \"npm:test-webkit\""
41
+ "test": "concurrently --pad-prefix --timings --group \"npm:test-chrome\" \"npm:test-webkit\""
41
42
  },
42
43
  "repository": {
43
44
  "type": "git",