@koobiq/components 18.18.0 → 18.19.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/actions-panel/actions-panel-config.d.ts +79 -0
- package/actions-panel/actions-panel-container.d.ts +90 -0
- package/actions-panel/actions-panel-container.scss +33 -0
- package/actions-panel/actions-panel-ref.d.ts +31 -0
- package/actions-panel/actions-panel-tokens.scss +13 -0
- package/actions-panel/actions-panel.d.ts +144 -0
- package/actions-panel/index.d.ts +5 -0
- package/actions-panel/module.d.ts +7 -0
- package/core/animation/animation.d.ts +26 -0
- package/core/form-field/form-field-ref.d.ts +4 -0
- package/core/locales/en-US.d.ts +45 -0
- package/core/locales/es-LA.d.ts +45 -0
- package/core/locales/fa-IR.d.ts +45 -0
- package/core/locales/locale-service.d.ts +315 -0
- package/core/locales/pt-BR.d.ts +45 -0
- package/core/locales/ru-RU.d.ts +45 -0
- package/core/locales/tk-TM.d.ts +45 -0
- package/core/locales/types.d.ts +6 -0
- package/core/locales/zh-CN.d.ts +45 -0
- package/core/option/option.d.ts +3 -1
- package/datepicker/calendar.component.d.ts +9 -0
- package/datepicker/datepicker-input.directive.d.ts +5 -1
- package/dl/dl.component.d.ts +3 -4
- package/dropdown/_dropdown-theme.scss +9 -10
- package/dropdown/dropdown-tokens.scss +1 -0
- package/dropdown/dropdown.component.d.ts +1 -1
- package/dropdown/dropdown.scss +5 -0
- package/dropdown/dropdown.types.d.ts +3 -1
- package/esm2022/accordion/accordion-trigger.component.mjs +1 -1
- package/esm2022/actions-panel/actions-panel-config.mjs +55 -0
- package/esm2022/actions-panel/actions-panel-container.mjs +217 -0
- package/esm2022/actions-panel/actions-panel-ref.mjs +62 -0
- package/esm2022/actions-panel/actions-panel.mjs +220 -0
- package/esm2022/actions-panel/index.mjs +6 -0
- package/esm2022/actions-panel/koobiq-components-actions-panel.mjs +5 -0
- package/esm2022/actions-panel/module.mjs +21 -0
- package/esm2022/breadcrumbs/breadcrumbs.mjs +2 -2
- package/esm2022/code-block/code-block.mjs +1 -1
- package/esm2022/core/animation/animation.mjs +29 -1
- package/esm2022/core/common-behaviors/common-module.mjs +2 -2
- package/esm2022/core/form-field/form-field-ref.mjs +1 -1
- package/esm2022/core/locales/en-US.mjs +46 -1
- package/esm2022/core/locales/es-LA.mjs +46 -1
- package/esm2022/core/locales/fa-IR.mjs +46 -1
- package/esm2022/core/locales/pt-BR.mjs +46 -1
- package/esm2022/core/locales/ru-RU.mjs +46 -1
- package/esm2022/core/locales/tk-TM.mjs +46 -1
- package/esm2022/core/locales/types.mjs +1 -1
- package/esm2022/core/locales/zh-CN.mjs +46 -1
- package/esm2022/core/option/option.mjs +10 -3
- package/esm2022/core/version.mjs +2 -2
- package/esm2022/datepicker/calendar-header.component.mjs +1 -1
- package/esm2022/datepicker/calendar.component.mjs +20 -2
- package/esm2022/datepicker/datepicker-input.directive.mjs +22 -11
- package/esm2022/datepicker/datepicker-toggle.component.mjs +1 -1
- package/esm2022/dl/dl.component.mjs +8 -7
- package/esm2022/dropdown/dropdown-item.component.mjs +1 -1
- package/esm2022/dropdown/dropdown-trigger.directive.mjs +6 -1
- package/esm2022/dropdown/dropdown.component.mjs +4 -4
- package/esm2022/dropdown/dropdown.types.mjs +1 -1
- package/esm2022/file-upload/multiple-file-upload.component.mjs +1 -1
- package/esm2022/file-upload/single-file-upload.component.mjs +1 -1
- package/esm2022/filter-bar/filter-bar-button.mjs +30 -0
- package/esm2022/filter-bar/filter-bar.mjs +168 -0
- package/esm2022/filter-bar/filter-bar.module.mjs +65 -0
- package/esm2022/filter-bar/filter-bar.types.mjs +13 -0
- package/esm2022/filter-bar/filter-refresher.mjs +34 -0
- package/esm2022/filter-bar/filter-reset.mjs +38 -0
- package/esm2022/filter-bar/filter-search.mjs +132 -0
- package/esm2022/filter-bar/filters.mjs +225 -0
- package/esm2022/filter-bar/index.mjs +2 -0
- package/esm2022/filter-bar/koobiq-components-filter-bar.mjs +5 -0
- package/esm2022/filter-bar/pipe-add.mjs +129 -0
- package/esm2022/filter-bar/pipe.directive.mjs +55 -0
- package/esm2022/filter-bar/pipes/base-pipe.mjs +106 -0
- package/esm2022/filter-bar/pipes/pipe-button.mjs +59 -0
- package/esm2022/filter-bar/pipes/pipe-date.mjs +171 -0
- package/esm2022/filter-bar/pipes/pipe-datetime.mjs +172 -0
- package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +96 -0
- package/esm2022/filter-bar/pipes/pipe-select.mjs +88 -0
- package/esm2022/filter-bar/pipes/pipe-state.mjs +45 -0
- package/esm2022/filter-bar/pipes/pipe-text.mjs +89 -0
- package/esm2022/filter-bar/pipes/pipe-title.mjs +96 -0
- package/esm2022/filter-bar/public-api.mjs +20 -0
- package/esm2022/form-field/cleaner.mjs +1 -1
- package/esm2022/form-field/form-field.mjs +13 -6
- package/esm2022/form-field/password-hint.mjs +1 -1
- package/esm2022/form-field/password-toggle.mjs +1 -1
- package/esm2022/form-field/stepper.mjs +1 -1
- package/esm2022/icon/icon-button.component.mjs +9 -9
- package/esm2022/icon/icon-item.component.mjs +10 -10
- package/esm2022/icon/icon.component.mjs +9 -12
- package/esm2022/list/list-selection.component.mjs +4 -4
- package/esm2022/modal/modal.component.mjs +1 -1
- package/esm2022/modal/modal.directive.mjs +1 -1
- package/esm2022/navbar/navbar-item.component.mjs +2 -2
- package/esm2022/overflow-items/overflow-items.mjs +129 -139
- package/esm2022/popover/popover.component.mjs +30 -10
- package/esm2022/select/select.component.mjs +3 -3
- package/esm2022/sidepanel/sidepanel-directives.mjs +2 -2
- package/esm2022/tabs/tab-header.component.mjs +1 -1
- package/esm2022/tabs/tab-nav-bar.mjs +2 -2
- package/esm2022/textarea/textarea.component.mjs +9 -5
- package/esm2022/timezone/timezone-select.component.mjs +2 -2
- package/esm2022/title/title.directive.mjs +12 -5
- package/esm2022/toast/toast.component.mjs +2 -2
- package/esm2022/tree/toggle.mjs +1 -1
- package/esm2022/tree/tree-option.component.mjs +3 -2
- package/esm2022/tree/tree-selection.component.mjs +4 -2
- package/esm2022/tree-select/tree-select.component.mjs +6 -4
- package/fesm2022/koobiq-components-accordion.mjs +1 -1
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +567 -0
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -0
- package/fesm2022/koobiq-components-breadcrumbs.mjs +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +1 -1
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +355 -5
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +40 -12
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-dl.mjs +7 -6
- package/fesm2022/koobiq-components-dl.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +9 -4
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +2 -2
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +1596 -0
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -0
- package/fesm2022/koobiq-components-form-field.mjs +16 -9
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +23 -26
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +3 -3
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +2 -2
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +2 -2
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +129 -139
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +29 -9
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +2 -2
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +2 -2
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +8 -4
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +2 -2
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +11 -4
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +1 -1
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +5 -3
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +6 -3
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/filter-bar/_filter-bar-theme.scss +61 -0
- package/filter-bar/filter-bar-button.d.ts +8 -0
- package/filter-bar/filter-bar.d.ts +55 -0
- package/filter-bar/filter-bar.module.d.ts +17 -0
- package/filter-bar/filter-bar.scss +60 -0
- package/filter-bar/filter-bar.types.d.ts +97 -0
- package/filter-bar/filter-refresher.d.ts +5 -0
- package/filter-bar/filter-refresher.scss +6 -0
- package/filter-bar/filter-reset.d.ts +11 -0
- package/filter-bar/filter-search.d.ts +25 -0
- package/filter-bar/filter-search.scss +14 -0
- package/filter-bar/filters.d.ts +72 -0
- package/filter-bar/filters.scss +92 -0
- package/filter-bar/index.d.ts +1 -0
- package/filter-bar/pipe-add.d.ts +18 -0
- package/filter-bar/pipe-add.scss +5 -0
- package/filter-bar/pipe.directive.d.ts +13 -0
- package/filter-bar/pipes/base-pipe.d.ts +40 -0
- package/filter-bar/pipes/base-pipe.scss +117 -0
- package/filter-bar/pipes/pipe-button.d.ts +13 -0
- package/filter-bar/pipes/pipe-button.scss +5 -0
- package/filter-bar/pipes/pipe-date.d.ts +41 -0
- package/filter-bar/pipes/pipe-date.scss +132 -0
- package/filter-bar/pipes/pipe-datetime.d.ts +41 -0
- package/filter-bar/pipes/pipe-multi-select.d.ts +22 -0
- package/filter-bar/pipes/pipe-multiselect.scss +15 -0
- package/filter-bar/pipes/pipe-select.d.ts +21 -0
- package/filter-bar/pipes/pipe-select.scss +3 -0
- package/filter-bar/pipes/pipe-state.d.ts +14 -0
- package/filter-bar/pipes/pipe-text.d.ts +19 -0
- package/filter-bar/pipes/pipe-title.d.ts +25 -0
- package/filter-bar/public-api.d.ts +19 -0
- package/form-field/form-field.d.ts +6 -1
- package/form-field/form-field.scss +1 -0
- package/icon/icon-button.component.d.ts +5 -3
- package/icon/icon-item.component.d.ts +5 -3
- package/icon/icon.component.d.ts +5 -4
- package/overflow-items/overflow-items.d.ts +59 -71
- package/package.json +18 -6
- package/popover/popover.component.d.ts +6 -1
- package/schematics/ng-add/index.js +5 -5
- package/select/_select-theme.scss +9 -1
- package/textarea/textarea.component.d.ts +2 -1
- package/title/title.directive.d.ts +2 -0
- package/tree-select/_tree-select-theme.scss +9 -1
|
@@ -1,71 +1,105 @@
|
|
|
1
1
|
import { SharedResizeObserver } from '@angular/cdk/observers/private';
|
|
2
|
-
import {
|
|
3
|
-
import { booleanAttribute,
|
|
4
|
-
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import { booleanAttribute, contentChild, contentChildren, Directive, ElementRef, inject, input, numberAttribute, output, Renderer2, signal } from '@angular/core';
|
|
4
|
+
import { outputToObservable, takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { debounceTime, merge, skip } from 'rxjs';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Manages the visibility of the element.
|
|
9
9
|
*
|
|
10
|
-
* @
|
|
10
|
+
* @docs-private
|
|
11
11
|
*/
|
|
12
|
-
export class
|
|
12
|
+
export class ElementVisibilityManager {
|
|
13
13
|
constructor() {
|
|
14
|
+
this.renderer = inject(Renderer2);
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
+
* Reference to the element.
|
|
16
17
|
*
|
|
17
18
|
* @docs-private
|
|
18
19
|
*/
|
|
19
|
-
this.
|
|
20
|
+
this.elementRef = inject(ElementRef);
|
|
21
|
+
/**
|
|
22
|
+
* Whether the element is hidden.
|
|
23
|
+
*
|
|
24
|
+
* @docs-private
|
|
25
|
+
*/
|
|
26
|
+
this.hidden = signal(false);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Hides the element.
|
|
30
|
+
*
|
|
31
|
+
* @docs-private
|
|
32
|
+
*/
|
|
33
|
+
hide() {
|
|
34
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'visibility', 'hidden');
|
|
35
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'absolute');
|
|
36
|
+
this.hidden.set(true);
|
|
20
37
|
}
|
|
21
|
-
/**
|
|
22
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Shows the element.
|
|
40
|
+
*
|
|
41
|
+
* @docs-private
|
|
42
|
+
*/
|
|
43
|
+
show() {
|
|
44
|
+
this.renderer.removeStyle(this.elementRef.nativeElement, 'visibility');
|
|
45
|
+
this.renderer.removeStyle(this.elementRef.nativeElement, 'position');
|
|
46
|
+
this.hidden.set(false);
|
|
47
|
+
}
|
|
48
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ElementVisibilityManager, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
49
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: ElementVisibilityManager, host: { properties: { "attr.aria-hidden": "hidden()" } }, ngImport: i0 }); }
|
|
50
|
+
}
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ElementVisibilityManager, decorators: [{
|
|
52
|
+
type: Directive,
|
|
53
|
+
args: [{
|
|
54
|
+
host: {
|
|
55
|
+
'[attr.aria-hidden]': 'hidden()'
|
|
56
|
+
}
|
|
57
|
+
}]
|
|
58
|
+
}] });
|
|
59
|
+
/**
|
|
60
|
+
* Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.
|
|
61
|
+
*/
|
|
62
|
+
export class KbqOverflowItemsResult extends ElementVisibilityManager {
|
|
63
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItemsResult, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
64
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: KbqOverflowItemsResult, isStandalone: true, selector: "[kbqOverflowItemsResult]", host: { classAttribute: "kbq-overflow-items-result" }, exportAs: ["kbqOverflowItemsResult"], usesInheritance: true, ngImport: i0 }); }
|
|
23
65
|
}
|
|
24
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItemsResult, decorators: [{
|
|
25
67
|
type: Directive,
|
|
26
68
|
args: [{
|
|
27
69
|
standalone: true,
|
|
28
|
-
selector: '
|
|
70
|
+
selector: '[kbqOverflowItemsResult]',
|
|
71
|
+
exportAs: 'kbqOverflowItemsResult',
|
|
72
|
+
host: { class: 'kbq-overflow-items-result' }
|
|
29
73
|
}]
|
|
30
74
|
}] });
|
|
31
75
|
/**
|
|
32
|
-
*
|
|
76
|
+
* Directive for the item that can be hidden by the `KbqOverflowItems` directive.
|
|
33
77
|
*/
|
|
34
|
-
export class KbqOverflowItem {
|
|
78
|
+
export class KbqOverflowItem extends ElementVisibilityManager {
|
|
35
79
|
constructor() {
|
|
80
|
+
super(...arguments);
|
|
36
81
|
/**
|
|
37
|
-
*
|
|
82
|
+
* Unique identifier for the item.
|
|
38
83
|
*/
|
|
39
84
|
this.id = input.required({ alias: 'kbqOverflowItem' });
|
|
40
|
-
/**
|
|
41
|
-
* Whether the item is hidden.
|
|
42
|
-
*
|
|
43
|
-
* @docs-private
|
|
44
|
-
*/
|
|
45
|
-
this.hidden = false;
|
|
46
|
-
/**
|
|
47
|
-
* TemplateRef for the item.
|
|
48
|
-
*
|
|
49
|
-
* @docs-private
|
|
50
|
-
*/
|
|
51
|
-
this.templateRef = inject(TemplateRef);
|
|
52
85
|
}
|
|
53
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItem, deps:
|
|
54
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: KbqOverflowItem, isStandalone: true, selector: "[kbqOverflowItem]", inputs: { id: { classPropertyName: "id", publicName: "kbqOverflowItem", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
86
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItem, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
87
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: KbqOverflowItem, isStandalone: true, selector: "[kbqOverflowItem]", inputs: { id: { classPropertyName: "id", publicName: "kbqOverflowItem", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "kbq-overflow-item" }, exportAs: ["kbqOverflowItem"], usesInheritance: true, ngImport: i0 }); }
|
|
55
88
|
}
|
|
56
89
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItem, decorators: [{
|
|
57
90
|
type: Directive,
|
|
58
91
|
args: [{
|
|
59
92
|
standalone: true,
|
|
60
|
-
selector: '[kbqOverflowItem]'
|
|
93
|
+
selector: '[kbqOverflowItem]',
|
|
94
|
+
exportAs: 'kbqOverflowItem',
|
|
95
|
+
host: { class: 'kbq-overflow-item' }
|
|
61
96
|
}]
|
|
62
97
|
}] });
|
|
63
98
|
/**
|
|
64
|
-
*
|
|
99
|
+
* Directive for managing the visibility of items that overflow the container.
|
|
65
100
|
*/
|
|
66
101
|
export class KbqOverflowItems {
|
|
67
102
|
constructor() {
|
|
68
|
-
this.itemElementRefs = viewChildren('itemRef', { read: ElementRef });
|
|
69
103
|
/**
|
|
70
104
|
* `KbqOverflowItem` directive references.
|
|
71
105
|
*
|
|
@@ -78,29 +112,8 @@ export class KbqOverflowItems {
|
|
|
78
112
|
* @docs-private
|
|
79
113
|
*/
|
|
80
114
|
this.result = contentChild(KbqOverflowItemsResult);
|
|
81
|
-
this.resultElementRef = viewChild('resultRef', { read: ElementRef });
|
|
82
|
-
/**
|
|
83
|
-
* Template context for the `KbqOverflowItemsResult` directive.
|
|
84
|
-
*
|
|
85
|
-
* @docs-private
|
|
86
|
-
*/
|
|
87
|
-
this.resultTemplateContext = computed(() => {
|
|
88
|
-
const hiddenItemIDs = this.hiddenItemIDs();
|
|
89
|
-
return {
|
|
90
|
-
$implicit: hiddenItemIDs,
|
|
91
|
-
hiddenItemIDs: hiddenItemIDs
|
|
92
|
-
};
|
|
93
|
-
});
|
|
94
|
-
this.hiddenItemIDs = signal(new Set([]));
|
|
95
|
-
/**
|
|
96
|
-
* Whether the overflow result is hidden.
|
|
97
|
-
*
|
|
98
|
-
* @docs-private
|
|
99
|
-
*/
|
|
100
|
-
this.resultHidden = computed(() => this.hiddenItemIDs().size === 0);
|
|
101
115
|
/**
|
|
102
116
|
* Whether the overflow order should be reversed.
|
|
103
|
-
* Also changes the position of the `resultTemplateRef`.
|
|
104
117
|
*
|
|
105
118
|
* @default false
|
|
106
119
|
*/
|
|
@@ -111,125 +124,102 @@ export class KbqOverflowItems {
|
|
|
111
124
|
* @default 100
|
|
112
125
|
*/
|
|
113
126
|
this.debounceTime = input(100, { transform: numberAttribute });
|
|
127
|
+
/**
|
|
128
|
+
* Emits when the set of hidden items changes.
|
|
129
|
+
*/
|
|
130
|
+
this.changes = output();
|
|
131
|
+
/**
|
|
132
|
+
* Set of hidden item IDs.
|
|
133
|
+
*/
|
|
134
|
+
this.hiddenItemIDs = toSignal(outputToObservable(this.changes), {
|
|
135
|
+
initialValue: new Set([])
|
|
136
|
+
});
|
|
114
137
|
this.elementRef = inject(ElementRef);
|
|
115
138
|
this.resizeObserver = inject(SharedResizeObserver);
|
|
116
|
-
this.
|
|
139
|
+
this.renderer = inject(Renderer2);
|
|
140
|
+
this.document = inject(DOCUMENT);
|
|
117
141
|
/**
|
|
118
142
|
* Determines if the given item is hidden.
|
|
119
143
|
*/
|
|
120
|
-
this.isHiddenItem = ({ hidden }) => hidden;
|
|
144
|
+
this.isHiddenItem = ({ hidden }) => hidden();
|
|
145
|
+
this.setStyles();
|
|
121
146
|
merge(toObservable(this.items), toObservable(this.reverseOverflowOrder).pipe(skip(1)), this.resizeObserver.observe(this.elementRef.nativeElement))
|
|
122
147
|
.pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())
|
|
123
148
|
.subscribe(() => {
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
this.
|
|
127
|
-
this.changeDetectorRef.markForCheck();
|
|
149
|
+
const hiddenItems = this.calculateItemsVisibility(this.items(), this.reverseOverflowOrder(), this.result(), this.elementRef.nativeElement);
|
|
150
|
+
const hiddenItemIDs = new Set(hiddenItems.map(({ id }) => id()));
|
|
151
|
+
this.changes.emit(hiddenItemIDs);
|
|
128
152
|
});
|
|
129
153
|
}
|
|
130
154
|
/**
|
|
131
|
-
*
|
|
155
|
+
* Calculates the visibility of items, based on the container width and `reverseOverflowOrder` property.
|
|
132
156
|
*/
|
|
133
|
-
|
|
157
|
+
calculateItemsVisibility(items, reverseOverflowOrder, result, { offsetWidth: totalWidth }) {
|
|
158
|
+
result?.hide();
|
|
134
159
|
items.forEach((item) => {
|
|
135
|
-
item.
|
|
160
|
+
item.show();
|
|
136
161
|
});
|
|
137
|
-
let itemsWidth = items.reduce((width,
|
|
162
|
+
let itemsWidth = items.reduce((width, { elementRef }) => width + this.getElementWidthWithMargins(elementRef), 0);
|
|
138
163
|
const startIndex = reverseOverflowOrder ? 0 : items.length - 1;
|
|
139
164
|
const endIndex = reverseOverflowOrder ? items.length : -1;
|
|
140
165
|
const step = reverseOverflowOrder ? 1 : -1;
|
|
141
|
-
const resultWidth =
|
|
166
|
+
const resultWidth = result ? this.getElementWidthWithMargins(result.elementRef) : 0;
|
|
142
167
|
for (let index = startIndex; index !== endIndex; index += step) {
|
|
143
168
|
const current = items[index];
|
|
144
|
-
const currentWidth =
|
|
169
|
+
const currentWidth = this.getElementWidthWithMargins(current.elementRef);
|
|
145
170
|
const _resultWidth = items.some(this.isHiddenItem) ? resultWidth : 0;
|
|
146
171
|
if (itemsWidth + _resultWidth > totalWidth) {
|
|
147
|
-
current.
|
|
172
|
+
current.hide();
|
|
148
173
|
itemsWidth -= currentWidth;
|
|
149
174
|
}
|
|
150
175
|
else {
|
|
151
176
|
const isEdgeElement = reverseOverflowOrder ? index === 0 : index === items.length - 1;
|
|
152
177
|
const _resultWidth = isEdgeElement ? 0 : resultWidth;
|
|
153
178
|
if (itemsWidth + currentWidth + _resultWidth <= totalWidth) {
|
|
154
|
-
current.
|
|
179
|
+
current.show();
|
|
155
180
|
itemsWidth += currentWidth;
|
|
156
181
|
}
|
|
157
182
|
}
|
|
158
183
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
@if (reverseOverflowOrder()) {
|
|
163
|
-
<ng-container [ngTemplateOutlet]="template" />
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
@for (item of items(); track item) {
|
|
167
|
-
<div
|
|
168
|
-
class="kbq-overflow-items__item"
|
|
169
|
-
#itemRef
|
|
170
|
-
[attr.aria-hidden]="item.hidden"
|
|
171
|
-
[class.kbq-overflow-items__item_hidden]="item.hidden"
|
|
172
|
-
>
|
|
173
|
-
<ng-container [ngTemplateOutlet]="item.templateRef" />
|
|
174
|
-
</div>
|
|
184
|
+
const hiddenItems = items.filter(this.isHiddenItem);
|
|
185
|
+
if (hiddenItems.length > 0) {
|
|
186
|
+
result?.show();
|
|
175
187
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
188
|
+
return hiddenItems;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Returns the width of the element including margins.
|
|
192
|
+
*/
|
|
193
|
+
getElementWidthWithMargins({ nativeElement }) {
|
|
194
|
+
const { marginLeft, marginRight } = this.getWindow().getComputedStyle(nativeElement);
|
|
195
|
+
return Math.ceil(parseFloat(marginLeft) + nativeElement.offsetWidth + parseFloat(marginRight));
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* This method sets the necessary styles for the directive.
|
|
199
|
+
*/
|
|
200
|
+
setStyles() {
|
|
201
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');
|
|
202
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'flex');
|
|
203
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'flex-wrap', 'nowrap');
|
|
204
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'flex-grow', '1');
|
|
205
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'overflow', 'hidden');
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Returns the window object.
|
|
209
|
+
*/
|
|
210
|
+
getWindow() {
|
|
211
|
+
return this.document.defaultView || window;
|
|
212
|
+
}
|
|
213
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItems, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
214
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.6", type: KbqOverflowItems, isStandalone: true, selector: "[kbqOverflowItems]", inputs: { reverseOverflowOrder: { classPropertyName: "reverseOverflowOrder", publicName: "reverseOverflowOrder", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changes: "changes" }, host: { classAttribute: "kbq-overflow-items" }, queries: [{ propertyName: "items", predicate: KbqOverflowItem, isSignal: true }, { propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, isSignal: true }], exportAs: ["kbqOverflowItems"], ngImport: i0 }); }
|
|
195
215
|
}
|
|
196
216
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItems, decorators: [{
|
|
197
|
-
type:
|
|
198
|
-
args: [{
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
<div
|
|
205
|
-
class="kbq-overflow-items__item"
|
|
206
|
-
#itemRef
|
|
207
|
-
[attr.aria-hidden]="item.hidden"
|
|
208
|
-
[class.kbq-overflow-items__item_hidden]="item.hidden"
|
|
209
|
-
>
|
|
210
|
-
<ng-container [ngTemplateOutlet]="item.templateRef" />
|
|
211
|
-
</div>
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
@if (!reverseOverflowOrder()) {
|
|
215
|
-
<ng-container [ngTemplateOutlet]="template" />
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
<ng-template #template>
|
|
219
|
-
<div
|
|
220
|
-
class="kbq-overflow-items__result"
|
|
221
|
-
#resultRef
|
|
222
|
-
[attr.aria-hidden]="resultHidden()"
|
|
223
|
-
[class.kbq-overflow-items__result_hidden]="resultHidden()"
|
|
224
|
-
>
|
|
225
|
-
<ng-container
|
|
226
|
-
[ngTemplateOutlet]="result()?.templateRef || null"
|
|
227
|
-
[ngTemplateOutletContext]="resultTemplateContext()"
|
|
228
|
-
/>
|
|
229
|
-
</div>
|
|
230
|
-
</ng-template>
|
|
231
|
-
`, host: {
|
|
232
|
-
class: 'kbq-overflow-items'
|
|
233
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:relative;display:flex;flex-grow:1;overflow:hidden;flex-wrap:nowrap;white-space:nowrap}.kbq-overflow-items__item,.kbq-overflow-items__result{display:flex;align-items:center}.kbq-overflow-items__item.kbq-overflow-items__item_hidden,.kbq-overflow-items__item.kbq-overflow-items__result_hidden,.kbq-overflow-items__result.kbq-overflow-items__item_hidden,.kbq-overflow-items__result.kbq-overflow-items__result_hidden{visibility:hidden;position:absolute}\n"] }]
|
|
217
|
+
type: Directive,
|
|
218
|
+
args: [{
|
|
219
|
+
standalone: true,
|
|
220
|
+
selector: '[kbqOverflowItems]',
|
|
221
|
+
exportAs: 'kbqOverflowItems',
|
|
222
|
+
host: { class: 'kbq-overflow-items' }
|
|
223
|
+
}]
|
|
234
224
|
}], ctorParameters: () => [] });
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctaXRlbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL292ZXJmbG93LWl0ZW1zL292ZXJmbG93LWl0ZW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFrQ2pEOzs7O0dBSUc7QUFLSCxNQUFNLE9BQU8sc0JBQXNCO0lBSm5DO1FBS0k7Ozs7V0FJRztRQUNNLGdCQUFXLEdBQUcsTUFBTSxDQUE2QyxXQUFXLENBQUMsQ0FBQztLQUMxRjtpSUFQWSxzQkFBc0I7cUhBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHFDQUFxQztpQkFDbEQ7O0FBVUQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sZUFBZTtJQUo1QjtRQUtJOztXQUVHO1FBQ00sT0FBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFD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a0JBNUM1QixTQUFTO2lDQUNNLElBQUksWUFDTixvQkFBb0IsV0FDckIsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUNqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUNULFFBRUs7d0JBQ0YsS0FBSyxFQUFFLG9CQUFvQjtxQkFDOUIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaGFyZWRSZXNpemVPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vYnNlcnZlcnMvcHJpdmF0ZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgY29udGVudENoaWxkLFxuICAgIGNvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIHNpZ25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICB2aWV3Q2hpbGQsXG4gICAgdmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1lcmdlLCBza2lwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogVGVtcGxhdGUgY29udGV4dCBmb3IgdGhlIGBLYnFPdmVyZmxvd0l0ZW1zUmVzdWx0YCBkaXJlY3RpdmUuXG4gKlxuICogQHNlZSBgS2JxT3ZlcmZsb3dJdGVtc1Jlc3VsdGBcbiAqL1xuZXhwb3J0IHR5cGUgS2JxT3ZlcmZsb3dJdGVtc1Jlc3VsdENvbnRleHQgPSB7XG4gICAgLyoqXG4gICAgICogU2V0IG9mIGhpZGRlbiBpdGVtIElEJ3MuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxuZy10ZW1wbGF0ZSBrYnFPdmVyZmxvd0l0ZW1zUmVzdWx0IGxldC1oaWRkZW5JdGVtSURzPlxuICAgICAqICB7eyBoaWRkZW5JdGVtSURzLnNpemUgfX1cbiAgICAgKiA8L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICAkaW1wbGljaXQ6IFJlYWRvbmx5U2V0PHVua25vd24+O1xuICAgIC8qKlxuICAgICAqIFNldCBvZiBoaWRkZW4gaXRlbSBJRCdzLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8bmctdGVtcGxhdGUga2JxT3ZlcmZsb3dJdGVtc1Jlc3VsdCBsZXQtaGlkZGVuSXRlbUlEcz1cImhpZGRlbkl0ZW1JRHNcIj5cbiAgICAgKiAgQGlmIChoaWRkZW5JdGVtSURzLmhhcyhTT01FX0lEKSkgey4uLn1cbiAgICAgKiA8L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYGBcbiAgICAgKi9cbiAgICBoaWRkZW5JdGVtSURzOiBSZWFkb25seVNldDx1bmtub3duPjtcbn07XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciBwcm92aWRpbmcgYEticU92ZXJmbG93SXRlbXNSZXN1bHRDb250ZXh0YCB0byB0aGUgYEticU92ZXJmbG93SXRlbXNgIGNvbXBvbmVudC5cbiAqXG4gKiBAc2VlIGBLYnFPdmVyZmxvd0l0ZW1zUmVzdWx0Q29udGV4dGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2ticU92ZXJmbG93SXRlbXNSZXN1bHRdJ1xufSlcbmV4cG9ydCBjbGFzcyBLYnFPdmVyZmxvd0l0ZW1zUmVzdWx0IHtcbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZVJlZiBmb3IgdGhlIG92ZXJmbG93IHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICByZWFkb25seSB0ZW1wbGF0ZVJlZiA9IGluamVjdDxUZW1wbGF0ZVJlZjxLYnFPdmVyZmxvd0l0ZW1zUmVzdWx0Q29udGV4dD4+KFRlbXBsYXRlUmVmKTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmUgZGlyZWN0aXZlIGZvciBwcm92aWRpbmcgaXRlbXMgdG8gdGhlIGBLYnFPdmVyZmxvd0l0ZW1zYC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1trYnFPdmVyZmxvd0l0ZW1dJ1xufSlcbmV4cG9ydCBjbGFzcyBLYnFPdmVyZmxvd0l0ZW0ge1xuICAgIC8qKlxuICAgICAqIElkZW50aWZpZXIgZm9yIHRoZSBpdGVtLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGlkID0gaW5wdXQucmVxdWlyZWQoeyBhbGlhczogJ2ticU92ZXJmbG93SXRlbScgfSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBpdGVtIGlzIGhpZGRlbi5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBoaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRlbXBsYXRlUmVmIGZvciB0aGUgaXRlbS5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICByZWFkb25seSB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZik7XG59XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBhdXRvbWF0aWNhbGx5IGhpZGluZyBlbGVtZW50cyB3aXRoIGR5bmFtaWMgYWRhcHRhdGlvbiB0byB0aGUgY29udGFpbmVyIHdpZHRoLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAna2JxLW92ZXJmbG93LWl0ZW1zJyxcbiAgICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldF0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgQGlmIChyZXZlcnNlT3ZlcmZsb3dPcmRlcigpKSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCIgLz5cbiAgICAgICAgfVxuXG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwia2JxLW92ZXJmbG93LWl0ZW1zX19pdGVtXCJcbiAgICAgICAgICAgICAgICAjaXRlbVJlZlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLW92ZXJmbG93LWl0ZW1zX19pdGVtX2hpZGRlbl09XCJpdGVtLmhpZGRlblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtLnRlbXBsYXRlUmVmXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmICghcmV2ZXJzZU92ZXJmbG93T3JkZXIoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwia2JxLW92ZXJmbG93LWl0ZW1zX19yZXN1bHRcIlxuICAgICAgICAgICAgICAgICNyZXN1bHRSZWZcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJyZXN1bHRIaWRkZW4oKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmticS1vdmVyZmxvdy1pdGVtc19fcmVzdWx0X2hpZGRlbl09XCJyZXN1bHRIaWRkZW4oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJyZXN1bHQoKT8udGVtcGxhdGVSZWYgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJyZXN1bHRUZW1wbGF0ZUNvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgc3R5bGVVcmw6ICcuL292ZXJmbG93LWl0ZW1zLnNjc3MnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtb3ZlcmZsb3ctaXRlbXMnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBLYnFPdmVyZmxvd0l0ZW1zIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1FbGVtZW50UmVmcyA9IHZpZXdDaGlsZHJlbjxzdHJpbmcsIEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignaXRlbVJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcblxuICAgIC8qKlxuICAgICAqIGBLYnFPdmVyZmxvd0l0ZW1gIGRpcmVjdGl2ZSByZWZlcmVuY2VzLlxuICAgICAqXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpdGVtcyA9IGNvbnRlbnRDaGlsZHJlbihLYnFPdmVyZmxvd0l0ZW0pO1xuXG4gICAgLyoqXG4gICAgICogYEticU92ZXJmbG93SXRlbXNSZXN1bHRgIGRpcmVjdGl2ZSByZWZlcmVuY2UuXG4gICAgICpcbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc3VsdCA9IGNvbnRlbnRDaGlsZChLYnFPdmVyZmxvd0l0ZW1zUmVzdWx0KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdWx0RWxlbWVudFJlZiA9IHZpZXdDaGlsZDxzdHJpbmcsIEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PigncmVzdWx0UmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGVtcGxhdGUgY29udGV4dCBmb3IgdGhlIGBLYnFPdmVyZmxvd0l0ZW1zUmVzdWx0YCBkaXJlY3RpdmUuXG4gICAgICpcbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc3VsdFRlbXBsYXRlQ29udGV4dCA9IGNvbXB1dGVkPEticU92ZXJmbG93SXRlbXNSZXN1bHRDb250ZXh0PigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpZGRlbkl0ZW1JRHMgPSB0aGlzLmhpZGRlbkl0ZW1JRHMoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogaGlkZGVuSXRlbUlEcyxcbiAgICAgICAgICAgIGhpZGRlbkl0ZW1JRHM6IGhpZGRlbkl0ZW1JRHNcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGlkZGVuSXRlbUlEcyA9IHNpZ25hbDxSZWFkb25seVNldDx1bmtub3duPj4obmV3IFNldChbXSkpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgb3ZlcmZsb3cgcmVzdWx0IGlzIGhpZGRlbi5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzdWx0SGlkZGVuID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5oaWRkZW5JdGVtSURzKCkuc2l6ZSA9PT0gMCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBvdmVyZmxvdyBvcmRlciBzaG91bGQgYmUgcmV2ZXJzZWQuXG4gICAgICogQWxzbyBjaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiB0aGUgYHJlc3VsdFRlbXBsYXRlUmVmYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgcmV2ZXJzZU92ZXJmbG93T3JkZXIgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgICAvKipcbiAgICAgKiBEZWJvdW5jZSB0aW1lIGZvciByZWNhbGN1bGF0aW5nIGl0ZW1zIHZpc2liaWxpdHkuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAxMDBcbiAgICAgKi9cbiAgICByZWFkb25seSBkZWJvdW5jZVRpbWUgPSBpbnB1dCgxMDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzaXplT2JzZXJ2ZXIgPSBpbmplY3QoU2hhcmVkUmVzaXplT2JzZXJ2ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuaXRlbXMpLFxuICAgICAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMucmV2ZXJzZU92ZXJmbG93T3JkZXIpLnBpcGUoc2tpcCgxKSksXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSgpKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zVmlzaWJpbGl0eShcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUVsZW1lbnRSZWZzKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV2ZXJzZU92ZXJmbG93T3JkZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRFbGVtZW50UmVmKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGRlbkl0ZW1JRHMuc2V0KG5ldyBTZXQoaXRlbXMuZmlsdGVyKHRoaXMuaXNIaWRkZW5JdGVtKS5tYXAoKHsgaWQgfSkgPT4gaWQoKSkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBpdGVtcyB2aXNpYmlsaXR5LCBiYXNlZCBvbiB0aGUgY29udGFpbmVyIHdpZHRoIGFuZCB0aGUgYHJldmVyc2VPdmVyZmxvd09yZGVyYCBmbGFnLlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlSXRlbXNWaXNpYmlsaXR5KFxuICAgICAgICBpdGVtczogcmVhZG9ubHkgS2JxT3ZlcmZsb3dJdGVtW10sXG4gICAgICAgIGl0ZW1FbGVtZW50UmVmczogcmVhZG9ubHkgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5bXSxcbiAgICAgICAgcmV2ZXJzZU92ZXJmbG93T3JkZXI6IGJvb2xlYW4sXG4gICAgICAgIHJlc3VsdEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkLFxuICAgICAgICB7IG9mZnNldFdpZHRoOiB0b3RhbFdpZHRoIH06IEhUTUxFbGVtZW50XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaXRlbXNXaWR0aCA9IGl0ZW1zLnJlZHVjZSgod2lkdGgsIF8sIGluZGV4KSA9PiB3aWR0aCArIGl0ZW1FbGVtZW50UmVmc1tpbmRleF0ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCwgMCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSByZXZlcnNlT3ZlcmZsb3dPcmRlciA/IDAgOiBpdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHJldmVyc2VPdmVyZmxvd09yZGVyID8gaXRlbXMubGVuZ3RoIDogLTE7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSByZXZlcnNlT3ZlcmZsb3dPcmRlciA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgcmVzdWx0V2lkdGggPSByZXN1bHRFbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIHx8IDA7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggIT09IGVuZEluZGV4OyBpbmRleCArPSBzdGVwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gaXRlbXNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gaXRlbUVsZW1lbnRSZWZzW2luZGV4XS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdFdpZHRoID0gaXRlbXMuc29tZSh0aGlzLmlzSGlkZGVuSXRlbSkgPyByZXN1bHRXaWR0aCA6IDA7XG4gICAgICAgICAgICBpZiAoaXRlbXNXaWR0aCArIF9yZXN1bHRXaWR0aCA+IHRvdGFsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgaXRlbXNXaWR0aCAtPSBjdXJyZW50V2lkdGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRWRnZUVsZW1lbnQgPSByZXZlcnNlT3ZlcmZsb3dPcmRlciA/IGluZGV4ID09PSAwIDogaW5kZXggPT09IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgX3Jlc3VsdFdpZHRoID0gaXNFZGdlRWxlbWVudCA/IDAgOiByZXN1bHRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbXNXaWR0aCArIGN1cnJlbnRXaWR0aCArIF9yZXN1bHRXaWR0aCA8PSB0b3RhbFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zV2lkdGggKz0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGl0ZW0gaXMgaGlkZGVuLlxuICAgICAqL1xuICAgIHByaXZhdGUgaXNIaWRkZW5JdGVtID0gKHsgaGlkZGVuIH06IEticU92ZXJmbG93SXRlbSkgPT4gaGlkZGVuO1xufVxuIl19
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctaXRlbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL292ZXJmbG93LWl0ZW1zL292ZXJmbG93LWl0ZW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFakQ7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTyx3QkFBd0I7SUFMckM7UUFNcUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5Qzs7OztXQUlHO1FBQ00sZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6Qzs7OztXQUlHO1FBQ00sV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQXVCbkM7SUFyQkc7Ozs7T0FJRztJQUNILElBQUk7UUFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFh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QUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBT0Q7O09BRUc7SUFDSyxTQUFTO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUM7SUFDL0MsQ0FBQztpSUE1SVEsZ0JBQWdCO3FIQUFoQixnQkFBZ0IsbWZBTWdCLGVBQWUsc0VBT2pCLHNCQUFzQjs7MkZBYnBELGdCQUFnQjtrQkFONUIsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNoYXJlZFJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL29ic2VydmVycy9wcml2YXRlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBjb250ZW50Q2hpbGQsXG4gICAgY29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgb3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvdXRwdXRUb09ic2VydmFibGUsIHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWVyZ2UsIHNraXAgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBlbGVtZW50LlxuICpcbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuYXJpYS1oaWRkZW5dJzogJ2hpZGRlbigpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgRWxlbWVudFZpc2liaWxpdHlNYW5hZ2VyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgaGlkZGVuLlxuICAgICAqXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhpZGRlbiA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBIaWRlcyB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBoaWRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgICAgIHRoaXMuaGlkZGVuLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyB0aGUgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBzaG93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmlzaWJpbGl0eScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAncG9zaXRpb24nKTtcbiAgICAgICAgdGhpcy5oaWRkZW4uc2V0KGZhbHNlKTtcbiAgICB9XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciBkaXNwbGF5aW5nIHRoZSByZXN1bHQgb2YgaGlkZGVuIGl0ZW1zIGJ5IHRoZSBgS2JxT3ZlcmZsb3dJdGVtc2AgZGlyZWN0aXZlLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW2ticU92ZXJmbG93SXRlbXNSZXN1bHRdJyxcbiAgICBleHBvcnRBczogJ2ticU92ZXJmbG93SXRlbXNSZXN1bHQnLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdrYnEtb3ZlcmZsb3ctaXRlbXMtcmVzdWx0JyB9XG59KVxuZXhwb3J0IGNsYXNzIEticU92ZXJmbG93SXRlbXNSZXN1bHQgZXh0ZW5kcyBFbGVtZW50VmlzaWJpbGl0eU1hbmFnZXIge31cblxuLyoqXG4gKiBEaXJlY3RpdmUgZm9yIHRoZSBpdGVtIHRoYXQgY2FuIGJlIGhpZGRlbiBieSB0aGUgYEticU92ZXJmbG93SXRlbXNgIGRpcmVjdGl2ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1trYnFPdmVyZmxvd0l0ZW1dJyxcbiAgICBleHBvcnRBczogJ2ticU92ZXJmbG93SXRlbScsXG4gICAgaG9zdDogeyBjbGFzczogJ2ticS1vdmVyZmxvdy1pdGVtJyB9XG59KVxuZXhwb3J0IGNsYXNzIEticU92ZXJmbG93SXRlbSBleHRlbmRzIEVsZW1lbnRWaXNpYmlsaXR5TWFuYWdlciB7XG4gICAgLyoqXG4gICAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBpdGVtLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGlkID0gaW5wdXQucmVxdWlyZWQoeyBhbGlhczogJ2ticU92ZXJmbG93SXRlbScgfSk7XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciBtYW5hZ2luZyB0aGUgdmlzaWJpbGl0eSBvZiBpdGVtcyB0aGF0IG92ZXJmbG93IHRoZSBjb250YWluZXIuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdba2JxT3ZlcmZsb3dJdGVtc10nLFxuICAgIGV4cG9ydEFzOiAna2JxT3ZlcmZsb3dJdGVtcycsXG4gICAgaG9zdDogeyBjbGFzczogJ2ticS1vdmVyZmxvdy1pdGVtcycgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFPdmVyZmxvd0l0ZW1zIHtcbiAgICAvKipcbiAgICAgKiBgS2JxT3ZlcmZsb3dJdGVtYCBkaXJlY3RpdmUgcmVmZXJlbmNlcy5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zID0gY29udGVudENoaWxkcmVuKEticU92ZXJmbG93SXRlbSk7XG5cbiAgICAvKipcbiAgICAgKiBgS2JxT3ZlcmZsb3dJdGVtc1Jlc3VsdGAgZGlyZWN0aXZlIHJlZmVyZW5jZS5cbiAgICAgKlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3VsdCA9IGNvbnRlbnRDaGlsZChLYnFPdmVyZmxvd0l0ZW1zUmVzdWx0KTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG92ZXJmbG93IG9yZGVyIHNob3VsZCBiZSByZXZlcnNlZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgcmV2ZXJzZU92ZXJmbG93T3JkZXIgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgICAvKipcbiAgICAgKiBEZWJvdW5jZSB0aW1lIGZvciByZWNhbGN1bGF0aW5nIGl0ZW1zIHZpc2liaWxpdHkuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAxMDBcbiAgICAgKi9cbiAgICByZWFkb25seSBkZWJvdW5jZVRpbWUgPSBpbnB1dCgxMDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIHRoZSBzZXQgb2YgaGlkZGVuIGl0ZW1zIGNoYW5nZXMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY2hhbmdlcyA9IG91dHB1dDxSZWFkb25seVNldDx1bmtub3duPj4oKTtcblxuICAgIC8qKlxuICAgICAqIFNldCBvZiBoaWRkZW4gaXRlbSBJRHMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgaGlkZGVuSXRlbUlEcyA9IHRvU2lnbmFsKG91dHB1dFRvT2JzZXJ2YWJsZSh0aGlzLmNoYW5nZXMpLCB7XG4gICAgICAgIGluaXRpYWxWYWx1ZTogbmV3IFNldDx1bmtub3duPihbXSkgYXMgUmVhZG9ubHlTZXQ8dW5rbm93bj5cbiAgICB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNpemVPYnNlcnZlciA9IGluamVjdChTaGFyZWRSZXNpemVPYnNlcnZlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2V0U3R5bGVzKCk7XG5cbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICB0b09ic2VydmFibGUodGhpcy5pdGVtcyksXG4gICAgICAgICAgICB0b09ic2VydmFibGUodGhpcy5yZXZlcnNlT3ZlcmZsb3dPcmRlcikucGlwZShza2lwKDEpKSxcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKCkpLCB0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpZGRlbkl0ZW1zID0gdGhpcy5jYWxjdWxhdGVJdGVtc1Zpc2liaWxpdHkoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXZlcnNlT3ZlcmZsb3dPcmRlcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSXRlbUlEcyA9IG5ldyBTZXQoaGlkZGVuSXRlbXMubWFwKCh7IGlkIH0pID0+IGlkKCkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdChoaWRkZW5JdGVtSURzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHZpc2liaWxpdHkgb2YgaXRlbXMsIGJhc2VkIG9uIHRoZSBjb250YWluZXIgd2lkdGggYW5kIGByZXZlcnNlT3ZlcmZsb3dPcmRlcmAgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtc1Zpc2liaWxpdHkoXG4gICAgICAgIGl0ZW1zOiByZWFkb25seSBLYnFPdmVyZmxvd0l0ZW1bXSxcbiAgICAgICAgcmV2ZXJzZU92ZXJmbG93T3JkZXI6IGJvb2xlYW4sXG4gICAgICAgIHJlc3VsdDogS2JxT3ZlcmZsb3dJdGVtc1Jlc3VsdCB8IHVuZGVmaW5lZCxcbiAgICAgICAgeyBvZmZzZXRXaWR0aDogdG90YWxXaWR0aCB9OiBIVE1MRWxlbWVudFxuICAgICk6IEticU92ZXJmbG93SXRlbVtdIHtcbiAgICAgICAgcmVzdWx0Py5oaWRlKCk7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2hvdygpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGl0ZW1zV2lkdGggPSBpdGVtcy5yZWR1Y2UoXG4gICAgICAgICAgICAod2lkdGgsIHsgZWxlbWVudFJlZiB9KSA9PiB3aWR0aCArIHRoaXMuZ2V0RWxlbWVudFdpZHRoV2l0aE1hcmdpbnMoZWxlbWVudFJlZiksXG4gICAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSByZXZlcnNlT3ZlcmZsb3dPcmRlciA/IDAgOiBpdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHJldmVyc2VPdmVyZmxvd09yZGVyID8gaXRlbXMubGVuZ3RoIDogLTE7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSByZXZlcnNlT3ZlcmZsb3dPcmRlciA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgcmVzdWx0V2lkdGggPSByZXN1bHQgPyB0aGlzLmdldEVsZW1lbnRXaWR0aFdpdGhNYXJnaW5zKHJlc3VsdC5lbGVtZW50UmVmKSA6IDA7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggIT09IGVuZEluZGV4OyBpbmRleCArPSBzdGVwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gaXRlbXNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gdGhpcy5nZXRFbGVtZW50V2lkdGhXaXRoTWFyZ2lucyhjdXJyZW50LmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdFdpZHRoID0gaXRlbXMuc29tZSh0aGlzLmlzSGlkZGVuSXRlbSkgPyByZXN1bHRXaWR0aCA6IDA7XG4gICAgICAgICAgICBpZiAoaXRlbXNXaWR0aCArIF9yZXN1bHRXaWR0aCA+IHRvdGFsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50LmhpZGUoKTtcbiAgICAgICAgICAgICAgICBpdGVtc1dpZHRoIC09IGN1cnJlbnRXaWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNFZGdlRWxlbWVudCA9IHJldmVyc2VPdmVyZmxvd09yZGVyID8gaW5kZXggPT09IDAgOiBpbmRleCA9PT0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBjb25zdCBfcmVzdWx0V2lkdGggPSBpc0VkZ2VFbGVtZW50ID8gMCA6IHJlc3VsdFdpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtc1dpZHRoICsgY3VycmVudFdpZHRoICsgX3Jlc3VsdFdpZHRoIDw9IHRvdGFsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zV2lkdGggKz0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoaWRkZW5JdGVtcyA9IGl0ZW1zLmZpbHRlcih0aGlzLmlzSGlkZGVuSXRlbSk7XG4gICAgICAgIGlmIChoaWRkZW5JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXN1bHQ/LnNob3coKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGlkZGVuSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGVsZW1lbnQgaW5jbHVkaW5nIG1hcmdpbnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50V2lkdGhXaXRoTWFyZ2lucyh7IG5hdGl2ZUVsZW1lbnQgfTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pOiBudW1iZXIge1xuICAgICAgICBjb25zdCB7IG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0IH0gPSB0aGlzLmdldFdpbmRvdygpLmdldENvbXB1dGVkU3R5bGUobmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwocGFyc2VGbG9hdChtYXJnaW5MZWZ0KSArIG5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyBwYXJzZUZsb2F0KG1hcmdpblJpZ2h0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbmVjZXNzYXJ5IHN0eWxlcyBmb3IgdGhlIGRpcmVjdGl2ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFN0eWxlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ2ZsZXgnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZsZXgtd3JhcCcsICdub3dyYXAnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZsZXgtZ3JvdycsICcxJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdvdmVyZmxvdycsICdoaWRkZW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBpdGVtIGlzIGhpZGRlbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzSGlkZGVuSXRlbSA9ICh7IGhpZGRlbiB9OiBLYnFPdmVyZmxvd0l0ZW0pID0+IGhpZGRlbigpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgd2luZG93IG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFdpbmRvdygpOiBXaW5kb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gICAgfVxufVxuIl19
|