@clr/angular 17.9.0 → 17.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/clarity.api.md +183 -87
  2. package/data/datagrid/datagrid-column.d.ts +6 -1
  3. package/data/datagrid/datagrid-filter.d.ts +2 -9
  4. package/data/datagrid/datagrid-row.d.ts +6 -4
  5. package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +5 -7
  6. package/data/datagrid/datagrid.d.ts +15 -4
  7. package/data/datagrid/index.d.ts +1 -0
  8. package/data/datagrid/interfaces/key-nav-grid-strategy.interface.d.ts +11 -0
  9. package/data/datagrid/interfaces/virtual-scroll-data-range.interface.d.ts +5 -0
  10. package/data/datagrid/providers/items.d.ts +1 -0
  11. package/data/datagrid/utils/datagrid-filter-registrar.d.ts +1 -1
  12. package/data/datagrid/utils/key-navigation-grid.controller.d.ts +8 -24
  13. package/data/datagrid/utils/key-navigation-strategies/default.d.ts +15 -0
  14. package/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.d.ts +12 -0
  15. package/data/datagrid/utils/key-navigation-strategies/expanded-row.d.ts +12 -0
  16. package/data/datagrid/utils/key-navigation-utils.d.ts +24 -0
  17. package/esm2020/accordion/stepper/stepper-panel.mjs +3 -3
  18. package/esm2020/button/button-group/button.mjs +20 -4
  19. package/esm2020/data/datagrid/datagrid-column.mjs +40 -28
  20. package/esm2020/data/datagrid/datagrid-detail-header.mjs +3 -3
  21. package/esm2020/data/datagrid/datagrid-filter.mjs +2 -21
  22. package/esm2020/data/datagrid/datagrid-pagination.mjs +35 -31
  23. package/esm2020/data/datagrid/datagrid-row.mjs +23 -11
  24. package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +52 -51
  25. package/esm2020/data/datagrid/datagrid.mjs +87 -24
  26. package/esm2020/data/datagrid/index.mjs +2 -1
  27. package/esm2020/data/datagrid/interfaces/key-nav-grid-strategy.interface.mjs +8 -0
  28. package/esm2020/data/datagrid/interfaces/virtual-scroll-data-range.interface.mjs +8 -0
  29. package/esm2020/data/datagrid/providers/items.mjs +5 -1
  30. package/esm2020/data/datagrid/utils/datagrid-filter-registrar.mjs +1 -1
  31. package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +44 -271
  32. package/esm2020/data/datagrid/utils/key-navigation-strategies/default.mjs +132 -0
  33. package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.mjs +129 -0
  34. package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-row.mjs +165 -0
  35. package/esm2020/data/datagrid/utils/key-navigation-utils.mjs +121 -0
  36. package/esm2020/data/stack-view/stack-block.mjs +3 -3
  37. package/esm2020/emphasis/alert/alert.mjs +3 -3
  38. package/esm2020/forms/combobox/combobox.mjs +3 -3
  39. package/esm2020/forms/combobox/combobox.module.mjs +20 -3
  40. package/esm2020/forms/combobox/index.mjs +2 -1
  41. package/esm2020/forms/combobox/option-group.mjs +42 -0
  42. package/esm2020/forms/combobox/option-items.directive.mjs +5 -1
  43. package/esm2020/forms/combobox/options.mjs +3 -3
  44. package/esm2020/forms/common/abstract-control.mjs +1 -1
  45. package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +1 -1
  46. package/esm2020/forms/datepicker/datepicker-view-manager.mjs +3 -3
  47. package/esm2020/forms/file-input/file-input-container.mjs +2 -2
  48. package/esm2020/forms/file-input/file-input.mjs +11 -4
  49. package/esm2020/forms/number-input/number-input-container.mjs +6 -3
  50. package/esm2020/forms/number-input/number-input.mjs +10 -3
  51. package/esm2020/layout/breadcrumbs/breadcrumbs.mjs +2 -2
  52. package/esm2020/modal/index.mjs +2 -2
  53. package/esm2020/modal/modal-host.component.mjs +29 -0
  54. package/esm2020/modal/modal.mjs +11 -4
  55. package/esm2020/modal/modal.module.mjs +4 -4
  56. package/esm2020/modal/side-panel.mjs +102 -47
  57. package/esm2020/popover/common/abstract-popover.mjs +8 -2
  58. package/esm2020/popover/common/popover.mjs +2 -2
  59. package/esm2020/popover/dropdown/dropdown-item.mjs +10 -4
  60. package/esm2020/popover/dropdown/dropdown-trigger.mjs +12 -4
  61. package/esm2020/popover/dropdown/utils/content-wrapping.mjs +22 -0
  62. package/esm2020/utils/animations/constants.mjs +7 -1
  63. package/esm2020/utils/animations/expandable-animation/base-expandable-animation.mjs +46 -0
  64. package/esm2020/utils/animations/expandable-animation/expandable-animation.directive.mjs +56 -0
  65. package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +13 -36
  66. package/esm2020/utils/animations/expandable-animation/expandable-animation.module.mjs +3 -2
  67. package/esm2020/utils/animations/expandable-animation/index.mjs +4 -2
  68. package/esm2020/utils/chocolate/oompa-loompa.mjs +1 -1
  69. package/esm2020/utils/focus/focusable-item/basic-focusable-item.service.mjs +2 -2
  70. package/esm2020/utils/i18n/common-strings.default.mjs +2 -1
  71. package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
  72. package/esm2020/wizard/wizard-stepnav-item.mjs +60 -24
  73. package/esm2020/wizard/wizard.mjs +29 -6
  74. package/fesm2015/clr-angular.mjs +1377 -646
  75. package/fesm2015/clr-angular.mjs.map +1 -1
  76. package/fesm2020/clr-angular.mjs +1371 -641
  77. package/fesm2020/clr-angular.mjs.map +1 -1
  78. package/forms/combobox/combobox.module.d.ts +12 -11
  79. package/forms/combobox/index.d.ts +1 -0
  80. package/forms/combobox/option-group.d.ts +9 -0
  81. package/forms/combobox/option-items.directive.d.ts +1 -0
  82. package/forms/common/abstract-control.d.ts +1 -1
  83. package/forms/common/if-control-state/abstract-if-state.d.ts +1 -1
  84. package/forms/file-input/file-input.d.ts +2 -0
  85. package/forms/number-input/number-input-container.d.ts +1 -0
  86. package/forms/number-input/number-input.d.ts +2 -0
  87. package/modal/index.d.ts +1 -1
  88. package/modal/modal-host.component.d.ts +5 -0
  89. package/modal/modal.d.ts +3 -2
  90. package/modal/modal.module.d.ts +2 -2
  91. package/modal/side-panel.d.ts +18 -10
  92. package/package.json +2 -2
  93. package/popover/common/abstract-popover.d.ts +1 -1
  94. package/popover/dropdown/dropdown-item.d.ts +5 -1
  95. package/popover/dropdown/dropdown-trigger.d.ts +5 -2
  96. package/popover/dropdown/utils/content-wrapping.d.ts +2 -0
  97. package/utils/animations/constants.d.ts +1 -0
  98. package/utils/animations/expandable-animation/base-expandable-animation.d.ts +16 -0
  99. package/utils/animations/expandable-animation/expandable-animation.d.ts +2 -9
  100. package/utils/animations/expandable-animation/expandable-animation.directive.d.ts +16 -0
  101. package/utils/animations/expandable-animation/expandable-animation.module.d.ts +3 -2
  102. package/utils/animations/expandable-animation/index.d.ts +1 -0
  103. package/utils/chocolate/oompa-loompa.d.ts +1 -1
  104. package/utils/i18n/common-strings.interface.d.ts +4 -0
  105. package/wizard/wizard-stepnav-item.d.ts +16 -2
  106. package/wizard/wizard.d.ts +12 -2
  107. package/esm2020/modal/modal-host.directive.mjs +0 -20
  108. package/modal/modal-host.directive.d.ts +0 -5
