igniteui-grid-lite 0.10.0 → 0.11.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 (90) hide show
  1. package/components/cell.d.ts +5 -17
  2. package/components/cell.js +2 -2
  3. package/components/cell.js.map +1 -1
  4. package/components/filter-row.d.ts +2 -5
  5. package/components/filter-row.js +22 -27
  6. package/components/filter-row.js.map +1 -1
  7. package/components/grid.d.ts +10 -15
  8. package/components/grid.js +33 -36
  9. package/components/grid.js.map +1 -1
  10. package/components/header-row.js +2 -1
  11. package/components/header-row.js.map +1 -1
  12. package/components/header.js +2 -6
  13. package/components/header.js.map +1 -1
  14. package/components/row.d.ts +0 -3
  15. package/components/row.js +3 -3
  16. package/components/row.js.map +1 -1
  17. package/controllers/data-operation.d.ts +1 -3
  18. package/controllers/data-operation.js +0 -2
  19. package/controllers/data-operation.js.map +1 -1
  20. package/controllers/dom.d.ts +4 -16
  21. package/controllers/dom.js +14 -13
  22. package/controllers/dom.js.map +1 -1
  23. package/controllers/filter.d.ts +10 -22
  24. package/controllers/filter.js +14 -8
  25. package/controllers/filter.js.map +1 -1
  26. package/controllers/navigation.d.ts +4 -9
  27. package/controllers/navigation.js +23 -43
  28. package/controllers/navigation.js.map +1 -1
  29. package/controllers/resize.d.ts +3 -9
  30. package/controllers/resize.js +2 -7
  31. package/controllers/resize.js.map +1 -1
  32. package/controllers/sort.d.ts +3 -5
  33. package/controllers/sort.js +19 -14
  34. package/controllers/sort.js.map +1 -1
  35. package/controllers/state.d.ts +2 -13
  36. package/controllers/state.js +12 -10
  37. package/controllers/state.js.map +1 -1
  38. package/custom-elements.json +201 -350
  39. package/docs/igniteui-grid-lite.json +849 -859
  40. package/internal/a11y.d.ts +2 -5
  41. package/internal/a11y.js.map +1 -1
  42. package/internal/body-focus.d.ts +6 -0
  43. package/internal/body-focus.js +46 -0
  44. package/internal/body-focus.js.map +1 -0
  45. package/internal/constants.d.ts +4 -1
  46. package/internal/constants.js +2 -0
  47. package/internal/constants.js.map +1 -1
  48. package/internal/element-from-event-path.d.ts +1 -1
  49. package/internal/element-from-event-path.js +2 -9
  50. package/internal/element-from-event-path.js.map +1 -1
  51. package/internal/tags.d.ts +0 -1
  52. package/internal/tags.js +0 -1
  53. package/internal/tags.js.map +1 -1
  54. package/internal/types.d.ts +6 -7
  55. package/internal/types.js.map +1 -1
  56. package/internal/utils.d.ts +4 -8
  57. package/internal/utils.js +7 -3
  58. package/internal/utils.js.map +1 -1
  59. package/operations/base.js +2 -2
  60. package/operations/base.js.map +1 -1
  61. package/operations/filter/state.d.ts +0 -1
  62. package/operations/filter/state.js +0 -3
  63. package/operations/filter/state.js.map +1 -1
  64. package/operations/filter/types.d.ts +1 -1
  65. package/operations/filter/types.js.map +1 -1
  66. package/operations/filter.js +3 -2
  67. package/operations/filter.js.map +1 -1
  68. package/operations/sort/types.d.ts +1 -1
  69. package/operations/sort/types.js.map +1 -1
  70. package/operations/sort.js +5 -1
  71. package/operations/sort.js.map +1 -1
  72. package/package.json +2 -3
  73. package/styles/header-cell/header-cell.css.js +1 -1
  74. package/styles/header-cell/header-cell.css.js.map +1 -1
  75. package/styles/themes/filtering-row-themes.js +2 -30
  76. package/styles/themes/filtering-row-themes.js.map +1 -1
  77. package/styles/themes/grid-header-themes.js +2 -20
  78. package/styles/themes/grid-header-themes.js.map +1 -1
  79. package/styles/themes/grid-themes.js +10 -31
  80. package/styles/themes/grid-themes.js.map +1 -1
  81. package/styles/themes/grid.base.css.js +1 -1
  82. package/styles/themes/grid.base.css.js.map +1 -1
  83. package/styles/themes/shared/grid.common.css.js +1 -1
  84. package/styles/themes/shared/grid.common.css.js.map +1 -1
  85. package/components/virtualizer.d.ts +0 -14
  86. package/components/virtualizer.js +0 -49
  87. package/components/virtualizer.js.map +0 -1
  88. package/internal/virt-flow-layout.d.ts +0 -4
  89. package/internal/virt-flow-layout.js +0 -15
  90. package/internal/virt-flow-layout.js.map +0 -1
@@ -24,7 +24,7 @@ class StateController {
24
24
  this.resizing = new ResizeController(this, dom);
25
25
  }
