@odx/angular 12.19.2 → 12.21.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/CHANGELOG.md +12 -0
- package/cdk/scrollable/README.md +3 -0
- package/cdk/scrollable/index.d.ts +1 -0
- package/cdk/scrollable/lib/scrollable.service.d.ts +53 -0
- package/components/autocomplete/lib/autocomplete.component.d.ts +7 -2
- package/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.d.ts +4 -5
- package/components/tab-bar/lib/tab-bar.component.d.ts +22 -44
- package/esm2022/cdk/scrollable/index.mjs +2 -0
- package/esm2022/cdk/scrollable/lib/scrollable.service.mjs +108 -0
- package/esm2022/cdk/scrollable/odx-angular-cdk-scrollable.mjs +5 -0
- package/esm2022/components/autocomplete/lib/autocomplete.component.mjs +17 -16
- package/esm2022/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.mjs +10 -17
- package/esm2022/components/tab-bar/lib/tab-bar.component.mjs +75 -114
- package/fesm2022/odx-angular-cdk-scrollable.mjs +115 -0
- package/fesm2022/odx-angular-cdk-scrollable.mjs.map +1 -0
- package/fesm2022/odx-angular-components-autocomplete.mjs +16 -15
- package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/odx-angular-components-tab-bar.mjs +82 -128
- package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
- package/package.json +13 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @odx/angular
|
|
2
2
|
|
|
3
|
+
## 12.21.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 37cb498: Adding text to display when no options are available in the autocomplete
|
|
8
|
+
|
|
9
|
+
## 12.20.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 0bff895: Added scroll for tab bar, z-index fixed for action buttons click event handling
|
|
14
|
+
|
|
3
15
|
## 12.19.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib/scrollable.service';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ElementRef, OnDestroy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export interface ScrollableItem {
|
|
4
|
+
element: ElementRef<HTMLElement>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Service to manage scrollable items within a container, providing functionality to observe item visibility
|
|
8
|
+
* and navigate through them.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ScrollableService implements OnDestroy {
|
|
11
|
+
private intersectionObserver?;
|
|
12
|
+
private scrollContainer?;
|
|
13
|
+
/**
|
|
14
|
+
* References to the next and previous scrollable items.
|
|
15
|
+
*
|
|
16
|
+
* @type {HTMLElement | null}
|
|
17
|
+
*/
|
|
18
|
+
readonly nextItem: import("@angular/core").WritableSignal<HTMLElement | null>;
|
|
19
|
+
/**
|
|
20
|
+
* References to the previous scrollable item.
|
|
21
|
+
*
|
|
22
|
+
* @type {HTMLElement | null}
|
|
23
|
+
*/
|
|
24
|
+
readonly prevItem: import("@angular/core").WritableSignal<HTMLElement | null>;
|
|
25
|
+
/** List of currently visible items within the scroll container.
|
|
26
|
+
*
|
|
27
|
+
* @type {HTMLElement[]}
|
|
28
|
+
*/
|
|
29
|
+
readonly visibleItems: import("@angular/core").WritableSignal<HTMLElement[]>;
|
|
30
|
+
ngOnDestroy(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Starts observing the scrollable items within the specified container.
|
|
33
|
+
*
|
|
34
|
+
* @param {ElementRef<HTMLElement>} scrollContainer - The container element that holds the scrollable items.
|
|
35
|
+
* @param {readonly ScrollableItem[]} items - The list of scrollable items to observe.
|
|
36
|
+
*/
|
|
37
|
+
observe(scrollContainer: ElementRef<HTMLElement>, items: readonly ScrollableItem[]): void;
|
|
38
|
+
/**
|
|
39
|
+
* Scrolls the container in the specified direction.
|
|
40
|
+
*
|
|
41
|
+
* @param {'next' | 'prev'} direction - The direction to scroll ('next' for right, 'prev' for left).
|
|
42
|
+
*/
|
|
43
|
+
scroll(direction?: 1 | -1): void;
|
|
44
|
+
/**
|
|
45
|
+
* Scrolls the active item into view within the scroll container.
|
|
46
|
+
*
|
|
47
|
+
* @param {HTMLElement | null} activeItem - The currently active item to scroll into view.
|
|
48
|
+
*/
|
|
49
|
+
scrollActiveItemIntoView(activeItem: HTMLElement | null): void;
|
|
50
|
+
private observeVisibility;
|
|
51
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScrollableService, never>;
|
|
52
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ScrollableService>;
|
|
53
|
+
}
|
|
@@ -24,6 +24,11 @@ export declare class AutocompleteComponent<T = unknown> extends AutocompleteCont
|
|
|
24
24
|
* @type {QueryList<AutocompleteOptionComponent<T>> | undefined}
|
|
25
25
|
*/
|
|
26
26
|
options?: QueryList<AutocompleteOptionComponent<T>>;
|
|
27
|
+
/** Text to display when no options are found.
|
|
28
|
+
*
|
|
29
|
+
* @type {string | null}
|
|
30
|
+
*/
|
|
31
|
+
notFoundText: import("@angular/core").InputSignal<string | null>;
|
|
27
32
|
/**
|
|
28
33
|
* The search field input control.
|
|
29
34
|
*
|
|
@@ -50,11 +55,11 @@ export declare class AutocompleteComponent<T = unknown> extends AutocompleteCont
|
|
|
50
55
|
protected clickOutside(): void;
|
|
51
56
|
protected updateDropdownState(): void;
|
|
52
57
|
protected handleClickEvent(): void;
|
|
53
|
-
protected handleKeyboardEvent(event: KeyboardEvent): void
|
|
58
|
+
protected handleKeyboardEvent(event: KeyboardEvent): Promise<void>;
|
|
54
59
|
protected activateSelectedOption(): void;
|
|
55
60
|
protected onDropdownClosed(): void;
|
|
56
61
|
private updateSearchField;
|
|
57
62
|
private blurSelectSearchField;
|
|
58
63
|
static ɵfac: i0.ɵɵFactoryDeclaration<AutocompleteComponent<any>, never>;
|
|
59
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AutocompleteComponent<any>, "odx-autocomplete", never, {}, {}, ["searchField", "options"], ["input[odxAutocompleteControl]", "*"], true, [{ directive: typeof i1.ClickOutsideDirective; inputs: {}; outputs: {}; }]>;
|
|
64
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AutocompleteComponent<any>, "odx-autocomplete", never, { "notFoundText": { "alias": "notFoundText"; "required": false; "isSignal": true; }; }, {}, ["searchField", "options"], ["input[odxAutocompleteControl]", "*"], true, [{ directive: typeof i1.ClickOutsideDirective; inputs: {}; outputs: {}; }]>;
|
|
60
65
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Highlightable } from '@angular/cdk/a11y';
|
|
2
|
-
import { ElementRef,
|
|
2
|
+
import { ElementRef, OnInit } from '@angular/core';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
/**
|
|
5
5
|
* Represents an individual tab item in a tab bar interface, providing functionalities
|
|
@@ -27,13 +27,13 @@ export declare class TabBarItemComponent implements Highlightable, OnInit {
|
|
|
27
27
|
* @type {boolean}
|
|
28
28
|
* @default false
|
|
29
29
|
*/
|
|
30
|
-
closable: boolean
|
|
30
|
+
closable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
31
31
|
/**
|
|
32
32
|
* Event emitter that fires when the tab is closed. It emits the instance of the tab item component.
|
|
33
33
|
*
|
|
34
34
|
* @emits {TabBarItemComponent}
|
|
35
35
|
*/
|
|
36
|
-
tabClose:
|
|
36
|
+
tabClose: import("@angular/core").OutputEmitterRef<TabBarItemComponent>;
|
|
37
37
|
ngOnInit(): void;
|
|
38
38
|
/**
|
|
39
39
|
* Sets the tab as active and applies corresponding styles. This method is part of the
|
|
@@ -48,6 +48,5 @@ export declare class TabBarItemComponent implements Highlightable, OnInit {
|
|
|
48
48
|
protected onClick(): void;
|
|
49
49
|
protected handleClose(event: Event): void;
|
|
50
50
|
static ɵfac: i0.ɵɵFactoryDeclaration<TabBarItemComponent, never>;
|
|
51
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TabBarItemComponent, "odx-tab-bar-item", never, { "closable": { "alias": "closable"; "required": false; }; }, { "tabClose": "tabClose"; }, never, ["odx-icon", "*"], true, never>;
|
|
52
|
-
static ngAcceptInputType_closable: unknown;
|
|
51
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TabBarItemComponent, "odx-tab-bar-item", never, { "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, { "tabClose": "tabClose"; }, never, ["odx-icon", "*"], true, never>;
|
|
53
52
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
2
|
-
import {
|
|
2
|
+
import { ElementRef } from '@angular/core';
|
|
3
3
|
import { TabBarItemComponent } from './components';
|
|
4
4
|
import { TabChangeEvent } from './models';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -13,30 +13,18 @@ import * as i0 from "@angular/core";
|
|
|
13
13
|
* making it accessible and user-friendly. Additionally, it handles overflow with navigational arrows,
|
|
14
14
|
* allowing for a smooth user experience even with a large number of tabs.
|
|
15
15
|
*/
|
|
16
|
-
export declare class TabBarComponent
|
|
17
|
-
private readonly changeDetector;
|
|
16
|
+
export declare class TabBarComponent {
|
|
18
17
|
private readonly takeUntilDestroyed;
|
|
19
|
-
private readonly
|
|
20
|
-
protected
|
|
21
|
-
protected
|
|
22
|
-
protected
|
|
23
|
-
protected
|
|
24
|
-
protected
|
|
18
|
+
private readonly scrollableService;
|
|
19
|
+
protected readonly nextTab: import("@angular/core").WritableSignal<HTMLElement | null>;
|
|
20
|
+
protected readonly prevTab: import("@angular/core").WritableSignal<HTMLElement | null>;
|
|
21
|
+
protected readonly tabs: import("@angular/core").Signal<readonly TabBarItemComponent[]>;
|
|
22
|
+
protected readonly activeItem: import("@angular/core").Signal<TabBarItemComponent | null>;
|
|
23
|
+
protected readonly keyManager: ActiveDescendantKeyManager<TabBarItemComponent>;
|
|
24
|
+
protected readonly scrollContainerElement: import("@angular/core").Signal<ElementRef<HTMLElement>>;
|
|
25
25
|
readonly element: ElementRef<HTMLElement>;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* @type {boolean}
|
|
30
|
-
*/
|
|
31
|
-
overflowLeft: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Indicates whether the tab bar has overflowed to the right.
|
|
34
|
-
*
|
|
35
|
-
* @type {boolean}
|
|
36
|
-
*/
|
|
37
|
-
overflowRight: boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Gets or sets the index of the currently selected tab. Use this property to programmatically
|
|
27
|
+
* Index of the currently selected tab. Use this property to programmatically
|
|
40
28
|
* change the active tab. It responds to changes by updating the active state of the corresponding
|
|
41
29
|
* tab item and adjusting the view if necessary.
|
|
42
30
|
*
|
|
@@ -47,7 +35,7 @@ export declare class TabBarComponent implements AfterViewInit {
|
|
|
47
35
|
* <odx-tab-bar [selectedIndex]="1"></odx-tab-bar>
|
|
48
36
|
* ```
|
|
49
37
|
*/
|
|
50
|
-
|
|
38
|
+
selectedIndex: import("@angular/core").ModelSignal<number>;
|
|
51
39
|
/**
|
|
52
40
|
* An EventEmitter that emits whenever a new tab is selected. It provides the `TabChangeEvent`
|
|
53
41
|
* which contains the index of the newly selected tab and the instance of the corresponding
|
|
@@ -65,35 +53,25 @@ export declare class TabBarComponent implements AfterViewInit {
|
|
|
65
53
|
* }
|
|
66
54
|
* ```
|
|
67
55
|
*/
|
|
68
|
-
selectedTabChanged:
|
|
69
|
-
|
|
56
|
+
selectedTabChanged: import("@angular/core").OutputEmitterRef<TabChangeEvent>;
|
|
57
|
+
constructor();
|
|
70
58
|
/**
|
|
71
|
-
* Activates the specified tab item.
|
|
59
|
+
* Activates the specified tab item, making it the currently selected tab.
|
|
60
|
+
* If the item is already active, no action is taken.
|
|
72
61
|
*
|
|
73
|
-
* @param {TabBarItemComponent | null} item - The tab item to activate.
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* ```ts
|
|
77
|
-
* // Activate the first tab item
|
|
78
|
-
* tabBar.activateItem(tabItems[0]);
|
|
79
|
-
*
|
|
80
|
-
* // Clear the active item
|
|
81
|
-
* tabBar.activateItem(null);
|
|
82
|
-
* ```
|
|
62
|
+
* @param {TabBarItemComponent | null} item - The tab item to activate.
|
|
83
63
|
*/
|
|
84
64
|
activateItem(item?: TabBarItemComponent | null): void;
|
|
85
65
|
/**
|
|
86
|
-
*
|
|
87
|
-
* If the
|
|
66
|
+
* Fires when the specified tab item is removed from the tab bar.
|
|
67
|
+
* If the item is currently active, the previous tab is activated.
|
|
88
68
|
*
|
|
89
|
-
* @param {TabBarItemComponent} item - The item to
|
|
69
|
+
* @param {TabBarItemComponent} item - The tab item to remove.
|
|
90
70
|
*/
|
|
91
71
|
removeItem(item: TabBarItemComponent): void;
|
|
92
72
|
protected onKeydown(event: KeyboardEvent): void;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
private activeItemChange;
|
|
73
|
+
protected onFocused(): void;
|
|
74
|
+
protected scrollTabs(direction?: 1 | -1): void;
|
|
96
75
|
static ɵfac: i0.ɵɵFactoryDeclaration<TabBarComponent, never>;
|
|
97
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TabBarComponent, "odx-tab-bar", never, { "selectedIndex": { "alias": "selectedIndex"; "required": false; }; }, { "selectedTabChanged": "selectedTabChanged"; }, ["tabs"], ["*"], true, never>;
|
|
98
|
-
static ngAcceptInputType_selectedIndex: unknown;
|
|
76
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TabBarComponent, "odx-tab-bar", never, { "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; "selectedTabChanged": "selectedTabChanged"; }, ["tabs"], ["*"], true, never>;
|
|
99
77
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './lib/scrollable.service';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL3Njcm9sbGFibGUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9zY3JvbGxhYmxlLnNlcnZpY2UnO1xuIl19
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Injectable, signal } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Service to manage scrollable items within a container, providing functionality to observe item visibility
|
|
5
|
+
* and navigate through them.
|
|
6
|
+
*/
|
|
7
|
+
export class ScrollableService {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* References to the next and previous scrollable items.
|
|
11
|
+
*
|
|
12
|
+
* @type {HTMLElement | null}
|
|
13
|
+
*/
|
|
14
|
+
this.nextItem = signal(null);
|
|
15
|
+
/**
|
|
16
|
+
* References to the previous scrollable item.
|
|
17
|
+
*
|
|
18
|
+
* @type {HTMLElement | null}
|
|
19
|
+
*/
|
|
20
|
+
this.prevItem = signal(null);
|
|
21
|
+
/** List of currently visible items within the scroll container.
|
|
22
|
+
*
|
|
23
|
+
* @type {HTMLElement[]}
|
|
24
|
+
*/
|
|
25
|
+
this.visibleItems = signal([]);
|
|
26
|
+
}
|
|
27
|
+
ngOnDestroy() {
|
|
28
|
+
this.intersectionObserver?.disconnect();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Starts observing the scrollable items within the specified container.
|
|
32
|
+
*
|
|
33
|
+
* @param {ElementRef<HTMLElement>} scrollContainer - The container element that holds the scrollable items.
|
|
34
|
+
* @param {readonly ScrollableItem[]} items - The list of scrollable items to observe.
|
|
35
|
+
*/
|
|
36
|
+
observe(scrollContainer, items) {
|
|
37
|
+
this.scrollContainer = scrollContainer;
|
|
38
|
+
if (this.intersectionObserver) {
|
|
39
|
+
this.intersectionObserver.disconnect();
|
|
40
|
+
}
|
|
41
|
+
const allItems = items.map((item) => item.element.nativeElement);
|
|
42
|
+
if (!this.scrollContainer || allItems.length === 0) {
|
|
43
|
+
this.nextItem.set(null);
|
|
44
|
+
this.prevItem.set(null);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.intersectionObserver = this.observeVisibility(allItems, (visible) => {
|
|
48
|
+
let prevItem = null;
|
|
49
|
+
let nextItem = null;
|
|
50
|
+
if (visible.length > 0 && allItems.length > visible.length) {
|
|
51
|
+
const firstVisibleIndex = allItems.indexOf(visible[0]);
|
|
52
|
+
if (firstVisibleIndex > 0) {
|
|
53
|
+
prevItem = allItems[firstVisibleIndex - 1];
|
|
54
|
+
}
|
|
55
|
+
const lastVisibleIndex = allItems.indexOf(visible[visible.length - 1]);
|
|
56
|
+
if (lastVisibleIndex < allItems.length - 1) {
|
|
57
|
+
nextItem = allItems[lastVisibleIndex + 1];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
this.nextItem.set(nextItem);
|
|
61
|
+
this.prevItem.set(prevItem);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Scrolls the container in the specified direction.
|
|
66
|
+
*
|
|
67
|
+
* @param {'next' | 'prev'} direction - The direction to scroll ('next' for right, 'prev' for left).
|
|
68
|
+
*/
|
|
69
|
+
scroll(direction = 1) {
|
|
70
|
+
const container = this.scrollContainer?.nativeElement;
|
|
71
|
+
if (!container)
|
|
72
|
+
return;
|
|
73
|
+
container.scrollBy({ left: (container.clientWidth * direction) / 2 });
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Scrolls the active item into view within the scroll container.
|
|
77
|
+
*
|
|
78
|
+
* @param {HTMLElement | null} activeItem - The currently active item to scroll into view.
|
|
79
|
+
*/
|
|
80
|
+
scrollActiveItemIntoView(activeItem) {
|
|
81
|
+
if (activeItem) {
|
|
82
|
+
activeItem.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
observeVisibility(items, callback) {
|
|
86
|
+
const visibleMap = new Map();
|
|
87
|
+
const observer = new IntersectionObserver((entries) => {
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
const isVisible = entry.isIntersecting && entry.intersectionRatio >= 0.75;
|
|
90
|
+
visibleMap.set(entry.target, isVisible);
|
|
91
|
+
}
|
|
92
|
+
const visible = items.filter((item) => visibleMap.get(item));
|
|
93
|
+
this.visibleItems.set(visible);
|
|
94
|
+
callback(visible);
|
|
95
|
+
}, {
|
|
96
|
+
root: this.scrollContainer.nativeElement,
|
|
97
|
+
threshold: 1,
|
|
98
|
+
});
|
|
99
|
+
items.forEach((item) => observer.observe(item));
|
|
100
|
+
return observer;
|
|
101
|
+
}
|
|
102
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScrollableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
103
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScrollableService }); }
|
|
104
|
+
}
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScrollableService, decorators: [{
|
|
106
|
+
type: Injectable
|
|
107
|
+
}] });
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Nkay9zY3JvbGxhYmxlL3NyYy9saWIvc2Nyb2xsYWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0xRTs7O0dBR0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBS0U7Ozs7V0FJRztRQUNhLGFBQVEsR0FBRyxNQUFNLENBQXFCLElBQUksQ0FBQyxDQUFDO1FBRTVEOzs7O1dBSUc7UUFDYSxhQUFRLEdBQUcsTUFBTSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUU1RDs7O1dBR0c7UUFDYSxpQkFBWSxHQUFHLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7S0EwRjFEO0lBeEZRLFdBQVc7UUFDaEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE9BQU8sQ0FBQyxlQUF3QyxFQUFFLEtBQWdDO1FBQ3ZGLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7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SSxDQUFDLGVBQWdCLENBQUMsYUFBYTtZQUN6QyxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQ0YsQ0FBQztRQUVGLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOytHQS9HVSxpQkFBaUI7bUhBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIE9uRGVzdHJveSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nyb2xsYWJsZUl0ZW0ge1xuICBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pjtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHRvIG1hbmFnZSBzY3JvbGxhYmxlIGl0ZW1zIHdpdGhpbiBhIGNvbnRhaW5lciwgcHJvdmlkaW5nIGZ1bmN0aW9uYWxpdHkgdG8gb2JzZXJ2ZSBpdGVtIHZpc2liaWxpdHlcbiAqIGFuZCBuYXZpZ2F0ZSB0aHJvdWdoIHRoZW0uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTY3JvbGxhYmxlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBzY3JvbGxDb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvKipcbiAgICogUmVmZXJlbmNlcyB0byB0aGUgbmV4dCBhbmQgcHJldmlvdXMgc2Nyb2xsYWJsZSBpdGVtcy5cbiAgICpcbiAgICogQHR5cGUge0hUTUxFbGVtZW50IHwgbnVsbH1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuZXh0SXRlbSA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2VzIHRvIHRoZSBwcmV2aW91cyBzY3JvbGxhYmxlIGl0ZW0uXG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudCB8IG51bGx9XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJldkl0ZW0gPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICAvKiogTGlzdCBvZiBjdXJyZW50bHkgdmlzaWJsZSBpdGVtcyB3aXRoaW4gdGhlIHNjcm9sbCBjb250YWluZXIuXG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudFtdfVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpc2libGVJdGVtcyA9IHNpZ25hbDxIVE1MRWxlbWVudFtdPihbXSk7XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgb2JzZXJ2aW5nIHRoZSBzY3JvbGxhYmxlIGl0ZW1zIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50UmVmPEhUTUxFbGVtZW50Pn0gc2Nyb2xsQ29udGFpbmVyIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50IHRoYXQgaG9sZHMgdGhlIHNjcm9sbGFibGUgaXRlbXMuXG4gICAqIEBwYXJhbSB7cmVhZG9ubHkgU2Nyb2xsYWJsZUl0ZW1bXX0gaXRlbXMgLSBUaGUgbGlzdCBvZiBzY3JvbGxhYmxlIGl0ZW1zIHRvIG9ic2VydmUuXG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZShzY3JvbGxDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBpdGVtczogcmVhZG9ubHkgU2Nyb2xsYWJsZUl0ZW1bXSk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gc2Nyb2xsQ29udGFpbmVyO1xuICAgIGlmICh0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxJdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIGlmICghdGhpcy5zY3JvbGxDb250YWluZXIgfHwgYWxsSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLm5leHRJdGVtLnNldChudWxsKTtcbiAgICAgIHRoaXMucHJldkl0ZW0uc2V0KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVWaXNpYmlsaXR5KGFsbEl0ZW1zLCAodmlzaWJsZSkgPT4ge1xuICAgICAgbGV0IHByZXZJdGVtOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IG5leHRJdGVtOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgICBpZiAodmlzaWJsZS5sZW5ndGggPiAwICYmIGFsbEl0ZW1zLmxlbmd0aCA+IHZpc2libGUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZUluZGV4ID0gYWxsSXRlbXMuaW5kZXhPZih2aXNpYmxlWzBdKTtcbiAgICAgICAgaWYgKGZpcnN0VmlzaWJsZUluZGV4ID4gMCkge1xuICAgICAgICAgIHByZXZJdGVtID0gYWxsSXRlbXNbZmlyc3RWaXNpYmxlSW5kZXggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSW5kZXggPSBhbGxJdGVtcy5pbmRleE9mKHZpc2libGVbdmlzaWJsZS5sZW5ndGggLSAxXSk7XG4gICAgICAgIGlmIChsYXN0VmlzaWJsZUluZGV4IDwgYWxsSXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG5leHRJdGVtID0gYWxsSXRlbXNbbGFzdFZpc2libGVJbmRleCArIDFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmV4dEl0ZW0uc2V0KG5leHRJdGVtKTtcbiAgICAgIHRoaXMucHJldkl0ZW0uc2V0KHByZXZJdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBjb250YWluZXIgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7J25leHQnIHwgJ3ByZXYnfSBkaXJlY3Rpb24gLSBUaGUgZGlyZWN0aW9uIHRvIHNjcm9sbCAoJ25leHQnIGZvciByaWdodCwgJ3ByZXYnIGZvciBsZWZ0KS5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGwoZGlyZWN0aW9uOiAxIHwgLTEgPSAxKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zY3JvbGxDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnRhaW5lci5zY3JvbGxCeSh7IGxlZnQ6IChjb250YWluZXIuY2xpZW50V2lkdGggKiBkaXJlY3Rpb24pIC8gMiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBhY3RpdmUgaXRlbSBpbnRvIHZpZXcgd2l0aGluIHRoZSBzY3JvbGwgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50IHwgbnVsbH0gYWN0aXZlSXRlbSAtIFRoZSBjdXJyZW50bHkgYWN0aXZlIGl0ZW0gdG8gc2Nyb2xsIGludG8gdmlldy5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxBY3RpdmVJdGVtSW50b1ZpZXcoYWN0aXZlSXRlbTogSFRNTEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgIGFjdGl2ZUl0ZW0uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ2NlbnRlcicgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlVmlzaWJpbGl0eShpdGVtczogSFRNTEVsZW1lbnRbXSwgY2FsbGJhY2s6ICh2aXNpYmxlOiBIVE1MRWxlbWVudFtdKSA9PiB2b2lkKTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIge1xuICAgIGNvbnN0IHZpc2libGVNYXAgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBib29sZWFuPigpO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gPj0gMC43NTtcbiAgICAgICAgICB2aXNpYmxlTWFwLnNldChlbnRyeS50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGlzVmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmlzaWJsZSA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdmlzaWJsZU1hcC5nZXQoaXRlbSkpO1xuICAgICAgICB0aGlzLnZpc2libGVJdGVtcy5zZXQodmlzaWJsZSk7XG4gICAgICAgIGNhbGxiYWNrKHZpc2libGUpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcm9vdDogdGhpcy5zY3JvbGxDb250YWluZXIhLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IG9ic2VydmVyLm9ic2VydmUoaXRlbSkpO1xuICAgIHJldHVybiBvYnNlcnZlcjtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2R4LWFuZ3VsYXItY2RrLXNjcm9sbGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL3Njcm9sbGFibGUvc3JjL29keC1hbmd1bGFyLWNkay1zY3JvbGxhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, forwardRef, HostListener, inject, QueryList, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, forwardRef, HostListener, inject, input, QueryList, ViewEncapsulation, } from '@angular/core';
|
|
3
3
|
import { ClickOutsideDirective } from '@odx/angular';
|
|
4
4
|
import { AutocompleteControl, ODX_SEARCH_FILTER_HOST } from '@odx/angular/cdk/autocomplete-control';
|
|
5
5
|
import { DropdownDirective } from '@odx/angular/components/dropdown';
|
|
@@ -27,6 +27,11 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
27
27
|
this.defaultActiveOptionIndex = 0;
|
|
28
28
|
this.patchValueFlag = false;
|
|
29
29
|
this.clickOutsideDirective = inject(ClickOutsideDirective, { host: true });
|
|
30
|
+
/** Text to display when no options are found.
|
|
31
|
+
*
|
|
32
|
+
* @type {string | null}
|
|
33
|
+
*/
|
|
34
|
+
this.notFoundText = input(null);
|
|
30
35
|
}
|
|
31
36
|
ngAfterViewInit() {
|
|
32
37
|
if (!this.options)
|
|
@@ -83,11 +88,12 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
83
88
|
this.patchValueFlag = false;
|
|
84
89
|
return;
|
|
85
90
|
}
|
|
86
|
-
if (this.isOpen &&
|
|
87
|
-
this.closeDropdown();
|
|
88
|
-
}
|
|
89
|
-
else if (!this.isOpen && this.hasOptions) {
|
|
91
|
+
if (!this.isOpen && (this.hasOptions || !!this.notFoundText())) {
|
|
90
92
|
this.openDropdown();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (this.isOpen && !this.hasOptions && !this.notFoundText()) {
|
|
96
|
+
this.closeDropdown();
|
|
91
97
|
}
|
|
92
98
|
}
|
|
93
99
|
handleClickEvent() {
|
|
@@ -102,7 +108,7 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
102
108
|
this.openDropdown();
|
|
103
109
|
}
|
|
104
110
|
}
|
|
105
|
-
handleKeyboardEvent(event) {
|
|
111
|
+
async handleKeyboardEvent(event) {
|
|
106
112
|
if (this.isReadonly || this.isDisabled)
|
|
107
113
|
return;
|
|
108
114
|
if (event.key === 'Escape') {
|
|
@@ -125,11 +131,6 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
125
131
|
if (!this.isOpen && event.key === 'Tab') {
|
|
126
132
|
return;
|
|
127
133
|
}
|
|
128
|
-
deferFn(() => {
|
|
129
|
-
if (!this.isOpen && this.hasOptions) {
|
|
130
|
-
this.openDropdown();
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
134
|
this.keyManager?.onKeydown(event);
|
|
134
135
|
}
|
|
135
136
|
activateSelectedOption() {
|
|
@@ -149,7 +150,7 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
149
150
|
this.searchField?.blur();
|
|
150
151
|
}
|
|
151
152
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
152
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AutocompleteComponent, isStandalone: true, selector: "odx-autocomplete", host: { listeners: { "click": "handleClickEvent()", "keydown": "handleKeyboardEvent($event)" } }, providers: [
|
|
153
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AutocompleteComponent, isStandalone: true, selector: "odx-autocomplete", inputs: { notFoundText: { classPropertyName: "notFoundText", publicName: "notFoundText", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "handleClickEvent()", "keydown": "handleKeyboardEvent($event)" } }, providers: [
|
|
153
154
|
{
|
|
154
155
|
provide: AUTOCOMPLETE_CONTROL,
|
|
155
156
|
useExisting: forwardRef(() => AutocompleteComponent),
|
|
@@ -158,7 +159,7 @@ let AutocompleteComponent = class AutocompleteComponent extends AutocompleteCont
|
|
|
158
159
|
provide: ODX_SEARCH_FILTER_HOST,
|
|
159
160
|
useExisting: AUTOCOMPLETE_CONTROL,
|
|
160
161
|
},
|
|
161
|
-
], queries: [{ propertyName: "searchField", first: true, predicate: AutocompleteInputControlDirective, descendants: true }, { propertyName: "options", predicate: AutocompleteOptionComponent, descendants: true }], usesInheritance: true, hostDirectives: [{ directive: i1.ClickOutsideDirective }], ngImport: i0, template: "<div\n aria-haspopup=\"listbox\"\n class=\"odx-autocomplete__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"dropdownReferenceElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n [odxDropdownOpenTrigger]=\"[]\"\n [odxDropdownClickOutsideActive]=\"false\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownAfterOpen)=\"onDropdownOpened()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n>\n <ng-content select=\"input[odxAutocompleteControl]\" />\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n @if (hasOptions) {\n <ng-content />\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: LoadingSpinnerModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
162
|
+
], queries: [{ propertyName: "searchField", first: true, predicate: AutocompleteInputControlDirective, descendants: true }, { propertyName: "options", predicate: AutocompleteOptionComponent, descendants: true }], usesInheritance: true, hostDirectives: [{ directive: i1.ClickOutsideDirective }], ngImport: i0, template: "<div\n aria-haspopup=\"listbox\"\n class=\"odx-autocomplete__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"dropdownReferenceElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n [odxDropdownOpenTrigger]=\"[]\"\n [odxDropdownClickOutsideActive]=\"false\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownAfterOpen)=\"onDropdownOpened()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n>\n <ng-content select=\"input[odxAutocompleteControl]\" />\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n @if (hasOptions) {\n <ng-content />\n } @else if (!!notFoundText()) {\n <odx-autocomplete-option class=\"is-disabled\">{{ notFoundText() }}</odx-autocomplete-option>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: LoadingSpinnerModule }, { kind: "component", type: AutocompleteOptionComponent, selector: "odx-autocomplete-option" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
162
163
|
};
|
|
163
164
|
AutocompleteComponent = __decorate([
|
|
164
165
|
CSSComponent('autocomplete')
|
|
@@ -166,7 +167,7 @@ AutocompleteComponent = __decorate([
|
|
|
166
167
|
export { AutocompleteComponent };
|
|
167
168
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
168
169
|
type: Component,
|
|
169
|
-
args: [{ standalone: true, selector: 'odx-autocomplete', imports: [DropdownDirective, LoadingSpinnerModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
|
170
|
+
args: [{ standalone: true, selector: 'odx-autocomplete', imports: [DropdownDirective, LoadingSpinnerModule, AutocompleteOptionComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
|
170
171
|
{
|
|
171
172
|
provide: AUTOCOMPLETE_CONTROL,
|
|
172
173
|
useExisting: forwardRef(() => AutocompleteComponent),
|
|
@@ -175,7 +176,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
175
176
|
provide: ODX_SEARCH_FILTER_HOST,
|
|
176
177
|
useExisting: AUTOCOMPLETE_CONTROL,
|
|
177
178
|
},
|
|
178
|
-
], hostDirectives: [ClickOutsideDirective], template: "<div\n aria-haspopup=\"listbox\"\n class=\"odx-autocomplete__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"dropdownReferenceElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n [odxDropdownOpenTrigger]=\"[]\"\n [odxDropdownClickOutsideActive]=\"false\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownAfterOpen)=\"onDropdownOpened()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n>\n <ng-content select=\"input[odxAutocompleteControl]\" />\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n @if (hasOptions) {\n <ng-content />\n }\n </div>\n</ng-template>\n" }]
|
|
179
|
+
], hostDirectives: [ClickOutsideDirective], template: "<div\n aria-haspopup=\"listbox\"\n class=\"odx-autocomplete__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"dropdownReferenceElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n [odxDropdownOpenTrigger]=\"[]\"\n [odxDropdownClickOutsideActive]=\"false\"\n (odxDropdownBeforeOpen)=\"onDropdownOpen()\"\n (odxDropdownAfterOpen)=\"onDropdownOpened()\"\n (odxDropdownBeforeClose)=\"onDropdownClose()\"\n (odxDropdownAfterClose)=\"onDropdownClosed()\"\n>\n <ng-content select=\"input[odxAutocompleteControl]\" />\n</div>\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n @if (hasOptions) {\n <ng-content />\n } @else if (!!notFoundText()) {\n <odx-autocomplete-option class=\"is-disabled\">{{ notFoundText() }}</odx-autocomplete-option>\n }\n </div>\n</ng-template>\n" }]
|
|
179
180
|
}], propDecorators: { options: [{
|
|
180
181
|
type: ContentChildren,
|
|
181
182
|
args: [AutocompleteOptionComponent, { descendants: true, emitDistinctChangesOnly: true }]
|
|
@@ -189,4 +190,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
189
190
|
type: HostListener,
|
|
190
191
|
args: ['keydown', ['$event']]
|
|
191
192
|
}] } });
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9zcmMvbGliL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9hdXRvY29tcGxldGUvc3JjL2xpYi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFFakU7Ozs7Ozs7O0dBUUc7QUFxQkks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RHpCLFlBQVk7dUJBQUMsT0FBTztnQkFnQlgsbUJBQW1CO3NCQUQ1QixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDbGlja091dHNpZGVEaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlQ29udHJvbCwgT0RYX1NFQVJDSF9GSUxURVJfSE9TVCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvYXV0b2NvbXBsZXRlLWNvbnRyb2wnO1xuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBMb2FkaW5nU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgZGVmZXJGbiB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVVUT0NPTVBMRVRFX0NPTlRST0wgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS50b2tlbnMnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUlucHV0Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBhdXRvY29tcGxldGUgY29tcG9uZW50IHRoYXQgcHJvdmlkZXMgdXNlciBpbnRlcmZhY2UgZm9yIGEgZHJvcGRvd24gbGlzdCB0byBzZWxlY3QgZnJvbSBhcyB1c2VycyB0eXBlLlxuICogSXQgZXh0ZW5kcyBgQXV0b2NvbXBsZXRlQ29udHJvbGAsIGludGVncmF0aW5nIGN1c3RvbSBsb2dpYyBmb3IgaGFuZGxpbmcga2V5Ym9hcmQgYW5kIG1vdXNlIGV2ZW50cyxcbiAqIG1hbmFnaW5nIHRoZSBkcm9wZG93biBzdGF0ZSwgYW5kIHVwZGF0aW5nIHRoZSBhc3NvY2lhdGVkIHNlYXJjaCBmaWVsZC5cbiAqXG4gKiBAc2VlIHtBdXRvY29tcGxldGVDb250cm9sfVxuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGhhbmRsZWQgYnkgdGhlIGF1dG9jb21wbGV0ZS5cbiAqL1xuQENTU0NvbXBvbmVudCgnYXV0b2NvbXBsZXRlJylcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ29keC1hdXRvY29tcGxldGUnLFxuICBpbXBvcnRzOiBbRHJvcGRvd25EaXJlY3RpdmUsIExvYWRpbmdTcGlubmVyTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBVVRPQ09NUExFVEVfQ09OVFJPTCxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBPRFhfU0VBUkNIX0ZJTFRFUl9IT1NULFxuICAgICAgdXNlRXhpc3Rpbmc6IEFVVE9DT01QTEVURV9DT05UUk9MLFxuICAgIH0sXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbQ2xpY2tPdXRzaWRlRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ29tcG9uZW50PFQgPSB1bmtub3duPiBleHRlbmRzIEF1dG9jb21wbGV0ZUNvbnRyb2w8VCB8IG51bGw+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgcHJpdmF0ZSBwYXRjaFZhbHVlRmxhZyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xpY2tPdXRzaWRlRGlyZWN0aXZlID0gaW5qZWN0KENsaWNrT3V0c2lkZURpcmVjdGl2ZSwgeyBob3N0OiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBhdXRvY29tcGxldGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge1F1ZXJ5TGlzdDxBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQ8VD4+IHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUsIGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiB0cnVlIH0pXG4gIHB1YmxpYyBvcHRpb25zPzogUXVlcnlMaXN0PEF1dG9jb21wbGV0ZU9wdGlvbkNvbXBvbmVudDxUPj47XG5cbiAgLyoqXG4gICAqIFRoZSBzZWFyY2ggZmllbGQgaW5wdXQgY29udHJvbC5cbiAgICpcbiAgICogQHR5cGUge0F1dG9jb21wbGV0ZUlucHV0Q29udHJvbERpcmVjdGl2ZSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoQXV0b2NvbXBsZXRlSW5wdXRDb250cm9sRGlyZWN0aXZlKVxuICBwdWJsaWMgc2VhcmNoRmllbGQ/OiBBdXRvY29tcGxldGVJbnB1dENvbnRyb2xEaXJlY3RpdmU7XG5cbiAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnZhbHVlKSB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuaW5pdEtleU1hbmFnZXIodGhpcy5vcHRpb25zLnRvQXJyYXkoKSk7XG4gICAgdGhpcy5oYW5kbGVRdWVyeUxpc3RPcHRpb24odGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmhhbmRsZVNlYXJjaEZpZWxkQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyBhbiBvcHRpb24sIHVwZGF0ZXMgdGhlIHZhbHVlLCB1cGRhdGVzIHRoZSBzZWFyY2ggZmllbGQgZGlzcGxheSxcbiAgICogZW1pdHMgdGhlIHNlbGVjdGVkIHZhbHVlLCBhbmQgY2xvc2VzIHRoZSBkcm9wZG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQ8VD4gfCBudWxsfSBvcHRpb24gLSBUaGUgb3B0aW9uIGNvbXBvbmVudCB0byBzZWxlY3QuIElmIHRoZSBvcHRpb24gaXMgdW5kZWZpbmVkIG9yIGl0cyB2YWx1ZSBpcyB1bmRlZmluZWQsXG4gICAqIG5vIGFjdGlvbiBpcyB0YWtlbi5cbiAgICovXG4gIHB1YmxpYyBzZWxlY3RPcHRpb24ob3B0aW9uPzogQXV0b2NvbXBsZXRlT3B0aW9uQ29tcG9uZW50PFQ+IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghb3B0aW9uPy52YWx1ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy51cGRhdGVWYWx1ZShvcHRpb24udmFsdWUpO1xuICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGQob3B0aW9uLnZhbHVlKTtcblxuICAgIHRoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChvcHRpb24udmFsdWUpO1xuXG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzZWFyY2ggZmllbGQgdG8gaXRzIGluaXRpYWwgc3RhdGUgYW5kIHVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSBhdXRvY29tcGxldGVcbiAgICogdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGluaXRpYWwgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgcmVzZXRTZWFyY2hGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCcnIGFzIFQpO1xuICAgIHRoaXMuc2VhcmNoRmllbGQ/LnJlc2V0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUXVlcnlMaXN0T3B0aW9uKG9wdGlvbnM6IFF1ZXJ5TGlzdDxBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQ8VD4+KTogdm9pZCB7XG4gICAgb3B0aW9ucy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IGRlZmVyRm4oKCkgPT4gdGhpcy51cGRhdGVEcm9wZG93blN0YXRlKCkpKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNPcGVuKSxcbiAgICAgICAgdGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkZWZlckZuKCgpID0+IHRoaXMuYWN0aXZhdGVTZWxlY3RlZE9wdGlvbigpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaEZpZWxkQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkPy52YWx1ZUNoYW5nZSQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50cmlnZ2VyQ29udHJvbGxlckNoYW5nZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDbGlja091dHNpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5jbGlja091dHNpZGVEaXJlY3RpdmUub2R4Q2xpY2tPdXRzaWRlLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tPdXRzaWRlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsaWNrT3V0c2lkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB0aGlzLmJsdXJTZWxlY3RTZWFyY2hGaWVsZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZURyb3Bkb3duU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGF0Y2hWYWx1ZUZsYWcpIHtcbiAgICAgIHRoaXMucGF0Y2hWYWx1ZUZsYWcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc09wZW4gJiYgIXRoaXMuaGFzT3B0aW9ucykge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc09wZW4gJiYgdGhpcy5oYXNPcHRpb25zKSB7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgIHRoaXMuYmx1clNlbGVjdFNlYXJjaEZpZWxkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNSZWFkb25seSB8fCB0aGlzLmlzRGlzYWJsZWQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5pc09wZW4gJiYgdGhpcy5oYXNPcHRpb25zKSB7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmlzUmVhZG9ubHkgfHwgdGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5yZXNldFNlYXJjaEZpZWxkKCk7XG4gICAgICB0aGlzLmJsdXJTZWxlY3RTZWFyY2hGaWVsZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiB0aGlzLmhhc09wdGlvbnMpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3RPcHRpb24odGhpcy5rZXlNYW5hZ2VyPy5hY3RpdmVJdGVtIGFzIEF1dG9jb21wbGV0ZU9wdGlvbkNvbXBvbmVudDxUPiB8IHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICB0aGlzLm9wdGlvblNlbGVjdGVkLmVtaXQoKHRoaXMudmFsdWUgPz8gJycpIGFzIFQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc09wZW4gJiYgZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlZmVyRm4oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzT3BlbiAmJiB0aGlzLmhhc09wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMua2V5TWFuYWdlcj8ub25LZXlkb3duKGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY3RpdmF0ZVNlbGVjdGVkT3B0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMua2V5TWFuYWdlcj8uc2V0QWN0aXZlSXRlbSh0aGlzLmRlZmF1bHRBY3RpdmVPcHRpb25JbmRleCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgb25Ecm9wZG93bkNsb3NlZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbkRyb3Bkb3duQ2xvc2VkKCk7XG4gICAgIXRoaXMuc2VhcmNoRmllbGQ/Lm5hdGl2ZUVsZW1lbnRWYWx1ZSAmJiB0aGlzLmJsdXJTZWxlY3RTZWFyY2hGaWVsZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hGaWVsZCh2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWFyY2hGaWVsZCkgcmV0dXJuO1xuICAgIHRoaXMucGF0Y2hWYWx1ZUZsYWcgPSB0cnVlO1xuICAgIHRoaXMuc2VhcmNoRmllbGQubmF0aXZlRWxlbWVudFZhbHVlID0gdGhpcy5zdHJpbmdpZnk/Lih2YWx1ZSkgPz8gKHZhbHVlIGFzIHN0cmluZyk7XG4gIH1cblxuICBwcml2YXRlIGJsdXJTZWxlY3RTZWFyY2hGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkPy5ibHVyKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICBjbGFzcz1cIm9keC1hdXRvY29tcGxldGVfX3RyaWdnZXJcIlxuICBbb2R4RHJvcGRvd25dPVwiZHJvcGRvd25Db250ZW50XCJcbiAgW29keERyb3Bkb3duRGlzYWJsZWRdPVwiaXNEaXNhYmxlZCB8fCBpc1JlYWRvbmx5XCJcbiAgW29keERyb3Bkb3duT3B0aW9uc109XCJ7IG1hdGNoUmVmZXJlbmNlV2lkdGg6IHRydWUsIG9mZnNldDogNCwgb3V0ZXJQYWRkaW5nOiAxMCwgcG9zaXRpb246ICdib3R0b20tc3RhcnQnIH1cIlxuICBbb2R4RHJvcGRvd25SZWZlcmVuY2VFbGVtZW50XT1cImRyb3Bkb3duUmVmZXJlbmNlRWxlbWVudFwiXG4gIFtvZHhEcm9wZG93blNob3dMb2FkZXJdPVwiaXNMb2FkaW5nXCJcbiAgW29keERyb3Bkb3duT3BlblRyaWdnZXJdPVwiW11cIlxuICBbb2R4RHJvcGRvd25DbGlja091dHNpZGVBY3RpdmVdPVwiZmFsc2VcIlxuICAob2R4RHJvcGRvd25CZWZvcmVPcGVuKT1cIm9uRHJvcGRvd25PcGVuKClcIlxuICAob2R4RHJvcGRvd25BZnRlck9wZW4pPVwib25Ecm9wZG93bk9wZW5lZCgpXCJcbiAgKG9keERyb3Bkb3duQmVmb3JlQ2xvc2UpPVwib25Ecm9wZG93bkNsb3NlKClcIlxuICAob2R4RHJvcGRvd25BZnRlckNsb3NlKT1cIm9uRHJvcGRvd25DbG9zZWQoKVwiXG4+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImlucHV0W29keEF1dG9jb21wbGV0ZUNvbnRyb2xdXCIgLz5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNkcm9wZG93bkNvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJvZHgtZHJvcGRvd25fX29wdGlvbi1saXN0XCIgcm9sZT1cImxpc3Rib3hcIj5cbiAgICBAaWYgKGhhc09wdGlvbnMpIHtcbiAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9zcmMvbGliL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9hdXRvY29tcGxldGUvc3JjL2xpYi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7O0FBRWpFOzs7Ozs7OztH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LFlBQVk7dUJBQUMsaUNBQWlDO2dCQStFckMsZ0JBQWdCO3NCQUR6QixZQUFZO3VCQUFDLE9BQU87Z0JBZ0JMLG1CQUFtQjtzQkFEbEMsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENsaWNrT3V0c2lkZURpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb250cm9sLCBPRFhfU0VBUkNIX0ZJTFRFUl9IT1NUIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9hdXRvY29tcGxldGUtY29udHJvbCc7XG5pbXBvcnQgeyBEcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IExvYWRpbmdTcGlubmVyTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBkZWZlckZuIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBVVRPQ09NUExFVEVfQ09OVFJPTCB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLnRva2Vucyc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlSW5wdXRDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGF1dG9jb21wbGV0ZSBjb21wb25lbnQgdGhhdCBwcm92aWRlcyB1c2VyIGludGVyZmFjZSBmb3IgYSBkcm9wZG93biBsaXN0IHRvIHNlbGVjdCBmcm9tIGFzIHVzZXJzIHR5cGUuXG4gKiBJdCBleHRlbmRzIGBBdXRvY29tcGxldGVDb250cm9sYCwgaW50ZWdyYXRpbmcgY3VzdG9tIGxvZ2ljIGZvciBoYW5kbGluZyBrZXlib2FyZCBhbmQgbW91c2UgZXZlbnRzLFxuICogbWFuYWdpbmcgdGhlIGRyb3Bkb3duIHN0YXRlLCBhbmQgdXBkYXRpbmcgdGhlIGFzc29jaWF0ZWQgc2VhcmNoIGZpZWxkLlxuICpcbiAqIEBzZWUge0F1dG9jb21wbGV0ZUNvbnRyb2x9XG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgaGFuZGxlZCBieSB0aGUgYXV0b2NvbXBsZXRlLlxuICovXG5AQ1NTQ29tcG9uZW50KCdhdXRvY29tcGxldGUnKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnb2R4LWF1dG9jb21wbGV0ZScsXG4gIGltcG9ydHM6IFtEcm9wZG93bkRpcmVjdGl2ZSwgTG9hZGluZ1NwaW5uZXJNb2R1bGUsIEF1dG9jb21wbGV0ZU9wdGlvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVVUT0NPTVBMRVRFX0NPTlRST0wsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBdXRvY29tcGxldGVDb21wb25lbnQpLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogT0RYX1NFQVJDSF9GSUxURVJfSE9TVCxcbiAgICAgIHVzZUV4aXN0aW5nOiBBVVRPQ09NUExFVEVfQ09OVFJPTCxcbiAgICB9LFxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW0NsaWNrT3V0c2lkZURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZUNvbXBvbmVudDxUID0gdW5rbm93bj4gZXh0ZW5kcyBBdXRvY29tcGxldGVDb250cm9sPFQgfCBudWxsPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gIHByaXZhdGUgcGF0Y2hWYWx1ZUZsYWcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNsaWNrT3V0c2lkZURpcmVjdGl2ZSA9IGluamVjdChDbGlja091dHNpZGVEaXJlY3RpdmUsIHsgaG9zdDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgYXV0b2NvbXBsZXRlIG9wdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtRdWVyeUxpc3Q8QXV0b2NvbXBsZXRlT3B0aW9uQ29tcG9uZW50PFQ+PiB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oQXV0b2NvbXBsZXRlT3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlLCBlbWl0RGlzdGluY3RDaGFuZ2VzT25seTogdHJ1ZSB9KVxuICBwdWJsaWMgb3B0aW9ucz86IFF1ZXJ5TGlzdDxBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQ8VD4+O1xuXG4gIC8qKiBUZXh0IHRvIGRpc3BsYXkgd2hlbiBubyBvcHRpb25zIGFyZSBmb3VuZC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IG51bGx9XG4gICAqL1xuICBwdWJsaWMgbm90Rm91bmRUZXh0ID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWFyY2ggZmllbGQgaW5wdXQgY29udHJvbC5cbiAgICpcbiAgICogQHR5cGUge0F1dG9jb21wbGV0ZUlucHV0Q29udHJvbERpcmVjdGl2ZSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoQXV0b2NvbXBsZXRlSW5wdXRDb250cm9sRGlyZWN0aXZlKVxuICBwdWJsaWMgc2VhcmNoRmllbGQ/OiBBdXRvY29tcGxldGVJbnB1dENvbnRyb2xEaXJlY3RpdmU7XG5cbiAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnZhbHVlKSB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuaW5pdEtleU1hbmFnZXIodGhpcy5vcHRpb25zLnRvQXJyYXkoKSk7XG4gICAgdGhpcy5oYW5kbGVRdWVyeUxpc3RPcHRpb24odGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmhhbmRsZVNlYXJjaEZpZWxkQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyBhbiBvcHRpb24sIHVwZGF0ZXMgdGhlIHZhbHVlLCB1cGRhdGVzIHRoZSBzZWFyY2ggZmllbGQgZGlzcGxheSxcbiAgICogZW1pdHMgdGhlIHNlbGVjdGVkIHZhbHVlLCBhbmQgY2xvc2VzIHRoZSBkcm9wZG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQ8VD4gfCBudWxsfSBvcHRpb24gLSBUaGUgb3B0aW9uIGNvbXBvbmVudCB0byBzZWxlY3QuIElmIHRoZSBvcHRpb24gaXMgdW5kZWZpbmVkIG9yIGl0cyB2YWx1ZSBpcyB1bmRlZmluZWQsXG4gICAqIG5vIGFjdGlvbiBpcyB0YWtlbi5cbiAgICovXG4gIHB1YmxpYyBzZWxlY3RPcHRpb24ob3B0aW9uPzogQXV0b2NvbXBsZXRlT3B0aW9uQ29tcG9uZW50PFQ+IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghb3B0aW9uPy52YWx1ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy51cGRhdGVWYWx1ZShvcHRpb24udmFsdWUpO1xuICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGQob3B0aW9uLnZhbHVlKTtcblxuICAgIHRoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChvcHRpb24udmFsdWUpO1xuXG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzZWFyY2ggZmllbGQgdG8gaXRzIGluaXRpYWwgc3RhdGUgYW5kIHVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSBhdXRvY29tcGxldGVcbiAgICogdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGluaXRpYWwgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgcmVzZXRTZWFyY2hGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCcnIGFzIFQpO1xuICAgIHRoaXMuc2VhcmNoRmllbGQ/LnJlc2V0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUXVlcnlMaXN0T3B0aW9uKG9wdGlvbnM6IFF1ZXJ5TGlzdDxBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQ8VD4+KTogdm9pZCB7XG4gICAgb3B0aW9ucy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IGRlZmVyRm4oKCkgPT4gdGhpcy51cGRhdGVEcm9wZG93blN0YXRlKCkpKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNPcGVuKSxcbiAgICAgICAgdGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkZWZlckZuKCgpID0+IHRoaXMuYWN0aXZhdGVTZWxlY3RlZE9wdGlvbigpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaEZpZWxkQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkPy52YWx1ZUNoYW5nZSQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50cmlnZ2VyQ29udHJvbGxlckNoYW5nZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDbGlja091dHNpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5jbGlja091dHNpZGVEaXJlY3RpdmUub2R4Q2xpY2tPdXRzaWRlLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tPdXRzaWRlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsaWNrT3V0c2lkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB0aGlzLmJsdXJTZWxlY3RTZWFyY2hGaWVsZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZURyb3Bkb3duU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGF0Y2hWYWx1ZUZsYWcpIHtcbiAgICAgIHRoaXMucGF0Y2hWYWx1ZUZsYWcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzT3BlbiAmJiAodGhpcy5oYXNPcHRpb25zIHx8ICEhdGhpcy5ub3RGb3VuZFRleHQoKSkpIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNPcHRpb25zICYmICF0aGlzLm5vdEZvdW5kVGV4dCgpKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHByb3RlY3RlZCBoYW5kbGVDbGlja0V2ZW50KCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZyAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICB0aGlzLmJsdXJTZWxlY3RTZWFyY2hGaWVsZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUmVhZG9ubHkgfHwgdGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuaXNPcGVuICYmIHRoaXMuaGFzT3B0aW9ucykge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc1JlYWRvbmx5IHx8IHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMucmVzZXRTZWFyY2hGaWVsZCgpO1xuICAgICAgdGhpcy5ibHVyU2VsZWN0U2VhcmNoRmllbGQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc09wZW4gJiYgdGhpcy5oYXNPcHRpb25zKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0T3B0aW9uKHRoaXMua2V5TWFuYWdlcj8uYWN0aXZlSXRlbSBhcyBBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQ8VD4gfCB1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgdGhpcy5vcHRpb25TZWxlY3RlZC5lbWl0KCh0aGlzLnZhbHVlID8/ICcnKSBhcyBUKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNPcGVuICYmIGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmtleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aXZhdGVTZWxlY3RlZE9wdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmtleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0odGhpcy5kZWZhdWx0QWN0aXZlT3B0aW9uSW5kZXgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG9uRHJvcGRvd25DbG9zZWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25Ecm9wZG93bkNsb3NlZCgpO1xuICAgICF0aGlzLnNlYXJjaEZpZWxkPy5uYXRpdmVFbGVtZW50VmFsdWUgJiYgdGhpcy5ibHVyU2VsZWN0U2VhcmNoRmllbGQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoRmllbGQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoRmllbGQpIHJldHVybjtcbiAgICB0aGlzLnBhdGNoVmFsdWVGbGFnID0gdHJ1ZTtcbiAgICB0aGlzLnNlYXJjaEZpZWxkLm5hdGl2ZUVsZW1lbnRWYWx1ZSA9IHRoaXMuc3RyaW5naWZ5Py4odmFsdWUpID8/ICh2YWx1ZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyU2VsZWN0U2VhcmNoRmllbGQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hGaWVsZD8uYmx1cigpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgY2xhc3M9XCJvZHgtYXV0b2NvbXBsZXRlX190cmlnZ2VyXCJcbiAgW29keERyb3Bkb3duXT1cImRyb3Bkb3duQ29udGVudFwiXG4gIFtvZHhEcm9wZG93bkRpc2FibGVkXT1cImlzRGlzYWJsZWQgfHwgaXNSZWFkb25seVwiXG4gIFtvZHhEcm9wZG93bk9wdGlvbnNdPVwieyBtYXRjaFJlZmVyZW5jZVdpZHRoOiB0cnVlLCBvZmZzZXQ6IDQsIG91dGVyUGFkZGluZzogMTAsIHBvc2l0aW9uOiAnYm90dG9tLXN0YXJ0JyB9XCJcbiAgW29keERyb3Bkb3duUmVmZXJlbmNlRWxlbWVudF09XCJkcm9wZG93blJlZmVyZW5jZUVsZW1lbnRcIlxuICBbb2R4RHJvcGRvd25TaG93TG9hZGVyXT1cImlzTG9hZGluZ1wiXG4gIFtvZHhEcm9wZG93bk9wZW5UcmlnZ2VyXT1cIltdXCJcbiAgW29keERyb3Bkb3duQ2xpY2tPdXRzaWRlQWN0aXZlXT1cImZhbHNlXCJcbiAgKG9keERyb3Bkb3duQmVmb3JlT3Blbik9XCJvbkRyb3Bkb3duT3BlbigpXCJcbiAgKG9keERyb3Bkb3duQWZ0ZXJPcGVuKT1cIm9uRHJvcGRvd25PcGVuZWQoKVwiXG4gIChvZHhEcm9wZG93bkJlZm9yZUNsb3NlKT1cIm9uRHJvcGRvd25DbG9zZSgpXCJcbiAgKG9keERyb3Bkb3duQWZ0ZXJDbG9zZSk9XCJvbkRyb3Bkb3duQ2xvc2VkKClcIlxuPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJpbnB1dFtvZHhBdXRvY29tcGxldGVDb250cm9sXVwiIC8+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjZHJvcGRvd25Db250ZW50PlxuICA8ZGl2IGNsYXNzPVwib2R4LWRyb3Bkb3duX19vcHRpb24tbGlzdFwiIHJvbGU9XCJsaXN0Ym94XCI+XG4gICAgQGlmIChoYXNPcHRpb25zKSB7XG4gICAgICA8bmctY29udGVudCAvPlxuICAgIH0gQGVsc2UgaWYgKCEhbm90Rm91bmRUZXh0KCkpIHtcbiAgICAgIDxvZHgtYXV0b2NvbXBsZXRlLW9wdGlvbiBjbGFzcz1cImlzLWRpc2FibGVkXCI+e3sgbm90Rm91bmRUZXh0KCkgfX08L29keC1hdXRvY29tcGxldGUtb3B0aW9uPlxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|