@@ -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
+ export class DefaultKeyNavigationStrategy {
8
+ constructor(utils) {
9
+ this.utils = utils;
10
+ }
11
+ keyUp(currentCellCoords) {
12
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
13
+ if (currentCellCoords.y === 0) {
14
+ return nextCellCoords;
15
+ }
16
+ nextCellCoords.y = currentCellCoords.y - 1;
17
+ const isActionCell = this.utils.isActionCell(currentCellCoords);
18
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y) &&
19
+ !isActionCell &&
20
+ this.utils.isDetailsRow(nextCellCoords.y)) {
21
+ nextCellCoords.x = 0;
22
+ }
23
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
24
+ if (isActionCell) {
25
+ nextCellCoords.y = nextCellCoords.y - 1;
26
+ }
27
+ else {
28
+ nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
29
+ }
30
+ }
31
+ return nextCellCoords;
32
+ }
33
+ keyDown(currentCellCoords) {
34
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
35
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
36
+ if (currentCellCoords.y >= numOfRows) {
37
+ return nextCellCoords;
38
+ }
39
+ const isActionCell = this.utils.isActionCell(currentCellCoords);
40
+ nextCellCoords.y = currentCellCoords.y + 1;
41
+ if (!isActionCell && this.utils.isRowReplaced(nextCellCoords.y)) {
42
+ nextCellCoords.y = nextCellCoords.y + 1;
43
+ nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
44
+ ? 0
45
+ : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
46
+ }
47
+ return nextCellCoords;
48
+ }
49
+ keyLeft(currentCellCoords) {
50
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
51
+ if (currentCellCoords.x === 0) {
52
+ return nextCellCoords;
53
+ }
54
+ nextCellCoords.x = currentCellCoords.x - 1;
55
+ return nextCellCoords;
56
+ }
57
+ keyRight(currentCellCoords) {
58
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
59
+ // calculate numOfColumns based on header cells.
60
+ const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;
61
+ nextCellCoords.x = currentCellCoords.x < numOfColumns ? nextCellCoords.x + 1 : nextCellCoords.x;
62
+ return nextCellCoords;
63
+ }
64
+ keyEnd(currentCellCoords, ctrlKey) {
65
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
66
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
67
+ // calculate X based on header cells.
68
+ nextCellCoords.x = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;
69
+ if (ctrlKey) {
70
+ nextCellCoords.y = numOfRows;
71
+ if (this.utils.isDetailsRow(nextCellCoords.y)) {
72
+ nextCellCoords.x = this.utils.getCellsForRow(nextCellCoords.y).length - 1;
73
+ }
74
+ }
75
+ return nextCellCoords;
76
+ }
77
+ keyHome(currentCellCoords, ctrlKey) {
78
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
79
+ nextCellCoords.x = 0;
80
+ if (ctrlKey) {
81
+ nextCellCoords.y = 0;
82
+ }
83
+ return nextCellCoords;
84
+ }
85
+ keyPageUp(currentCellCoords) {
86
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
87
+ const itemsPerPage = this.utils.itemsPerPage;
88
+ nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
89
+ if (!this.utils.isActionCell(currentCellCoords)) {
90
+ if (this.utils.isDetailsRow(nextCellCoords.y)) {
91
+ nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
92
+ ? 0
93
+ : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
94
+ }
95
+ else if (this.utils.isRowReplaced(nextCellCoords.y)) {
96
+ nextCellCoords.y = nextCellCoords.y + 1;
97
+ nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
98
+ ? 0
99
+ : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
100
+ }
101
+ }
102
+ else {
103
+ if (this.utils.isDetailsRow(nextCellCoords.y)) {
104
+ nextCellCoords.y = nextCellCoords.y - 1;
105
+ }
106
+ }
107
+ return nextCellCoords;
108
+ }
109
+ keyPageDown(currentCellCoords) {
110
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
111
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
112
+ const itemsPerPage = this.utils.itemsPerPage;
113
+ nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
114
+ if (this.utils.isActionCell(currentCellCoords) && this.utils.isDetailsRow(nextCellCoords.y)) {
115
+ nextCellCoords.y = nextCellCoords.y - 1;
116
+ }
117
+ else if (this.utils.isDetailsRow(nextCellCoords.y) && this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
118
+ nextCellCoords.x = 0;
119
+ }
120
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
121
+ nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
122
+ }
123
+ else if (this.utils.isRowReplaced(nextCellCoords.y)) {
124
+ nextCellCoords.y = nextCellCoords.y + 1;
125
+ nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)
126
+ ? 0
127
+ : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
128
+ }
129
+ return nextCellCoords;
130
+ }
131
+ }
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2RhdGEvZGF0YWdyaWQvdXRpbHMva2V5LW5hdmlnYXRpb24tc3RyYXRlZ2llcy9kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBTUgsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxZQUFzQixLQUF5QjtRQUF6QixVQUFLLEdBQUwsS0FBSyxDQUFvQjtJQUFHLENBQUM7SUFFbkQsS0FBSyxDQUFDLGlCQUFrQztRQUN0QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFMUUsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLE9BQU8sY0FBYyxDQUFDO1NBQ3ZCO1FBRUQsY0FBYyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFaEUsSUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQyxZQUFZO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUN6QztZQUNBLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDekM7aUJBQU07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QUMsQ0FBQztTQUN2RjthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JELGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsY0FBYyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLENBQUMsQ0FBQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1IEJyb2FkY29tLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhlIHRlcm0gXCJCcm9hZGNvbVwiIHJlZmVycyB0byBCcm9hZGNvbSBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBLZXlOYXZpZ2F0aW9uR3JpZFN0cmF0ZWd5SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9rZXktbmF2LWdyaWQtc3RyYXRlZ3kuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGxDb29yZGluYXRlcyB9IGZyb20gJy4uL2tleS1uYXZpZ2F0aW9uLWdyaWQuY29udHJvbGxlcic7XG5pbXBvcnQgeyBLZXlOYXZpZ2F0aW9uVXRpbHMgfSBmcm9tICcuLi9rZXktbmF2aWdhdGlvbi11dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0S2V5TmF2aWdhdGlvblN0cmF0ZWd5IGltcGxlbWVudHMgS2V5TmF2aWdhdGlvbkdyaWRTdHJhdGVneUludGVyZmFjZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB1dGlsczogS2V5TmF2aWdhdGlvblV0aWxzKSB7fVxuXG4gIGtleVVwKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgaWYgKGN1cnJlbnRDZWxsQ29vcmRzLnkgPT09IDApIHtcbiAgICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgICB9XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSAtIDE7XG5cbiAgICBjb25zdCBpc0FjdGlvbkNlbGwgPSB0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KG5leHRDZWxsQ29vcmRzLnkpICYmXG4gICAgICAhaXNBY3Rpb25DZWxsICYmXG4gICAgICB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KVxuICAgICkge1xuICAgICAgbmV4dENlbGxDb29yZHMueCA9IDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgaWYgKGlzQWN0aW9uQ2VsbCkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gbmV4dENlbGxDb29yZHMueCAtIHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGN1cnJlbnRDZWxsQ29vcmRzLnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxuXG4gIGtleURvd24oY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBjb25zdCBudW1PZlJvd3MgPSB0aGlzLnV0aWxzLnJvd3MgPyB0aGlzLnV0aWxzLnJvd3MubGVuZ3RoIC0gMSA6IDA7XG4gICAgaWYgKGN1cnJlbnRDZWxsQ29vcmRzLnkgPj0gbnVtT2ZSb3dzKSB7XG4gICAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gICAgfVxuXG4gICAgY29uc3QgaXNBY3Rpb25DZWxsID0gdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpO1xuICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55ICsgMTtcblxuICAgIGlmICghaXNBY3Rpb25DZWxsICYmIHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgKyAxO1xuXG4gICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhuZXh0Q2VsbENvb3Jkcy55KVxuICAgICAgICA/IDBcbiAgICAgICAgOiBuZXh0Q2VsbENvb3Jkcy54IC0gdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAga2V5TGVmdChjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGlmIChjdXJyZW50Q2VsbENvb3Jkcy54ID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gICAgfVxuXG4gICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggLSAxO1xuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAga2V5UmlnaHQoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgbnVtT2ZDb2x1bW5zIGJhc2VkIG9uIGhlYWRlciBjZWxscy5cbiAgICBjb25zdCBudW1PZkNvbHVtbnMgPSB0aGlzLnV0aWxzLnJvd3M/Lmxlbmd0aCAtIDEgPyB0aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aCAtIDEgOiAwO1xuXG4gICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggPCBudW1PZkNvbHVtbnMgPyBuZXh0Q2VsbENvb3Jkcy54ICsgMSA6IG5leHRDZWxsQ29vcmRzLng7XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBrZXlFbmQoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcywgY3RybEtleTogYm9vbGVhbikge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgY29uc3QgbnVtT2ZSb3dzID0gdGhpcy51dGlscy5yb3dzID8gdGhpcy51dGlscy5yb3dzLmxlbmd0aCAtIDEgOiAwO1xuXG4gICAgLy8gY2FsY3VsYXRlIFggYmFzZWQgb24gaGVhZGVyIGNlbGxzLlxuICAgIG5leHRDZWxsQ29vcmRzLnggPSBudW1PZlJvd3MgPyB0aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aCAtIDEgOiAwO1xuXG4gICAgaWYgKGN0cmxLZXkpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBudW1PZlJvd3M7XG5cbiAgICAgIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gdGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdyhuZXh0Q2VsbENvb3Jkcy55KS5sZW5ndGggLSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxuXG4gIGtleUhvbWUoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcywgY3RybEtleTogYm9vbGVhbikge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy54ID0gMDtcblxuICAgIGlmIChjdHJsS2V5KSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBrZXlQYWdlVXAoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgY29uc3QgaXRlbXNQZXJQYWdlID0gdGhpcy51dGlscy5pdGVtc1BlclBhZ2U7XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSAtIGl0ZW1zUGVyUGFnZSA+IDAgPyBjdXJyZW50Q2VsbENvb3Jkcy55IC0gaXRlbXNQZXJQYWdlICsgMSA6IDE7XG5cbiAgICBpZiAoIXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKSkge1xuICAgICAgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSB0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KG5leHRDZWxsQ29vcmRzLnkpXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBuZXh0Q2VsbENvb3Jkcy54IC0gdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSArIDE7XG5cbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobmV4dENlbGxDb29yZHMueSlcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IG5leHRDZWxsQ29vcmRzLnggLSB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChjdXJyZW50Q2VsbENvb3Jkcy55KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55IC0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBrZXlQYWdlRG93bihjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcbiAgICBjb25zdCBudW1PZlJvd3MgPSB0aGlzLnV0aWxzLnJvd3MgPyB0aGlzLnV0aWxzLnJvd3MubGVuZ3RoIC0gMSA6IDA7XG4gICAgY29uc3QgaXRlbXNQZXJQYWdlID0gdGhpcy51dGlscy5pdGVtc1BlclBhZ2U7XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSArIGl0ZW1zUGVyUGFnZSA+PSBudW1PZlJvd3MgPyBudW1PZlJvd3MgOiBjdXJyZW50Q2VsbENvb3Jkcy55ICsgaXRlbXNQZXJQYWdlO1xuXG4gICAgaWYgKHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKSAmJiB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkgJiYgdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueCA9IDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueCA9IG5leHRDZWxsQ29vcmRzLnggLSB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChjdXJyZW50Q2VsbENvb3Jkcy55KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgKyAxO1xuICAgICAgbmV4dENlbGxDb29yZHMueCA9IHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobmV4dENlbGxDb29yZHMueSlcbiAgICAgICAgPyAwXG4gICAgICAgIDogbmV4dENlbGxDb29yZHMueCAtIHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGN1cnJlbnRDZWxsQ29vcmRzLnkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxufVxuIl19
@@ -0,0 +1,129 @@
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
+ keyUp(currentCellCoords) {
10
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
11
+ if (currentCellCoords.y === 0) {
12
+ return nextCellCoords;
13
+ }
14
+ nextCellCoords.y = currentCellCoords.y - 1;
15
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
16
+ return super.keyUp(currentCellCoords);
17
+ }
18
+ const isActionCell = this.utils.isActionCell(currentCellCoords);
19
+ if (isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {
20
+ nextCellCoords.y = nextCellCoords.y - 1;
21
+ }
22
+ else if (this.utils.isRowReplaced(nextCellCoords.y)) {
23
+ nextCellCoords.y = nextCellCoords.y - 1;
24
+ if (!this.utils.isDetailsRow(nextCellCoords.y)) {
25
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
26
+ }
27
+ }
28
+ else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
29
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
30
+ }
31
+ else if (!isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {
32
+ nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
33
+ }
34
+ return nextCellCoords;
35
+ }
36
+ keyDown(currentCellCoords) {
37
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
38
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
39
+ const numOfColumns = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;
40
+ if (currentCellCoords.y >= numOfRows) {
41
+ return nextCellCoords;
42
+ }
43
+ nextCellCoords.y = currentCellCoords.y + 1;
44
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
45
+ return super.keyDown(currentCellCoords);
46
+ }
47
+ if (!this.utils.isActionCell(currentCellCoords)) {
48
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
49
+ nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;
50
+ }
51
+ else if (this.utils.getCellsForRow(currentCellCoords.y).length > numOfColumns) {
52
+ nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
53
+ }
54
+ else {
55
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
56
+ }
57
+ }
58
+ else {
59
+ nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;
60
+ }
61
+ return nextCellCoords;
62
+ }
63
+ keyLeft(currentCellCoords) {
64
+ return super.keyLeft(currentCellCoords);
65
+ }
66
+ keyRight(currentCellCoords) {
67
+ return super.keyRight(currentCellCoords);
68
+ }
69
+ keyEnd(currentCellCoords, ctrlKey) {
70
+ return super.keyEnd(currentCellCoords, ctrlKey);
71
+ }
72
+ keyHome(currentCellCoords, ctrlKey) {
73
+ return super.keyHome(currentCellCoords, ctrlKey);
74
+ }
75
+ keyPageUp(currentCellCoords) {
76
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
77
+ const itemsPerPage = this.utils.itemsPerPage;
78
+ nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
79
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
80
+ return super.keyPageUp(currentCellCoords);
81
+ }
82
+ if (!this.utils.isActionCell(currentCellCoords)) {
83
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
84
+ if (!this.utils.isDetailsRow(nextCellCoords.y)) {
85
+ nextCellCoords.y = nextCellCoords.y + 1;
86
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
87
+ }
88
+ }
89
+ else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
90
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
91
+ }
92
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
93
+ nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
94
+ }
95
+ }
96
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
97
+ nextCellCoords.y = nextCellCoords.y - 1;
98
+ }
99
+ return nextCellCoords;
100
+ }
101
+ keyPageDown(currentCellCoords) {
102
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
103
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
104
+ const itemsPerPage = this.utils.itemsPerPage;
105
+ nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
106
+ if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {
107
+ return super.keyPageDown(currentCellCoords);
108
+ }
109
+ if (!this.utils.isActionCell(currentCellCoords)) {
110
+ if (this.utils.isRowReplaced(nextCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
111
+ if (nextCellCoords.y < numOfRows) {
112
+ nextCellCoords.y = nextCellCoords.y + 1;
113
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
114
+ }
115
+ }
116
+ else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
117
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
118
+ }
119
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
120
+ nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);
121
+ }
122
+ }
123
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
124
+ nextCellCoords.y = nextCellCoords.y - 1;
125
+ }
126
+ return nextCellCoords;
127
+ }
128
+ }
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kZWQtY29sdW1ucy1yb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9kYXRhL2RhdGFncmlkL3V0aWxzL2tleS1uYXZpZ2F0aW9uLXN0cmF0ZWdpZXMvZXhwYW5kZWQtY29sdW1ucy1yb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFHSCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxNQUFNLE9BQU8sdUNBQXdDLFNBQVEsZ0NBQWdDO0lBQ2xGLEtBQUssQ0FBQyxpQkFBa0M7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTFFLElBQUksaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPLGNBQWMsQ0FBQztTQUN2QjtRQUVELGNBQWMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVoRSxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0QsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFD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QUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1RixJQUFJLGNBQWMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFO29CQUNoQyxjQUFjLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QyxjQUFjLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZGO2FBQ0Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckcsY0FBYyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZGO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwRCxjQUFjLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRjtTQUNGO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QztRQUVELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQ2VsbENvb3JkaW5hdGVzIH0gZnJvbSAnLi4va2V5LW5hdmlnYXRpb24tZ3JpZC5jb250cm9sbGVyJztcbmltcG9ydCB7IEV4cGFuZGVkUm93S2V5TmF2aWdhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9leHBhbmRlZC1yb3cnO1xuXG5leHBvcnQgY2xhc3MgRXhwYW5kZWRDb2x1bW5zUm93S2V5TmF2aWdhdGlvblN0cmF0ZWd5IGV4dGVuZHMgRXhwYW5kZWRSb3dLZXlOYXZpZ2F0aW9uU3RyYXRlZ3kge1xuICBvdmVycmlkZSBrZXlVcChjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGlmIChjdXJyZW50Q2VsbENvb3Jkcy55ID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gICAgfVxuXG4gICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgLSAxO1xuXG4gICAgaWYgKHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIHJldHVybiBzdXBlci5rZXlVcChjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNBY3Rpb25DZWxsID0gdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgaWYgKGlzQWN0aW9uQ2VsbCAmJiB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSAtIDE7XG5cbiAgICAgIGlmICghdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggKyB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpICYmICF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggKyB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICB9IGVsc2UgaWYgKCFpc0FjdGlvbkNlbGwgJiYgdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54IC0gdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5RG93bihjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGNvbnN0IG51bU9mUm93cyA9IHRoaXMudXRpbHMucm93cyA/IHRoaXMudXRpbHMucm93cy5sZW5ndGggLSAxIDogMDtcbiAgICBjb25zdCBudW1PZkNvbHVtbnMgPSBudW1PZlJvd3MgPyB0aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aCAtIDEgOiAwO1xuXG4gICAgaWYgKGN1cnJlbnRDZWxsQ29vcmRzLnkgPj0gbnVtT2ZSb3dzKSB7XG4gICAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gICAgfVxuXG4gICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgKyAxO1xuXG4gICAgaWYgKHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIHJldHVybiBzdXBlci5rZXlEb3duKGN1cnJlbnRDZWxsQ29vcmRzKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKSkge1xuICAgICAgaWYgKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSA8IG51bU9mUm93cyA/IG5leHRDZWxsQ29vcmRzLnkgKyAxIDogbmV4dENlbGxDb29yZHMueSAtIDE7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coY3VycmVudENlbGxDb29yZHMueSkubGVuZ3RoID4gbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54IC0gdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gY3VycmVudENlbGxDb29yZHMueCArIHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSA8IG51bU9mUm93cyA/IG5leHRDZWxsQ29vcmRzLnkgKyAxIDogbmV4dENlbGxDb29yZHMueSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5TGVmdChjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgcmV0dXJuIHN1cGVyLmtleUxlZnQoY3VycmVudENlbGxDb29yZHMpO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5UmlnaHQoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIHJldHVybiBzdXBlci5rZXlSaWdodChjdXJyZW50Q2VsbENvb3Jkcyk7XG4gIH1cblxuICBvdmVycmlkZSBrZXlFbmQoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcywgY3RybEtleTogYm9vbGVhbikge1xuICAgIHJldHVybiBzdXBlci5rZXlFbmQoY3VycmVudENlbGxDb29yZHMsIGN0cmxLZXkpO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5SG9tZShjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzLCBjdHJsS2V5OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHN1cGVyLmtleUhvbWUoY3VycmVudENlbGxDb29yZHMsIGN0cmxLZXkpO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5UGFnZVVwKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO1xuXG4gICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgLSBpdGVtc1BlclBhZ2UgPiAwID8gY3VycmVudENlbGxDb29yZHMueSAtIGl0ZW1zUGVyUGFnZSArIDEgOiAxO1xuXG4gICAgaWYgKHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIHJldHVybiBzdXBlci5rZXlQYWdlVXAoY3VycmVudENlbGxDb29yZHMpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpKSB7XG4gICAgICBpZiAodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIGlmICghdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSArIDE7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggKyB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSAmJiAhdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggKyB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggLSB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChjdXJyZW50Q2VsbENvb3Jkcy55KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5UGFnZURvd24oY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBjb25zdCBudW1PZlJvd3MgPSB0aGlzLnV0aWxzLnJvd3MgPyB0aGlzLnV0aWxzLnJvd3MubGVuZ3RoIC0gMSA6IDA7XG4gICAgY29uc3QgaXRlbXNQZXJQYWdlID0gdGhpcy51dGlscy5pdGVtc1BlclBhZ2U7XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSArIGl0ZW1zUGVyUGFnZSA+PSBudW1PZlJvd3MgPyBudW1PZlJvd3MgOiBjdXJyZW50Q2VsbENvb3Jkcy55ICsgaXRlbXNQZXJQYWdlO1xuXG4gICAgaWYgKHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgIHJldHVybiBzdXBlci5rZXlQYWdlRG93bihjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChjdXJyZW50Q2VsbENvb3JkcykpIHtcbiAgICAgIGlmICh0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobmV4dENlbGxDb29yZHMueSkgJiYgIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIGlmIChuZXh0Q2VsbENvb3Jkcy55IDwgbnVtT2ZSb3dzKSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgKyAxO1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkgJiYgIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobmV4dENlbGxDb29yZHMueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54IC0gdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxufVxuIl19
@@ -0,0 +1,165 @@
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
+ keyUp(currentCellCoords) {
10
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
11
+ if (currentCellCoords.y === 0) {
12
+ return nextCellCoords;
13
+ }
14
+ nextCellCoords.y = currentCellCoords.y - 1;
15
+ if (!this.utils.isActionCell(currentCellCoords)) {
16
+ if (this.utils.isRowReplaced(currentCellCoords.y)) {
17
+ nextCellCoords.y = nextCellCoords.y - 1;
18
+ }
19
+ switch (true) {
20
+ case this.utils.isDetailsRow(nextCellCoords.y):
21
+ nextCellCoords.x = 0;
22
+ break;
23
+ case this.utils.isDetailsRow(currentCellCoords.y) === false:
24
+ nextCellCoords.x = currentCellCoords.x;
25
+ break;
26
+ default:
27
+ nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
28
+ }
29
+ }
30
+ else if (this.utils.isDetailsRow(nextCellCoords.y) && nextCellCoords.y > 0) {
31
+ nextCellCoords.y = nextCellCoords.y - 1;
32
+ }
33
+ return nextCellCoords;
34
+ }
35
+ keyDown(currentCellCoords) {
36
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
37
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
38
+ if (currentCellCoords.y >= numOfRows) {
39
+ return nextCellCoords;
40
+ }
41
+ nextCellCoords.y = currentCellCoords.y + 1;
42
+ if (!this.utils.isActionCell(currentCellCoords)) {
43
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
44
+ nextCellCoords.y = nextCellCoords.y + 1;
45
+ }
46
+ if (this.utils.isDetailsRow(nextCellCoords.y)) {
47
+ nextCellCoords.x = 0;
48
+ }
49
+ else {
50
+ nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
51
+ }
52
+ }
53
+ else {
54
+ nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y;
55
+ }
56
+ return nextCellCoords;
57
+ }
58
+ keyLeft(currentCellCoords) {
59
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
60
+ if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
61
+ return super.keyLeft(currentCellCoords);
62
+ }
63
+ if (currentCellCoords.x !== 0) {
64
+ nextCellCoords.x = currentCellCoords.x - 1;
65
+ }
66
+ else if (!this.utils.isActionCell(currentCellCoords)) {
67
+ nextCellCoords.y = currentCellCoords.y - 1;
68
+ nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y) - 1;
69
+ }
70
+ return nextCellCoords;
71
+ }
72
+ keyRight(currentCellCoords) {
73
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
74
+ if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
75
+ return super.keyRight(currentCellCoords);
76
+ }
77
+ // calculate numOfColumns based on header cells.
78
+ const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;
79
+ if (currentCellCoords.x >= numOfColumns) {
80
+ return nextCellCoords;
81
+ }
82
+ if (this.utils.isActionCell(currentCellCoords) &&
83
+ currentCellCoords.x === this.utils.actionCellCount(currentCellCoords.x) - 1 &&
84
+ this.utils.isRowReplaced(currentCellCoords.y) &&
85
+ !this.utils.isDetailsRow(currentCellCoords.y)) {
86
+ nextCellCoords.y = currentCellCoords.y + 1;
87
+ nextCellCoords.x = 0;
88
+ }
89
+ else {
90
+ nextCellCoords.x = currentCellCoords.x + 1;
91
+ }
92
+ return nextCellCoords;
93
+ }
94
+ keyEnd(currentCellCoords, ctrlKey) {
95
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
96
+ if ((!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) || ctrlKey) {
97
+ return super.keyEnd(currentCellCoords, ctrlKey);
98
+ }
99
+ nextCellCoords.x = this.utils.getCellsForRow(currentCellCoords.y).length - 1;
100
+ return nextCellCoords;
101
+ }
102
+ keyHome(currentCellCoords, ctrlKey) {
103
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
104
+ if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {
105
+ return super.keyHome(currentCellCoords, ctrlKey);
106
+ }
107
+ nextCellCoords.x = 0;
108
+ nextCellCoords.y = currentCellCoords.y - 1;
109
+ if (ctrlKey) {
110
+ nextCellCoords.y = 0;
111
+ }
112
+ return nextCellCoords;
113
+ }
114
+ keyPageUp(currentCellCoords) {
115
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
116
+ const itemsPerPage = this.utils.itemsPerPage;
117
+ nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;
118
+ if (!this.utils.isActionCell(currentCellCoords)) {
119
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
120
+ if (!this.utils.isDetailsRow(nextCellCoords.y)) {
121
+ nextCellCoords.y = nextCellCoords.y + 1;
122
+ nextCellCoords.x = 0;
123
+ }
124
+ }
125
+ else if (!this.utils.isDetailsRow(currentCellCoords.y)) {
126
+ if (this.utils.isDetailsRow(nextCellCoords.y)) {
127
+ nextCellCoords.x = 0;
128
+ }
129
+ }
130
+ else if (this.utils.isDetailsRow(currentCellCoords.y)) {
131
+ if (!this.utils.isDetailsRow(nextCellCoords.y)) {
132
+ nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);
133
+ }
134
+ }
135
+ }
136
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
137
+ nextCellCoords.y = nextCellCoords.y - 1;
138
+ }
139
+ return nextCellCoords;
140
+ }
141
+ keyPageDown(currentCellCoords) {
142
+ const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
143
+ const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;
144
+ const itemsPerPage = this.utils.itemsPerPage;
145
+ nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;
146
+ if (!this.utils.isActionCell(currentCellCoords)) {
147
+ if (this.utils.isRowReplaced(nextCellCoords.y)) {
148
+ if (nextCellCoords.y < numOfRows && !this.utils.isDetailsRow(nextCellCoords.y)) {
149
+ nextCellCoords.y = nextCellCoords.y + 1;
150
+ }
151
+ }
152
+ else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {
153
+ nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);
154
+ }
155
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
156
+ nextCellCoords.x = 0;
157
+ }
158
+ }
159
+ else if (this.utils.isDetailsRow(nextCellCoords.y)) {
160
+ nextCellCoords.y = nextCellCoords.y - 1;
161
+ }
162
+ return nextCellCoords;
163
+ }
164
+ }
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kZWQtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZGF0YS9kYXRhZ3JpZC91dGlscy9rZXktbmF2aWdhdGlvbi1zdHJhdGVnaWVzL2V4cGFuZGVkLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUdILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6RCxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsNEJBQTRCO0lBQ3ZFLEtBQUssQ0FBQyxpQkFBa0M7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTFFLElBQUksaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPLGNBQWMsQ0FBQztTQUN2QjtRQUVELGNBQWMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUMvQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqRCxjQUFjLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pDO1lBRUQsUUFBUSxJQUFJLEVBQUU7Z0JBQ1osS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUM1QyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDckIsTUFBTTtnQkFDUixLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLEtB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UmlnaHRzIFJlc2VydmVkLlxuICogVGhlIHRlcm0gXCJCcm9hZGNvbVwiIHJlZmVycyB0byBCcm9hZGNvbSBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBDZWxsQ29vcmRpbmF0ZXMgfSBmcm9tICcuLi9rZXktbmF2aWdhdGlvbi1ncmlkLmNvbnRyb2xsZXInO1xuaW1wb3J0IHsgRGVmYXVsdEtleU5hdmlnYXRpb25TdHJhdGVneSB9IGZyb20gJy4vZGVmYXVsdCc7XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmRlZFJvd0tleU5hdmlnYXRpb25TdHJhdGVneSBleHRlbmRzIERlZmF1bHRLZXlOYXZpZ2F0aW9uU3RyYXRlZ3kge1xuICBvdmVycmlkZSBrZXlVcChjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGlmIChjdXJyZW50Q2VsbENvb3Jkcy55ID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gICAgfVxuXG4gICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgLSAxO1xuXG4gICAgaWYgKCF0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChjdXJyZW50Q2VsbENvb3JkcykpIHtcbiAgICAgIGlmICh0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoY3VycmVudENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgY2FzZSB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KTpcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSA9PT0gZmFsc2U6XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLng7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkgJiYgbmV4dENlbGxDb29yZHMueSA+IDApIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55IC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBvdmVycmlkZSBrZXlEb3duKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgY29uc3QgbnVtT2ZSb3dzID0gdGhpcy51dGlscy5yb3dzID8gdGhpcy51dGlscy5yb3dzLmxlbmd0aCAtIDEgOiAwO1xuICAgIGlmIChjdXJyZW50Q2VsbENvb3Jkcy55ID49IG51bU9mUm93cykge1xuICAgICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICAgIH1cblxuICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55ICsgMTtcblxuICAgIGlmICghdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpKSB7XG4gICAgICBpZiAodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55ICsgMTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gbmV4dENlbGxDb29yZHMueSA8IG51bU9mUm93cyA/IG5leHRDZWxsQ29vcmRzLnkgKyAxIDogbmV4dENlbGxDb29yZHMueTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBvdmVycmlkZSBrZXlMZWZ0KGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgaWYgKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSAmJiAhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGN1cnJlbnRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICByZXR1cm4gc3VwZXIua2V5TGVmdChjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRDZWxsQ29vcmRzLnggIT09IDApIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54IC0gMTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChjdXJyZW50Q2VsbENvb3JkcykpIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gMTtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnggPSB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5UmlnaHQoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBpZiAoIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGN1cnJlbnRDZWxsQ29vcmRzLnkpICYmICF0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoY3VycmVudENlbGxDb29yZHMueSkpIHtcbiAgICAgIHJldHVybiBzdXBlci5rZXlSaWdodChjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgfVxuXG4gICAgLy8gY2FsY3VsYXRlIG51bU9mQ29sdW1ucyBiYXNlZCBvbiBoZWFkZXIgY2VsbHMuXG4gICAgY29uc3QgbnVtT2ZDb2x1bW5zID0gdGhpcy51dGlscy5yb3dzPy5sZW5ndGggLSAxID8gdGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGggLSAxIDogMDtcblxuICAgIGlmIChjdXJyZW50Q2VsbENvb3Jkcy54ID49IG51bU9mQ29sdW1ucykge1xuICAgICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKSAmJlxuICAgICAgY3VycmVudENlbGxDb29yZHMueCA9PT0gdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoY3VycmVudENlbGxDb29yZHMueCkgLSAxICYmXG4gICAgICB0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoY3VycmVudENlbGxDb29yZHMueSkgJiZcbiAgICAgICF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KVxuICAgICkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgKyAxO1xuICAgICAgbmV4dENlbGxDb29yZHMueCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDZWxsQ29vcmRzLnggPSBjdXJyZW50Q2VsbENvb3Jkcy54ICsgMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBvdmVycmlkZSBrZXlFbmQoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcywgY3RybEtleTogYm9vbGVhbikge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG5cbiAgICBpZiAoKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSAmJiAhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGN1cnJlbnRDZWxsQ29vcmRzLnkpKSB8fCBjdHJsS2V5KSB7XG4gICAgICByZXR1cm4gc3VwZXIua2V5RW5kKGN1cnJlbnRDZWxsQ29vcmRzLCBjdHJsS2V5KTtcbiAgICB9XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy54ID0gdGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdyhjdXJyZW50Q2VsbENvb3Jkcy55KS5sZW5ndGggLSAxO1xuXG4gICAgcmV0dXJuIG5leHRDZWxsQ29vcmRzO1xuICB9XG5cbiAgb3ZlcnJpZGUga2V5SG9tZShjdXJyZW50Q2VsbENvb3JkczogQ2VsbENvb3JkaW5hdGVzLCBjdHJsS2V5OiBib29sZWFuKSB7XG4gICAgY29uc3QgbmV4dENlbGxDb29yZHMgPSB0aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGN1cnJlbnRDZWxsQ29vcmRzKTtcblxuICAgIGlmICghdGhpcy51dGlscy5pc0RldGFpbHNSb3coY3VycmVudENlbGxDb29yZHMueSkgJiYgIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChjdXJyZW50Q2VsbENvb3Jkcy55KSkge1xuICAgICAgcmV0dXJuIHN1cGVyLmtleUhvbWUoY3VycmVudENlbGxDb29yZHMsIGN0cmxLZXkpO1xuICAgIH1cblxuICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgIG5leHRDZWxsQ29vcmRzLnkgPSBjdXJyZW50Q2VsbENvb3Jkcy55IC0gMTtcblxuICAgIGlmIChjdHJsS2V5KSB7XG4gICAgICBuZXh0Q2VsbENvb3Jkcy55ID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENlbGxDb29yZHM7XG4gIH1cblxuICBvdmVycmlkZSBrZXlQYWdlVXAoY3VycmVudENlbGxDb29yZHM6IENlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IG5leHRDZWxsQ29vcmRzID0gdGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhjdXJyZW50Q2VsbENvb3Jkcyk7XG4gICAgY29uc3QgaXRlbXNQZXJQYWdlID0gdGhpcy51dGlscy5pdGVtc1BlclBhZ2U7XG5cbiAgICBuZXh0Q2VsbENvb3Jkcy55ID0gY3VycmVudENlbGxDb29yZHMueSAtIGl0ZW1zUGVyUGFnZSA+IDAgPyBjdXJyZW50Q2VsbENvb3Jkcy55IC0gaXRlbXNQZXJQYWdlICsgMSA6IDE7XG5cbiAgICBpZiAoIXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGN1cnJlbnRDZWxsQ29vcmRzKSkge1xuICAgICAgaWYgKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBpZiAoIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgKyAxO1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnggPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgICBuZXh0Q2VsbENvb3Jkcy54ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICBpZiAoIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IHRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KG5leHRDZWxsQ29vcmRzLnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxuXG4gIG92ZXJyaWRlIGtleVBhZ2VEb3duKGN1cnJlbnRDZWxsQ29vcmRzOiBDZWxsQ29vcmRpbmF0ZXMpIHtcbiAgICBjb25zdCBuZXh0Q2VsbENvb3JkcyA9IHRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMoY3VycmVudENlbGxDb29yZHMpO1xuXG4gICAgY29uc3QgbnVtT2ZSb3dzID0gdGhpcy51dGlscy5yb3dzID8gdGhpcy51dGlscy5yb3dzLmxlbmd0aCAtIDEgOiAwO1xuICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO1xuXG4gICAgbmV4dENlbGxDb29yZHMueSA9IGN1cnJlbnRDZWxsQ29vcmRzLnkgKyBpdGVtc1BlclBhZ2UgPj0gbnVtT2ZSb3dzID8gbnVtT2ZSb3dzIDogY3VycmVudENlbGxDb29yZHMueSArIGl0ZW1zUGVyUGFnZTtcblxuICAgIGlmICghdGhpcy51dGlscy5pc0FjdGlvbkNlbGwoY3VycmVudENlbGxDb29yZHMpKSB7XG4gICAgICBpZiAodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKG5leHRDZWxsQ29vcmRzLnkpKSB7XG4gICAgICAgIGlmIChuZXh0Q2VsbENvb3Jkcy55IDwgbnVtT2ZSb3dzICYmICF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgICAgIG5leHRDZWxsQ29vcmRzLnkgPSBuZXh0Q2VsbENvb3Jkcy55ICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhjdXJyZW50Q2VsbENvb3Jkcy55KSAmJiAhdGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IGN1cnJlbnRDZWxsQ29vcmRzLnggKyB0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChuZXh0Q2VsbENvb3Jkcy55KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlscy5pc0RldGFpbHNSb3cobmV4dENlbGxDb29yZHMueSkpIHtcbiAgICAgICAgbmV4dENlbGxDb29yZHMueCA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhuZXh0Q2VsbENvb3Jkcy55KSkge1xuICAgICAgbmV4dENlbGxDb29yZHMueSA9IG5leHRDZWxsQ29vcmRzLnkgLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q2VsbENvb3JkcztcbiAgfVxufVxuIl19