@clr/angular 17.8.1 → 17.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 (54) hide show
  1. package/clarity.api.md +100 -50
  2. package/data/datagrid/datagrid-row.d.ts +6 -4
  3. package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +9 -2
  4. package/data/datagrid/datagrid.d.ts +11 -3
  5. package/data/datagrid/index.d.ts +1 -0
  6. package/data/datagrid/interfaces/key-nav-grid-strategy.interface.d.ts +11 -0
  7. package/data/datagrid/interfaces/virtual-scroll-data-range.interface.d.ts +5 -0
  8. package/data/datagrid/providers/items.d.ts +1 -0
  9. package/data/datagrid/utils/key-navigation-grid.controller.d.ts +1 -16
  10. package/data/datagrid/utils/key-navigation-strategies/default.d.ts +15 -0
  11. package/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.d.ts +14 -0
  12. package/data/datagrid/utils/key-navigation-strategies/expanded-row.d.ts +14 -0
  13. package/data/datagrid/utils/key-navigation-utils.d.ts +22 -0
  14. package/data/tree-view/tree-node.d.ts +0 -1
  15. package/esm2020/data/datagrid/datagrid-column.mjs +8 -12
  16. package/esm2020/data/datagrid/datagrid-row.mjs +30 -10
  17. package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +45 -10
  18. package/esm2020/data/datagrid/datagrid.mjs +48 -17
  19. package/esm2020/data/datagrid/index.mjs +2 -1
  20. package/esm2020/data/datagrid/interfaces/key-nav-grid-strategy.interface.mjs +8 -0
  21. package/esm2020/data/datagrid/interfaces/virtual-scroll-data-range.interface.mjs +8 -0
  22. package/esm2020/data/datagrid/providers/items.mjs +5 -1
  23. package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +18 -243
  24. package/esm2020/data/datagrid/utils/key-navigation-strategies/default.mjs +132 -0
  25. package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.mjs +132 -0
  26. package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-row.mjs +168 -0
  27. package/esm2020/data/datagrid/utils/key-navigation-utils.mjs +108 -0
  28. package/esm2020/data/tree-view/tree-node.mjs +3 -6
  29. package/esm2020/forms/checkbox/checkbox.mjs +5 -2
  30. package/esm2020/forms/number-input/number-input.module.mjs +3 -3
  31. package/esm2020/layout/breadcrumbs/breadcrumbs.mjs +2 -2
  32. package/esm2020/modal/modal.mjs +7 -4
  33. package/esm2020/popover/common/popover.mjs +2 -2
  34. package/esm2020/utils/animations/constants.mjs +7 -1
  35. package/esm2020/utils/animations/expandable-animation/base-expandable-animation.mjs +38 -0
  36. package/esm2020/utils/animations/expandable-animation/expandable-animation.directive.mjs +56 -0
  37. package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +10 -32
  38. package/esm2020/utils/animations/expandable-animation/expandable-animation.module.mjs +3 -2
  39. package/esm2020/utils/animations/expandable-animation/index.mjs +4 -2
  40. package/esm2020/utils/focus/focusable-item/basic-focusable-item.service.mjs +2 -2
  41. package/esm2020/wizard/wizard.mjs +29 -6
  42. package/fesm2015/clr-angular.mjs +915 -426
  43. package/fesm2015/clr-angular.mjs.map +1 -1
  44. package/fesm2020/clr-angular.mjs +936 -445
  45. package/fesm2020/clr-angular.mjs.map +1 -1
  46. package/modal/modal.d.ts +3 -2
  47. package/package.json +2 -2
  48. package/utils/animations/constants.d.ts +1 -0
  49. package/utils/animations/expandable-animation/base-expandable-animation.d.ts +13 -0
  50. package/utils/animations/expandable-animation/expandable-animation.d.ts +2 -6
  51. package/utils/animations/expandable-animation/expandable-animation.directive.d.ts +16 -0
  52. package/utils/animations/expandable-animation/expandable-animation.module.d.ts +3 -2
  53. package/utils/animations/expandable-animation/index.d.ts +1 -0
  54. package/wizard/wizard.d.ts +12 -2