26
26
  updateObservers() {
27
- this._observersCallback.call(this.host);
27
+ this._observersCallback();
28
28
  }
29
29
  setColumnConfiguration(columns) {
30
30
  this._columns = columns.map((column) => createColumnConfiguration(column));
@@ -33,21 +33,23 @@ class StateController {
33
33
  this.host.requestUpdate(PIPELINE);
34
34
  }
35
35
  setAutoColumnConfiguration() {
36
- if (this.host.autoGenerate && this.host.data.length > 0) {
37
- this._columns = setColumnsFromData(this.host.data[0]);
38
- this.filtering.resolveConditions();
39
- this.host.requestUpdate(PIPELINE);
36
+ if (!this.host.autoGenerate || this.host.data.length === 0) {
37
+ return;
40
38
  }
39
+ this._columns = setColumnsFromData(this.host.data[0]);
40
+ this.filtering.resolveConditions();
41
+ this.host.requestUpdate(PIPELINE);
41
42
  }
42
43
  updateColumnsConfiguration(config) {
43
44
  for (const columnConfig of config) {
44
45
  const existing = this._columns.findIndex((column) => column.field === columnConfig.field);
45
- if (existing !== -1) {
46
- this._columns[existing] = {
47
- ...this._columns[existing],
48
- ...createColumnConfiguration(columnConfig),
49
- };
46
+ if (existing === -1) {
47
+ continue;
50
48
  }
49
+ this._columns[existing] = {
50
+ ...this._columns[existing],
51
+ ...createColumnConfiguration(columnConfig),
52
+ };
51
53
  }
52
54
  this._columns = [...this._columns];
53
55
  this.updateObservers();
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/controllers/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { PIPELINE } from '../internal/constants.js';\nimport type { ActiveNode, ColumnConfiguration, GridHost, Keys } from '../internal/types.js';\nimport { createColumnConfiguration, setColumnsFromData } from '../internal/utils.js';\nimport type { GridDOMController } from './dom.js';\nimport { FilterController } from './filter.js';\nimport { NavigationController } from './navigation.js';\nimport { ResizeController } from './resize.js';\nimport { SortController } from './sort.js';\n\n/**\n * Holds the column configuration of the grid and owns the controllers for its\n * data operations. Column objects are immutable: each change produces new objects\n * and a new array, so consumers can dirty-check by identity.\n *\n * @remarks\n * Not a reactive controller: it has no host lifecycle. All DOM concerns live in\n * {@link GridDOMController}.\n */\nclass StateController<T extends object> {\n private _columns: ColumnConfiguration<T>[] = [];\n private readonly _observersCallback: () => void;\n\n /** The grid host element. */\n public readonly host: GridHost<T>;\n\n public readonly sorting: SortController<T>;\n public readonly filtering: FilterController<T>;\n public readonly navigation: NavigationController<T>;\n public readonly resizing: ResizeController<T>;\n\n public get columns(): ColumnConfiguration<T>[] {\n return this._columns;\n }\n\n /** The currently active node in the grid. */\n public get active(): ActiveNode<T> {\n return this.navigation.active;\n }\n\n /** Sets the currently active node in the grid. */\n public set active(node: ActiveNode<T>) {\n this.navigation.active = node;\n }\n\n constructor(host: GridHost<T>, dom: GridDOMController<T>, observersCallback: () => void) {\n this._observersCallback = observersCallback;\n this.host = host;\n\n this.sorting = new SortController(this);\n this.filtering = new FilterController(this, dom);\n this.navigation = new NavigationController(this, dom);\n this.resizing = new ResizeController(this, dom);\n }\n\n /**\n * Notifies the state context consumers (headers, header row, filter row) that\n * their render inputs changed. Called at the mutation points only, never on\n * each host update.\n */\n public updateObservers(): void {\n this._observersCallback.call(this.host);\n }\n\n public setColumnConfiguration(columns: ColumnConfiguration<T>[]): void {\n this._columns = columns.map((column) => createColumnConfiguration(column));\n this.filtering.resolveConditions();\n this.updateObservers();\n this.host.requestUpdate(PIPELINE);\n }\n\n public setAutoColumnConfiguration(): void {\n if (this.host.autoGenerate && this.host.data.length > 0) {\n this._columns = setColumnsFromData(this.host.data[0]);\n this.filtering.resolveConditions();\n this.host.requestUpdate(PIPELINE);\n }\n }\n\n public updateColumnsConfiguration(config: ColumnConfiguration<T>[]): void {\n // NOTE: The in-place writes are load-bearing. Consumers holding the current\n // array (header row, DOM controller) must see the new column objects in this\n // update cycle; rebuilding the array delivers them one cycle late.\n for (const columnConfig of config) {\n const existing = this._columns.findIndex((column) => column.field === columnConfig.field);\n if (existing !== -1) {\n this._columns[existing] = {\n ...this._columns[existing],\n ...createColumnConfiguration(columnConfig),\n };\n }\n }\n\n this._columns = [...this._columns];\n this.updateObservers();\n this.host.requestUpdate(PIPELINE);\n }\n\n /**\n * Replaces the width of a single column with a new configuration object.\n *\n * @remarks\n * Width has no effect on the data pipeline, so no pipeline run is scheduled.\n * Resize drags call this on each pointer move.\n */\n public setColumnWidth(field: Keys<T>, width: string): void {\n const index = this._columns.findIndex((column) => column.field === field);\n\n if (index === -1) {\n return;\n }\n\n this._columns = this._columns.with(index, { ...this._columns[index], width });\n this.updateObservers();\n this.host.requestUpdate();\n }\n}\n\nfunction createStateController<T extends object>(\n host: GridHost<T>,\n dom: GridDOMController<T>,\n observersCallback: () => void\n): StateController<T> {\n return new StateController<T>(host, dom, observersCallback);\n}\n\nexport type { StateController };\nexport { createStateController };\n"]}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/controllers/state.ts"],"names":[],"mappings":"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","sourcesContent":["import { PIPELINE } from '../internal/constants.js';\nimport type { ActiveNode, ColumnConfiguration, GridHost, Keys } from '../internal/types.js';\nimport { createColumnConfiguration, setColumnsFromData } from '../internal/utils.js';\nimport type { GridDOMController } from './dom.js';\nimport { FilterController } from './filter.js';\nimport { NavigationController } from './navigation.js';\nimport { ResizeController } from './resize.js';\nimport { SortController } from './sort.js';\n\n/**\n * Holds the column configuration of the grid and owns the controllers for its\n * data operations. Column objects are immutable: each change produces new objects\n * and a new array, so consumers can dirty-check by identity.\n *\n * @remarks\n * Not a reactive controller: it has no host lifecycle. All DOM concerns live in\n * {@link GridDOMController}.\n */\nclass StateController<T extends object> {\n private _columns: ColumnConfiguration<T>[] = [];\n private readonly _observersCallback: () => void;\n\n public readonly host: GridHost<T>;\n\n public readonly sorting: SortController<T>;\n public readonly filtering: FilterController<T>;\n public readonly navigation: NavigationController<T>;\n public readonly resizing: ResizeController<T>;\n\n public get columns(): ColumnConfiguration<T>[] {\n return this._columns;\n }\n\n /** The currently active node in the grid. */\n public get active(): ActiveNode<T> {\n return this.navigation.active;\n }\n\n /** Sets the currently active node in the grid. */\n public set active(node: ActiveNode<T>) {\n this.navigation.active = node;\n }\n\n constructor(host: GridHost<T>, dom: GridDOMController<T>, observersCallback: () => void) {\n this._observersCallback = observersCallback;\n this.host = host;\n\n this.sorting = new SortController(this);\n this.filtering = new FilterController(this, dom);\n this.navigation = new NavigationController(this, dom);\n this.resizing = new ResizeController(this, dom);\n }\n\n /** Pings the state consumers (headers, header row, filter row). Call at mutation points only. */\n public updateObservers(): void {\n this._observersCallback();\n }\n\n public setColumnConfiguration(columns: ColumnConfiguration<T>[]): void {\n this._columns = columns.map((column) => createColumnConfiguration(column));\n this.filtering.resolveConditions();\n this.updateObservers();\n this.host.requestUpdate(PIPELINE);\n }\n\n public setAutoColumnConfiguration(): void {\n if (!this.host.autoGenerate || this.host.data.length === 0) {\n return;\n }\n\n this._columns = setColumnsFromData(this.host.data[0]);\n this.filtering.resolveConditions();\n this.host.requestUpdate(PIPELINE);\n }\n\n public updateColumnsConfiguration(config: ColumnConfiguration<T>[]): void {\n // NOTE: Write in place first. Holders of the current array (header row, DOM\n // controller) must see the new objects this cycle, not the next.\n for (const columnConfig of config) {\n const existing = this._columns.findIndex((column) => column.field === columnConfig.field);\n\n if (existing === -1) {\n continue;\n }\n\n this._columns[existing] = {\n ...this._columns[existing],\n ...createColumnConfiguration(columnConfig),\n };\n }\n\n this._columns = [...this._columns];\n this.updateObservers();\n this.host.requestUpdate(PIPELINE);\n }\n\n /** Replaces one column's width. Skips the pipeline: resize drags call this per pointer move. */\n public setColumnWidth(field: Keys<T>, width: string): void {\n const index = this._columns.findIndex((column) => column.field === field);\n\n if (index === -1) {\n return;\n }\n\n this._columns = this._columns.with(index, { ...this._columns[index], width });\n this.updateObservers();\n this.host.requestUpdate();\n }\n}\n\nfunction createStateController<T extends object>(\n host: GridHost<T>,\n dom: GridDOMController<T>,\n observersCallback: () => void\n): StateController<T> {\n return new StateController<T>(host, dom, observersCallback);\n}\n\nexport type { StateController };\nexport { createStateController };\n"]}