igniteui-grid-lite 0.9.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 (108) hide show
  1. package/components/cell.d.ts +11 -15
  2. package/components/cell.js +14 -3
  3. package/components/cell.js.map +1 -1
  4. package/components/column.d.ts +2 -2
  5. package/components/column.js.map +1 -1
  6. package/components/filter-row.d.ts +5 -3
  7. package/components/filter-row.js +97 -67
  8. package/components/filter-row.js.map +1 -1
  9. package/components/grid.d.ts +49 -8
  10. package/components/grid.js +116 -79
  11. package/components/grid.js.map +1 -1
  12. package/components/header-row.d.ts +1 -2
  13. package/components/header-row.js +6 -8
  14. package/components/header-row.js.map +1 -1
  15. package/components/header.d.ts +9 -0
  16. package/components/header.js +37 -28
  17. package/components/header.js.map +1 -1
  18. package/components/row.d.ts +4 -4
  19. package/components/row.js +15 -4
  20. package/components/row.js.map +1 -1
  21. package/controllers/data-operation.d.ts +1 -7
  22. package/controllers/data-operation.js +7 -24
  23. package/controllers/data-operation.js.map +1 -1
  24. package/controllers/dom.d.ts +16 -9
  25. package/controllers/dom.js +71 -20
  26. package/controllers/dom.js.map +1 -1
  27. package/controllers/filter.d.ts +17 -13
  28. package/controllers/filter.js +51 -61
  29. package/controllers/filter.js.map +1 -1
  30. package/controllers/navigation.d.ts +13 -18
  31. package/controllers/navigation.js +71 -76
  32. package/controllers/navigation.js.map +1 -1
  33. package/controllers/resize.d.ts +11 -17
  34. package/controllers/resize.js +20 -16
  35. package/controllers/resize.js.map +1 -1
  36. package/controllers/sort.d.ts +13 -6
  37. package/controllers/sort.js +39 -41
  38. package/controllers/sort.js.map +1 -1
  39. package/controllers/state.d.ts +18 -19
  40. package/controllers/state.js +31 -35
  41. package/controllers/state.js.map +1 -1
  42. package/custom-elements.json +970 -488
  43. package/docs/igniteui-grid-lite.json +1293 -782
  44. package/index.d.ts +1 -1
  45. package/index.js.map +1 -1
  46. package/internal/a11y.d.ts +26 -0
  47. package/internal/a11y.js +24 -0
  48. package/internal/a11y.js.map +1 -0
  49. package/internal/body-focus.d.ts +6 -0
  50. package/internal/body-focus.js +46 -0
  51. package/internal/body-focus.js.map +1 -0
  52. package/internal/constants.d.ts +6 -2
  53. package/internal/constants.js +3 -4
  54. package/internal/constants.js.map +1 -1
  55. package/internal/element-from-event-path.d.ts +1 -1
  56. package/internal/element-from-event-path.js +2 -9
  57. package/internal/element-from-event-path.js.map +1 -1
  58. package/internal/normalize-case.d.ts +5 -1
  59. package/internal/normalize-case.js +2 -1
  60. package/internal/normalize-case.js.map +1 -1
  61. package/internal/part-map.js +9 -17
  62. package/internal/part-map.js.map +1 -1
  63. package/internal/tags.d.ts +1 -2
  64. package/internal/tags.js +1 -2
  65. package/internal/tags.js.map +1 -1
  66. package/internal/types.d.ts +19 -8
  67. package/internal/types.js.map +1 -1
  68. package/internal/utils.d.ts +7 -8
  69. package/internal/utils.js +22 -5
  70. package/internal/utils.js.map +1 -1
  71. package/internal/watch.js +8 -9
  72. package/internal/watch.js.map +1 -1
  73. package/operations/base.js +3 -2
  74. package/operations/base.js.map +1 -1
  75. package/operations/filter/state.d.ts +0 -1
  76. package/operations/filter/state.js +2 -8
  77. package/operations/filter/state.js.map +1 -1
  78. package/operations/filter/tree.d.ts +1 -2
  79. package/operations/filter/tree.js +2 -7
  80. package/operations/filter/tree.js.map +1 -1
  81. package/operations/filter/types.d.ts +1 -1
  82. package/operations/filter/types.js.map +1 -1
  83. package/operations/filter.js +16 -3
  84. package/operations/filter.js.map +1 -1
  85. package/operations/sort/types.d.ts +1 -1
  86. package/operations/sort/types.js.map +1 -1
  87. package/operations/sort.d.ts +0 -1
  88. package/operations/sort.js +12 -10
  89. package/operations/sort.js.map +1 -1
  90. package/package.json +2 -3
  91. package/styles/header-cell/header-cell.css.js +1 -1
  92. package/styles/header-cell/header-cell.css.js.map +1 -1
  93. package/styles/themes/filtering-row-themes.js +2 -30
  94. package/styles/themes/filtering-row-themes.js.map +1 -1
  95. package/styles/themes/grid-header-themes.js +2 -20
  96. package/styles/themes/grid-header-themes.js.map +1 -1
  97. package/styles/themes/grid-themes.js +10 -31
  98. package/styles/themes/grid-themes.js.map +1 -1
  99. package/styles/themes/grid.base.css.js +1 -1
  100. package/styles/themes/grid.base.css.js.map +1 -1
  101. package/styles/themes/shared/grid.common.css.js +1 -1
  102. package/styles/themes/shared/grid.common.css.js.map +1 -1
  103. package/components/virtualizer.d.ts +0 -12
  104. package/components/virtualizer.js +0 -20
  105. package/components/virtualizer.js.map +0 -1
  106. package/internal/virt-flow-layout.d.ts +0 -4
  107. package/internal/virt-flow-layout.js +0 -15
  108. package/internal/virt-flow-layout.js.map +0 -1
