@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.
- package/clarity.api.md +183 -87
- package/data/datagrid/datagrid-column.d.ts +6 -1
- package/data/datagrid/datagrid-filter.d.ts +2 -9
- package/data/datagrid/datagrid-row.d.ts +6 -4
- package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +5 -7
- package/data/datagrid/datagrid.d.ts +15 -4
- package/data/datagrid/index.d.ts +1 -0
- package/data/datagrid/interfaces/key-nav-grid-strategy.interface.d.ts +11 -0
- package/data/datagrid/interfaces/virtual-scroll-data-range.interface.d.ts +5 -0
- package/data/datagrid/providers/items.d.ts +1 -0
- package/data/datagrid/utils/datagrid-filter-registrar.d.ts +1 -1
- package/data/datagrid/utils/key-navigation-grid.controller.d.ts +8 -24
- package/data/datagrid/utils/key-navigation-strategies/default.d.ts +15 -0
- package/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.d.ts +12 -0
- package/data/datagrid/utils/key-navigation-strategies/expanded-row.d.ts +12 -0
- package/data/datagrid/utils/key-navigation-utils.d.ts +24 -0
- package/esm2020/accordion/stepper/stepper-panel.mjs +3 -3
- package/esm2020/button/button-group/button.mjs +20 -4
- package/esm2020/data/datagrid/datagrid-column.mjs +40 -28
- package/esm2020/data/datagrid/datagrid-detail-header.mjs +3 -3
- package/esm2020/data/datagrid/datagrid-filter.mjs +2 -21
- package/esm2020/data/datagrid/datagrid-pagination.mjs +35 -31
- package/esm2020/data/datagrid/datagrid-row.mjs +23 -11
- package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +52 -51
- package/esm2020/data/datagrid/datagrid.mjs +87 -24
- package/esm2020/data/datagrid/index.mjs +2 -1
- package/esm2020/data/datagrid/interfaces/key-nav-grid-strategy.interface.mjs +8 -0
- package/esm2020/data/datagrid/interfaces/virtual-scroll-data-range.interface.mjs +8 -0
- package/esm2020/data/datagrid/providers/items.mjs +5 -1
- package/esm2020/data/datagrid/utils/datagrid-filter-registrar.mjs +1 -1
- package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +44 -271
- package/esm2020/data/datagrid/utils/key-navigation-strategies/default.mjs +132 -0
- package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.mjs +129 -0
- package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-row.mjs +165 -0
- package/esm2020/data/datagrid/utils/key-navigation-utils.mjs +121 -0
- package/esm2020/data/stack-view/stack-block.mjs +3 -3
- package/esm2020/emphasis/alert/alert.mjs +3 -3
- package/esm2020/forms/combobox/combobox.mjs +3 -3
- package/esm2020/forms/combobox/combobox.module.mjs +20 -3
- package/esm2020/forms/combobox/index.mjs +2 -1
- package/esm2020/forms/combobox/option-group.mjs +42 -0
- package/esm2020/forms/combobox/option-items.directive.mjs +5 -1
- package/esm2020/forms/combobox/options.mjs +3 -3
- package/esm2020/forms/common/abstract-control.mjs +1 -1
- package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +1 -1
- package/esm2020/forms/datepicker/datepicker-view-manager.mjs +3 -3
- package/esm2020/forms/file-input/file-input-container.mjs +2 -2
- package/esm2020/forms/file-input/file-input.mjs +11 -4
- package/esm2020/forms/number-input/number-input-container.mjs +6 -3
- package/esm2020/forms/number-input/number-input.mjs +10 -3
- package/esm2020/layout/breadcrumbs/breadcrumbs.mjs +2 -2
- package/esm2020/modal/index.mjs +2 -2
- package/esm2020/modal/modal-host.component.mjs +29 -0
- package/esm2020/modal/modal.mjs +11 -4
- package/esm2020/modal/modal.module.mjs +4 -4
- package/esm2020/modal/side-panel.mjs +102 -47
- package/esm2020/popover/common/abstract-popover.mjs +8 -2
- package/esm2020/popover/common/popover.mjs +2 -2
- package/esm2020/popover/dropdown/dropdown-item.mjs +10 -4
- package/esm2020/popover/dropdown/dropdown-trigger.mjs +12 -4
- package/esm2020/popover/dropdown/utils/content-wrapping.mjs +22 -0
- package/esm2020/utils/animations/constants.mjs +7 -1
- package/esm2020/utils/animations/expandable-animation/base-expandable-animation.mjs +46 -0
- package/esm2020/utils/animations/expandable-animation/expandable-animation.directive.mjs +56 -0
- package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +13 -36
- package/esm2020/utils/animations/expandable-animation/expandable-animation.module.mjs +3 -2
- package/esm2020/utils/animations/expandable-animation/index.mjs +4 -2
- package/esm2020/utils/chocolate/oompa-loompa.mjs +1 -1
- package/esm2020/utils/focus/focusable-item/basic-focusable-item.service.mjs +2 -2
- package/esm2020/utils/i18n/common-strings.default.mjs +2 -1
- package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
- package/esm2020/wizard/wizard-stepnav-item.mjs +60 -24
- package/esm2020/wizard/wizard.mjs +29 -6
- package/fesm2015/clr-angular.mjs +1377 -646
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +1371 -641
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/forms/combobox/combobox.module.d.ts +12 -11
- package/forms/combobox/index.d.ts +1 -0
- package/forms/combobox/option-group.d.ts +9 -0
- package/forms/combobox/option-items.directive.d.ts +1 -0
- package/forms/common/abstract-control.d.ts +1 -1
- package/forms/common/if-control-state/abstract-if-state.d.ts +1 -1
- package/forms/file-input/file-input.d.ts +2 -0
- package/forms/number-input/number-input-container.d.ts +1 -0
- package/forms/number-input/number-input.d.ts +2 -0
- package/modal/index.d.ts +1 -1
- package/modal/modal-host.component.d.ts +5 -0
- package/modal/modal.d.ts +3 -2
- package/modal/modal.module.d.ts +2 -2
- package/modal/side-panel.d.ts +18 -10
- package/package.json +2 -2
- package/popover/common/abstract-popover.d.ts +1 -1
- package/popover/dropdown/dropdown-item.d.ts +5 -1
- package/popover/dropdown/dropdown-trigger.d.ts +5 -2
- package/popover/dropdown/utils/content-wrapping.d.ts +2 -0
- package/utils/animations/constants.d.ts +1 -0
- package/utils/animations/expandable-animation/base-expandable-animation.d.ts +16 -0
- package/utils/animations/expandable-animation/expandable-animation.d.ts +2 -9
- package/utils/animations/expandable-animation/expandable-animation.directive.d.ts +16 -0
- package/utils/animations/expandable-animation/expandable-animation.module.d.ts +3 -2
- package/utils/animations/expandable-animation/index.d.ts +1 -0
- package/utils/chocolate/oompa-loompa.d.ts +1 -1
- package/utils/i18n/common-strings.interface.d.ts +4 -0
- package/wizard/wizard-stepnav-item.d.ts +16 -2
- package/wizard/wizard.d.ts +12 -2
- package/esm2020/modal/modal-host.directive.mjs +0 -20
- 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
|