@@ -0,0 +1,132 @@
1
+ /*
2
+ * Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
3
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4
+ * This software is released under MIT license.
5
+ * The full license information can be found in LICENSE in the root directory of this project.
6
+ */
7
+ import { ExpandedRowKeyNavigationStrategy } from './expanded-row';
8
+ export class ExpandedColumnsRowKeyNavigationStrategy extends ExpandedRowKeyNavigationStrategy {
9
+ constructor(utils) {
10
+ super(utils);
11
+ }
12
+ keyUp(currentCellCoords) {
13
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
14
+ if (currentCellCoords.y === 0) {
15
+ return nextCellCoords;
16
+ }
17
+ nextCellCoords.y = currentCellCoords.y - 1;
18
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
19
+ return super.keyUp(currentCellCoords);
20
+ }
21
+ const isActionCell = this.utils.isActionCell(currentCellCoords);
22
+ if (isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {
23
+ nextCellCoords.y = nextCellCoords.y - 1;
24
+ }
25
+ else if (this.utils.isRowReplaced(nextCellCoords.y)) {
26
+ nextCellCoords.y = nextCellCoords.y - 1;
27
+ if (!this.utils.isDetailsRow(nextCellCoords.y)) {
28
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
29
+ }
30
+ }
31
+ else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
32
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
33
+ }
34
+ else if (!isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {
35
+ nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
36
+ }
37
+ return nextCellCoords;
38
+ }
39
+ keyDown(currentCellCoords) {
40
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
41
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
42
+ const numOfColumns = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;
43
+ if (currentCellCoords.y >= numOfRows) {
44
+ return nextCellCoords;
45
+ }
46
+ nextCellCoords.y = currentCellCoords.y + 1;
47
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
48
+ return super.keyDown(currentCellCoords);
49
+ }
50
+ if (!this.utils.isActionCell(currentCellCoords)) {
51
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
52
+ nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;
53
+ }
54
+ else if (this.utils.getCellsForRow(currentCellCoords.y).length > numOfColumns) {
55
+ nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
56
+ }
57
+ else {
58
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
59
+ }
60
+ }
61
+ else {
62
+ nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;
63
+ }
64
+ return nextCellCoords;
65
+ }
66
+ keyLeft(currentCellCoords) {
67
+ return super.keyLeft(currentCellCoords);
68
+ }
69
+ keyRight(currentCellCoords) {
70
+ return super.keyRight(currentCellCoords);
71
+ }
72
+ keyEnd(currentCellCoords, ctrlKey) {
73
+ return super.keyEnd(currentCellCoords, ctrlKey);
74
+ }
75
+ keyHome(currentCellCoords, ctrlKey) {
76
+ return super.keyHome(currentCellCoords, ctrlKey);
77
+ }
78
+ keyPageUp(currentCellCoords) {
79
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
80
+ const itemsPerPage = this.utils.itemsPerPage;
81
+ nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
82
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
83
+ return super.keyPageUp(currentCellCoords);
84
+ }
85
+ if (!this.utils.isActionCell(currentCellCoords)) {
86
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
87
+ if (!this.utils.isDetailsRow(nextCellCoords.y)) {
88
+ nextCellCoords.y = nextCellCoords.y + 1;
89
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
90
+ }
91
+ }
92
+ else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
93
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
94
+ }
95
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
96
+ nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
97
+ }
98
+ }
99
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
100
+ nextCellCoords.y = nextCellCoords.y - 1;
101
+ }
102
+ return nextCellCoords;
103
+ }
104
+ keyPageDown(currentCellCoords) {
105
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
106
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
107
+ const itemsPerPage = this.utils.itemsPerPage;
108
+ nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
109
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
110
+ return super.keyPageDown(currentCellCoords);
111
+ }
112
+ if (!this.utils.isActionCell(currentCellCoords)) {
113
+ if (this.utils.isRowReplaced(nextCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
114
+ if (nextCellCoords.y < numOfRows) {
115
+ nextCellCoords.y = nextCellCoords.y + 1;
116
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
117
+ }
118
+ }
119
+ else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
120
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
121
+ }
122
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
123
+ nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
124
+ }
125
+ }
126
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
127
+ nextCellCoords.y = nextCellCoords.y - 1;
128
+ }
129
+ return nextCellCoords;
130
+ }
131
+ }
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kZWQtY29sdW1ucy1yb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9kYXRhL2RhdGFncmlkL3V0aWxzL2tleS1uYXZpZ2F0aW9uLXN0cmF0ZWdpZXMvZXhwYW5kZWQtY29sdW1ucy1yb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFJSCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxNQUFNLE9BQU8sdUNBQXdDLFNBQVEsZ0NBQWdDO0lBQzNGLFlBQVksS0FBeUI7UUFDbkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVRLEtBQUssQ0FBQyxpQkFBa0M7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTFFLElBQUksaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPLGNBQWMsQ0FBQztTQUN2QjtRQUVELGNBQWMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVoRSxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0QsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQ2VsbENvb3JkaW5hdGVzIH0gZnJvbSAnLi4va2V5LW5hdmlnYXRpb24tZ3JpZC5jb250cm9sbGVyJztcbmltcG9ydCB7IEtleU5hdmlnYXRpb25VdGlscyB9IGZyb20gJy4uL2tleS1uYXZpZ2F0aW9uLXV0aWxzJztcbmltcG9ydCB7IEV4cGFuZGVkUm93S2V5TmF2aWdhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9leHBhbmRlZC1yb3cnO1xuXG5leHBvcnQgY2xhc3MgRXhwYW5kZWRDb2x1bW5zUm93S2V5TmF2aWdhdGlvblN0cmF0ZWd5IGV4dGVuZHMgRXhwYW5kZWRSb3dLZXlOYXZpZ2F0aW9uU3RyYXRlZ3kge1xuICBjb25zdHJ1Y3Rvcih1dGlsczogS2V5TmF2aWdhdGlvblV0aWxzKSB7XG4gICAgc3VwZXIodXRpbHMpO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5VXAoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBpZiAoY3VycmVudENlbGxDb29yZHMueSA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICAgIH1cblxuICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gMTtcblxuICAgIGlmICh0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICByZXR1cm4gc3VwZXIua2V5VXAoY3VycmVudENlbGxDb29yZHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWN0aW9uQ2VsbCA9IHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGlmIChpc0FjdGlvbkNlbGwgJiYgdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55IC0gMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuXG4gICAgICBpZiAoIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSAmJiAhdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSk7XG4gICAgfSBlbHNlIGlmICghaXNBY3Rpb25DZWxsICYmIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCAtIHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGN1cnJlbnRDZWxsQ29vcmRzLnkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxuXG4gIG92ZXJyaWRlIGtleURvd24oY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBjb25zdCBudW1PZlJvd3MgPSB0aGlzLnV0aWxzLnJvd3MgPyB0aGlzLnV0aWxzLnJvd3MubGVuZ3RoIC0gMSA6IDA7XG4gICAgY29uc3QgbnVtT2ZDb2x1bW5zID0gbnVtT2ZSb3dzID8gdGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGggLSAxIDogMDtcblxuICAgIGlmIChjdXJyZW50Q2VsbENvb3Jkcy55ID49IG51bU9mUm93cykge1xuICAgICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICAgIH1cblxuICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55ICsgMTtcblxuICAgIGlmICh0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICByZXR1cm4gc3VwZXIua2V5RG93bihjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChjdXJyZW50Q2VsbENvb3JkcykpIHtcbiAgICAgIGlmICh0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgPCBudW1PZlJvd3MgPyBuZXh0Q2VsbENvb3Jkcy55ICsgMSA6IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpLmxlbmd0aCA+IG51bU9mQ29sdW1ucykge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCAtIHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGN1cnJlbnRDZWxsQ29vcmRzLnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggKyB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgPCBudW1PZlJvd3MgPyBuZXh0Q2VsbENvb3Jkcy55ICsgMSA6IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxuXG4gIG92ZXJyaWRlIGtleUxlZnQoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIHJldHVybiBzdXBlci5rZXlMZWZ0KGN1cnJlbnRDZWxsQ29vcmRzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGtleVJpZ2h0KGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICByZXR1cm4gc3VwZXIua2V5UmlnaHQoY3VycmVudENlbGxDb29yZHMpO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5RW5kKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMsIGN0cmxLZXk6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gc3VwZXIua2V5RW5kKGN1cnJlbnRDZWxsQ29vcmRzLCBjdHJsS2V5KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGtleUhvbWUoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcywgY3RybEtleTogYm9vbGVhbikge1xuICAgIHJldHVybiBzdXBlci5rZXlIb21lKGN1cnJlbnRDZWxsQ29vcmRzLCBjdHJsS2V5KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGtleVBhZ2VVcChjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcbiAgICBjb25zdCBpdGVtc1BlclBhZ2UgPSB0aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtcblxuICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gaXRlbXNQZXJQYWdlID4gMCA/IGN1cnJlbnRDZWxsQ29vcmRzLnkgLSBpdGVtc1BlclBhZ2UgKyAxIDogMTtcblxuICAgIGlmICh0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICByZXR1cm4gc3VwZXIua2V5UGFnZVVwKGN1cnJlbnRDZWxsQ29vcmRzKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKSkge1xuICAgICAgaWYgKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBpZiAoIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgKyAxO1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkgJiYgIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54IC0gdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxuXG4gIG92ZXJyaWRlIGtleVBhZ2VEb3duKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgY29uc3QgbnVtT2ZSb3dzID0gdGhpcy51dGlscy5yb3dzID8gdGhpcy51dGlscy5yb3dzLmxlbmd0aCAtIDEgOiAwO1xuICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO1xuXG4gICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgKyBpdGVtc1BlclBhZ2UgPj0gbnVtT2ZSb3dzID8gbnVtT2ZSb3dzIDogY3VycmVudENlbGxDb29yZHMueSArIGl0ZW1zUGVyUGFnZTtcblxuICAgIGlmICh0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICByZXR1cm4gc3VwZXIua2V5UGFnZURvd24oY3VycmVudENlbGxDb29yZHMpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpKSB7XG4gICAgICBpZiAodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKG5leHRDZWxsQ29vcmRzLnkpICYmICF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBpZiAobmV4dENlbGxDb29yZHMueSA8IG51bU9mUm93cykge1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55ICsgMTtcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCArIHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpICYmICF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCArIHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCAtIHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGN1cnJlbnRDZWxsQ29vcmRzLnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55IC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,168 @@
1
+ /*
2
+ * Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
3
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4
+ * This software is released under MIT license.
5
+ * The full license information can be found in LICENSE in the root directory of this project.
6
+ */
7
+ import { DefaultKeyNavigationStrategy } from './default';
8
+ export class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {
9
+ constructor(utils) {
10
+ super(utils);
11
+ }
12
+ keyUp(currentCellCoords) {
13
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
14
+ if (currentCellCoords.y === 0) {
15
+ return nextCellCoords;
16
+ }
17
+ nextCellCoords.y = currentCellCoords.y - 1;
18
+ if (!this.utils.isActionCell(currentCellCoords)) {
19
+ if (this.utils.isRowReplaced(currentCellCoords.y)) {
20
+ nextCellCoords.y = nextCellCoords.y - 1;
21
+ }
22
+ switch (true) {
23
+ case this.utils.isDetailsRow(nextCellCoords.y):
24
+ nextCellCoords.x = 0;
25
+ break;
26
+ case this.utils.isDetailsRow(currentCellCoords.y) === false:
27
+ nextCellCoords.x = currentCellCoords.x;
28
+ break;
29
+ default:
30
+ nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
31
+ }
32
+ }
33
+ else if (this.utils.isDetailsRow(nextCellCoords.y) && nextCellCoords.y > 0) {
34
+ nextCellCoords.y = nextCellCoords.y - 1;
35
+ }
36
+ return nextCellCoords;
37
+ }
38
+ keyDown(currentCellCoords) {
39
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
40
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
41
+ if (currentCellCoords.y >= numOfRows) {
42
+ return nextCellCoords;
43
+ }
44
+ nextCellCoords.y = currentCellCoords.y + 1;
45
+ if (!this.utils.isActionCell(currentCellCoords)) {
46
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
47
+ nextCellCoords.y = nextCellCoords.y + 1;
48
+ }
49
+ if (this.utils.isDetailsRow(nextCellCoords.y)) {
50
+ nextCellCoords.x = 0;
51
+ }
52
+ else {
53
+ nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
54
+ }
55
+ }
56
+ else {
57
+ nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y;
58
+ }
59
+ return nextCellCoords;
60
+ }
61
+ keyLeft(currentCellCoords) {
62
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
63
+ if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
64
+ return super.keyLeft(currentCellCoords);
65
+ }
66
+ if (currentCellCoords.x !== 0) {
67
+ nextCellCoords.x = currentCellCoords.x - 1;
68
+ }
69
+ else if (!this.utils.isActionCell(currentCellCoords)) {
70
+ nextCellCoords.y = currentCellCoords.y - 1;
71
+ nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y) - 1;
72
+ }
73
+ return nextCellCoords;
74
+ }
75
+ keyRight(currentCellCoords) {
76
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
77
+ if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
78
+ return super.keyRight(currentCellCoords);
79
+ }
80
+ // calculate numOfColumns based on header cells.
81
+ const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;
82
+ if (currentCellCoords.x >= numOfColumns) {
83
+ return nextCellCoords;
84
+ }
85
+ if (this.utils.isActionCell(currentCellCoords) &&
86
+ currentCellCoords.x === this.utils.actionCellCount(currentCellCoords.x) - 1 &&
87
+ this.utils.isRowReplaced(currentCellCoords.y) &&
88
+ !this.utils.isDetailsRow(currentCellCoords.y)) {
89
+ nextCellCoords.y = currentCellCoords.y + 1;
90
+ nextCellCoords.x = 0;
91
+ }
92
+ else {
93
+ nextCellCoords.x = currentCellCoords.x + 1;
94
+ }
95
+ return nextCellCoords;
96
+ }
97
+ keyEnd(currentCellCoords, ctrlKey) {
98
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
99
+ if ((!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) || ctrlKey) {
100
+ return super.keyEnd(currentCellCoords, ctrlKey);
101
+ }
102
+ nextCellCoords.x = this.utils.getCellsForRow(currentCellCoords.y).length - 1;
103
+ return nextCellCoords;
104
+ }
105
+ keyHome(currentCellCoords, ctrlKey) {
106
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
107
+ if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
108
+ return super.keyHome(currentCellCoords, ctrlKey);
109
+ }
110
+ nextCellCoords.x = 0;
111
+ nextCellCoords.y = currentCellCoords.y - 1;
112
+ if (ctrlKey) {
113
+ nextCellCoords.y = 0;
114
+ }
115
+ return nextCellCoords;
116
+ }
117
+ keyPageUp(currentCellCoords) {
118
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
119
+ const itemsPerPage = this.utils.itemsPerPage;
120
+ nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
121
+ if (!this.utils.isActionCell(currentCellCoords)) {
122
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
123
+ if (!this.utils.isDetailsRow(nextCellCoords.y)) {
124
+ nextCellCoords.y = nextCellCoords.y + 1;
125
+ nextCellCoords.x = 0;
126
+ }
127
+ }
128
+ else if (!this.utils.isDetailsRow(currentCellCoords.y)) {
129
+ if (this.utils.isDetailsRow(nextCellCoords.y)) {
130
+ nextCellCoords.x = 0;
131
+ }
132
+ }
133
+ else if (this.utils.isDetailsRow(currentCellCoords.y)) {
134
+ if (!this.utils.isDetailsRow(nextCellCoords.y)) {
135
+ nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
136
+ }
137
+ }
138
+ }
139
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
140
+ nextCellCoords.y = nextCellCoords.y - 1;
141
+ }
142
+ return nextCellCoords;
143
+ }
144
+ keyPageDown(currentCellCoords) {
145
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
146
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
147
+ const itemsPerPage = this.utils.itemsPerPage;
148
+ nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
149
+ if (!this.utils.isActionCell(currentCellCoords)) {
150
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
151
+ if (nextCellCoords.y < numOfRows && !this.utils.isDetailsRow(nextCellCoords.y)) {
152
+ nextCellCoords.y = nextCellCoords.y + 1;
153
+ }
154
+ }
155
+ else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
156
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
157
+ }
158
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
159
+ nextCellCoords.x = 0;
160
+ }
161
+ }
162
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
163
+ nextCellCoords.y = nextCellCoords.y - 1;
164
+ }
165
+ return nextCellCoords;
166
+ }
167
+ }
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kZWQtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZGF0YS9kYXRhZ3JpZC91dGlscy9rZXktbmF2aWdhdGlvbi1zdHJhdGVnaWVzL2V4cGFuZGVkLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6RCxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsNEJBQTRCO0lBQ2hGLFlBQVksS0FBeUI7UUFDbkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVRLEtBQUssQ0FBQyxpQkFBa0M7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTFFLElBQUksaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPLGNBQWMsQ0FBQztTQUN2QjtRQUVELGNBQWMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUMvQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqRCxjQUFjLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pDO1lBRUQsUUFBUSxJQUFJLEVBQUU7Z0JBQ1osS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUM1QyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDckIsTUFBTTtnQkFDUixLQUFLLElB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c0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1IEJyb2FkY29tLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhlIHRlcm0gXCJCcm9hZGNvbVwiIHJlZmVycyB0byBCcm9hZGNvbSBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBDZWxsQ29vcmRpbmF0ZXMgfSBmcm9tICcuLi9rZXktbmF2aWdhdGlvbi1ncmlkLmNvbnRyb2xsZXInO1xuaW1wb3J0IHsgS2V5TmF2aWdhdGlvblV0aWxzIH0gZnJvbSAnLi4va2V5LW5hdmlnYXRpb24tdXRpbHMnO1xuaW1wb3J0IHsgRGVmYXVsdEtleU5hdmlnYXRpb25TdHJhdGVneSB9IGZyb20gJy4vZGVmYXVsdCc7XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmRlZFJvd0tleU5hdmlnYXRpb25TdHJhdGVneSBleHRlbmRzIERlZmF1bHRLZXlOYXZpZ2F0aW9uU3RyYXRlZ3kge1xuICBjb25zdHJ1Y3Rvcih1dGlsczogS2V5TmF2aWdhdGlvblV0aWxzKSB7XG4gICAgc3VwZXIodXRpbHMpO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5VXAoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBpZiAoY3VycmVudENlbGxDb29yZHMueSA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICAgIH1cblxuICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gMTtcblxuICAgIGlmICghdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpKSB7XG4gICAgICBpZiAodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGN1cnJlbnRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55IC0gMTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgIGNhc2UgdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSk6XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkgPT09IGZhbHNlOlxuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpICYmIG5leHRDZWxsQ29vcmRzLnkgPiAwKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5RG93bihjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGNvbnN0IG51bU9mUm93cyA9IHRoaXMudXRpbHMucm93cyA/IHRoaXMudXRpbHMucm93cy5sZW5ndGggLSAxIDogMDtcbiAgICBpZiAoY3VycmVudENlbGxDb29yZHMueSA+PSBudW1PZlJvd3MpIHtcbiAgICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgICB9XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSArIDE7XG5cbiAgICBpZiAoIXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKSkge1xuICAgICAgaWYgKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSArIDE7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgPCBudW1PZlJvd3MgPyBuZXh0Q2VsbENvb3Jkcy55ICsgMSA6IG5leHRDZWxsQ29vcmRzLnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5TGVmdChjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGlmICghdGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkgJiYgIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChjdXJyZW50Q2VsbENvb3Jkcy55KSkge1xuICAgICAgcmV0dXJuIHN1cGVyLmtleUxlZnQoY3VycmVudENlbGxDb29yZHMpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50Q2VsbENvb3Jkcy54ICE9PSAwKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCAtIDE7XG4gICAgfSBlbHNlIGlmICghdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSAtIDE7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSkgLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxuXG4gIG92ZXJyaWRlIGtleVJpZ2h0KGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgaWYgKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSAmJiAhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGN1cnJlbnRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICByZXR1cm4gc3VwZXIua2V5UmlnaHQoY3VycmVudENlbGxDb29yZHMpO1xuICAgIH1cblxuICAgIC8vIGNhbGN1bGF0ZSBudW1PZkNvbHVtbnMgYmFzZWQgb24gaGVhZGVyIGNlbGxzLlxuICAgIGNvbnN0IG51bU9mQ29sdW1ucyA9IHRoaXMudXRpbHMucm93cz8ubGVuZ3RoIC0gMSA/IHRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoIC0gMSA6IDA7XG5cbiAgICBpZiAoY3VycmVudENlbGxDb29yZHMueCA+PSBudW1PZkNvbHVtbnMpIHtcbiAgICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChjdXJyZW50Q2VsbENvb3JkcykgJiZcbiAgICAgIGN1cnJlbnRDZWxsQ29vcmRzLnggPT09IHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGN1cnJlbnRDZWxsQ29vcmRzLngpIC0gMSAmJlxuICAgICAgdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGN1cnJlbnRDZWxsQ29vcmRzLnkpICYmXG4gICAgICAhdGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSlcbiAgICApIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55ICsgMTtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCArIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5RW5kKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMsIGN0cmxLZXk6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgaWYgKCghdGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkgJiYgIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChjdXJyZW50Q2VsbENvb3Jkcy55KSkgfHwgY3RybEtleSkge1xuICAgICAgcmV0dXJuIHN1cGVyLmtleUVuZChjdXJyZW50Q2VsbENvb3JkcywgY3RybEtleSk7XG4gICAgfVxuXG4gICAgbmV4dENlbGxDb29yZHMueCA9IHRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coY3VycmVudENlbGxDb29yZHMueSkubGVuZ3RoIC0gMTtcblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxuXG4gIG92ZXJyaWRlIGtleUhvbWUoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcywgY3RybEtleTogYm9vbGVhbikge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBpZiAoIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpICYmICF0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoY3VycmVudENlbGxDb29yZHMueSkpIHtcbiAgICAgIHJldHVybiBzdXBlci5rZXlIb21lKGN1cnJlbnRDZWxsQ29vcmRzLCBjdHJsS2V5KTtcbiAgICB9XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy54ID0gMDtcbiAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSAtIDE7XG5cbiAgICBpZiAoY3RybEtleSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5UGFnZVVwKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO1xuXG4gICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgLSBpdGVtc1BlclBhZ2UgPiAwID8gY3VycmVudENlbGxDb29yZHMueSAtIGl0ZW1zUGVyUGFnZSArIDEgOiAxO1xuXG4gICAgaWYgKCF0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChjdXJyZW50Q2VsbENvb3JkcykpIHtcbiAgICAgIGlmICh0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55ICsgMTtcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55IC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBvdmVycmlkZSBrZXlQYWdlRG93bihjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGNvbnN0IG51bU9mUm93cyA9IHRoaXMudXRpbHMucm93cyA/IHRoaXMudXRpbHMucm93cy5sZW5ndGggLSAxIDogMDtcbiAgICBjb25zdCBpdGVtc1BlclBhZ2UgPSB0aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtcblxuICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55ICsgaXRlbXNQZXJQYWdlID49IG51bU9mUm93cyA/IG51bU9mUm93cyA6IGN1cnJlbnRDZWxsQ29vcmRzLnkgKyBpdGVtc1BlclBhZ2U7XG5cbiAgICBpZiAoIXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKSkge1xuICAgICAgaWYgKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBpZiAobmV4dENlbGxDb29yZHMueSA8IG51bU9mUm93cyAmJiAhdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkgJiYgIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55IC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,108 @@
1
+ /*
2
+ * Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
3
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4
+ * This software is released under MIT license.
5
+ * The full license information can be found in LICENSE in the root directory of this project.
6
+ */
7
+ import { Keys } from '../../../utils/enums/keys.enum';
8
+ import { DefaultKeyNavigationStrategy } from './key-navigation-strategies/default';
9
+ import { ExpandedColumnsRowKeyNavigationStrategy } from './key-navigation-strategies/expanded-columns-row';
10
+ import { ExpandedRowKeyNavigationStrategy } from './key-navigation-strategies/expanded-row';
11
+ export class KeyNavigationUtils {
12
+ constructor(host, config) {
13
+ this.host = host;
14
+ this.config = config;
15
+ }
16
+ get grid() {
17
+ return this.host?.querySelector(this.config.keyGrid);
18
+ }
19
+ get rows() {
20
+ return this.host?.querySelectorAll(this.config.keyGridRows);
21
+ }
22
+ get cells() {
23
+ return this.host?.querySelectorAll(this.config.keyGridCells);
24
+ }
25
+ get currentCellCoordinates() {
26
+ const currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;
27
+ const currentRow = currentCell ? currentCell.closest(this.config.keyGridRows) : null;
28
+ const coordinates = {
29
+ x: currentRow && currentCell
30
+ ? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)
31
+ : 0,
32
+ y: currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0,
33
+ };
34
+ return coordinates;
35
+ }
36
+ get itemsPerPage() {
37
+ return Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.rows[0].clientHeight) - 1 || 0;
38
+ }
39
+ getNextItemCoordinate(e) {
40
+ const currentCellCoords = this.currentCellCoordinates;
41
+ const strategy = this.getNavStrategy(currentCellCoords);
42
+ const inlineStart = this.host.dir === 'rtl' ? Keys.ArrowRight : Keys.ArrowLeft;
43
+ const inlineEnd = this.host.dir === 'rtl' ? Keys.ArrowLeft : Keys.ArrowRight;
44
+ switch (e.key) {
45
+ case Keys.ArrowUp:
46
+ return strategy.keyUp(currentCellCoords);
47
+ case Keys.ArrowDown:
48
+ return strategy.keyDown(currentCellCoords);
49
+ case inlineStart:
50
+ return strategy.keyLeft(currentCellCoords);
51
+ case inlineEnd:
52
+ return strategy.keyRight(currentCellCoords);
53
+ case Keys.Home:
54
+ return strategy.keyHome(currentCellCoords, e.ctrlKey);
55
+ case Keys.End:
56
+ return strategy.keyEnd(currentCellCoords, e.ctrlKey);
57
+ case Keys.PageUp:
58
+ return strategy.keyPageUp(currentCellCoords);
59
+ case Keys.PageDown:
60
+ return strategy.keyPageDown(currentCellCoords);
61
+ default:
62
+ return currentCellCoords;
63
+ }
64
+ }
65
+ getCellsForRow(index) {
66
+ return this.rows[index].querySelectorAll(this.config.keyGridCells);
67
+ }
68
+ isExpandedRow(index) {
69
+ const selectedElement = this.rows[index].querySelector('.datagrid-row-detail');
70
+ return selectedElement ? selectedElement.style.display !== 'none' : false;
71
+ }
72
+ isDetailsRow(index) {
73
+ return this.rows[index].classList.contains('datagrid-row-detail');
74
+ }
75
+ isRowReplaced(index) {
76
+ return !!this.rows[index].closest('clr-dg-row.datagrid-row-replaced');
77
+ }
78
+ isSingleCellExpandedRow(index) {
79
+ return this.rows[index]?.querySelectorAll(this.config.keyGridCells).length === 1;
80
+ }
81
+ actionCellCount(index) {
82
+ return this.actionCellsAsArray(index).length;
83
+ }
84
+ actionCellsAsArray(index) {
85
+ return Array.from(this.rows[index].querySelectorAll('.datagrid-row-sticky .datagrid-cell, .datagrid-row-sticky .datagrid-column'));
86
+ }
87
+ isActionCell(cellCoords) {
88
+ return !!this.actionCellsAsArray(cellCoords.y)[cellCoords.x];
89
+ }
90
+ createNextCellCoords(cellCoords) {
91
+ return {
92
+ x: cellCoords.x,
93
+ y: cellCoords.y,
94
+ };
95
+ }
96
+ getNavStrategy(currentCellCoords) {
97
+ switch (true) {
98
+ case this.isSingleCellExpandedRow(currentCellCoords.y):
99
+ return new ExpandedRowKeyNavigationStrategy(this);
100
+ case this.isDetailsRow(currentCellCoords.y):
101
+ case this.isExpandedRow(currentCellCoords.y):
102
+ return new ExpandedColumnsRowKeyNavigationStrategy(this);
103
+ default:
104
+ return new DefaultKeyNavigationStrategy(this);
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LW5hdmlnYXRpb24tdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9kYXRhL2RhdGFncmlkL3V0aWxzL2tleS1uYXZpZ2F0aW9uLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3RELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTVGLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFBbUIsSUFBaUIsRUFBUyxNQUErQjtRQUF6RCxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7SUFBRyxDQUFDO0lBRWhGLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUE0QixDQUFDO0lBQ3pGLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQTRCLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUss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SSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyw0RUFBNEUsQ0FBQyxDQUNoSCxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxVQUEyQjtRQUN0QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsVUFBMkI7UUFDOUMsT0FBTztZQUNMLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNmLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FBQyxpQkFBa0M7UUFDdkQsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELE9BQU8sSUFBSSxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRCxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxJQUFJLHVDQUF1QyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNEO2dCQUNFLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgS2V5cyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudW1zL2tleXMuZW51bSc7XG5pbXBvcnQgeyBLZXlOYXZpZ2F0aW9uR3JpZFN0cmF0ZWd5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9rZXktbmF2LWdyaWQtc3RyYXRlZ3kuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGxDb29yZGluYXRlcywgS2V5TmF2aWdhdGlvbkdyaWRDb25maWcgfSBmcm9tICcuL2tleS1uYXZpZ2F0aW9uLWdyaWQuY29udHJvbGxlcic7XG5pbXBvcnQgeyBEZWZhdWx0S2V5TmF2aWdhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9rZXktbmF2aWdhdGlvbi1zdHJhdGVnaWVzL2RlZmF1bHQnO1xuaW1wb3J0IHsgRXhwYW5kZWRDb2x1bW5zUm93S2V5TmF2aWdhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9rZXktbmF2aWdhdGlvbi1zdHJhdGVnaWVzL2V4cGFuZGVkLWNvbHVtbnMtcm93JztcbmltcG9ydCB7IEV4cGFuZGVkUm93S2V5TmF2aWdhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9rZXktbmF2aWdhdGlvbi1zdHJhdGVnaWVzL2V4cGFuZGVkLXJvdyc7XG5cbmV4cG9ydCBjbGFzcyBLZXlOYXZpZ2F0aW9uVXRpbHMge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaG9zdDogSFRNTEVsZW1lbnQsIHB1YmxpYyBjb25maWc6IEtleU5hdmlnYXRpb25HcmlkQ29uZmlnKSB7fVxuXG4gIGdldCBncmlkKCkge1xuICAgIHJldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcua2V5R3JpZCk7XG4gIH1cblxuICBnZXQgcm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKSBhcyBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PjtcbiAgfVxuXG4gIGdldCBjZWxscygpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykgYXMgTm9kZUxpc3RPZjxIVE1MRWxlbWVudD47XG4gIH1cblxuICBnZXQgY3VycmVudENlbGxDb29yZGluYXRlcygpIHtcbiAgICBjb25zdCBjdXJyZW50Q2VsbCA9IHRoaXMuY2VsbHMgPyBBcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQoaSA9PiBpLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSA9PT0gJzAnKSA6IG51bGw7XG4gICAgY29uc3QgY3VycmVudFJvdzogSFRNTEVsZW1lbnQgPSBjdXJyZW50Q2VsbCA/IGN1cnJlbnRDZWxsLmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZFJvd3MpIDogbnVsbDtcblxuICAgIGNvbnN0IGNvb3JkaW5hdGVzOiBDZWxsQ29vcmRpbmF0ZXMgPSB7XG4gICAgICB4OlxuICAgICAgICBjdXJyZW50Um93ICYmIGN1cnJlbnRDZWxsXG4gICAgICAgICAgPyBBcnJheS5mcm9tKGN1cnJlbnRSb3cucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGN1cnJlbnRDZWxsKVxuICAgICAgICAgIDogMCxcbiAgICAgIHk6IGN1cnJlbnRSb3cgJiYgY3VycmVudENlbGwgJiYgdGhpcy5yb3dzID8gQXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoY3VycmVudFJvdykgOiAwLFxuICAgIH07XG5cbiAgICByZXR1cm4gY29vcmRpbmF0ZXM7XG4gIH1cblxuICBnZXQgaXRlbXNQZXJQYWdlKCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvcignLmRhdGFncmlkJykuY2xpZW50SGVpZ2h0IC8gdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCkgLSAxIHx8IDA7XG4gIH1cblxuICBnZXROZXh0SXRlbUNvb3JkaW5hdGUoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGN1cnJlbnRDZWxsQ29vcmRzID0gdGhpcy5jdXJyZW50Q2VsbENvb3JkaW5hdGVzO1xuICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5nZXROYXZTdHJhdGVneShjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBjb25zdCBpbmxpbmVTdGFydCA9IHRoaXMuaG9zdC5kaXIgPT09ICdydGwnID8gS2V5cy5BcnJvd1JpZ2h0IDogS2V5cy5BcnJvd0xlZnQ7XG4gICAgY29uc3QgaW5saW5lRW5kID0gdGhpcy5ob3N0LmRpciA9PT0gJ3J0bCcgPyBLZXlzLkFycm93TGVmdCA6IEtleXMuQXJyb3dSaWdodDtcblxuICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgIGNhc2UgS2V5cy5BcnJvd1VwOlxuICAgICAgICByZXR1cm4gc3RyYXRlZ3kua2V5VXAoY3VycmVudENlbGxDb29yZHMpO1xuICAgICAgY2FzZSBLZXlzLkFycm93RG93bjpcbiAgICAgICAgcmV0dXJuIHN0cmF0ZWd5LmtleURvd24oY3VycmVudENlbGxDb29yZHMpO1xuICAgICAgY2FzZSBpbmxpbmVTdGFydDpcbiAgICAgICAgcmV0dXJuIHN0cmF0ZWd5LmtleUxlZnQoY3VycmVudENlbGxDb29yZHMpO1xuICAgICAgY2FzZSBpbmxpbmVFbmQ6XG4gICAgICAgIHJldHVybiBzdHJhdGVneS5rZXlSaWdodChjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgICBjYXNlIEtleXMuSG9tZTpcbiAgICAgICAgcmV0dXJuIHN0cmF0ZWd5LmtleUhvbWUoY3VycmVudENlbGxDb29yZHMsIGUuY3RybEtleSk7XG4gICAgICBjYXNlIEtleXMuRW5kOlxuICAgICAgICByZXR1cm4gc3RyYXRlZ3kua2V5RW5kKGN1cnJlbnRDZWxsQ29vcmRzLCBlLmN0cmxLZXkpO1xuICAgICAgY2FzZSBLZXlzLlBhZ2VVcDpcbiAgICAgICAgcmV0dXJuIHN0cmF0ZWd5LmtleVBhZ2VVcChjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgICBjYXNlIEtleXMuUGFnZURvd246XG4gICAgICAgIHJldHVybiBzdHJhdGVneS5rZXlQYWdlRG93bihjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY3VycmVudENlbGxDb29yZHM7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2VsbHNGb3JSb3coaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnJvd3NbaW5kZXhdLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKTtcbiAgfVxuXG4gIGlzRXhwYW5kZWRSb3coaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLnJvd3NbaW5kZXhdLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhZ3JpZC1yb3ctZGV0YWlsJyk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50ID8gc2VsZWN0ZWRFbGVtZW50LnN0eWxlLmRpc3BsYXkgIT09ICdub25lJyA6IGZhbHNlO1xuICB9XG5cbiAgaXNEZXRhaWxzUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzW2luZGV4XS5jbGFzc0xpc3QuY29udGFpbnMoJ2RhdGFncmlkLXJvdy1kZXRhaWwnKTtcbiAgfVxuXG4gIGlzUm93UmVwbGFjZWQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiAhIXRoaXMucm93c1tpbmRleF0uY2xvc2VzdCgnY2xyLWRnLXJvdy5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQnKTtcbiAgfVxuXG4gIGlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzW2luZGV4XT8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIGFjdGlvbkNlbGxDb3VudChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KGluZGV4KS5sZW5ndGg7XG4gIH1cblxuICBhY3Rpb25DZWxsc0FzQXJyYXkoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5yb3dzW2luZGV4XS5xdWVyeVNlbGVjdG9yQWxsKCcuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbCwgLmRhdGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNvbHVtbicpXG4gICAgKTtcbiAgfVxuXG4gIGlzQWN0aW9uQ2VsbChjZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICByZXR1cm4gISF0aGlzLmFjdGlvbkNlbGxzQXNBcnJheShjZWxsQ29vcmRzLnkpW2NlbGxDb29yZHMueF07XG4gIH1cblxuICBjcmVhdGVOZXh0Q2VsbENvb3JkcyhjZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpOiBDZWxsQ29vcmRpbmF0ZXMge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBjZWxsQ29vcmRzLngsXG4gICAgICB5OiBjZWxsQ29vcmRzLnksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmF2U3RyYXRlZ3koY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcyk6IEtleU5hdmlnYXRpb25HcmlkU3RyYXRlZ3lJbnRlcmZhY2Uge1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSB0aGlzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpOlxuICAgICAgICByZXR1cm4gbmV3IEV4cGFuZGVkUm93S2V5TmF2aWdhdGlvblN0cmF0ZWd5KHRoaXMpO1xuICAgICAgY2FzZSB0aGlzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KTpcbiAgICAgIGNhc2UgdGhpcy5pc0V4cGFuZGVkUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpOlxuICAgICAgICByZXR1cm4gbmV3IEV4cGFuZGVkQ29sdW1uc1Jvd0tleU5hdmlnYXRpb25TdHJhdGVneSh0aGlzKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEtleU5hdmlnYXRpb25TdHJhdGVneSh0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==