@@ -1,5 +1,4 @@
1
1
  import { PIPELINE } from '../internal/constants.js';
2
- import { GRID_BODY, GRID_FILTER_ROW_TAG, GRID_HEADER_ROW_TAG, GRID_ROW_TAG, } from '../internal/tags.js';
3
2
  import { createColumnConfiguration, setColumnsFromData } from '../internal/utils.js';
4
3
  import { FilterController } from './filter.js';
5
4
  import { NavigationController } from './navigation.js';
@@ -9,68 +8,65 @@ class StateController {
9
8
  get columns() {
10
9
  return this._columns;
11
10
  }
12
- get headerRow() {
13
- return this.host.renderRoot.querySelector(GRID_HEADER_ROW_TAG);
14
- }
15
- get filterRow() {
16
- return this.host.renderRoot.querySelector(GRID_FILTER_ROW_TAG);
17
- }
18
- get rows() {
19
- return Array.from(this.host.renderRoot.querySelectorAll(GRID_ROW_TAG));
20
- }
21
- get virtualizer() {
22
- return this.host.renderRoot.querySelector(GRID_BODY);
23
- }
24
11
  get active() {
25
12
  return this.navigation.active;
26
13
  }
27
14
  set active(node) {
28
15
  this.navigation.active = node;
29
16
  }
30
- constructor(host, observersCallback) {
17
+ constructor(host, dom, observersCallback) {
31
18
  this._columns = [];
32
19
  this._observersCallback = observersCallback;
33
20
  this.host = host;
34
- this.host.addController(this);
35
- this.sorting = new SortController(this.host);
36
- this.filtering = new FilterController(this);
37
- this.navigation = new NavigationController(this);
38
- this.resizing = new ResizeController(this.host);
21
+ this.sorting = new SortController(this);
22
+ this.filtering = new FilterController(this, dom);
23
+ this.navigation = new NavigationController(this, dom);
24
+ this.resizing = new ResizeController(this, dom);
39
25
  }
40
- hostUpdate() {
41
- this.headerRow?.requestUpdate();
42
- this.virtualizer?.requestUpdate();
26
+ updateObservers() {
27
+ this._observersCallback();
43
28
  }
44
29
  setColumnConfiguration(columns) {
45
30
  this._columns = columns.map((column) => createColumnConfiguration(column));
46
31
  this.filtering.resolveConditions();
47
- this._observersCallback.call(this.host);
32
+ this.updateObservers();
48
33
  this.host.requestUpdate(PIPELINE);
49
34
  }
50
35
  setAutoColumnConfiguration() {
51
- if (this.host.autoGenerate && this.host.data.length > 0) {
52
- this._columns = setColumnsFromData(this.host.data[0]);
53
- this.filtering.resolveConditions();
54
- this.host.requestUpdate(PIPELINE);
36
+ if (!this.host.autoGenerate || this.host.data.length === 0) {
37
+ return;
55
38
  }
39
+ this._columns = setColumnsFromData(this.host.data[0]);
40
+ this.filtering.resolveConditions();
41
+ this.host.requestUpdate(PIPELINE);
56
42
  }
57
43
  updateColumnsConfiguration(config) {
58
44
  for (const columnConfig of config) {
59
45
  const existing = this._columns.findIndex((column) => column.field === columnConfig.field);
60
- if (existing !== -1) {
61
- this._columns[existing] = {
62
- ...this._columns[existing],
63
- ...createColumnConfiguration(columnConfig),
64
- };
46
+ if (existing === -1) {
47
+ continue;
65
48
  }
49
+ this._columns[existing] = {
50
+ ...this._columns[existing],
51
+ ...createColumnConfiguration(columnConfig),
52
+ };
66
53
  }
67
54
  this._columns = [...this._columns];
68
- this._observersCallback.call(this.host);
55
+ this.updateObservers();
69
56
  this.host.requestUpdate(PIPELINE);
70
57
  }
58
+ setColumnWidth(field, width) {
59
+ const index = this._columns.findIndex((column) => column.field === field);
60
+ if (index === -1) {
61
+ return;
62
+ }
63
+ this._columns = this._columns.with(index, { ...this._columns[index], width });
64
+ this.updateObservers();
65
+ this.host.requestUpdate();
66
+ }
71
67
  }
72
- function createStateController(host, observersCallback) {
73
- return new StateController(host, observersCallback);
68
+ function createStateController(host, dom, observersCallback) {
69
+ return new StateController(host, dom, observersCallback);
74
70
  }
75
71
  export { createStateController };
76
72
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/controllers/state.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport type IgcFilterRow from '../components/filter-row.js';\nimport type IgcGridLiteHeaderRow from '../components/header-row.js';\nimport type IgcGridLiteRow from '../components/row.js';\nimport type IgcVirtualizer from '../components/virtualizer.js';\nimport { PIPELINE } from '../internal/constants.js';\nimport {\n GRID_BODY,\n GRID_FILTER_ROW_TAG,\n GRID_HEADER_ROW_TAG,\n GRID_ROW_TAG,\n} from '../internal/tags.js';\nimport type { ActiveNode, ColumnConfiguration, GridHost } from '../internal/types.js';\nimport { createColumnConfiguration, setColumnsFromData } from '../internal/utils.js';\nimport { FilterController } from './filter.js';\nimport { NavigationController } from './navigation.js';\nimport { ResizeController } from './resize.js';\nimport { SortController } from './sort.js';\n\nclass StateController<T extends object> implements ReactiveController {\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 /** Returns the header row element of the grid. */\n public get headerRow(): IgcGridLiteHeaderRow<T> | null {\n return this.host.renderRoot.querySelector<IgcGridLiteHeaderRow<T>>(GRID_HEADER_ROW_TAG);\n }\n\n /** Returns the filter row element of the grid. */\n public get filterRow(): IgcFilterRow<T> | null {\n return this.host.renderRoot.querySelector<IgcFilterRow<T>>(GRID_FILTER_ROW_TAG);\n }\n\n /** Returns the data row elements of the grid. */\n public get rows(): IgcGridLiteRow<T>[] {\n return Array.from(this.host.renderRoot.querySelectorAll<IgcGridLiteRow<T>>(GRID_ROW_TAG));\n }\n\n /** Returns the virtualizer element of the grid. */\n public get virtualizer(): IgcVirtualizer | null {\n return this.host.renderRoot.querySelector(GRID_BODY);\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>, observersCallback: () => void) {\n this._observersCallback = observersCallback;\n this.host = host;\n this.host.addController(this);\n\n this.sorting = new SortController(this.host);\n this.filtering = new FilterController(this);\n this.navigation = new NavigationController(this);\n this.resizing = new ResizeController(this.host);\n }\n\n public hostUpdate(): void {\n this.headerRow?.requestUpdate();\n this.virtualizer?.requestUpdate();\n }\n\n public setColumnConfiguration(columns: ColumnConfiguration<T>[]): void {\n this._columns = columns.map((column) => createColumnConfiguration(column));\n this.filtering.resolveConditions();\n this._observersCallback.call(this.host);\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 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._observersCallback.call(this.host);\n this.host.requestUpdate(PIPELINE);\n }\n}\n\nfunction createStateController<T extends object>(\n host: GridHost<T>,\n observersCallback: () => void\n): StateController<T> {\n return new StateController<T>(host, 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"]}