ng-primitives 0.0.5
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/README.md +7 -0
- package/a11y/README.md +3 -0
- package/a11y/index.d.ts +8 -0
- package/a11y/visually-hidden/visually-hidden.directive.d.ts +5 -0
- package/accordion/README.md +3 -0
- package/accordion/accordion/accordion.directive.d.ts +45 -0
- package/accordion/accordion/accordion.token.d.ts +15 -0
- package/accordion/accordion-content/accordion-content.directive.d.ts +25 -0
- package/accordion/accordion-content/accordion-content.token.d.ts +15 -0
- package/accordion/accordion-item/accordion-item.directive.d.ts +45 -0
- package/accordion/accordion-item/accordion-item.token.d.ts +15 -0
- package/accordion/accordion-trigger/accordion-trigger.directive.d.ts +21 -0
- package/accordion/accordion-trigger/accordion-trigger.token.d.ts +15 -0
- package/accordion/config/accordion.config.d.ts +39 -0
- package/accordion/index.d.ts +16 -0
- package/avatar/README.md +3 -0
- package/avatar/avatar/avatar.directive.d.ts +22 -0
- package/avatar/avatar/avatar.token.d.ts +15 -0
- package/avatar/avatar-fallback/avatar-fallback.directive.d.ts +45 -0
- package/avatar/avatar-image/avatar-image.directive.d.ts +28 -0
- package/avatar/config/avatar.config.d.ts +28 -0
- package/avatar/index.d.ts +12 -0
- package/checkbox/README.md +3 -0
- package/checkbox/checkbox/checkbox.directive.d.ts +89 -0
- package/checkbox/checkbox/checkbox.token.d.ts +15 -0
- package/checkbox/checkbox-indicator/checkbox-indicator.directive.d.ts +19 -0
- package/checkbox/checkbox-indicator/checkbox-indicator.token.d.ts +15 -0
- package/checkbox/checkbox-input/checkbox-input.directive.d.ts +10 -0
- package/checkbox/checkbox-label/checkbox-label.directive.d.ts +9 -0
- package/checkbox/index.d.ts +13 -0
- package/esm2022/a11y/index.mjs +9 -0
- package/esm2022/a11y/ng-primitives-a11y.mjs +5 -0
- package/esm2022/a11y/visually-hidden/visually-hidden.directive.mjs +25 -0
- package/esm2022/accordion/accordion/accordion.directive.mjs +90 -0
- package/esm2022/accordion/accordion/accordion.token.mjs +17 -0
- package/esm2022/accordion/accordion-content/accordion-content.directive.mjs +55 -0
- package/esm2022/accordion/accordion-content/accordion-content.token.mjs +17 -0
- package/esm2022/accordion/accordion-item/accordion-item.directive.mjs +64 -0
- package/esm2022/accordion/accordion-item/accordion-item.token.mjs +17 -0
- package/esm2022/accordion/accordion-trigger/accordion-trigger.directive.mjs +58 -0
- package/esm2022/accordion/accordion-trigger/accordion-trigger.token.mjs +17 -0
- package/esm2022/accordion/config/accordion.config.mjs +35 -0
- package/esm2022/accordion/index.mjs +17 -0
- package/esm2022/accordion/ng-primitives-accordion.mjs +5 -0
- package/esm2022/avatar/avatar/avatar.directive.mjs +45 -0
- package/esm2022/avatar/avatar/avatar.token.mjs +17 -0
- package/esm2022/avatar/avatar-fallback/avatar-fallback.directive.mjs +61 -0
- package/esm2022/avatar/avatar-image/avatar-image.directive.mjs +64 -0
- package/esm2022/avatar/config/avatar.config.mjs +33 -0
- package/esm2022/avatar/index.mjs +13 -0
- package/esm2022/avatar/ng-primitives-avatar.mjs +5 -0
- package/esm2022/checkbox/checkbox/checkbox.directive.mjs +141 -0
- package/esm2022/checkbox/checkbox/checkbox.token.mjs +17 -0
- package/esm2022/checkbox/checkbox-indicator/checkbox-indicator.directive.mjs +51 -0
- package/esm2022/checkbox/checkbox-indicator/checkbox-indicator.token.mjs +17 -0
- package/esm2022/checkbox/checkbox-input/checkbox-input.directive.mjs +40 -0
- package/esm2022/checkbox/checkbox-label/checkbox-label.directive.mjs +32 -0
- package/esm2022/checkbox/index.mjs +14 -0
- package/esm2022/checkbox/ng-primitives-checkbox.mjs +5 -0
- package/esm2022/index.mjs +10 -0
- package/esm2022/ng-primitives.mjs +5 -0
- package/esm2022/progress/index.mjs +10 -0
- package/esm2022/progress/ng-primitives-progress.mjs +5 -0
- package/esm2022/progress/progress/progress.directive.mjs +60 -0
- package/esm2022/progress/progress/progress.token.mjs +16 -0
- package/esm2022/progress/progress-indicator/progress-indicator.directive.mjs +33 -0
- package/esm2022/radio/index.mjs +13 -0
- package/esm2022/radio/ng-primitives-radio.mjs +5 -0
- package/esm2022/radio/radio-group/radio-group.directive.mjs +100 -0
- package/esm2022/radio/radio-group/radio-group.token.mjs +17 -0
- package/esm2022/radio/radio-indicator/radio-indicator.directive.mjs +41 -0
- package/esm2022/radio/radio-item/radio-item.directive.mjs +68 -0
- package/esm2022/radio/radio-item/radio-item.token.mjs +17 -0
- package/esm2022/resize/index.mjs +10 -0
- package/esm2022/resize/ng-primitives-resize.mjs +5 -0
- package/esm2022/resize/resize/resize.directive.mjs +49 -0
- package/esm2022/resize/utils/resize.mjs +41 -0
- package/esm2022/roving-focus/index.mjs +12 -0
- package/esm2022/roving-focus/ng-primitives-roving-focus.mjs +5 -0
- package/esm2022/roving-focus/roving-focus-group/roving-focus-group.directive.mjs +244 -0
- package/esm2022/roving-focus/roving-focus-group/roving-focus-group.token.mjs +17 -0
- package/esm2022/roving-focus/roving-focus-item/roving-focus-item.directive.mjs +98 -0
- package/esm2022/roving-focus/roving-focus-item/roving-focus-item.token.mjs +17 -0
- package/esm2022/select/index.mjs +16 -0
- package/esm2022/select/ng-primitives-select.mjs +5 -0
- package/esm2022/select/select/select.directive.mjs +54 -0
- package/esm2022/select/select/select.token.mjs +16 -0
- package/esm2022/select/select-button/select-button.directive.mjs +84 -0
- package/esm2022/select/select-button/select-button.token.mjs +16 -0
- package/esm2022/select/select-option/select-option.directive.mjs +90 -0
- package/esm2022/select/select-option/select-option.token.mjs +16 -0
- package/esm2022/select/select-options/select-options.directive.mjs +157 -0
- package/esm2022/select/select-options/select-options.token.mjs +16 -0
- package/esm2022/slider/index.mjs +16 -0
- package/esm2022/slider/ng-primitives-slider.mjs +5 -0
- package/esm2022/slider/slider/slider.directive.mjs +68 -0
- package/esm2022/slider/slider/slider.token.mjs +16 -0
- package/esm2022/slider/slider-range/slider-range.directive.mjs +36 -0
- package/esm2022/slider/slider-range/slider-range.token.mjs +16 -0
- package/esm2022/slider/slider-thumb/slider-thumb.directive.mjs +109 -0
- package/esm2022/slider/slider-thumb/slider-thumb.token.mjs +16 -0
- package/esm2022/slider/slider-track/slider-track.directive.mjs +54 -0
- package/esm2022/slider/slider-track/slider-track.token.mjs +16 -0
- package/esm2022/switch/index.mjs +11 -0
- package/esm2022/switch/ng-primitives-switch.mjs +5 -0
- package/esm2022/switch/switch/switch.directive.mjs +126 -0
- package/esm2022/switch/switch/switch.token.mjs +17 -0
- package/esm2022/switch/switch-thumb/switch-thumb.directive.mjs +32 -0
- package/esm2022/tabs/config/tabs.config.mjs +35 -0
- package/esm2022/tabs/index.mjs +15 -0
- package/esm2022/tabs/ng-primitives-tabs.mjs +5 -0
- package/esm2022/tabs/tab-button/tab-button.directive.mjs +84 -0
- package/esm2022/tabs/tab-list/tab-list.directive.mjs +34 -0
- package/esm2022/tabs/tab-panel/tab-panel.directive.mjs +62 -0
- package/esm2022/tabs/tab-panel/tab-panel.token.mjs +17 -0
- package/esm2022/tabs/tabset/tabset.directive.mjs +91 -0
- package/esm2022/tabs/tabset/tabset.token.mjs +17 -0
- package/esm2022/toggle/index.mjs +9 -0
- package/esm2022/toggle/ng-primitives-toggle.mjs +5 -0
- package/esm2022/toggle/toggle/toggle.directive.mjs +48 -0
- package/esm2022/tooltip/config/tooltip.config.mjs +38 -0
- package/esm2022/tooltip/index.mjs +13 -0
- package/esm2022/tooltip/ng-primitives-tooltip.mjs +5 -0
- package/esm2022/tooltip/tooltip/tooltip.directive.mjs +57 -0
- package/esm2022/tooltip/tooltip/tooltip.token.mjs +16 -0
- package/esm2022/tooltip/tooltip-trigger/tooltip-trigger.directive.mjs +190 -0
- package/esm2022/tooltip/tooltip-trigger/tooltip-trigger.token.mjs +23 -0
- package/esm2022/utils/helpers/disposables.mjs +72 -0
- package/esm2022/utils/helpers/focus-manager.mjs +28 -0
- package/esm2022/utils/helpers/unique-id.mjs +22 -0
- package/esm2022/utils/hover/hover.directive.mjs +183 -0
- package/esm2022/utils/hover/hover.token.mjs +16 -0
- package/esm2022/utils/index.mjs +14 -0
- package/esm2022/utils/ng-primitives-utils.mjs +5 -0
- package/esm2022/utils/ui/dimensions.mjs +40 -0
- package/fesm2022/ng-primitives-a11y.mjs +40 -0
- package/fesm2022/ng-primitives-a11y.mjs.map +1 -0
- package/fesm2022/ng-primitives-accordion.mjs +361 -0
- package/fesm2022/ng-primitives-accordion.mjs.map +1 -0
- package/fesm2022/ng-primitives-avatar.mjs +223 -0
- package/fesm2022/ng-primitives-avatar.mjs.map +1 -0
- package/fesm2022/ng-primitives-checkbox.mjs +299 -0
- package/fesm2022/ng-primitives-checkbox.mjs.map +1 -0
- package/fesm2022/ng-primitives-progress.mjs +119 -0
- package/fesm2022/ng-primitives-progress.mjs.map +1 -0
- package/fesm2022/ng-primitives-radio.mjs +245 -0
- package/fesm2022/ng-primitives-radio.mjs.map +1 -0
- package/fesm2022/ng-primitives-resize.mjs +104 -0
- package/fesm2022/ng-primitives-resize.mjs.map +1 -0
- package/fesm2022/ng-primitives-roving-focus.mjs +384 -0
- package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -0
- package/fesm2022/ng-primitives-select.mjs +442 -0
- package/fesm2022/ng-primitives-select.mjs.map +1 -0
- package/fesm2022/ng-primitives-slider.mjs +328 -0
- package/fesm2022/ng-primitives-slider.mjs.map +1 -0
- package/fesm2022/ng-primitives-switch.mjs +185 -0
- package/fesm2022/ng-primitives-switch.mjs.map +1 -0
- package/fesm2022/ng-primitives-tabs.mjs +337 -0
- package/fesm2022/ng-primitives-tabs.mjs.map +1 -0
- package/fesm2022/ng-primitives-toggle.mjs +63 -0
- package/fesm2022/ng-primitives-toggle.mjs.map +1 -0
- package/fesm2022/ng-primitives-tooltip.mjs +330 -0
- package/fesm2022/ng-primitives-tooltip.mjs.map +1 -0
- package/fesm2022/ng-primitives-utils.mjs +370 -0
- package/fesm2022/ng-primitives-utils.mjs.map +1 -0
- package/fesm2022/ng-primitives.mjs +14 -0
- package/fesm2022/ng-primitives.mjs.map +1 -0
- package/index.d.ts +9 -0
- package/package.json +120 -0
- package/progress/README.md +3 -0
- package/progress/index.d.ts +9 -0
- package/progress/progress/progress.directive.d.ts +40 -0
- package/progress/progress/progress.token.d.ts +14 -0
- package/progress/progress-indicator/progress-indicator.directive.d.ts +9 -0
- package/radio/README.md +3 -0
- package/radio/index.d.ts +12 -0
- package/radio/radio-group/radio-group.directive.d.ts +71 -0
- package/radio/radio-group/radio-group.token.d.ts +15 -0
- package/radio/radio-indicator/radio-indicator.directive.d.ts +17 -0
- package/radio/radio-item/radio-item.directive.d.ts +41 -0
- package/radio/radio-item/radio-item.token.d.ts +15 -0
- package/resize/README.md +3 -0
- package/resize/index.d.ts +9 -0
- package/resize/resize/resize.directive.d.ts +31 -0
- package/resize/utils/resize.d.ts +18 -0
- package/roving-focus/README.md +3 -0
- package/roving-focus/index.d.ts +11 -0
- package/roving-focus/roving-focus-group/roving-focus-group.directive.d.ts +94 -0
- package/roving-focus/roving-focus-group/roving-focus-group.token.d.ts +15 -0
- package/roving-focus/roving-focus-item/roving-focus-item.directive.d.ts +57 -0
- package/roving-focus/roving-focus-item/roving-focus-item.token.d.ts +15 -0
- package/select/README.md +3 -0
- package/select/index.d.ts +15 -0
- package/select/select/select.directive.d.ts +35 -0
- package/select/select/select.token.d.ts +14 -0
- package/select/select-button/select-button.directive.d.ts +51 -0
- package/select/select-button/select-button.token.d.ts +14 -0
- package/select/select-option/select-option.directive.d.ts +57 -0
- package/select/select-option/select-option.token.d.ts +14 -0
- package/select/select-options/select-options.directive.d.ts +65 -0
- package/select/select-options/select-options.token.d.ts +14 -0
- package/slider/README.md +3 -0
- package/slider/index.d.ts +15 -0
- package/slider/slider/slider.directive.d.ts +45 -0
- package/slider/slider/slider.token.d.ts +14 -0
- package/slider/slider-range/slider-range.directive.d.ts +9 -0
- package/slider/slider-range/slider-range.token.d.ts +14 -0
- package/slider/slider-thumb/slider-thumb.directive.d.ts +21 -0
- package/slider/slider-thumb/slider-thumb.token.d.ts +14 -0
- package/slider/slider-track/slider-track.directive.d.ts +26 -0
- package/slider/slider-track/slider-track.token.d.ts +14 -0
- package/switch/README.md +3 -0
- package/switch/index.d.ts +10 -0
- package/switch/switch/switch.directive.d.ts +82 -0
- package/switch/switch/switch.token.d.ts +15 -0
- package/switch/switch-thumb/switch-thumb.directive.d.ts +9 -0
- package/tabs/README.md +3 -0
- package/tabs/config/tabs.config.d.ts +38 -0
- package/tabs/index.d.ts +14 -0
- package/tabs/tab-button/tab-button.directive.d.ts +54 -0
- package/tabs/tab-list/tab-list.directive.d.ts +9 -0
- package/tabs/tab-panel/tab-panel.directive.d.ts +32 -0
- package/tabs/tab-panel/tab-panel.token.d.ts +15 -0
- package/tabs/tabset/tabset.directive.d.ts +53 -0
- package/tabs/tabset/tabset.token.d.ts +15 -0
- package/toggle/README.md +3 -0
- package/toggle/index.d.ts +8 -0
- package/toggle/toggle/toggle.directive.d.ts +27 -0
- package/tooltip/README.md +3 -0
- package/tooltip/config/tooltip.config.d.ts +54 -0
- package/tooltip/index.d.ts +12 -0
- package/tooltip/tooltip/tooltip.directive.d.ts +30 -0
- package/tooltip/tooltip/tooltip.token.d.ts +14 -0
- package/tooltip/tooltip-trigger/tooltip-trigger.directive.d.ts +111 -0
- package/tooltip/tooltip-trigger/tooltip-trigger.token.d.ts +22 -0
- package/utils/README.md +3 -0
- package/utils/helpers/disposables.d.ts +40 -0
- package/utils/helpers/focus-manager.d.ts +19 -0
- package/utils/helpers/unique-id.d.ts +13 -0
- package/utils/hover/hover.directive.d.ts +62 -0
- package/utils/hover/hover.token.d.ts +14 -0
- package/utils/index.d.ts +13 -0
- package/utils/ui/dimensions.d.ts +9 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { Directionality } from '@angular/cdk/bidi';
|
|
2
|
+
import { Directive, Input, booleanAttribute, inject, input, signal } from '@angular/core';
|
|
3
|
+
import { NgpRovingFocusGroupToken } from './roving-focus-group.token';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class NgpRovingFocusGroup {
|
|
6
|
+
constructor() {
|
|
7
|
+
/**
|
|
8
|
+
* Access the directionality service.
|
|
9
|
+
*/
|
|
10
|
+
this.directionality = inject(Directionality);
|
|
11
|
+
/**
|
|
12
|
+
* Determine the orientation of the roving focus group.
|
|
13
|
+
* @default 'vertical'
|
|
14
|
+
* @summary This does not use a signal as we need this to be programmatically settable when used as a host directive.
|
|
15
|
+
*/
|
|
16
|
+
this.orientation = 'vertical';
|
|
17
|
+
/**
|
|
18
|
+
* Determine if focus should wrap when the end or beginning is reached.
|
|
19
|
+
*/
|
|
20
|
+
this.wrap = input(true, {
|
|
21
|
+
alias: 'ngpRovingFocusGroupWrap',
|
|
22
|
+
transform: booleanAttribute,
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Determine if the home and end keys should navigate to the first and last items.
|
|
26
|
+
*/
|
|
27
|
+
this.homeEnd = input(true, {
|
|
28
|
+
alias: 'ngpRovingFocusGroupHomeEnd',
|
|
29
|
+
transform: booleanAttribute,
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* Determine if the roving focus group is disabled.
|
|
33
|
+
*/
|
|
34
|
+
this.disabled = input(false, {
|
|
35
|
+
alias: 'ngpRovingFocusGroupDisabled',
|
|
36
|
+
transform: booleanAttribute,
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Store the items in the roving focus group.
|
|
40
|
+
*/
|
|
41
|
+
this.items = signal([]);
|
|
42
|
+
/**
|
|
43
|
+
* Store the active item in the roving focus group.
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
this.activeItem = signal(null);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the items in the roving focus group sorted by order.
|
|
50
|
+
*/
|
|
51
|
+
get sortedItems() {
|
|
52
|
+
return this.items().sort((a, b) => {
|
|
53
|
+
// sort the items by their position in the document
|
|
54
|
+
return a.elementRef.nativeElement.compareDocumentPosition(b.elementRef.nativeElement) &
|
|
55
|
+
Node.DOCUMENT_POSITION_FOLLOWING
|
|
56
|
+
? -1
|
|
57
|
+
: 1;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Register an item with the roving focus group.
|
|
62
|
+
* @param item The item to register
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
65
|
+
register(item) {
|
|
66
|
+
this.items.update(items => [...items, item]);
|
|
67
|
+
// if there is no active item, make the first item the tabbable item
|
|
68
|
+
if (!this.activeItem()) {
|
|
69
|
+
this.activeItem.set(item);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Unregister an item with the roving focus group.
|
|
74
|
+
* @param item The item to unregister
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
unregister(item) {
|
|
78
|
+
this.items.update(items => items.filter(i => i !== item));
|
|
79
|
+
// check if the unregistered item is the active item
|
|
80
|
+
if (this.activeItem() === item) {
|
|
81
|
+
// if the active item is unregistered, activate the first item
|
|
82
|
+
this.activeItem.set(this.items()[0] ?? null);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Activate an item in the roving focus group.
|
|
87
|
+
* @param item The item to activate
|
|
88
|
+
* @param origin The origin of the focus change
|
|
89
|
+
*/
|
|
90
|
+
setActiveItem(item, origin = 'program') {
|
|
91
|
+
this.activeItem.set(item);
|
|
92
|
+
item?.focus(origin);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Activate the first item in the roving focus group.
|
|
96
|
+
* @param origin The origin of the focus change
|
|
97
|
+
*/
|
|
98
|
+
activateFirstItem(origin) {
|
|
99
|
+
// find the first item that is not disabled
|
|
100
|
+
const item = this.sortedItems.find(i => !i.disabled()) ?? null;
|
|
101
|
+
// set the first item as the active item
|
|
102
|
+
this.setActiveItem(item, origin);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Activate the last item in the roving focus group.
|
|
106
|
+
* @param origin The origin of the focus change
|
|
107
|
+
*/
|
|
108
|
+
activateLastItem(origin) {
|
|
109
|
+
// find the last item that is not disabled
|
|
110
|
+
const item = [...this.sortedItems].reverse().find(i => !i.disabled()) ?? null;
|
|
111
|
+
// set the last item as the active item
|
|
112
|
+
this.setActiveItem(item, origin);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Activate the next item in the roving focus group.
|
|
116
|
+
* @param origin The origin of the focus change
|
|
117
|
+
*/
|
|
118
|
+
activateNextItem(origin) {
|
|
119
|
+
const activeItem = this.activeItem();
|
|
120
|
+
// if there is no active item, activate the first item
|
|
121
|
+
if (!activeItem) {
|
|
122
|
+
this.activateFirstItem(origin);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// find the index of the active item
|
|
126
|
+
const index = this.sortedItems.indexOf(activeItem);
|
|
127
|
+
// find the next item that is not disabled
|
|
128
|
+
const item = this.sortedItems.slice(index + 1).find(i => !i.disabled()) ?? null;
|
|
129
|
+
// if we are at the end of the list, wrap to the beginning
|
|
130
|
+
if (!item && this.wrap()) {
|
|
131
|
+
this.activateFirstItem(origin);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
// if there is no next item, do nothing
|
|
135
|
+
if (!item) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// set the next item as the active item
|
|
139
|
+
this.setActiveItem(item, origin);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Activate the previous item in the roving focus group.
|
|
143
|
+
* @param origin The origin of the focus change
|
|
144
|
+
*/
|
|
145
|
+
activatePreviousItem(origin) {
|
|
146
|
+
const activeItem = this.activeItem();
|
|
147
|
+
// if there is no active item, activate the last item
|
|
148
|
+
if (!activeItem) {
|
|
149
|
+
this.activateLastItem(origin);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// find the index of the active item
|
|
153
|
+
const index = this.sortedItems.indexOf(activeItem);
|
|
154
|
+
// find the previous item that is not disabled
|
|
155
|
+
const item = this.sortedItems
|
|
156
|
+
.slice(0, index)
|
|
157
|
+
.reverse()
|
|
158
|
+
.find(i => !i.disabled()) ?? null;
|
|
159
|
+
// if we are at the beginning of the list, wrap to the end
|
|
160
|
+
if (!item && this.wrap()) {
|
|
161
|
+
this.activateLastItem(origin);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// if there is no previous item, do nothing
|
|
165
|
+
if (!item) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// set the previous item as the active item
|
|
169
|
+
this.setActiveItem(item, origin);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Handle keyboard navigation for the roving focus group.
|
|
173
|
+
* @param event The keyboard event
|
|
174
|
+
* @internal
|
|
175
|
+
*/
|
|
176
|
+
onKeydown(event) {
|
|
177
|
+
if (this.disabled()) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
switch (event.key) {
|
|
181
|
+
case 'ArrowUp':
|
|
182
|
+
if (this.orientation === 'vertical') {
|
|
183
|
+
event.preventDefault();
|
|
184
|
+
this.activatePreviousItem('keyboard');
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
case 'ArrowDown':
|
|
188
|
+
if (this.orientation === 'vertical') {
|
|
189
|
+
event.preventDefault();
|
|
190
|
+
this.activateNextItem('keyboard');
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
case 'ArrowLeft':
|
|
194
|
+
if (this.orientation === 'horizontal') {
|
|
195
|
+
event.preventDefault();
|
|
196
|
+
if (this.directionality.value === 'ltr') {
|
|
197
|
+
this.activatePreviousItem('keyboard');
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
this.activateNextItem('keyboard');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
break;
|
|
204
|
+
case 'ArrowRight':
|
|
205
|
+
if (this.orientation === 'horizontal') {
|
|
206
|
+
event.preventDefault();
|
|
207
|
+
if (this.directionality.value === 'ltr') {
|
|
208
|
+
this.activateNextItem('keyboard');
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
this.activatePreviousItem('keyboard');
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
break;
|
|
215
|
+
case 'Home':
|
|
216
|
+
if (this.homeEnd()) {
|
|
217
|
+
event.preventDefault();
|
|
218
|
+
this.activateFirstItem('keyboard');
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
case 'End':
|
|
222
|
+
if (this.homeEnd()) {
|
|
223
|
+
event.preventDefault();
|
|
224
|
+
this.activateLastItem('keyboard');
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpRovingFocusGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
230
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.2", type: NgpRovingFocusGroup, isStandalone: true, selector: "[ngpRovingFocusGroup]", inputs: { orientation: { classPropertyName: "orientation", publicName: "ngpRovingFocusGroupOrientation", isSignal: false, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "ngpRovingFocusGroupWrap", isSignal: true, isRequired: false, transformFunction: null }, homeEnd: { classPropertyName: "homeEnd", publicName: "ngpRovingFocusGroupHomeEnd", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpRovingFocusGroupDisabled", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: NgpRovingFocusGroupToken, useExisting: NgpRovingFocusGroup }], exportAs: ["ngpRovingFocusGroup"], ngImport: i0 }); }
|
|
231
|
+
}
|
|
232
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpRovingFocusGroup, decorators: [{
|
|
233
|
+
type: Directive,
|
|
234
|
+
args: [{
|
|
235
|
+
standalone: true,
|
|
236
|
+
selector: '[ngpRovingFocusGroup]',
|
|
237
|
+
exportAs: 'ngpRovingFocusGroup',
|
|
238
|
+
providers: [{ provide: NgpRovingFocusGroupToken, useExisting: NgpRovingFocusGroup }],
|
|
239
|
+
}]
|
|
240
|
+
}], propDecorators: { orientation: [{
|
|
241
|
+
type: Input,
|
|
242
|
+
args: [{ alias: 'ngpRovingFocusGroupOrientation' }]
|
|
243
|
+
}] } });
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm92aW5nLWZvY3VzLWdyb3VwLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvcm92aW5nLWZvY3VzL3NyYy9yb3ZpbmctZm9jdXMtZ3JvdXAvcm92aW5nLWZvY3VzLWdyb3VwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBUXRFLE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPRTs7V0FFRztRQUNjLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXpEOzs7O1dBSUc7UUFDaUQsZ0JBQVcsR0FDN0QsVUFBVSxDQUFDO1FBRWI7O1dBRUc7UUFDTSxTQUFJLEdBQUcsS0FBSyxDQUF3QixJQUFJLEVBQUU7WUFDakQsS0FBSyxFQUFFLHlCQUF5QjtZQUNoQyxTQUFTLEVBQUUsZ0JBQWdCO1NBQzVCLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ00sWUFBTyxHQUFHLEtBQUssQ0FBd0IsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSw0QkFBNEI7WUFDbkMsU0FBUyxFQUFFLGdCQUFnQjtTQUM1QixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQXdCLEtBQUssRUFBRTtZQUN0RCxLQUFLLEVBQUUsNkJBQTZCO1lBQ3BDLFNBQVMsRUFBRSxnQkFBZ0I7U0FDNUIsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDYyxVQUFLLEdBQUcsTUFBTSxDQUF1QixFQUFFLENBQUMsQ0FBQztR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RSxtQkFBbUIsRUFBRSxDQUFDOzsyRkFFekUsbUJBQW1CO2tCQU4vQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxXQUFXLHFCQUFxQixFQUFFLENBQUM7aUJBQ3JGOzhCQVlxRCxXQUFXO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGdDQUFnQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0MgQlktTkQgNC4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgYm9vbGVhbkF0dHJpYnV0ZSwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3BSb3ZpbmdGb2N1c0l0ZW0gfSBmcm9tICcuLi9yb3ZpbmctZm9jdXMtaXRlbS9yb3ZpbmctZm9jdXMtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdwUm92aW5nRm9jdXNHcm91cFRva2VuIH0gZnJvbSAnLi9yb3ZpbmctZm9jdXMtZ3JvdXAudG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbbmdwUm92aW5nRm9jdXNHcm91cF0nLFxuICBleHBvcnRBczogJ25ncFJvdmluZ0ZvY3VzR3JvdXAnLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5ncFJvdmluZ0ZvY3VzR3JvdXBUb2tlbiwgdXNlRXhpc3Rpbmc6IE5ncFJvdmluZ0ZvY3VzR3JvdXAgfV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ncFJvdmluZ0ZvY3VzR3JvdXAge1xuICAvKipcbiAgICogQWNjZXNzIHRoZSBkaXJlY3Rpb25hbGl0eSBzZXJ2aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3Rpb25hbGl0eSA9IGluamVjdChEaXJlY3Rpb25hbGl0eSk7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHJvdmluZyBmb2N1cyBncm91cC5cbiAgICogQGRlZmF1bHQgJ3ZlcnRpY2FsJ1xuICAgKiBAc3VtbWFyeSBUaGlzIGRvZXMgbm90IHVzZSBhIHNpZ25hbCBhcyB3ZSBuZWVkIHRoaXMgdG8gYmUgcHJvZ3JhbW1hdGljYWxseSBzZXR0YWJsZSB3aGVuIHVzZWQgYXMgYSBob3N0IGRpcmVjdGl2ZS5cbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAnbmdwUm92aW5nRm9jdXNHcm91cE9yaWVudGF0aW9uJyB9KSBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9XG4gICAgJ3ZlcnRpY2FsJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIGZvY3VzIHNob3VsZCB3cmFwIHdoZW4gdGhlIGVuZCBvciBiZWdpbm5pbmcgaXMgcmVhY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHdyYXAgPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KHRydWUsIHtcbiAgICBhbGlhczogJ25ncFJvdmluZ0ZvY3VzR3JvdXBXcmFwJyxcbiAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGhvbWUgYW5kIGVuZCBrZXlzIHNob3VsZCBuYXZpZ2F0ZSB0byB0aGUgZmlyc3QgYW5kIGxhc3QgaXRlbXMuXG4gICAqL1xuICByZWFkb25seSBob21lRW5kID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0Pih0cnVlLCB7XG4gICAgYWxpYXM6ICduZ3BSb3ZpbmdGb2N1c0dyb3VwSG9tZUVuZCcsXG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxuICB9KTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSByb3ZpbmcgZm9jdXMgZ3JvdXAgaXMgZGlzYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4sIEJvb2xlYW5JbnB1dD4oZmFsc2UsIHtcbiAgICBhbGlhczogJ25ncFJvdmluZ0ZvY3VzR3JvdXBEaXNhYmxlZCcsXG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxuICB9KTtcblxuICAvKipcbiAgICogU3RvcmUgdGhlIGl0ZW1zIGluIHRoZSByb3ZpbmcgZm9jdXMgZ3JvdXAuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zID0gc2lnbmFsPE5ncFJvdmluZ0ZvY3VzSXRlbVtdPihbXSk7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaXRlbXMgaW4gdGhlIHJvdmluZyBmb2N1cyBncm91cCBzb3J0ZWQgYnkgb3JkZXIuXG4gICAqL1xuICBwcml2YXRlIGdldCBzb3J0ZWRJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcygpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIHNvcnQgdGhlIGl0ZW1zIGJ5IHRoZWlyIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudFxuICAgICAgcmV0dXJuIGEuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSAmXG4gICAgICAgIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HXG4gICAgICAgID8gLTFcbiAgICAgICAgOiAxO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBhY3RpdmUgaXRlbSBpbiB0aGUgcm92aW5nIGZvY3VzIGdyb3VwLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZUl0ZW0gPSBzaWduYWw8TmdwUm92aW5nRm9jdXNJdGVtIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFuIGl0ZW0gd2l0aCB0aGUgcm92aW5nIGZvY3VzIGdyb3VwLlxuICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byByZWdpc3RlclxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlZ2lzdGVyKGl0ZW06IE5ncFJvdmluZ0ZvY3VzSXRlbSk6IHZvaWQge1xuICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IFsuLi5pdGVtcywgaXRlbV0pO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGl0ZW0sIG1ha2UgdGhlIGZpcnN0IGl0ZW0gdGhlIHRhYmJhYmxlIGl0ZW1cbiAgICBpZiAoIXRoaXMuYWN0aXZlSXRlbSgpKSB7XG4gICAgICB0aGlzLmFjdGl2ZUl0ZW0uc2V0KGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIGFuIGl0ZW0gd2l0aCB0aGUgcm92aW5nIGZvY3VzIGdyb3VwLlxuICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byB1bnJlZ2lzdGVyXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5yZWdpc3RlcihpdGVtOiBOZ3BSb3ZpbmdGb2N1c0l0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnVwZGF0ZShpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaSA9PiBpICE9PSBpdGVtKSk7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgdW5yZWdpc3RlcmVkIGl0ZW0gaXMgdGhlIGFjdGl2ZSBpdGVtXG4gICAgaWYgKHRoaXMuYWN0aXZlSXRlbSgpID09PSBpdGVtKSB7XG4gICAgICAvLyBpZiB0aGUgYWN0aXZlIGl0ZW0gaXMgdW5yZWdpc3RlcmVkLCBhY3RpdmF0ZSB0aGUgZmlyc3QgaXRlbVxuICAgICAgdGhpcy5hY3RpdmVJdGVtLnNldCh0aGlzLml0ZW1zKClbMF0gPz8gbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGFuIGl0ZW0gaW4gdGhlIHJvdmluZyBmb2N1cyBncm91cC5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gdG8gYWN0aXZhdGVcbiAgICogQHBhcmFtIG9yaWdpbiBUaGUgb3JpZ2luIG9mIHRoZSBmb2N1cyBjaGFuZ2VcbiAgICovXG4gIHNldEFjdGl2ZUl0ZW0oaXRlbTogTmdwUm92aW5nRm9jdXNJdGVtIHwgbnVsbCwgb3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJyk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlSXRlbS5zZXQoaXRlbSk7XG4gICAgaXRlbT8uZm9jdXMob3JpZ2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgcm92aW5nIGZvY3VzIGdyb3VwLlxuICAgKiBAcGFyYW0gb3JpZ2luIFRoZSBvcmlnaW4gb2YgdGhlIGZvY3VzIGNoYW5nZVxuICAgKi9cbiAgcHJpdmF0ZSBhY3RpdmF0ZUZpcnN0SXRlbShvcmlnaW46IEZvY3VzT3JpZ2luKTogdm9pZCB7XG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaXRlbSB0aGF0IGlzIG5vdCBkaXNhYmxlZFxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNvcnRlZEl0ZW1zLmZpbmQoaSA9PiAhaS5kaXNhYmxlZCgpKSA/PyBudWxsO1xuXG4gICAgLy8gc2V0IHRoZSBmaXJzdCBpdGVtIGFzIHRoZSBhY3RpdmUgaXRlbVxuICAgIHRoaXMuc2V0QWN0aXZlSXRlbShpdGVtLCBvcmlnaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIHJvdmluZyBmb2N1cyBncm91cC5cbiAgICogQHBhcmFtIG9yaWdpbiBUaGUgb3JpZ2luIG9mIHRoZSBmb2N1cyBjaGFuZ2VcbiAgICovXG4gIHByaXZhdGUgYWN0aXZhdGVMYXN0SXRlbShvcmlnaW46IEZvY3VzT3JpZ2luKTogdm9pZCB7XG4gICAgLy8gZmluZCB0aGUgbGFzdCBpdGVtIHRoYXQgaXMgbm90IGRpc2FibGVkXG4gICAgY29uc3QgaXRlbSA9IFsuLi50aGlzLnNvcnRlZEl0ZW1zXS5yZXZlcnNlKCkuZmluZChpID0+ICFpLmRpc2FibGVkKCkpID8/IG51bGw7XG5cbiAgICAvLyBzZXQgdGhlIGxhc3QgaXRlbSBhcyB0aGUgYWN0aXZlIGl0ZW1cbiAgICB0aGlzLnNldEFjdGl2ZUl0ZW0oaXRlbSwgb3JpZ2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB0aGUgbmV4dCBpdGVtIGluIHRoZSByb3ZpbmcgZm9jdXMgZ3JvdXAuXG4gICAqIEBwYXJhbSBvcmlnaW4gVGhlIG9yaWdpbiBvZiB0aGUgZm9jdXMgY2hhbmdlXG4gICAqL1xuICBwcml2YXRlIGFjdGl2YXRlTmV4dEl0ZW0ob3JpZ2luOiBGb2N1c09yaWdpbik6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLmFjdGl2ZUl0ZW0oKTtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIGFjdGl2ZSBpdGVtLCBhY3RpdmF0ZSB0aGUgZmlyc3QgaXRlbVxuICAgIGlmICghYWN0aXZlSXRlbSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUZpcnN0SXRlbShvcmlnaW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBhY3RpdmUgaXRlbVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zb3J0ZWRJdGVtcy5pbmRleE9mKGFjdGl2ZUl0ZW0pO1xuXG4gICAgLy8gZmluZCB0aGUgbmV4dCBpdGVtIHRoYXQgaXMgbm90IGRpc2FibGVkXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuc29ydGVkSXRlbXMuc2xpY2UoaW5kZXggKyAxKS5maW5kKGkgPT4gIWkuZGlzYWJsZWQoKSkgPz8gbnVsbDtcblxuICAgIC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCB3cmFwIHRvIHRoZSBiZWdpbm5pbmdcbiAgICBpZiAoIWl0ZW0gJiYgdGhpcy53cmFwKCkpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVGaXJzdEl0ZW0ob3JpZ2luKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBubyBuZXh0IGl0ZW0sIGRvIG5vdGhpbmdcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG5leHQgaXRlbSBhcyB0aGUgYWN0aXZlIGl0ZW1cbiAgICB0aGlzLnNldEFjdGl2ZUl0ZW0oaXRlbSwgb3JpZ2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB0aGUgcHJldmlvdXMgaXRlbSBpbiB0aGUgcm92aW5nIGZvY3VzIGdyb3VwLlxuICAgKiBAcGFyYW0gb3JpZ2luIFRoZSBvcmlnaW4gb2YgdGhlIGZvY3VzIGNoYW5nZVxuICAgKi9cbiAgcHJpdmF0ZSBhY3RpdmF0ZVByZXZpb3VzSXRlbShvcmlnaW46IEZvY3VzT3JpZ2luKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuYWN0aXZlSXRlbSgpO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gYWN0aXZlIGl0ZW0sIGFjdGl2YXRlIHRoZSBsYXN0IGl0ZW1cbiAgICBpZiAoIWFjdGl2ZUl0ZW0pIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVMYXN0SXRlbShvcmlnaW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBhY3RpdmUgaXRlbVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zb3J0ZWRJdGVtcy5pbmRleE9mKGFjdGl2ZUl0ZW0pO1xuXG4gICAgLy8gZmluZCB0aGUgcHJldmlvdXMgaXRlbSB0aGF0IGlzIG5vdCBkaXNhYmxlZFxuICAgIGNvbnN0IGl0ZW0gPVxuICAgICAgdGhpcy5zb3J0ZWRJdGVtc1xuICAgICAgICAuc2xpY2UoMCwgaW5kZXgpXG4gICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgLmZpbmQoaSA9PiAhaS5kaXNhYmxlZCgpKSA/PyBudWxsO1xuXG4gICAgLy8gaWYgd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QsIHdyYXAgdG8gdGhlIGVuZFxuICAgIGlmICghaXRlbSAmJiB0aGlzLndyYXAoKSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUxhc3RJdGVtKG9yaWdpbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgaXRlbSwgZG8gbm90aGluZ1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgcHJldmlvdXMgaXRlbSBhcyB0aGUgYWN0aXZlIGl0ZW1cbiAgICB0aGlzLnNldEFjdGl2ZUl0ZW0oaXRlbSwgb3JpZ2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBmb3IgdGhlIHJvdmluZyBmb2N1cyBncm91cC5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBrZXlib2FyZCBldmVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlUHJldmlvdXNJdGVtKCdrZXlib2FyZCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVOZXh0SXRlbSgna2V5Ym9hcmQnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uYWxpdHkudmFsdWUgPT09ICdsdHInKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlUHJldmlvdXNJdGVtKCdrZXlib2FyZCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlTmV4dEl0ZW0oJ2tleWJvYXJkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uYWxpdHkudmFsdWUgPT09ICdsdHInKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlTmV4dEl0ZW0oJ2tleWJvYXJkJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVQcmV2aW91c0l0ZW0oJ2tleWJvYXJkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIGlmICh0aGlzLmhvbWVFbmQoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZUZpcnN0SXRlbSgna2V5Ym9hcmQnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIGlmICh0aGlzLmhvbWVFbmQoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZUxhc3RJdGVtKCdrZXlib2FyZCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the CC BY-ND 4.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
9
|
+
export const NgpRovingFocusGroupToken = new InjectionToken('NgpRovingFocusGroupToken');
|
|
10
|
+
/**
|
|
11
|
+
* Inject the RovingFocusGroup directive instance
|
|
12
|
+
* @returns The RovingFocusGroup directive instance
|
|
13
|
+
*/
|
|
14
|
+
export function injectRovingFocusGroup() {
|
|
15
|
+
return inject(NgpRovingFocusGroupToken);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm92aW5nLWZvY3VzLWdyb3VwLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9yb3ZpbmctZm9jdXMvc3JjL3JvdmluZy1mb2N1cy1ncm91cC9yb3ZpbmctZm9jdXMtZ3JvdXAudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQ3hELDBCQUEwQixDQUMzQixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWS1ORCA0LjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3BSb3ZpbmdGb2N1c0dyb3VwIH0gZnJvbSAnLi9yb3ZpbmctZm9jdXMtZ3JvdXAuZGlyZWN0aXZlJztcblxuZXhwb3J0IGNvbnN0IE5ncFJvdmluZ0ZvY3VzR3JvdXBUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3BSb3ZpbmdGb2N1c0dyb3VwPihcbiAgJ05ncFJvdmluZ0ZvY3VzR3JvdXBUb2tlbicsXG4pO1xuXG4vKipcbiAqIEluamVjdCB0aGUgUm92aW5nRm9jdXNHcm91cCBkaXJlY3RpdmUgaW5zdGFuY2VcbiAqIEByZXR1cm5zIFRoZSBSb3ZpbmdGb2N1c0dyb3VwIGRpcmVjdGl2ZSBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Um92aW5nRm9jdXNHcm91cCgpOiBOZ3BSb3ZpbmdGb2N1c0dyb3VwIHtcbiAgcmV0dXJuIGluamVjdChOZ3BSb3ZpbmdGb2N1c0dyb3VwVG9rZW4pO1xufVxuIl19
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the CC BY-ND 4.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
9
|
+
import { Directive, ElementRef, HostListener, booleanAttribute, computed, inject, input, } from '@angular/core';
|
|
10
|
+
import { injectRovingFocusGroup } from '../roving-focus-group/roving-focus-group.token';
|
|
11
|
+
import { NgpRovingFocusItemToken } from './roving-focus-item.token';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class NgpRovingFocusItem {
|
|
14
|
+
constructor() {
|
|
15
|
+
/**
|
|
16
|
+
* Access the group the roving focus item belongs to.
|
|
17
|
+
*/
|
|
18
|
+
this.group = injectRovingFocusGroup();
|
|
19
|
+
/**
|
|
20
|
+
* Access the focus monitor service.
|
|
21
|
+
*/
|
|
22
|
+
this.focusMonitor = inject(FocusMonitor);
|
|
23
|
+
/**
|
|
24
|
+
* Access the element the roving focus item is attached to.
|
|
25
|
+
*/
|
|
26
|
+
this.elementRef = inject(ElementRef);
|
|
27
|
+
/**
|
|
28
|
+
* Define if the item is disabled.
|
|
29
|
+
*/
|
|
30
|
+
this.disabled = input(false, {
|
|
31
|
+
alias: 'ngpRovingFocusItemDisabled',
|
|
32
|
+
transform: booleanAttribute,
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Derive the tabindex of the roving focus item.
|
|
36
|
+
*/
|
|
37
|
+
this.tabindex = computed(() => !this.group.disabled() && this.group.activeItem() === this ? 0 : -1);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the roving focus item.
|
|
41
|
+
*/
|
|
42
|
+
ngOnInit() {
|
|
43
|
+
this.group.register(this);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Clean up the roving focus item.
|
|
47
|
+
*/
|
|
48
|
+
ngOnDestroy() {
|
|
49
|
+
this.group.unregister(this);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Forward the keydown event to the roving focus group.
|
|
53
|
+
* @param event The keyboard event
|
|
54
|
+
*/
|
|
55
|
+
onKeydown(event) {
|
|
56
|
+
if (this.disabled()) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
this.group.onKeydown(event);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Activate the roving focus item on click.
|
|
63
|
+
*/
|
|
64
|
+
activate() {
|
|
65
|
+
if (this.disabled()) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
this.group.setActiveItem(this, 'mouse');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Focus the roving focus item.
|
|
72
|
+
* @param origin The origin of the focus
|
|
73
|
+
*/
|
|
74
|
+
focus(origin) {
|
|
75
|
+
this.focusMonitor.focusVia(this.elementRef, origin);
|
|
76
|
+
}
|
|
77
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpRovingFocusItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
78
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.2", type: NgpRovingFocusItem, isStandalone: true, selector: "[ngpRovingFocusItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "ngpRovingFocusItemDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)", "click": "activate()" }, properties: { "attr.tabindex": "tabindex()" } }, providers: [{ provide: NgpRovingFocusItemToken, useExisting: NgpRovingFocusItem }], exportAs: ["ngpRovingFocusItem"], ngImport: i0 }); }
|
|
79
|
+
}
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpRovingFocusItem, decorators: [{
|
|
81
|
+
type: Directive,
|
|
82
|
+
args: [{
|
|
83
|
+
standalone: true,
|
|
84
|
+
selector: '[ngpRovingFocusItem]',
|
|
85
|
+
exportAs: 'ngpRovingFocusItem',
|
|
86
|
+
providers: [{ provide: NgpRovingFocusItemToken, useExisting: NgpRovingFocusItem }],
|
|
87
|
+
host: {
|
|
88
|
+
'[attr.tabindex]': 'tabindex()',
|
|
89
|
+
},
|
|
90
|
+
}]
|
|
91
|
+
}], propDecorators: { onKeydown: [{
|
|
92
|
+
type: HostListener,
|
|
93
|
+
args: ['keydown', ['$event']]
|
|
94
|
+
}], activate: [{
|
|
95
|
+
type: HostListener,
|
|
96
|
+
args: ['click']
|
|
97
|
+
}] } });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm92aW5nLWZvY3VzLWl0ZW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9yb3ZpbmctZm9jdXMvc3JjL3JvdmluZy1mb2N1cy1pdGVtL3JvdmluZy1mb2N1cy1pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUdaLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFXcEUsTUFBTSxPQUFPLGtCQUFrQjtJQVQvQjtRQVVFOztXQUVHO1FBQ2MsVUFBSyxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFFbEQ7O1dBRUc7UUFDYyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyRDs7V0FFRztRQUNNLGVBQVUsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBRWxFOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBd0IsS0FBSyxFQUFFO1lBQ3RELEtBQUssRUFBRSw0QkFBNEI7WUFDbkMsU0FBUyxFQUFFLGdCQUFnQjtTQUM1QixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNNLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ2hDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDcEUsQ0FBQztLQWdESDtJQTlDQzs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUVPLFNBQVMsQ0FBQyxLQUFvQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBRU8sUUFBUTtRQUNoQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBbUI7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RCxDQUFDOzhHQTVFVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixpV0FMbEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzs7MkZBS3ZFLGtCQUFrQjtrQkFUOUIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxvQkFBb0IsRUFBRSxDQUFDO29CQUNsRixJQUFJLEVBQUU7d0JBQ0osaUJBQWlCLEVBQUUsWUFBWTtxQkFDaEM7aUJBQ0Y7OEJBbURXLFNBQVM7c0JBRGxCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWF6QixRQUFRO3NCQURqQixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWS1ORCA0LjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdFJvdmluZ0ZvY3VzR3JvdXAgfSBmcm9tICcuLi9yb3ZpbmctZm9jdXMtZ3JvdXAvcm92aW5nLWZvY3VzLWdyb3VwLnRva2VuJztcbmltcG9ydCB7IE5ncFJvdmluZ0ZvY3VzSXRlbVRva2VuIH0gZnJvbSAnLi9yb3ZpbmctZm9jdXMtaXRlbS50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tuZ3BSb3ZpbmdGb2N1c0l0ZW1dJyxcbiAgZXhwb3J0QXM6ICduZ3BSb3ZpbmdGb2N1c0l0ZW0nLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5ncFJvdmluZ0ZvY3VzSXRlbVRva2VuLCB1c2VFeGlzdGluZzogTmdwUm92aW5nRm9jdXNJdGVtIH1dLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLnRhYmluZGV4XSc6ICd0YWJpbmRleCgpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTmdwUm92aW5nRm9jdXNJdGVtIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQWNjZXNzIHRoZSBncm91cCB0aGUgcm92aW5nIGZvY3VzIGl0ZW0gYmVsb25ncyB0by5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXAgPSBpbmplY3RSb3ZpbmdGb2N1c0dyb3VwKCk7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgZm9jdXMgbW9uaXRvciBzZXJ2aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBmb2N1c01vbml0b3IgPSBpbmplY3QoRm9jdXNNb25pdG9yKTtcblxuICAvKipcbiAgICogQWNjZXNzIHRoZSBlbGVtZW50IHRoZSByb3ZpbmcgZm9jdXMgaXRlbSBpcyBhdHRhY2hlZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgaWYgdGhlIGl0ZW0gaXMgZGlzYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4sIEJvb2xlYW5JbnB1dD4oZmFsc2UsIHtcbiAgICBhbGlhczogJ25ncFJvdmluZ0ZvY3VzSXRlbURpc2FibGVkJyxcbiAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBEZXJpdmUgdGhlIHRhYmluZGV4IG9mIHRoZSByb3ZpbmcgZm9jdXMgaXRlbS5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmluZGV4ID0gY29tcHV0ZWQoKCkgPT5cbiAgICAhdGhpcy5ncm91cC5kaXNhYmxlZCgpICYmIHRoaXMuZ3JvdXAuYWN0aXZlSXRlbSgpID09PSB0aGlzID8gMCA6IC0xLFxuICApO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSByb3ZpbmcgZm9jdXMgaXRlbS5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXAucmVnaXN0ZXIodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW4gdXAgdGhlIHJvdmluZyBmb2N1cyBpdGVtLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cC51bnJlZ2lzdGVyKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcndhcmQgdGhlIGtleWRvd24gZXZlbnQgdG8gdGhlIHJvdmluZyBmb2N1cyBncm91cC5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBrZXlib2FyZCBldmVudFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ncm91cC5vbktleWRvd24oZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIHRoZSByb3ZpbmcgZm9jdXMgaXRlbSBvbiBjbGljay5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgcHJvdGVjdGVkIGFjdGl2YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdyb3VwLnNldEFjdGl2ZUl0ZW0odGhpcywgJ21vdXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdGhlIHJvdmluZyBmb2N1cyBpdGVtLlxuICAgKiBAcGFyYW0gb3JpZ2luIFRoZSBvcmlnaW4gb2YgdGhlIGZvY3VzXG4gICAqL1xuICBmb2N1cyhvcmlnaW46IEZvY3VzT3JpZ2luKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5lbGVtZW50UmVmLCBvcmlnaW4pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the CC BY-ND 4.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
9
|
+
export const NgpRovingFocusItemToken = new InjectionToken('NgpRovingFocusItemToken');
|
|
10
|
+
/**
|
|
11
|
+
* Inject the RovingFocusItem directive instance
|
|
12
|
+
* @returns The RovingFocusItem directive instance
|
|
13
|
+
*/
|
|
14
|
+
export function injectRovingFocusItem() {
|
|
15
|
+
return inject(NgpRovingFocusItemToken);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm92aW5nLWZvY3VzLWl0ZW0udG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL3JvdmluZy1mb2N1cy9zcmMvcm92aW5nLWZvY3VzLWl0ZW0vcm92aW5nLWZvY3VzLWl0ZW0udG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQ3ZELHlCQUF5QixDQUMxQixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWS1ORCA0LjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3BSb3ZpbmdGb2N1c0l0ZW0gfSBmcm9tICcuL3JvdmluZy1mb2N1cy1pdGVtLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBOZ3BSb3ZpbmdGb2N1c0l0ZW1Ub2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3BSb3ZpbmdGb2N1c0l0ZW0+KFxuICAnTmdwUm92aW5nRm9jdXNJdGVtVG9rZW4nLFxuKTtcblxuLyoqXG4gKiBJbmplY3QgdGhlIFJvdmluZ0ZvY3VzSXRlbSBkaXJlY3RpdmUgaW5zdGFuY2VcbiAqIEByZXR1cm5zIFRoZSBSb3ZpbmdGb2N1c0l0ZW0gZGlyZWN0aXZlIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RSb3ZpbmdGb2N1c0l0ZW0oKTogTmdwUm92aW5nRm9jdXNJdGVtIHtcbiAgcmV0dXJuIGluamVjdChOZ3BSb3ZpbmdGb2N1c0l0ZW1Ub2tlbik7XG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the CC BY-ND 4.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
export { NgpSelectButton } from './select-button/select-button.directive';
|
|
9
|
+
export { NgpSelectButtonToken } from './select-button/select-button.token';
|
|
10
|
+
export { NgpSelectOption } from './select-option/select-option.directive';
|
|
11
|
+
export { NgpSelectOptionToken } from './select-option/select-option.token';
|
|
12
|
+
export { NgpSelectOptions } from './select-options/select-options.directive';
|
|
13
|
+
export { NgpSelectOptionsToken } from './select-options/select-options.token';
|
|
14
|
+
export { NgpSelect } from './select/select.directive';
|
|
15
|
+
export { NgpSelectToken } from './select/select.token';
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL3NlbGVjdC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0MgQlktTkQgNC4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuZXhwb3J0IHsgTmdwU2VsZWN0QnV0dG9uIH0gZnJvbSAnLi9zZWxlY3QtYnV0dG9uL3NlbGVjdC1idXR0b24uZGlyZWN0aXZlJztcbmV4cG9ydCB7IE5ncFNlbGVjdEJ1dHRvblRva2VuIH0gZnJvbSAnLi9zZWxlY3QtYnV0dG9uL3NlbGVjdC1idXR0b24udG9rZW4nO1xuZXhwb3J0IHsgTmdwU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24uZGlyZWN0aXZlJztcbmV4cG9ydCB7IE5ncFNlbGVjdE9wdGlvblRva2VuIH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24udG9rZW4nO1xuZXhwb3J0IHsgTmdwU2VsZWN0T3B0aW9ucyB9IGZyb20gJy4vc2VsZWN0LW9wdGlvbnMvc2VsZWN0LW9wdGlvbnMuZGlyZWN0aXZlJztcbmV4cG9ydCB7IE5ncFNlbGVjdE9wdGlvbnNUb2tlbiB9IGZyb20gJy4vc2VsZWN0LW9wdGlvbnMvc2VsZWN0LW9wdGlvbnMudG9rZW4nO1xuZXhwb3J0IHsgTmdwU2VsZWN0IH0gZnJvbSAnLi9zZWxlY3Qvc2VsZWN0LmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBOZ3BTZWxlY3RUb2tlbiB9IGZyb20gJy4vc2VsZWN0L3NlbGVjdC50b2tlbic7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcHJpbWl0aXZlcy1zZWxlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL3NlbGVjdC9zcmMvbmctcHJpbWl0aXZlcy1zZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Directive, booleanAttribute, contentChild, input, model } from '@angular/core';
|
|
2
|
+
import { NgpSelectButtonToken } from '../select-button/select-button.token';
|
|
3
|
+
import { NgpSelectOptionsToken } from '../select-options/select-options.token';
|
|
4
|
+
import { NgpSelectToken } from './select.token';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class NgpSelect {
|
|
7
|
+
constructor() {
|
|
8
|
+
/**
|
|
9
|
+
* The selected value.
|
|
10
|
+
*/
|
|
11
|
+
this.value = model.required({
|
|
12
|
+
alias: 'ngpSelectValue',
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Whether the select dropdown is open.
|
|
16
|
+
*/
|
|
17
|
+
this.open = model(false, {
|
|
18
|
+
alias: 'ngpSelectOpen',
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* Disable the select component.
|
|
22
|
+
*/
|
|
23
|
+
this.disabled = input(false, {
|
|
24
|
+
alias: 'ngpSelectDisabled',
|
|
25
|
+
transform: booleanAttribute,
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Access the select button instance.
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
this.button = contentChild.required(NgpSelectButtonToken, {
|
|
32
|
+
descendants: true,
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Access the select options instance.
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
this.options = contentChild.required(NgpSelectOptionsToken, {
|
|
39
|
+
descendants: true,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
43
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.0.2", type: NgpSelect, isStandalone: true, selector: "[ngpSelect]", inputs: { value: { classPropertyName: "value", publicName: "ngpSelectValue", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "ngpSelectOpen", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpSelectDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "ngpSelectValueChange", open: "ngpSelectOpenChange" }, providers: [{ provide: NgpSelectToken, useExisting: NgpSelect }], queries: [{ propertyName: "button", first: true, predicate: NgpSelectButtonToken, descendants: true, isSignal: true }, { propertyName: "options", first: true, predicate: NgpSelectOptionsToken, descendants: true, isSignal: true }], exportAs: ["ngpSelect"], ngImport: i0 }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpSelect, decorators: [{
|
|
46
|
+
type: Directive,
|
|
47
|
+
args: [{
|
|
48
|
+
standalone: true,
|
|
49
|
+
selector: '[ngpSelect]',
|
|
50
|
+
exportAs: 'ngpSelect',
|
|
51
|
+
providers: [{ provide: NgpSelectToken, useExisting: NgpSelect }],
|
|
52
|
+
}]
|
|
53
|
+
}] });
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvc2VsZWN0L3NyYy9zZWxlY3Qvc2VsZWN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFRaEQsTUFBTSxPQUFPLFNBQVM7SUFOdEI7UUFPRTs7V0FFRztRQUNNLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFJO1lBQ2pDLEtBQUssRUFBRSxnQkFBZ0I7U0FDeEIsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDTSxTQUFJLEdBQUcsS0FBSyxDQUFVLEtBQUssRUFBRTtZQUNwQyxLQUFLLEVBQUUsZUFBZTtTQUN2QixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQXdCLEtBQUssRUFBRTtZQUN0RCxLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLFNBQVMsRUFBRSxnQkFBZ0I7U0FDNUIsQ0FBQyxDQUFDO1FBRUg7OztXQUdHO1FBQ00sV0FBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUU7WUFDNUQsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBRUg7OztXQUdHO1FBQ00sWUFBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUU7WUFDOUQsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO0tBQ0o7OEdBdENZLFNBQVM7a0dBQVQsU0FBUyx1aEJBRlQsQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDLDhEQTZCeEIsb0JBQW9CLDBGQVFuQixxQkFBcUI7OzJGQW5DbkQsU0FBUztrQkFOckIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRSxXQUFXO29CQUNyQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxXQUFXLEVBQUUsQ0FBQztpQkFDakUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWS1ORCA0LjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgYm9vbGVhbkF0dHJpYnV0ZSwgY29udGVudENoaWxkLCBpbnB1dCwgbW9kZWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ncFNlbGVjdEJ1dHRvblRva2VuIH0gZnJvbSAnLi4vc2VsZWN0LWJ1dHRvbi9zZWxlY3QtYnV0dG9uLnRva2VuJztcbmltcG9ydCB7IE5ncFNlbGVjdE9wdGlvbnNUb2tlbiB9IGZyb20gJy4uL3NlbGVjdC1vcHRpb25zL3NlbGVjdC1vcHRpb25zLnRva2VuJztcbmltcG9ydCB7IE5ncFNlbGVjdFRva2VuIH0gZnJvbSAnLi9zZWxlY3QudG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbbmdwU2VsZWN0XScsXG4gIGV4cG9ydEFzOiAnbmdwU2VsZWN0JyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOZ3BTZWxlY3RUb2tlbiwgdXNlRXhpc3Rpbmc6IE5ncFNlbGVjdCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgTmdwU2VsZWN0PFQ+IHtcbiAgLyoqXG4gICAqIFRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlID0gbW9kZWwucmVxdWlyZWQ8VD4oe1xuICAgIGFsaWFzOiAnbmdwU2VsZWN0VmFsdWUnLFxuICB9KTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VsZWN0IGRyb3Bkb3duIGlzIG9wZW4uXG4gICAqL1xuICByZWFkb25seSBvcGVuID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UsIHtcbiAgICBhbGlhczogJ25ncFNlbGVjdE9wZW4nLFxuICB9KTtcblxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgc2VsZWN0IGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0PihmYWxzZSwge1xuICAgIGFsaWFzOiAnbmdwU2VsZWN0RGlzYWJsZWQnLFxuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgc2VsZWN0IGJ1dHRvbiBpbnN0YW5jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBidXR0b24gPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoTmdwU2VsZWN0QnV0dG9uVG9rZW4sIHtcbiAgICBkZXNjZW5kYW50czogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgc2VsZWN0IG9wdGlvbnMgaW5zdGFuY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucyA9IGNvbnRlbnRDaGlsZC5yZXF1aXJlZChOZ3BTZWxlY3RPcHRpb25zVG9rZW4sIHtcbiAgICBkZXNjZW5kYW50czogdHJ1ZSxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the CC BY-ND 4.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
9
|
+
export const NgpSelectToken = new InjectionToken('NgpSelectToken');
|
|
10
|
+
/**
|
|
11
|
+
* Inject the Select directive instance
|
|
12
|
+
*/
|
|
13
|
+
export function injectSelect() {
|
|
14
|
+
return inject(NgpSelectToken);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9zZWxlY3Qvc3JjL3NlbGVjdC9zZWxlY3QudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFxQixnQkFBZ0IsQ0FBQyxDQUFDO0FBRXZGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVk7SUFDMUIsT0FBTyxNQUFNLENBQWUsY0FBYyxDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZLU5EIDQuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE5ncFNlbGVjdCB9IGZyb20gJy4vc2VsZWN0LmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBOZ3BTZWxlY3RUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3BTZWxlY3Q8dW5rbm93bj4+KCdOZ3BTZWxlY3RUb2tlbicpO1xuXG4vKipcbiAqIEluamVjdCB0aGUgU2VsZWN0IGRpcmVjdGl2ZSBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U2VsZWN0PFQ+KCk6IE5ncFNlbGVjdDxUPiB7XG4gIHJldHVybiBpbmplY3Q8TmdwU2VsZWN0PFQ+PihOZ3BTZWxlY3RUb2tlbik7XG59XG4iXX0=
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Directive, ElementRef, inject, input } from '@angular/core';
|
|
2
|
+
import { FocusManager, injectDisposables, uniqueId } from 'ng-primitives/utils';
|
|
3
|
+
import { injectSelect } from '../select/select.token';
|
|
4
|
+
import { NgpSelectButtonToken } from './select-button.token';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class NgpSelectButton {
|
|
7
|
+
constructor() {
|
|
8
|
+
/**
|
|
9
|
+
* Access the parent select component.
|
|
10
|
+
*/
|
|
11
|
+
this.select = injectSelect();
|
|
12
|
+
/**
|
|
13
|
+
* Access the disposable helpers.
|
|
14
|
+
*/
|
|
15
|
+
this.disposables = injectDisposables();
|
|
16
|
+
/**
|
|
17
|
+
* Access the element reference.
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
this.element = inject(ElementRef);
|
|
21
|
+
/**
|
|
22
|
+
* Access the focus manager
|
|
23
|
+
*/
|
|
24
|
+
this.focusManager = inject(FocusManager);
|
|
25
|
+
/**
|
|
26
|
+
* Optionally define an id for the button. By default, the id is generated.
|
|
27
|
+
*/
|
|
28
|
+
this.id = input(uniqueId('select-button'));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Toggle the select open state.
|
|
32
|
+
*/
|
|
33
|
+
toggle() {
|
|
34
|
+
this.select.open.update(open => !open);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Handle keyboard events. If the list is closed, open it when the user presses the arrow keys.
|
|
38
|
+
* If the list is open then we navigate using active descendant.
|
|
39
|
+
* @param event
|
|
40
|
+
*/
|
|
41
|
+
keydown(event) {
|
|
42
|
+
if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
|
|
43
|
+
this.select.open.set(true);
|
|
44
|
+
// stop the event from triggering scrolling on the dropdown
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
}
|
|
47
|
+
// if the escape key is pressed, close the dropdown
|
|
48
|
+
if (event.key === 'Escape') {
|
|
49
|
+
this.select.open.set(false);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Focus the button element.
|
|
54
|
+
* @param origin
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
57
|
+
focus(origin) {
|
|
58
|
+
// we run after the next tick to ensure any in-progress events do not get
|
|
59
|
+
// redirected to the button element
|
|
60
|
+
this.disposables.requestAnimationFrame(() => this.focusManager.focus(this.element, origin));
|
|
61
|
+
}
|
|
62
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpSelectButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
63
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.2", type: NgpSelectButton, isStandalone: true, selector: "button[ngpSelectButton]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "aria-haspopup": "listbox" }, listeners: { "click": "toggle()", "keydown": "keydown($event)" }, properties: { "attr.id": "id()", "attr.aria-expanded": "select.open()", "attr.aria-controls": "select.open() ? select.options()?.id() : null", "attr.data-state": "select.open() ? \"open\" : \"closed\"" } }, providers: [{ provide: NgpSelectButtonToken, useExisting: NgpSelectButton }], exportAs: ["ngpSelectButton"], ngImport: i0 }); }
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NgpSelectButton, decorators: [{
|
|
66
|
+
type: Directive,
|
|
67
|
+
args: [{
|
|
68
|
+
standalone: true,
|
|
69
|
+
selector: 'button[ngpSelectButton]',
|
|
70
|
+
exportAs: 'ngpSelectButton',
|
|
71
|
+
providers: [{ provide: NgpSelectButtonToken, useExisting: NgpSelectButton }],
|
|
72
|
+
host: {
|
|
73
|
+
type: 'button',
|
|
74
|
+
'aria-haspopup': 'listbox',
|
|
75
|
+
'[attr.id]': 'id()',
|
|
76
|
+
'[attr.aria-expanded]': 'select.open()',
|
|
77
|
+
'[attr.aria-controls]': 'select.open() ? select.options()?.id() : null',
|
|
78
|
+
'[attr.data-state]': 'select.open() ? "open" : "closed"',
|
|
79
|
+
'(click)': 'toggle()',
|
|
80
|
+
'(keydown)': 'keydown($event)',
|
|
81
|
+
},
|
|
82
|
+
}]
|
|
83
|
+
}] });
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWJ1dHRvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL3NlbGVjdC9zcmMvc2VsZWN0LWJ1dHRvbi9zZWxlY3QtYnV0dG9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWtCN0QsTUFBTSxPQUFPLGVBQWU7SUFoQjVCO1FBaUJFOztXQUVHO1FBQ2dCLFdBQU0sR0FBRyxZQUFZLEVBQVcsQ0FBQztRQUVwRDs7V0FFRztRQUNjLGdCQUFXLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUVuRDs7O1dBR0c7UUFDTSxZQUFPLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUUvRDs7V0FFRztRQUNjLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ00sT0FBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztLQXFDaEQ7SUFuQ0M7O09BRUc7SUFDTyxNQUFNO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLE9BQU8sQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLDJEQUEyRDtZQUMzRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELG1EQUFtRDtRQUNuRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxNQUFvQjtRQUN4Qix5RUFBeUU7UUFDekUsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7OEdBN0RVLGVBQWU7a0dBQWYsZUFBZSx3aEJBWmYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7OzJGQVlqRSxlQUFlO2tCQWhCM0IsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxpQkFBaUIsRUFBRSxDQUFDO29CQUM1RSxJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLFFBQVE7d0JBQ2QsZUFBZSxFQUFFLFNBQVM7d0JBQzFCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixzQkFBc0IsRUFBRSxlQUFlO3dCQUN2QyxzQkFBc0IsRUFBRSwrQ0FBK0M7d0JBQ3ZFLG1CQUFtQixFQUFFLG1DQUFtQzt3QkFDeEQsU0FBUyxFQUFFLFVBQVU7d0JBQ3JCLFdBQVcsRUFBRSxpQkFBaUI7cUJBQy9CO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0MgQlktTkQgNC4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb2N1c01hbmFnZXIsIGluamVjdERpc3Bvc2FibGVzLCB1bmlxdWVJZCB9IGZyb20gJ25nLXByaW1pdGl2ZXMvdXRpbHMnO1xuaW1wb3J0IHsgaW5qZWN0U2VsZWN0IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC50b2tlbic7XG5pbXBvcnQgeyBOZ3BTZWxlY3RCdXR0b25Ub2tlbiB9IGZyb20gJy4vc2VsZWN0LWJ1dHRvbi50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2J1dHRvbltuZ3BTZWxlY3RCdXR0b25dJyxcbiAgZXhwb3J0QXM6ICduZ3BTZWxlY3RCdXR0b24nLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5ncFNlbGVjdEJ1dHRvblRva2VuLCB1c2VFeGlzdGluZzogTmdwU2VsZWN0QnV0dG9uIH1dLFxuICBob3N0OiB7XG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAnbGlzdGJveCcsXG4gICAgJ1thdHRyLmlkXSc6ICdpZCgpJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAnc2VsZWN0Lm9wZW4oKScsXG4gICAgJ1thdHRyLmFyaWEtY29udHJvbHNdJzogJ3NlbGVjdC5vcGVuKCkgPyBzZWxlY3Qub3B0aW9ucygpPy5pZCgpIDogbnVsbCcsXG4gICAgJ1thdHRyLmRhdGEtc3RhdGVdJzogJ3NlbGVjdC5vcGVuKCkgPyBcIm9wZW5cIiA6IFwiY2xvc2VkXCInLFxuICAgICcoY2xpY2spJzogJ3RvZ2dsZSgpJyxcbiAgICAnKGtleWRvd24pJzogJ2tleWRvd24oJGV2ZW50KScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ncFNlbGVjdEJ1dHRvbiB7XG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIHBhcmVudCBzZWxlY3QgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdCA9IGluamVjdFNlbGVjdDx1bmtub3duPigpO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGRpc3Bvc2FibGUgaGVscGVycy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zYWJsZXMgPSBpbmplY3REaXNwb3NhYmxlcygpO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGVsZW1lbnQgcmVmZXJlbmNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGZvY3VzIG1hbmFnZXJcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZm9jdXNNYW5hZ2VyID0gaW5qZWN0KEZvY3VzTWFuYWdlcik7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgZGVmaW5lIGFuIGlkIGZvciB0aGUgYnV0dG9uLiBCeSBkZWZhdWx0LCB0aGUgaWQgaXMgZ2VuZXJhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQgPSBpbnB1dCh1bmlxdWVJZCgnc2VsZWN0LWJ1dHRvbicpKTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBzZWxlY3Qgb3BlbiBzdGF0ZS5cbiAgICovXG4gIHByb3RlY3RlZCB0b2dnbGUoKSB7XG4gICAgdGhpcy5zZWxlY3Qub3Blbi51cGRhdGUob3BlbiA9PiAhb3Blbik7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGtleWJvYXJkIGV2ZW50cy4gSWYgdGhlIGxpc3QgaXMgY2xvc2VkLCBvcGVuIGl0IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgYXJyb3cga2V5cy5cbiAgICogSWYgdGhlIGxpc3QgaXMgb3BlbiB0aGVuIHdlIG5hdmlnYXRlIHVzaW5nIGFjdGl2ZSBkZXNjZW5kYW50LlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIHByb3RlY3RlZCBrZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lm9wZW4uc2V0KHRydWUpO1xuICAgICAgLy8gc3RvcCB0aGUgZXZlbnQgZnJvbSB0cmlnZ2VyaW5nIHNjcm9sbGluZyBvbiB0aGUgZHJvcGRvd25cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGVzY2FwZSBrZXkgaXMgcHJlc3NlZCwgY2xvc2UgdGhlIGRyb3Bkb3duXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lm9wZW4uc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdGhlIGJ1dHRvbiBlbGVtZW50LlxuICAgKiBAcGFyYW0gb3JpZ2luXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZm9jdXMob3JpZ2luPzogRm9jdXNPcmlnaW4pIHtcbiAgICAvLyB3ZSBydW4gYWZ0ZXIgdGhlIG5leHQgdGljayB0byBlbnN1cmUgYW55IGluLXByb2dyZXNzIGV2ZW50cyBkbyBub3QgZ2V0XG4gICAgLy8gcmVkaXJlY3RlZCB0byB0aGUgYnV0dG9uIGVsZW1lbnRcbiAgICB0aGlzLmRpc3Bvc2FibGVzLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZvY3VzTWFuYWdlci5mb2N1cyh0aGlzLmVsZW1lbnQsIG9yaWdpbikpO1xuICB9XG59XG4iXX0=
|