@sapphire-ion/framework 0.30.17 → 1.0.1
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/esm2022/lib/classes/inputs/table-field.mjs +8 -2
- package/esm2022/lib/components/default/default-list/list.mjs +1 -1
- package/esm2022/lib/components/default/default-table/default-table.component.mjs +18 -6
- package/esm2022/lib/components/default/default-table/th-filter/th-filter.component.mjs +12 -11
- package/esm2022/lib/components/default/default-view/default-view.component.mjs +10 -10
- package/esm2022/lib/components/default/default.module.mjs +12 -4
- package/esm2022/lib/components/filter/filter.component.mjs +2 -2
- package/esm2022/lib/components/inputs/custom-input.mjs +57 -49
- package/esm2022/lib/components/inputs/input-bool/input-bool.component.mjs +31 -34
- package/esm2022/lib/components/inputs/input-bool/input-bool.configuration.mjs +4 -4
- package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.mjs +33 -46
- package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.mjs +2 -2
- package/esm2022/lib/components/inputs/input-date/input-date.component.mjs +86 -97
- package/esm2022/lib/components/inputs/input-decimal/input-decimal.component.mjs +158 -190
- package/esm2022/lib/components/inputs/input-decimal/input-decimal.configuration.mjs +6 -1
- package/esm2022/lib/components/inputs/input-file/download-button/download-button.component.mjs +12 -10
- package/esm2022/lib/components/inputs/input-file/input-file.component.mjs +60 -98
- package/esm2022/lib/components/inputs/input-file/input-file.configuration.mjs +18 -5
- package/esm2022/lib/components/inputs/input-provider-factory.mjs +4 -7
- package/esm2022/lib/components/inputs/input-select/directives/sion-label-template.directive.mjs +16 -0
- package/esm2022/lib/components/inputs/input-select/directives/sion-option-template.directive.mjs +18 -0
- package/esm2022/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.mjs +16 -0
- package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +233 -264
- package/esm2022/lib/components/inputs/input-select/input.select.configuration.mjs +45 -29
- package/esm2022/lib/components/inputs/input-string/input-string.component.mjs +27 -42
- package/esm2022/lib/components/inputs/input-string/input-string.configuration.mjs +1 -1
- package/esm2022/lib/components/inputs/input-textarea/input-textarea.component.mjs +26 -38
- package/esm2022/lib/components/inputs/input-textarea/input-textarea.configuration.mjs +7 -0
- package/esm2022/lib/components/inputs/inputs.module.mjs +72 -81
- package/esm2022/lib/components/login/login-admin/login-admin.component.mjs +1 -1
- package/esm2022/lib/components/popover/sion-popover/sion-popover.component.mjs +132 -0
- package/esm2022/lib/components/popover/sion-popover.module.mjs +23 -0
- package/esm2022/lib/components/popover/sion-popover.service.mjs +33 -0
- package/esm2022/lib/components/stepper/step/step.component.mjs +3 -3
- package/esm2022/lib/components/stepper/stepper.component.mjs +13 -13
- package/esm2022/lib/guards/error.interceptor.mjs +2 -2
- package/esm2022/lib/index.mjs +10 -6
- package/esm2022/lib/services/utils.service.mjs +3 -3
- package/esm2022/lib/services/web/api-url-provider.service.mjs +2 -2
- package/esm2022/lib/services/web/http.ativo.service.mjs +2 -2
- package/fesm2022/sapphire-ion-framework.mjs +1200 -1737
- package/fesm2022/sapphire-ion-framework.mjs.map +1 -1
- package/lib/classes/inputs/table-field.d.ts +1 -0
- package/lib/components/default/default.module.d.ts +3 -1
- package/lib/components/inputs/custom-input.d.ts +26 -22
- package/lib/components/inputs/input-bool/input-bool.component.d.ts +13 -16
- package/lib/components/inputs/input-bool/input-bool.configuration.d.ts +2 -2
- package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.d.ts +13 -18
- package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.d.ts +1 -1
- package/lib/components/inputs/input-date/input-date.component.d.ts +21 -24
- package/lib/components/inputs/input-decimal/input-decimal.component.d.ts +21 -36
- package/lib/components/inputs/input-decimal/input-decimal.configuration.d.ts +3 -0
- package/lib/components/inputs/input-file/download-button/download-button.component.d.ts +2 -1
- package/lib/components/inputs/input-file/input-file.component.d.ts +20 -32
- package/lib/components/inputs/input-file/input-file.configuration.d.ts +2 -5
- package/lib/components/inputs/input-provider-factory.d.ts +1 -1
- package/lib/components/inputs/input-select/directives/sion-label-template.directive.d.ts +12 -0
- package/lib/components/inputs/input-select/directives/sion-option-template.directive.d.ts +11 -0
- package/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.d.ts +12 -0
- package/lib/components/inputs/input-select/input-select.component.d.ts +60 -58
- package/lib/components/inputs/input-select/input.select.configuration.d.ts +11 -9
- package/lib/components/inputs/input-string/input-string.component.d.ts +11 -16
- package/lib/components/inputs/input-textarea/input-textarea.component.d.ts +11 -15
- package/lib/components/inputs/input-textarea/input-textarea.configuration.d.ts +4 -0
- package/lib/components/inputs/inputs.module.d.ts +18 -21
- package/lib/components/popover/sion-popover/sion-popover.component.d.ts +30 -0
- package/lib/components/popover/sion-popover.module.d.ts +8 -0
- package/lib/components/popover/sion-popover.service.d.ts +12 -0
- package/lib/components/stepper/step/step.component.d.ts +1 -1
- package/lib/components/stepper/stepper.component.d.ts +3 -6
- package/lib/index.d.ts +5 -4
- package/lib/services/utils.service.d.ts +1 -1
- package/package.json +2 -1
- package/themes/compiled-styles.scss +157 -4
- package/themes/components/default/default-table/default-table.component.scss +0 -13
- package/themes/components/default/default-table/th-filter/th-filter.component.scss +0 -3
- package/themes/components/inputs/input-bool/input-bool.component.scss +2 -13
- package/themes/components/inputs/input-date/input-date.component.scss +33 -34
- package/themes/components/inputs/input-decimal/input-decimal.component.scss +8 -42
- package/themes/components/inputs/input-file/input-file.component.scss +16 -2
- package/themes/components/inputs/input-select/input-select.component.scss +47 -24
- package/themes/components/inputs/input-textarea/input-textarea.component.scss +7 -0
- package/themes/components/inputs/inputs.scss +103 -49
- package/themes/components/inputs_old/inputs.scss +67 -0
- package/themes/components/popover/sion-popover/sion-popover.component.scss +48 -0
- package/themes/styles/components.scss +34 -0
- package/themes/styles/ionic/ion-datetime.scss +3 -2
- package/esm2022/lib/components/inputs/custom-signal-input.mjs +0 -74
- package/esm2022/lib/components/inputs/input-color/input-color.component.mjs +0 -487
- package/esm2022/lib/components/inputs/input-loading/input-loading.component.mjs +0 -16
- package/esm2022/lib/components/inputs/input-select/ISelect.mjs +0 -11
- package/esm2022/lib/components/inputs/input-select/input-select-internal-option/input-select-internal-option.component.mjs +0 -42
- package/esm2022/lib/components/inputs/input-select/input-select-option/input-select-option.component.mjs +0 -46
- package/esm2022/lib/components/inputs/input-select/input-select-template.directive.mjs +0 -16
- package/lib/components/inputs/custom-signal-input.d.ts +0 -38
- package/lib/components/inputs/input-color/input-color.component.d.ts +0 -80
- package/lib/components/inputs/input-loading/input-loading.component.d.ts +0 -7
- package/lib/components/inputs/input-select/ISelect.d.ts +0 -21
- package/lib/components/inputs/input-select/input-select-internal-option/input-select-internal-option.component.d.ts +0 -18
- package/lib/components/inputs/input-select/input-select-option/input-select-option.component.d.ts +0 -24
- package/lib/components/inputs/input-select/input-select-template.directive.d.ts +0 -8
- package/themes/components/inputs/input-loading/input-loading.component.scss +0 -0
- package/themes/components/inputs/input-select/input-select-internal-option/input-select-internal-option.component.scss +0 -0
- package/themes/components/inputs/input-select/input-select-option/input-select-option.component.scss +0 -0
- /package/themes/components/{inputs → inputs_old}/input-color/input-color.component.scss +0 -0
|
@@ -1,322 +1,291 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
|
1
|
+
import { Component, computed, ContentChild, effect, ElementRef, HostListener, inject, Injector, input, model, signal, TemplateRef, ViewChild, } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { IonModal } from '@ionic/angular';
|
|
4
|
+
import { debounceTime, distinctUntilChanged, Subject, takeUntil } from 'rxjs';
|
|
6
5
|
import { BindLabelFactory, BindValueFactory, InputSelectConfiguration } from './input.select.configuration';
|
|
7
|
-
import {
|
|
8
|
-
import { InputSelectOptionComponent } from './input-select-option/input-select-option.component';
|
|
9
|
-
import { ISelect } from './ISelect';
|
|
6
|
+
import { SIonPopoverComponent } from '../../popover/sion-popover/sion-popover.component';
|
|
10
7
|
import { InputProviderFactory } from '../input-provider-factory';
|
|
11
|
-
import {
|
|
8
|
+
import { CustomInput } from '../custom-input';
|
|
12
9
|
import { Search } from '../../../services/utils.service';
|
|
10
|
+
import { SIonPlaceholderTemplateDirective } from './directives/sion-placeholder-template.directive';
|
|
11
|
+
import { SIonOptionTemplateDirective } from './directives/sion-option-template.directive';
|
|
12
|
+
import { SIonLabelTemplateDirective } from './directives/sion-label-template.directive';
|
|
13
|
+
import { HttpServiceAtivo } from '../../../services/web/http.ativo.service';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "@angular
|
|
15
|
+
import * as i1 from "@ionic/angular";
|
|
15
16
|
import * as i2 from "@angular/common";
|
|
16
|
-
import * as i3 from "@
|
|
17
|
-
import * as i4 from "
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
import * as i3 from "@angular/forms";
|
|
18
|
+
import * as i4 from "../../popover/sion-popover/sion-popover.component";
|
|
19
|
+
export class NewInputSelectComponent extends CustomInput {
|
|
20
|
+
SetCurrentItemLabel() {
|
|
21
|
+
if (this.configuration().multiple) {
|
|
22
|
+
this.currentLabel = this.lstOptions.filter(p => p.selected).map(p => p.label).join(', ');
|
|
23
|
+
this.currentItems = this.lstOptions.filter(p => p.selected);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.currentLabel = this.lstOptions.find(p => p.selected)?.label;
|
|
27
|
+
this.currentItems = this.lstOptions.find(p => p.selected);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
UpdateLstOptions(search) {
|
|
31
|
+
// Update the search
|
|
32
|
+
if (search) {
|
|
33
|
+
this.lstOptions = Search(this.lstOptionsItemValue(), search, (item) => item.label);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.lstOptions = this.lstOptionsItemValue();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
UpdateSelected() {
|
|
40
|
+
if (this.configuration().multiple) {
|
|
41
|
+
const arr = this.value() || [];
|
|
42
|
+
for (const item of this.lstOptions) {
|
|
43
|
+
item.selected = arr.find(p => p == item.value) != undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.lstOptions.forEach((item) => { item.selected = this.value() == item.value; });
|
|
48
|
+
}
|
|
49
|
+
this.SetCurrentItemLabel();
|
|
50
|
+
}
|
|
51
|
+
focus(event) { }
|
|
52
|
+
constructor() {
|
|
22
53
|
super();
|
|
23
|
-
this.controlContainer = controlContainer;
|
|
24
|
-
this.elementRef = elementRef;
|
|
25
54
|
/** Items disponíveis no select */
|
|
26
55
|
this.items = model([]);
|
|
27
56
|
/** Configuração do select */
|
|
28
|
-
this.configuration =
|
|
57
|
+
this.configuration = input(new InputSelectConfiguration());
|
|
29
58
|
this.loadingFromLoader = false;
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return
|
|
59
|
+
this.currentLabel = undefined;
|
|
60
|
+
this.currentItems = undefined;
|
|
61
|
+
this.lstOptionsItemValue = computed(() => {
|
|
62
|
+
const bindLabel = BindLabelFactory(this.configuration());
|
|
63
|
+
const bindValue = BindValueFactory(this.configuration());
|
|
64
|
+
return this.items().filter(p => this.somenteAtivos() && this.isServiceAtivo() ? p.ativo : true).map(p => {
|
|
65
|
+
const item = new ItemValue();
|
|
66
|
+
item.label = bindLabel(p);
|
|
67
|
+
item.value = bindValue(p);
|
|
68
|
+
item.item = p;
|
|
69
|
+
item.selected = this.value() == item.value;
|
|
70
|
+
item.disabled = p.disabled || false || (this.isServiceAtivo && p.ativo == false);
|
|
71
|
+
return item;
|
|
72
|
+
});
|
|
36
73
|
});
|
|
37
|
-
this.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
this.
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
effect(() => { this.Update(); }, { allowSignalWrites: true });
|
|
52
|
-
this.updateInterval = interval(1000);
|
|
53
|
-
this.updateSubscription = this.updateInterval.subscribe(() => {
|
|
54
|
-
if (this.lastItemsQtd != this.items().length) {
|
|
55
|
-
this.lastItemsQtd = this.items().length;
|
|
56
|
-
this.Update();
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
ngOnDestroy() {
|
|
61
|
-
this.updateSubscription.unsubscribe();
|
|
74
|
+
this.lstOptions = [];
|
|
75
|
+
this.isServiceAtivo = computed(() => { return this.configuration().loadFromService instanceof HttpServiceAtivo; });
|
|
76
|
+
this.somenteAtivos = signal(true);
|
|
77
|
+
this.selectedIndex = undefined;
|
|
78
|
+
this.searchBarControl = new FormControl('');
|
|
79
|
+
this.searchValue = signal("");
|
|
80
|
+
this.searchBarSubscription = null;
|
|
81
|
+
this.destroy$ = new Subject();
|
|
82
|
+
this.injector = inject(Injector);
|
|
83
|
+
this.floatingVisible = false;
|
|
84
|
+
effect(() => {
|
|
85
|
+
this.UpdateLstOptions(this.searchValue());
|
|
86
|
+
this.UpdateSelected();
|
|
87
|
+
}, { allowSignalWrites: true });
|
|
62
88
|
}
|
|
63
|
-
ngOnInit() {
|
|
64
|
-
super.ngOnInit();
|
|
89
|
+
async ngOnInit() {
|
|
90
|
+
await super.ngOnInit();
|
|
65
91
|
this.configuration().loader.AddComponent(this);
|
|
66
92
|
this.configuration().loader.Refresh(this.items());
|
|
67
93
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
this.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
94
|
+
HandleKeyboardEvent(event) {
|
|
95
|
+
// [ Popover ]
|
|
96
|
+
if (this.selectContent?.nativeElement?.contains(event.target)) {
|
|
97
|
+
if (event.key == "Tab") {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
else if (event.key == "Escape") {
|
|
102
|
+
event.preventDefault();
|
|
103
|
+
event.stopPropagation();
|
|
104
|
+
this.Dismiss();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
81
107
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (
|
|
85
|
-
|
|
86
|
-
this.
|
|
108
|
+
// [ inputContainer ]
|
|
109
|
+
if (this.inputContainer.nativeElement.contains(event.target)) {
|
|
110
|
+
if (["ArrowDown", "ArrowUp"].includes(event.key)) {
|
|
111
|
+
event.preventDefault();
|
|
112
|
+
this.Present(event);
|
|
113
|
+
return;
|
|
87
114
|
}
|
|
88
|
-
return;
|
|
89
115
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
116
|
+
// [ inputSelectSearchBar ]
|
|
117
|
+
if (this.inputSearchBar.nativeElement == event.target) {
|
|
118
|
+
if (event.key == "Enter") {
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
// If the select is not ativo ignore the selected item
|
|
121
|
+
const item = this.lstOptions[this.selectedIndex];
|
|
122
|
+
if (this.isServiceAtivo() && !item.item.ativo) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.Select(item);
|
|
94
126
|
return;
|
|
95
127
|
}
|
|
96
|
-
else if (
|
|
97
|
-
this.
|
|
98
|
-
|
|
128
|
+
else if (event.key == "ArrowDown") {
|
|
129
|
+
if (this.selectedIndex == undefined) {
|
|
130
|
+
this.selectedIndex = 0;
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
event.preventDefault();
|
|
134
|
+
this.selectedIndex = (this.selectedIndex < this.lstOptions.length - 1 ? this.selectedIndex + 1 : this.selectedIndex);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
else if (event.key == "ArrowUp") {
|
|
138
|
+
if (this.selectedIndex == undefined) {
|
|
139
|
+
this.selectedIndex = 0;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
this.selectedIndex = (this.selectedIndex > 0 ? this.selectedIndex - 1 : this.selectedIndex);
|
|
99
144
|
return;
|
|
100
145
|
}
|
|
101
|
-
this.CurrentLabel = "";
|
|
102
|
-
this.CurrentlyNoValue = false;
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
UpdateSelected() {
|
|
107
|
-
if (this.lstOptions && this.lstOptions.length) {
|
|
108
|
-
this.lstOptions.forEach(p => p.isSelected = false);
|
|
109
|
-
this.lstOptions.filter(p => Array.isArray(this._model) ? this._model.includes(p.value) : this._model == p.value).forEach(p => p.isSelected = true);
|
|
110
146
|
}
|
|
111
147
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
148
|
+
ngAfterViewInit() {
|
|
149
|
+
const observable = this.searchBarControl.valueChanges.pipe(takeUntil(this.destroy$), distinctUntilChanged(), debounceTime(200));
|
|
150
|
+
this.searchBarSubscription = observable.subscribe((value) => {
|
|
151
|
+
this.selectedIndex = undefined;
|
|
152
|
+
this.searchValue.set(value);
|
|
153
|
+
});
|
|
117
154
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (this._model && this.items()) {
|
|
124
|
-
return this.items().filter(p => Array.isArray(this._model) ? this._model.includes(this.bindValue()(p)) : this._model == this.bindValue()(p));
|
|
155
|
+
ClearSearchBar() {
|
|
156
|
+
this.destroy$.next();
|
|
157
|
+
this.destroy$.complete();
|
|
158
|
+
if (this.searchBarSubscription) {
|
|
159
|
+
this.searchBarSubscription.unsubscribe();
|
|
125
160
|
}
|
|
126
|
-
return [];
|
|
127
161
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
this.SetModel(value);
|
|
131
|
-
this.propagateChange(this._model);
|
|
162
|
+
ngOnDestroy() {
|
|
163
|
+
this.ClearSearchBar();
|
|
132
164
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
this._model = value;
|
|
139
|
-
this.Update();
|
|
140
|
-
return;
|
|
165
|
+
writeValue(obj) {
|
|
166
|
+
this.value.set(obj);
|
|
167
|
+
this.runValidation();
|
|
168
|
+
this.UpdateSelected();
|
|
141
169
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
170
|
+
SetValue(obj) {
|
|
171
|
+
this.value.set(obj);
|
|
172
|
+
this.runValidation();
|
|
173
|
+
this.UpdateSelected();
|
|
174
|
+
this.propagateChange(this.value());
|
|
175
|
+
if (!this.configuration().multiple) {
|
|
176
|
+
this.Dismiss();
|
|
147
177
|
}
|
|
148
178
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
179
|
+
Clear(event) {
|
|
180
|
+
event.stopPropagation();
|
|
181
|
+
if (this.configuration().multiple) {
|
|
182
|
+
this.SetValue([]);
|
|
152
183
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
UpdateUseDefaultModelOptions() {
|
|
156
|
-
this.useDefaultModelOptions.set(this.GetUseDefaultModelOptions());
|
|
157
|
-
if (this.useDefaultModelOptions()) {
|
|
158
|
-
if (this.items().length != this.lstOptions.length) {
|
|
159
|
-
this.items.set(this.lstOptions.map(p => p.model()));
|
|
160
|
-
}
|
|
184
|
+
else {
|
|
185
|
+
this.SetValue(undefined);
|
|
161
186
|
}
|
|
162
187
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
var value = this.bindValue()(item);
|
|
172
|
-
if (this._model) {
|
|
173
|
-
if (this._model.includes(value)) {
|
|
174
|
-
this.model = [...this._model.filter(p => p != value)];
|
|
188
|
+
Select(itemValue) {
|
|
189
|
+
const item = itemValue.value;
|
|
190
|
+
if (this.configuration().multiple) {
|
|
191
|
+
const currentValue = this.value();
|
|
192
|
+
if (Array.isArray(currentValue)) {
|
|
193
|
+
const index = currentValue.findIndex(p => p == item);
|
|
194
|
+
if (index > -1) {
|
|
195
|
+
currentValue.splice(index, 1);
|
|
175
196
|
}
|
|
176
197
|
else {
|
|
177
|
-
|
|
198
|
+
currentValue.push(item);
|
|
178
199
|
}
|
|
179
|
-
|
|
200
|
+
this.SetValue([...currentValue]);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
this.SetValue([item]);
|
|
180
204
|
}
|
|
181
|
-
this.model = [value];
|
|
182
|
-
return;
|
|
183
205
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
const Popover = this.ionPopoverComponent;
|
|
188
|
-
const PopoverElement = this.ionPopoverElement.nativeElement;
|
|
189
|
-
const PopoverContent = Array.from(Array.from(PopoverElement.shadowRoot.children).find(p => p.classList.contains("popover-wrapper")).children).find(p => p.classList.contains("popover-content"));
|
|
190
|
-
PopoverContent.style.width = this.inputContainer.nativeElement.offsetWidth + 'px';
|
|
191
|
-
await Popover.present($event);
|
|
192
|
-
this.searchbarComponent.setFocus();
|
|
193
|
-
if (this.cdkVirtualScrollViewport) {
|
|
194
|
-
this.cdkVirtualScrollViewport.nativeElement.scroll({ top: 1, behavior: 'smooth' });
|
|
206
|
+
else {
|
|
207
|
+
this.SetValue(item);
|
|
208
|
+
this.Dismiss();
|
|
195
209
|
}
|
|
196
|
-
this.focusedModel = null;
|
|
197
|
-
this.UpdateUseDefaultModelOptions();
|
|
198
210
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
211
|
+
async Present(event) {
|
|
212
|
+
if (isPortrait()) {
|
|
213
|
+
// Modal
|
|
214
|
+
await this.modal.present();
|
|
215
|
+
this.inputSearchBar.nativeElement.focus();
|
|
202
216
|
return;
|
|
203
217
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
this.itemComponent.nativeElement.click();
|
|
208
|
-
event.preventDefault();
|
|
209
|
-
}
|
|
210
|
-
else if (event.target == searchbarComponent) {
|
|
211
|
-
this.UpdateUseDefaultModelOptions();
|
|
212
|
-
const items = this.lstSearchItens();
|
|
213
|
-
if (event.key == "ArrowDown") {
|
|
214
|
-
if (this.focusedModel) {
|
|
215
|
-
const index = items.indexOf(this.focusedModel);
|
|
216
|
-
if (items[index + 1]) {
|
|
217
|
-
this.SetFocusedElement(items[index + 1]);
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
this.SetFocusedElement(items[0]);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
if (items[0]) {
|
|
225
|
-
this.SetFocusedElement(items[0]);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
else if (event.key == "ArrowUp") {
|
|
230
|
-
if (this.focusedModel) {
|
|
231
|
-
const index = items.indexOf(this.focusedModel);
|
|
232
|
-
if (items[index - 1]) {
|
|
233
|
-
this.SetFocusedElement(items[index - 1]);
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
this.SetFocusedElement(items[items.length - 1]);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
else if (event.key == "Enter") {
|
|
241
|
-
var Option;
|
|
242
|
-
if (this.useDefaultModelOptions()) {
|
|
243
|
-
Option = this.lstOptions.find(p => p.model() == this.focusedModel);
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
Option = this.lstInternalOptions.find(p => p.model == this.focusedModel);
|
|
247
|
-
}
|
|
248
|
-
if (!Option.disabled) {
|
|
249
|
-
this.Select(this.focusedModel);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
218
|
+
// Popover
|
|
219
|
+
await this.popover.present(event);
|
|
220
|
+
this.inputSearchBar.nativeElement.focus();
|
|
253
221
|
}
|
|
254
|
-
|
|
255
|
-
this.
|
|
256
|
-
|
|
257
|
-
if (this.useDefaultModelOptions()) {
|
|
258
|
-
Option = this.lstOptions.find(p => p.model() == focusedModel);
|
|
259
|
-
this.lstOptions.filter(p => p.onFocus).forEach(p => p.onFocus = false);
|
|
260
|
-
Option.onFocus = true;
|
|
222
|
+
async Dismiss() {
|
|
223
|
+
if (this.modal) {
|
|
224
|
+
await this.modal.dismiss();
|
|
261
225
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
this.lstInternalOptions.filter(p => p.onFocus).forEach(p => p.onFocus = false);
|
|
265
|
-
Option.onFocus = true;
|
|
226
|
+
if (this.popover) {
|
|
227
|
+
await this.popover.dismiss();
|
|
266
228
|
}
|
|
267
|
-
|
|
268
|
-
|
|
229
|
+
this.selectedIndex = undefined;
|
|
230
|
+
if (this.inputSelectLabel?.nativeElement) {
|
|
231
|
+
this.inputSelectLabel.nativeElement.focus();
|
|
269
232
|
}
|
|
270
233
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
])], queries: [{ propertyName: "lstOptions", predicate: InputSelectOptionComponent }], viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, read: (ElementRef) }, { propertyName: "inputContainer", first: true, predicate: ["container"], descendants: true, read: ElementRef }, { propertyName: "ionPopoverComponent", first: true, predicate: IonPopover, descendants: true }, { propertyName: "ionPopoverElement", first: true, predicate: IonPopover, descendants: true, read: ElementRef }, { propertyName: "searchbarComponent", first: true, predicate: IonSearchbar, descendants: true }, { propertyName: "inputComponent", first: true, predicate: IonInput, descendants: true }, { propertyName: "itemComponent", first: true, predicate: IonItem, descendants: true, read: ElementRef }, { propertyName: "lstInternalOptions", predicate: InputSelectInternalOptionComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"relative flex overflow-hidden\" #container>\r\n <ion-card \r\n class=\"focus-within:on-focus ion-card-input\" \r\n [disabled]=\"loading || loadingFromLoader || disabled\" \r\n [class.invalid]=\"invalid\"\r\n [class.submitted]=\"submitted\"\r\n [class.disabled]=\"disabled\"\r\n [ngClass]=\"{'!rounded-l-2xl !rounded-r-none !border-r-0': configuration().clearable}\"\r\n >\r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl w-full relative\" (click)=\"PresentPopover($event)\" [ngClass]=\"{'!rounded-l-2xl !rounded-r-none': configuration().clearable }\">\r\n <ion-input fill=\"none\" [readonly]=\"true\" labelPlacement=\"stacked\" [value]=\"CurrentLabel\" [class.no-items-opacity]=\"CurrentlyNoValue\">\r\n <ion-text id=\"label\" [ngClass]=\"{'required': required() }\" slot=\"label\" class=\"!text-dark\"> \r\n {{label}} \r\n </ion-text>\r\n </ion-input>\r\n @if(configuration().multiple){\r\n <div class=\"absolute left-0 bottom-0 h-6 w-full flex z-[90] overflow-x-auto\">\r\n @for(item of GetSelectedItens(); track $index){\r\n <div class=\"h-full flex bg-medium/10 border translucid-border rounded-lg mr-1 animated\">\r\n <div (click)=\"Select(item); $event.stopPropagation()\" class=\"bg-medium/10 cursor-pointer translucid-border min-w-min !border-l-0 !border-y-0 h-full aspect-square flex items-center justify-center rounded-r-lg\"> \r\n <ion-icon color=\"danger\" name=\"close\"></ion-icon>\r\n </div>\r\n <div class=\"h-full px-1 select-none\"> {{bindLabel()(item)}} </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </ion-item>\r\n \r\n </ion-card-content>\r\n </ion-card>\r\n <input-loading [loading]=\"loading || loadingFromLoader\"></input-loading>\r\n @if(configuration().clearable){\r\n <div class=\"w-12\">\r\n <ion-button (click)=\"Clear()\" [disabled]=\"loading || disabled || loadingFromLoader\" size=\"small\" fill=\"outline\" color=\"medium\" class=\"rounded-r-2xl h-full w-full\" style=\"--border-width: 1px 1px 2px 1px;\">\r\n <ion-icon name=\"backspace\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n </div>\r\n }\r\n</div>\r\n\r\n<ion-popover class=\"input-select-popover\" [keepContentsMounted]=\"false\" [dismissOnSelect]=\"!configuration().multiple\" (didDismiss)=\"Search.set('')\">\r\n <ng-template>\r\n <div class=\"size-full flex flex-col bg-primary/10\">\r\n <div class=\"w-full shrink-0\" [hidden]=\"!configuration().searcheable\">\r\n <ion-searchbar [(ngModel)]=\"Search\" (ngModelChange)=\"SearchChanged()\" placeholder=\"Pesquisa...\" class=\"size-full bg-transparent\" [debounce]=\"100\"></ion-searchbar>\r\n </div>\r\n\r\n <div class=\"h-48 w-full overflow-hidden translucid-border !border-x-0 !border-b-0 rounded-t-2xl bg-light\" [ngClass]=\"{'!border-0': !configuration().searcheable}\">\r\n @if(!lstOptions || !lstOptions.length){\r\n <cdk-virtual-scroll-viewport itemSize=\"45\" [minBufferPx]=\"200\" [maxBufferPx]=\"300\" class=\"size-full\">\r\n <input-select-internal-option [model]=\"item\" *cdkVirtualFor=\"let item of lstSearchItens()\" [isSelected]=\"IsSelected(item)\">\r\n <ion-label class=\"truncate\">{{bindLabel()(item)}}</ion-label>\r\n </input-select-internal-option>\r\n </cdk-virtual-scroll-viewport>\r\n }\r\n @else {\r\n <div class=\"size-full overflow-y-auto overflow-x-hidden mask-y\">\r\n <ng-content select=\"input-select-option\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n</ion-popover>", styles: [".no-items-opacity{--color: color-mix(in srgb, var(--ion-color-dark) 60%, transparent 40%)}.rounded-2xl,.\\!rounded-2xl{--border-radius: 1rem}.rounded-r-2xl,.\\!rounded-r-2xl{--border-radius: 0rem 1rem 1rem 0rem}.rounded-l-2xl,.\\!rounded-l-2xl{--border-radius: 1rem 0rem 0rem 1rem}.rounded-tr-none,.\\!rounded-tr-none{--border-radius: 0rem 0rem 1rem 0rem}\n", ".on-hover{background:color-mix(in srgb,var(--ion-color-light) 97%,transparent 3%)}.on-hover:hover{transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.ion-card-input{margin:0;display:flex;height:100%;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:1rem;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-light) 97%,transparent 3%);border-bottom-color:var(--ion-color-medium);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-width:1px 1px 2px 1px;min-height:58px;max-height:58px;height:58px}ion-card.ion-card-input:hover{background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.ion-card-input.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 75%,transparent 25%)!important}ion-card.ion-card-input.disabled{background-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%)!important}ion-card.ion-card-input ion-card-content{width:100%;height:100%;background-color:transparent;padding:0}ion-item{--background: transparent}ion-text#label.required:after{content:\"*\";color:var(--ion-color-danger);vertical-align:text-bottom;font-size:small}ion-text#label:not(.required):after{content:var(--input-opcional-label, \"(Opcional)\");color:var(--ion-color-medium);vertical-align:text-bottom;font-size:small}.on-focus{border-bottom-color:var(--ion-color-primary)}.focus-within\\:on-focus:focus-within{border-bottom-color:var(--ion-color-primary)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocapitalize", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "maxlength", "minlength", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i3.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i4.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i5.InputLoadingComponent, selector: "input-loading", inputs: ["loading"] }, { kind: "component", type: i6.InputSelectInternalOptionComponent, selector: "input-select-internal-option", inputs: ["hidden", "disabled", "label", "model", "isSelected"], outputs: ["labelChange"] }] }); }
|
|
234
|
+
OnDismiss() {
|
|
235
|
+
this.floatingVisible = false;
|
|
236
|
+
this.searchValue.set('');
|
|
237
|
+
this.searchBarControl.setValue('');
|
|
238
|
+
}
|
|
239
|
+
OnPresent() {
|
|
240
|
+
this.floatingVisible = true;
|
|
241
|
+
}
|
|
242
|
+
isArray(obj) {
|
|
243
|
+
return Array.isArray(obj);
|
|
244
|
+
}
|
|
245
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NewInputSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
246
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NewInputSelectComponent, selector: "input-select", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { items: "itemsChange" }, host: { listeners: { "document:keydown": "HandleKeyboardEvent($event)" } }, providers: [...InputProviderFactory.GetProviders(NewInputSelectComponent)], queries: [{ propertyName: "labelTemplate", first: true, predicate: SIonLabelTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SIonOptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: SIonPlaceholderTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }, { propertyName: "inputSelectLabel", first: true, predicate: ["inputSelectLabel"], descendants: true }, { propertyName: "inputSearchBar", first: true, predicate: ["inputSearchBar"], descendants: true }, { propertyName: "selectContent", first: true, predicate: ["selectContent"], descendants: true }, { propertyName: "popover", first: true, predicate: SIonPopoverComponent, descendants: true }, { propertyName: "modal", first: true, predicate: IonModal, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"focus($event); Present($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full\">\r\n <div class=\"overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item.value); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>\r\n\r\n<ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n </ng-template>\r\n</ion-modal>\r\n\r\n<sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n</sion-popover>\r\n\r\n<ng-template #selectContentTemplate>\r\n <div #selectContent class=\"select-content\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @if(floatingVisible){\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 1px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:transform;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss", "visibleChange"] }] }); }
|
|
277
247
|
}
|
|
278
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type:
|
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NewInputSelectComponent, decorators: [{
|
|
279
249
|
type: Component,
|
|
280
|
-
args: [{ selector: 'input-select', providers: [InputProviderFactory.GetProvider(InputSelectComponent, [
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
type: SkipSelf
|
|
291
|
-
}] }, { type: i0.ElementRef }], propDecorators: { lstOptions: [{
|
|
292
|
-
type: ContentChildren,
|
|
293
|
-
args: [InputSelectOptionComponent]
|
|
294
|
-
}], lstInternalOptions: [{
|
|
295
|
-
type: ViewChildren,
|
|
296
|
-
args: [InputSelectInternalOptionComponent]
|
|
297
|
-
}], cdkVirtualScrollViewport: [{
|
|
298
|
-
type: ViewChild,
|
|
299
|
-
args: [CdkVirtualScrollViewport, { read: (ElementRef) }]
|
|
250
|
+
args: [{ selector: 'input-select', providers: [...InputProviderFactory.GetProviders(NewInputSelectComponent)], template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"focus($event); Present($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full\">\r\n <div class=\"overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item.value); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>\r\n\r\n<ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n </ng-template>\r\n</ion-modal>\r\n\r\n<sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n</sion-popover>\r\n\r\n<ng-template #selectContentTemplate>\r\n <div #selectContent class=\"select-content\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @if(floatingVisible){\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 1px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:transform;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
|
|
251
|
+
}], ctorParameters: () => [], propDecorators: { labelTemplate: [{
|
|
252
|
+
type: ContentChild,
|
|
253
|
+
args: [SIonLabelTemplateDirective, { read: TemplateRef }]
|
|
254
|
+
}], optionTemplate: [{
|
|
255
|
+
type: ContentChild,
|
|
256
|
+
args: [SIonOptionTemplateDirective, { read: TemplateRef }]
|
|
257
|
+
}], placeholderTemplate: [{
|
|
258
|
+
type: ContentChild,
|
|
259
|
+
args: [SIonPlaceholderTemplateDirective, { read: TemplateRef }]
|
|
300
260
|
}], inputContainer: [{
|
|
301
261
|
type: ViewChild,
|
|
302
|
-
args: ['
|
|
303
|
-
}],
|
|
262
|
+
args: ['inputContainer']
|
|
263
|
+
}], inputSelectLabel: [{
|
|
304
264
|
type: ViewChild,
|
|
305
|
-
args: [
|
|
306
|
-
}],
|
|
265
|
+
args: ['inputSelectLabel']
|
|
266
|
+
}], HandleKeyboardEvent: [{
|
|
267
|
+
type: HostListener,
|
|
268
|
+
args: ['document:keydown', ['$event']]
|
|
269
|
+
}], inputSearchBar: [{
|
|
307
270
|
type: ViewChild,
|
|
308
|
-
args: [
|
|
309
|
-
}],
|
|
271
|
+
args: ['inputSearchBar']
|
|
272
|
+
}], selectContent: [{
|
|
310
273
|
type: ViewChild,
|
|
311
|
-
args: [
|
|
312
|
-
}],
|
|
274
|
+
args: ['selectContent']
|
|
275
|
+
}], popover: [{
|
|
313
276
|
type: ViewChild,
|
|
314
|
-
args: [
|
|
315
|
-
}],
|
|
277
|
+
args: [SIonPopoverComponent]
|
|
278
|
+
}], modal: [{
|
|
316
279
|
type: ViewChild,
|
|
317
|
-
args: [
|
|
318
|
-
}], HandleKeyboardEvent: [{
|
|
319
|
-
type: HostListener,
|
|
320
|
-
args: ['document:keydown', ['$event']]
|
|
280
|
+
args: [IonModal]
|
|
321
281
|
}] } });
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtc2VsZWN0L2lucHV0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWtDLFFBQVEsRUFBRSxTQUFTLEVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQWtCLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeFAsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQTRCLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXVCLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakksT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDM0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJC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SEFpRWM7OzRGRHZDRCxvQkFBb0I7a0JBWmhDLFNBQVM7K0JBQ0UsY0FBYyxhQUdiLENBQUMsb0JBQW9CLENBQUMsV0FBVyx1QkFDMUM7NEJBQ0U7Z0NBQ0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs2QkFDdEU7eUJBQ0YsQ0FDRixDQUFDOzswQkF5QkMsUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUTtrRUFmYyxVQUFVO3NCQUF0RCxlQUFlO3VCQUFDLDBCQUEwQjtnQkFDTyxrQkFBa0I7c0JBQW5FLFlBQVk7dUJBQUMsa0NBQWtDO2dCQUNnQix3QkFBd0I7c0JBQXZGLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQSxVQUFlLENBQUEsRUFBRTtnQkFrTGhCLGNBQWM7c0JBQTNELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDckIsbUJBQW1CO3NCQUF6QyxTQUFTO3VCQUFDLFVBQVU7Z0JBQ3dCLGlCQUFpQjtzQkFBN0QsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNsQixrQkFBa0I7c0JBQTFDLFNBQVM7dUJBQUMsWUFBWTtnQkE4QkYsY0FBYztzQkFBbEMsU0FBUzt1QkFBQyxRQUFRO2dCQUN3QixhQUFhO3NCQUF2RCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBRWxDLG1CQUFtQjtzQkFEeEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBIb3N0LCBIb3N0TGlzdGVuZXIsIE1vZGVsU2lnbmFsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFF1ZXJ5TGlzdCwgU2lnbmFsLCBTa2lwU2VsZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFdyaXRhYmxlU2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBmb3J3YXJkUmVmLCBtb2RlbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElvbklucHV0LCBJb25JdGVtLCBJb25Qb3BvdmVyLCBJb25TZWFyY2hiYXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5cclxuaW1wb3J0IHsgQmluZExhYmVsRmFjdG9yeSwgQmluZFZhbHVlRmFjdG9yeSwgRGVmYXVsdE1vZGVsT3B0aW9ucywgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9pbnB1dC5zZWxlY3QuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IElucHV0U2VsZWN0SW50ZXJuYWxPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2lucHV0LXNlbGVjdC1pbnRlcm5hbC1vcHRpb24vaW5wdXQtc2VsZWN0LWludGVybmFsLW9wdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbnB1dFNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vaW5wdXQtc2VsZWN0LW9wdGlvbi9pbnB1dC1zZWxlY3Qtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElTZWxlY3QsIElTZWxlY3RPcHRpb24gfSBmcm9tICcuL0lTZWxlY3QnO1xyXG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4uL2lucHV0LXByb3ZpZGVyLWZhY3RvcnknO1xyXG5pbXBvcnQgeyBDdXN0b21TaWduYWxJbnB1dCB9IGZyb20gJy4uL2N1c3RvbS1zaWduYWwtaW5wdXQnO1xyXG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW5wdXQtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1zZWxlY3QuY29tcG9uZW50LnNjc3MnLCAnLi4vaW5wdXRzLnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtJbnB1dFByb3ZpZGVyRmFjdG9yeS5HZXRQcm92aWRlcihJbnB1dFNlbGVjdENvbXBvbmVudCwgXHJcbiAgICBbXHJcbiAgICAgIHsgXHJcbiAgICAgICAgcHJvdmlkZTogSVNlbGVjdCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRTZWxlY3RDb21wb25lbnQpXHJcbiAgICAgIH1cclxuICAgIF1cclxuICApXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBDdXN0b21TaWduYWxJbnB1dDxhbnk+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJU2VsZWN0IHtcclxuXHJcbiAgLyoqIEl0ZW1zIGRpc3BvbsOtdmVpcyBubyBzZWxlY3QgKi9cclxuICBwdWJsaWMgaXRlbXMgICAgICAgICAgICA6IE1vZGVsU2lnbmFsPGFueVtdPiAgICAgICAgICAgICAgICAgICAgPSBtb2RlbDxhbnlbXT4oW10pO1xyXG4gIC8qKiBDb25maWd1cmHDp8OjbyBkbyBzZWxlY3QgKi9cclxuICBwdWJsaWMgY29uZmlndXJhdGlvbiAgICA6IE1vZGVsU2lnbmFsPElucHV0U2VsZWN0Q29uZmlndXJhdGlvbj4gPSBtb2RlbDxJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24+KG5ldyBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24oKSk7IFxyXG4gIHB1YmxpYyBsb2FkaW5nRnJvbUxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKElucHV0U2VsZWN0T3B0aW9uQ29tcG9uZW50KSBsc3RPcHRpb25zOiBRdWVyeUxpc3Q8SW5wdXRTZWxlY3RPcHRpb25Db21wb25lbnQ+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oSW5wdXRTZWxlY3RJbnRlcm5hbE9wdGlvbkNvbXBvbmVudCkgbHN0SW50ZXJuYWxPcHRpb25zOiBRdWVyeUxpc3Q8SW5wdXRTZWxlY3RJbnRlcm5hbE9wdGlvbkNvbXBvbmVudD47XHJcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIHsgcmVhZDogRWxlbWVudFJlZjxhbnk+IH0pIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogRWxlbWVudFJlZjxhbnk+XHJcblxyXG4gIHByaXZhdGUgdXNlRGVmYXVsdE1vZGVsT3B0aW9uczogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCBiaW5kVmFsdWU6IFNpZ25hbDwoKGFyZ3M6IGFueSkgPT4gYW55KT4gICAgICAgICA9IGNvbXB1dGVkKCgpID0+IHsgXHJcbiAgICBpZih0aGlzLnVzZURlZmF1bHRNb2RlbE9wdGlvbnMoKSl7IHJldHVybiAoKG9iajogRGVmYXVsdE1vZGVsT3B0aW9ucyk6IHN0cmluZyA9PiB7IHJldHVybiBvYmoudmFsdWU7IH0pOyB9XHJcbiAgICByZXR1cm4gQmluZFZhbHVlRmFjdG9yeSh0aGlzLmNvbmZpZ3VyYXRpb24oKSk7XHJcbiAgfSk7XHJcbiAgcHJvdGVjdGVkIGJpbmRMYWJlbDogU2lnbmFsPCgoYXJnczogYW55KSA9PiBzdHJpbmcpPiAgICAgID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYodGhpcy51c2VEZWZhdWx0TW9kZWxPcHRpb25zKCkpeyByZXR1cm4gKChvYmo6IERlZmF1bHRNb2RlbE9wdGlvbnMpOiBzdHJpbmcgPT4geyByZXR1cm4gb2JqLmxhYmVsOyB9KTsgfVxyXG4gICAgcmV0dXJuIEJpbmRMYWJlbEZhY3RvcnkodGhpcy5jb25maWd1cmF0aW9uKCkpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgQFNraXBTZWxmKClcclxuICAgIG92ZXJyaWRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBvdmVycmlkZSBlbGVtZW50UmVmICAgICAgOiBFbGVtZW50UmVmXHJcbiAgKSB7IHN1cGVyKCk7XHJcbiAgICBlZmZlY3QoKCkgPT4geyB0aGlzLlVwZGF0ZSgpOyB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlSW50ZXJ2YWwgICAgID0gaW50ZXJ2YWwoMTAwMCk7XHJcbiAgICB0aGlzLnVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudXBkYXRlSW50ZXJ2YWwuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYodGhpcy5sYXN0SXRlbXNRdGQgIT0gdGhpcy5pdGVtcygpLmxlbmd0aCl7XHJcbiAgICAgICAgdGhpcy5sYXN0SXRlbXNRdGQgPSB0aGlzLml0ZW1zKCkubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuVXBkYXRlKCk7XHJcbiAgICAgIH0gXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVydmFsOiBPYnNlcnZhYmxlPG51bWJlcj4gfCBudWxsO1xyXG4gIHVwZGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBsYXN0SXRlbXNRdGQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24oKS5sb2FkZXIuQWRkQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uKCkubG9hZGVyLlJlZnJlc2godGhpcy5pdGVtcygpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDbGVhcigpOiB2b2lkeyBcclxuICAgIHRoaXMubW9kZWwgPSBudWxsOyBcclxuICAgIHRoaXMuVXBkYXRlKCk7XHJcbiAgfVxyXG4gIFxyXG4gIHByb3RlY3RlZCBDdXJyZW50TGFiZWwgICAgICA6IHN0cmluZyAgPSBcIlwiO1xyXG4gIHByb3RlY3RlZCBDdXJyZW50bHlOb1ZhbHVlICA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgVXBkYXRlKCl7XHJcbiAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkKCk7XHJcbiAgICB0aGlzLlVwZGF0ZUN1cnJlbnRMYWJlbCgpOyBcclxuICB9XHJcbiAgcHJpdmF0ZSBVcGRhdGVDdXJyZW50TGFiZWwoKTogdm9pZHtcclxuICAgIGlmKHRoaXMuX21vZGVsID09IG51bGwpeyBcclxuICAgICAgdGhpcy5DdXJyZW50TGFiZWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24oKS5wbGFjZWhvbGRlcjtcclxuICAgICAgdGhpcy5DdXJyZW50bHlOb1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuY29uZmlndXJhdGlvbigpLm11bHRpcGxlKXtcclxuICAgICAgY29uc3QgbTogYW55IHwgbnVsbCA9IHRoaXMuaXRlbXMoKS5maW5kKHAgPT4gdGhpcy5iaW5kVmFsdWUoKShwKSA9PSB0aGlzLl9tb2RlbCk7XHJcbiAgICAgIGlmKG0peyBcclxuICAgICAgICB0aGlzLkN1cnJlbnRMYWJlbCAgICAgPSB0aGlzLmJpbmRMYWJlbCgpKG0pO1xyXG4gICAgICAgIHRoaXMuQ3VycmVudGx5Tm9WYWx1ZSA9IGZhbHNlOyBcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9ZWxzZXtcclxuICAgICAgaWYoIXRoaXMuX21vZGVsKXsgXHJcbiAgICAgICAgdGhpcy5DdXJyZW50TGFiZWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24oKS5wbGFjZWhvbGRlcjsgXHJcbiAgICAgICAgdGhpcy5DdXJyZW50bHlOb1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47IFxyXG4gICAgICB9ZWxzZVxyXG4gICAgICBpZihBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpICYmICF0aGlzLm1vZGVsLmxlbmd0aCl7IFxyXG4gICAgICAgIHRoaXMuQ3VycmVudExhYmVsID0gdGhpcy5jb25maWd1cmF0aW9uKCkucGxhY2Vob2xkZXI7IFxyXG4gICAgICAgIHRoaXMuQ3VycmVudGx5Tm9WYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuOyBcclxuICAgICAgfVxyXG4gICAgICB0aGlzLkN1cnJlbnRMYWJlbCAgICAgPSBcIlwiOyBcclxuICAgICAgdGhpcy5DdXJyZW50bHlOb1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBVcGRhdGVTZWxlY3RlZCgpe1xyXG4gICAgaWYodGhpcy5sc3RPcHRpb25zICYmIHRoaXMubHN0T3B0aW9ucy5sZW5ndGgpe1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMuZm9yRWFjaChwID0+IHAuaXNTZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgdGhpcy5sc3RPcHRpb25zLmZpbHRlcihwID0+IEFycmF5LmlzQXJyYXkodGhpcy5fbW9kZWwpID8gdGhpcy5fbW9kZWwuaW5jbHVkZXMocC52YWx1ZSkgOiB0aGlzLl9tb2RlbCA9PSBwLnZhbHVlKS5mb3JFYWNoKHAgPT4gcC5pc1NlbGVjdGVkID0gdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBJc1NlbGVjdGVkKGl0ZW06IGFueSl7XHJcbiAgICBpZihBcnJheS5pc0FycmF5KHRoaXMuX21vZGVsKSl7XHJcbiAgICAgIHJldHVybiB0aGlzLl9tb2RlbC5pbmNsdWRlcyh0aGlzLmJpbmRWYWx1ZSgpKGl0ZW0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9tb2RlbCA9PSB0aGlzLmJpbmRWYWx1ZSgpKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEFwcGxpZXMgb25seSBvbiBtdWx0aXBsZSAqL1xyXG4gIHByb3RlY3RlZCBHZXRTZWxlY3RlZEl0ZW5zKCk6IGFueVtde1xyXG4gICAgaWYodGhpcy5fbW9kZWwgJiYgdGhpcy5sc3RPcHRpb25zLmxlbmd0aCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmxzdE9wdGlvbnMuZmlsdGVyKHAgPT4gcC5pc1NlbGVjdGVkKS5tYXAocCA9PiBwLm1vZGVsKCkpOyBcclxuICAgIH1cclxuICAgIGlmKHRoaXMuX21vZGVsICYmIHRoaXMuaXRlbXMoKSl7XHJcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zKCkuZmlsdGVyKHAgPT4gQXJyYXkuaXNBcnJheSh0aGlzLl9tb2RlbCkgPyB0aGlzLl9tb2RlbC5pbmNsdWRlcyh0aGlzLmJpbmRWYWx1ZSgpKHApKSA6IHRoaXMuX21vZGVsID09IHRoaXMuYmluZFZhbHVlKCkocCkpOyBcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICAvL1sgTW9kZWwgXVxyXG4gIG92ZXJyaWRlIF9tb2RlbDogYW55ID0gbnVsbDtcclxuICBvdmVycmlkZSBnZXQgbW9kZWwoKTogYW55ICAgICAgeyByZXR1cm4gdGhpcy5fbW9kZWw7ICB9XHJcbiAgb3ZlcnJpZGUgc2V0IG1vZGVsKHZhbHVlOiBhbnkpIHsgXHJcbiAgICB0aGlzLlNldE1vZGVsKHZhbHVlKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX21vZGVsKTsgXHJcbiAgfVxyXG4gIHByb3RlY3RlZCBTZXRNb2RlbCh2YWx1ZTogYW55KTogdm9pZCB7IFxyXG4gICAgaWYodmFsdWUgPT0gbnVsbCApeyB0aGlzLl9tb2RlbCA9IG51bGw7IHJldHVybjsgfVxyXG5cclxuICAgIHRoaXMuX21vZGVsID0gdmFsdWU7XHJcblxyXG4gICAgdGhpcy5VcGRhdGUoKTtcclxuICAgIHJldHVybjsgXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgU2VhcmNoQ2hhbmdlZCgpOiB2b2lke1xyXG4gICAgaWYodGhpcy5sc3RPcHRpb25zLmxlbmd0aCl7XHJcbiAgICAgIHRoaXMudXNlRGVmYXVsdE1vZGVsT3B0aW9ucy5zZXQodHJ1ZSk7XHJcbiAgICAgIHZhciBsc3QgPSBTZWFyY2godGhpcy5sc3RPcHRpb25zLm1hcChwID0+IHAubW9kZWwoKSksIHRoaXMuU2VhcmNoKCksIHRoaXMuYmluZExhYmVsKCkpOyBcclxuICAgICAgdGhpcy5sc3RPcHRpb25zLmZvckVhY2gocCA9PiBwLmhpZGRlbiA9ICFsc3QuaW5jbHVkZXMocC5tb2RlbCgpKSlcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgcHJvdGVjdGVkIEdldFVzZURlZmF1bHRNb2RlbE9wdGlvbnMoKTogYm9vbGVhbntcclxuICAgIGlmKHRoaXMubHN0T3B0aW9ucyAmJiB0aGlzLmxzdE9wdGlvbnMubGVuZ3RoKXsgcmV0dXJuIHRydWU7IH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBVcGRhdGVVc2VEZWZhdWx0TW9kZWxPcHRpb25zKCk6IHZvaWR7XHJcbiAgICB0aGlzLnVzZURlZmF1bHRNb2RlbE9wdGlvbnMuc2V0KHRoaXMuR2V0VXNlRGVmYXVsdE1vZGVsT3B0aW9ucygpKTtcclxuICAgIGlmKHRoaXMudXNlRGVmYXVsdE1vZGVsT3B0aW9ucygpKXsgXHJcbiAgICAgIGlmKHRoaXMuaXRlbXMoKS5sZW5ndGggIT0gdGhpcy5sc3RPcHRpb25zLmxlbmd0aCl7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5zZXQodGhpcy5sc3RPcHRpb25zLm1hcChwID0+IHAubW9kZWwoKSkpOyBcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9bIFNlbGVjdCBdXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQgeyB0aGlzLlNldE1vZGVsKG9iaik7IH1cclxuXHJcbiAgcHVibGljIFNlbGVjdChpdGVtOiBhbnkpOiB2b2lke1xyXG4gICAgdGhpcy5VcGRhdGVVc2VEZWZhdWx0TW9kZWxPcHRpb25zKCk7XHJcbiAgICBcclxuICAgIGlmKCF0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7IFxyXG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5iaW5kVmFsdWUoKShpdGVtKTsgXHJcbiAgICB9IFxyXG4gICAgZWxzZXtcclxuICAgICAgdmFyIHZhbHVlID0gIHRoaXMuYmluZFZhbHVlKCkoaXRlbSk7XHJcblxyXG4gICAgICBpZih0aGlzLl9tb2RlbCl7XHJcbiAgICAgICAgaWYodGhpcy5fbW9kZWwuaW5jbHVkZXModmFsdWUpKXsgXHJcbiAgICAgICAgICB0aGlzLm1vZGVsID0gWy4uLnRoaXMuX21vZGVsLmZpbHRlcihwID0+IHAgIT0gdmFsdWUpXTsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsID0gWy4uLnRoaXMuX21vZGVsLCB2YWx1ZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5tb2RlbCA9IFt2YWx1ZV07XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbnRlcmZhY2VPcHRpb25zID0geyBjc3NDbGFzcyA6ICd3aWRlci1wb3BvdmVyJyB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpbnB1dENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChJb25Qb3BvdmVyKSBpb25Qb3BvdmVyQ29tcG9uZW50OiBJb25Qb3BvdmVyO1xyXG4gIEBWaWV3Q2hpbGQoSW9uUG9wb3ZlciwgeyByZWFkOiBFbGVtZW50UmVmIH0pIGlvblBvcG92ZXJFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKElvblNlYXJjaGJhcikgc2VhcmNoYmFyQ29tcG9uZW50OiBJb25TZWFyY2hiYXI7XHJcblxyXG4gIHB1YmxpYyBhc3luYyBQcmVzZW50UG9wb3ZlcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkZXZlbnQsICd0YXJnZXQnLCB7IHdyaXRhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMuaW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudCB9KTtcclxuICAgIGNvbnN0IFBvcG92ZXIgICAgICAgID0gdGhpcy5pb25Qb3BvdmVyQ29tcG9uZW50O1xyXG4gICAgY29uc3QgUG9wb3ZlckVsZW1lbnQgPSB0aGlzLmlvblBvcG92ZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBcclxuICAgIGNvbnN0IFBvcG92ZXJDb250ZW50ID0gQXJyYXkuZnJvbShcclxuICAgICAgQXJyYXkuZnJvbShQb3BvdmVyRWxlbWVudC5zaGFkb3dSb290LmNoaWxkcmVuKS5maW5kKFxyXG4gICAgICAgIHAgPT4gcC5jbGFzc0xpc3QuY29udGFpbnMoXCJwb3BvdmVyLXdyYXBwZXJcIilcclxuICAgICAgKS5jaGlsZHJlblxyXG4gICAgKS5maW5kKFxyXG4gICAgICBwID0+IHAuY2xhc3NMaXN0LmNvbnRhaW5zKFwicG9wb3Zlci1jb250ZW50XCIpXHJcbiAgICApIGFzIEhUTUxFbGVtZW50XHJcbiAgICBQb3BvdmVyQ29udGVudC5zdHlsZS53aWR0aCA9IHRoaXMuaW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XHJcbiAgICBhd2FpdCBQb3BvdmVyLnByZXNlbnQoJGV2ZW50KTtcclxuICAgIHRoaXMuc2VhcmNoYmFyQ29tcG9uZW50LnNldEZvY3VzKCk7XHJcblxyXG4gICAgaWYodGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpe1xyXG4gICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5uYXRpdmVFbGVtZW50LnNjcm9sbCh7IHRvcDogMSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9jdXNlZE1vZGVsID0gbnVsbDtcclxuICAgIHRoaXMuVXBkYXRlVXNlRGVmYXVsdE1vZGVsT3B0aW9ucygpO1xyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCBTZWFyY2ggICAgICAgIDogTW9kZWxTaWduYWw8c3RyaW5nPiA9IG1vZGVsPHN0cmluZz4oXCJcIik7XHJcbiAgcHJvdGVjdGVkIGxzdFNlYXJjaEl0ZW5zOiBTaWduYWw8YW55W10+ICAgICAgID0gY29tcHV0ZWQ8YW55W10+KCgpID0+IHsgcmV0dXJuIFNlYXJjaCh0aGlzLml0ZW1zKCksIHRoaXMuU2VhcmNoKCksIHRoaXMuYmluZExhYmVsKCkpOyB9KVxyXG5cclxuICAvLyNyZWdpb24gWyBBcnJvdy9UYWIgQ29udHJvbCBdXHJcbiAgQFZpZXdDaGlsZChJb25JbnB1dCkgaW5wdXRDb21wb25lbnQ6IElvbklucHV0O1xyXG4gIEBWaWV3Q2hpbGQoSW9uSXRlbSwgeyByZWFkOiBFbGVtZW50UmVmIH0pICBpdGVtQ29tcG9uZW50IDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgYXN5bmMgSGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYoIXRoaXMuaW5wdXRDb21wb25lbnQgfHwgIXRoaXMuc2VhcmNoYmFyQ29tcG9uZW50KXsgcmV0dXJuOyB9XHJcbiAgICBcclxuICAgIGNvbnN0IGlucHV0Q29tcG9uZW50ICAgICA9IGF3YWl0IHRoaXMuaW5wdXRDb21wb25lbnQuZ2V0SW5wdXRFbGVtZW50KCk7XHJcbiAgICBjb25zdCBzZWFyY2hiYXJDb21wb25lbnQgPSBhd2FpdCB0aGlzLnNlYXJjaGJhckNvbXBvbmVudC5nZXRJbnB1dEVsZW1lbnQoKTtcclxuICAgIFxyXG4gICAgaWYoZXZlbnQudGFyZ2V0ID09IGlucHV0Q29tcG9uZW50ICYmIGV2ZW50LmtleSA9PSBcIkFycm93RG93blwiICYmIHRoaXMuY29uZmlndXJhdGlvbigpLnNlYXJjaGVhYmxlKXtcclxuICAgICAgdGhpcy5pdGVtQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1lbHNlXHJcbiAgICBpZihldmVudC50YXJnZXQgPT0gc2VhcmNoYmFyQ29tcG9uZW50KXtcclxuICAgICAgdGhpcy5VcGRhdGVVc2VEZWZhdWx0TW9kZWxPcHRpb25zKCk7XHJcblxyXG4gICAgICBjb25zdCBpdGVtcyAgPSB0aGlzLmxzdFNlYXJjaEl0ZW5zKCk7XHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIkFycm93RG93blwiKXtcclxuICAgICAgICBpZih0aGlzLmZvY3VzZWRNb2RlbCl7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmluZGV4T2YodGhpcy5mb2N1c2VkTW9kZWwpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZihpdGVtc1tpbmRleCArIDFdKXtcclxuICAgICAgICAgICAgdGhpcy5TZXRGb2N1c2VkRWxlbWVudChpdGVtc1tpbmRleCArIDFdKTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLlNldEZvY3VzZWRFbGVtZW50KGl0ZW1zWzBdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGlmKGl0ZW1zWzBdKXtcclxuICAgICAgICAgICAgdGhpcy5TZXRGb2N1c2VkRWxlbWVudChpdGVtc1swXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9ZWxzZVxyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJBcnJvd1VwXCIpe1xyXG4gICAgICAgIGlmKHRoaXMuZm9jdXNlZE1vZGVsKXtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuaW5kZXhPZih0aGlzLmZvY3VzZWRNb2RlbCk7XHJcblxyXG4gICAgICAgICAgaWYoaXRlbXNbaW5kZXggLSAxXSl7XHJcbiAgICAgICAgICAgIHRoaXMuU2V0Rm9jdXNlZEVsZW1lbnQoaXRlbXNbaW5kZXggLSAxXSk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5TZXRGb2N1c2VkRWxlbWVudChpdGVtc1tpdGVtcy5sZW5ndGggLTFdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1lbHNlXHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIkVudGVyXCIpe1xyXG4gICAgICAgIHZhciBPcHRpb246IElTZWxlY3RPcHRpb247XHJcbiAgICAgICAgaWYodGhpcy51c2VEZWZhdWx0TW9kZWxPcHRpb25zKCkpe1xyXG4gICAgICAgICAgT3B0aW9uID0gdGhpcy5sc3RPcHRpb25zLmZpbmQocCA9PiBwLm1vZGVsKCkgPT0gdGhpcy5mb2N1c2VkTW9kZWwpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgT3B0aW9uID0gdGhpcy5sc3RJbnRlcm5hbE9wdGlvbnMuZmluZChwID0+IHAubW9kZWwgPT0gdGhpcy5mb2N1c2VkTW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighT3B0aW9uLmRpc2FibGVkKXtcclxuICAgICAgICAgIHRoaXMuU2VsZWN0KHRoaXMuZm9jdXNlZE1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgU2V0Rm9jdXNlZEVsZW1lbnQoZm9jdXNlZE1vZGVsOiBhbnksIHNjcm9sbDogYm9vbGVhbiA9IHRydWUsKTogdm9pZHtcclxuICAgIHRoaXMuZm9jdXNlZE1vZGVsID0gZm9jdXNlZE1vZGVsO1xyXG4gICAgXHJcbiAgICB2YXIgT3B0aW9uOiBJU2VsZWN0T3B0aW9uO1xyXG4gICAgaWYodGhpcy51c2VEZWZhdWx0TW9kZWxPcHRpb25zKCkpe1xyXG4gICAgICBPcHRpb24gPSB0aGlzLmxzdE9wdGlvbnMuZmluZChwID0+IHAubW9kZWwoKSA9PSBmb2N1c2VkTW9kZWwpO1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMuZmlsdGVyKHAgPT4gcC5vbkZvY3VzKS5mb3JFYWNoKHAgPT4gcC5vbkZvY3VzID0gZmFsc2UpO1xyXG4gICAgICBPcHRpb24ub25Gb2N1cyA9IHRydWU7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgT3B0aW9uID0gdGhpcy5sc3RJbnRlcm5hbE9wdGlvbnMuZmluZChwID0+IHAubW9kZWwgPT0gZm9jdXNlZE1vZGVsKTtcclxuICAgICAgdGhpcy5sc3RJbnRlcm5hbE9wdGlvbnMuZmlsdGVyKHAgPT4gcC5vbkZvY3VzKS5mb3JFYWNoKHAgPT4gcC5vbkZvY3VzID0gZmFsc2UpO1xyXG4gICAgICBPcHRpb24ub25Gb2N1cyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmKHNjcm9sbCl7IE9wdGlvbi5HZXROYXRpdmVFbGVtZW50KCkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7IH1cclxuICB9XHJcblxyXG4gIGZvY3VzZWRNb2RlbDogYW55IHwgbnVsbDtcclxuICAvLyNlbmRyZWdpb24gWyBBcnJvdy9UYWIgQ29udHJvbCBdXHJcbn0iLCI8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleCBvdmVyZmxvdy1oaWRkZW5cIiAjY29udGFpbmVyPlxyXG4gIDxpb24tY2FyZCBcclxuICAgICAgY2xhc3M9XCJmb2N1cy13aXRoaW46b24tZm9jdXMgaW9uLWNhcmQtaW5wdXRcIiBcclxuICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgbG9hZGluZ0Zyb21Mb2FkZXIgfHwgZGlzYWJsZWRcIiBcclxuICAgICAgW2NsYXNzLmludmFsaWRdPVwiaW52YWxpZFwiXHJcbiAgICAgIFtjbGFzcy5zdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcclxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgW25nQ2xhc3NdPVwieychcm91bmRlZC1sLTJ4bCAhcm91bmRlZC1yLW5vbmUgIWJvcmRlci1yLTAnOiBjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlfVwiXHJcbiAgICA+XHJcbiAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIGNsYXNzPVwicm91bmRlZC0yeGwgdy1mdWxsIHJlbGF0aXZlXCIgKGNsaWNrKT1cIlByZXNlbnRQb3BvdmVyKCRldmVudClcIiBbbmdDbGFzc109XCJ7JyFyb3VuZGVkLWwtMnhsICFyb3VuZGVkLXItbm9uZSc6IGNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGUgfVwiPlxyXG4gICAgICAgIDxpb24taW5wdXQgZmlsbD1cIm5vbmVcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIGxhYmVsUGxhY2VtZW50PVwic3RhY2tlZFwiIFt2YWx1ZV09XCJDdXJyZW50TGFiZWxcIiBbY2xhc3Mubm8taXRlbXMtb3BhY2l0eV09XCJDdXJyZW50bHlOb1ZhbHVlXCI+XHJcbiAgICAgICAgICA8aW9uLXRleHQgaWQ9XCJsYWJlbFwiIFtuZ0NsYXNzXT1cInsncmVxdWlyZWQnOiByZXF1aXJlZCgpIH1cIiBzbG90PVwibGFiZWxcIiBjbGFzcz1cIiF0ZXh0LWRhcmtcIj4gXHJcbiAgICAgICAgICAgIHt7bGFiZWx9fSBcclxuICAgICAgICAgIDwvaW9uLXRleHQ+XHJcbiAgICAgICAgPC9pb24taW5wdXQ+XHJcbiAgICAgICAgQGlmKGNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgbGVmdC0wIGJvdHRvbS0wIGgtNiB3LWZ1bGwgZmxleCB6LVs5MF0gb3ZlcmZsb3cteC1hdXRvXCI+XHJcbiAgICAgICAgICAgIEBmb3IoaXRlbSBvZiBHZXRTZWxlY3RlZEl0ZW5zKCk7IHRyYWNrICRpbmRleCl7XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGJnLW1lZGl1bS8xMCBib3JkZXIgdHJhbnNsdWNpZC1ib3JkZXIgcm91bmRlZC1sZyBtci0xIGFuaW1hdGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJTZWxlY3QoaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIGNsYXNzPVwiYmctbWVkaXVtLzEwIGN1cnNvci1wb2ludGVyIHRyYW5zbHVjaWQtYm9yZGVyIG1pbi13LW1pbiAhYm9yZGVyLWwtMCAhYm9yZGVyLXktMCBoLWZ1bGwgYXNwZWN0LXNxdWFyZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLXItbGdcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwiZGFuZ2VyXCIgbmFtZT1cImNsb3NlXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBweC0xIHNlbGVjdC1ub25lXCI+IHt7YmluZExhYmVsKCkoaXRlbSl9fSA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2lvbi1pdGVtPlxyXG4gICAgICBcclxuICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICA8L2lvbi1jYXJkPlxyXG4gIDxpbnB1dC1sb2FkaW5nIFtsb2FkaW5nXT1cImxvYWRpbmcgfHwgbG9hZGluZ0Zyb21Mb2FkZXJcIj48L2lucHV0LWxvYWRpbmc+XHJcbiAgQGlmKGNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGUpe1xyXG4gICAgPGRpdiBjbGFzcz1cInctMTJcIj5cclxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIkNsZWFyKClcIiBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBkaXNhYmxlZCB8fCBsb2FkaW5nRnJvbUxvYWRlclwiIHNpemU9XCJzbWFsbFwiIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJtZWRpdW1cIiBjbGFzcz1cInJvdW5kZWQtci0yeGwgaC1mdWxsIHctZnVsbFwiIHN0eWxlPVwiLS1ib3JkZXItd2lkdGg6IDFweCAxcHggMnB4IDFweDtcIj5cclxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImJhY2tzcGFjZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcbjwvZGl2PlxyXG5cclxuPGlvbi1wb3BvdmVyIGNsYXNzPVwiaW5wdXQtc2VsZWN0LXBvcG92ZXJcIiBba2VlcENvbnRlbnRzTW91bnRlZF09XCJmYWxzZVwiIFtkaXNtaXNzT25TZWxlY3RdPVwiIWNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZVwiIChkaWREaXNtaXNzKT1cIlNlYXJjaC5zZXQoJycpXCI+XHJcbiAgPG5nLXRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCBmbGV4IGZsZXgtY29sIGJnLXByaW1hcnkvMTBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBzaHJpbmstMFwiIFtoaWRkZW5dPVwiIWNvbmZpZ3VyYXRpb24oKS5zZWFyY2hlYWJsZVwiPlxyXG4gICAgICAgIDxpb24tc2VhcmNoYmFyIFsobmdNb2RlbCldPVwiU2VhcmNoXCIgKG5nTW9kZWxDaGFuZ2UpPVwiU2VhcmNoQ2hhbmdlZCgpXCIgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYS4uLlwiIGNsYXNzPVwic2l6ZS1mdWxsIGJnLXRyYW5zcGFyZW50XCIgW2RlYm91bmNlXT1cIjEwMFwiPjwvaW9uLXNlYXJjaGJhcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaC00OCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIHRyYW5zbHVjaWQtYm9yZGVyICFib3JkZXIteC0wICFib3JkZXItYi0wIHJvdW5kZWQtdC0yeGwgYmctbGlnaHRcIiBbbmdDbGFzc109XCJ7JyFib3JkZXItMCc6ICFjb25maWd1cmF0aW9uKCkuc2VhcmNoZWFibGV9XCI+XHJcbiAgICAgICAgQGlmKCFsc3RPcHRpb25zIHx8ICFsc3RPcHRpb25zLmxlbmd0aCl7XHJcbiAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiNDVcIiBbbWluQnVmZmVyUHhdPVwiMjAwXCIgW21heEJ1ZmZlclB4XT1cIjMwMFwiIGNsYXNzPVwic2l6ZS1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dC1zZWxlY3QtaW50ZXJuYWwtb3B0aW9uIFttb2RlbF09XCJpdGVtXCIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBsc3RTZWFyY2hJdGVucygpXCIgW2lzU2VsZWN0ZWRdPVwiSXNTZWxlY3RlZChpdGVtKVwiPlxyXG4gICAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJ0cnVuY2F0ZVwiPnt7YmluZExhYmVsKCkoaXRlbSl9fTwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICA8L2lucHV0LXNlbGVjdC1pbnRlcm5hbC1vcHRpb24+XHJcbiAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCBvdmVyZmxvdy15LWF1dG8gb3ZlcmZsb3cteC1oaWRkZW4gbWFzay15XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlucHV0LXNlbGVjdC1vcHRpb25cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9pb24tcG9wb3Zlcj4iXX0=
|
|
282
|
+
class ItemValue {
|
|
283
|
+
constructor() {
|
|
284
|
+
this.selected = false;
|
|
285
|
+
this.disabled = false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
function isPortrait() {
|
|
289
|
+
return window.innerHeight > window.innerWidth;
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtc2VsZWN0L2lucHV0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBZSxLQUFLLEVBQWUsTUFBTSxFQUFVLFdBQVcsRUFBRSxTQUFTLEdBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQ3RPLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpELE9BQU8sRUFBOEIsZ0NBQWdDLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNoSSxPQUFPLEVBQXlC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QUFRLEdBQVksS0FBSyxDQUFDO0lBQzVCLENBQUM7Q0FBQTtBQUVELFNBQVMsVUFBVTtJQUNqQixPQUFPLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBjb21wdXRlZCwgQ29udGVudENoaWxkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbmplY3RvciwgaW5wdXQsIElucHV0U2lnbmFsLCBtb2RlbCwgTW9kZWxTaWduYWwsIHNpZ25hbCwgU2lnbmFsLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElvbk1vZGFsIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5cclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmluZExhYmVsRmFjdG9yeSwgQmluZFZhbHVlRmFjdG9yeSwgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9pbnB1dC5zZWxlY3QuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IFNJb25Qb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9zaW9uLXBvcG92ZXIvc2lvbi1wb3BvdmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElucHV0UHJvdmlkZXJGYWN0b3J5IH0gZnJvbSAnLi4vaW5wdXQtcHJvdmlkZXItZmFjdG9yeSc7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0IH0gZnJvbSAnLi4vY3VzdG9tLWlucHV0JztcclxuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBQbGFjZWhvbGRlclRlbXBsYXRlQ29udGV4dCwgU0lvblBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2lvbi1wbGFjZWhvbGRlci10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPcHRpb25UZW1wbGF0ZUNvbnRleHQsIFNJb25PcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zaW9uLW9wdGlvbi10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBMYWJlbFRlbXBsYXRlQ29udGV4dCwgU0lvbkxhYmVsVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2lvbi1sYWJlbC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZUF0aXZvIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvd2ViL2h0dHAuYXRpdm8uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lucHV0LXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5zY3NzJywgJy4uL2lucHV0cy5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbLi4uSW5wdXRQcm92aWRlckZhY3RvcnkuR2V0UHJvdmlkZXJzKE5ld0lucHV0U2VsZWN0Q29tcG9uZW50KV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZXdJbnB1dFNlbGVjdENvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIEN1c3RvbUlucHV0PFQgfCBUW10+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIC8qKiBJdGVtcyBkaXNwb27DrXZlaXMgbm8gc2VsZWN0ICovXHJcbiAgaXRlbXMgICAgICAgICAgICA6IE1vZGVsU2lnbmFsPGFueVtdPiAgICAgICAgICAgICAgICAgICAgICA9IG1vZGVsPGFueVtdPihbXSk7XHJcbiAgLyoqIENvbmZpZ3VyYcOnw6NvIGRvIHNlbGVjdCAqL1xyXG4gIGNvbmZpZ3VyYXRpb24gICAgOiBJbnB1dFNpZ25hbDxJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24+ID0gaW5wdXQ8SW5wdXRTZWxlY3RDb25maWd1cmF0aW9uPihuZXcgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uKCkpOyBcclxuICBsb2FkaW5nRnJvbUxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjdXJyZW50TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBjdXJyZW50SXRlbXMgOiBhbnkgfCBJdGVtVmFsdWU8YW55PltdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIFxyXG4gIFNldEN1cnJlbnRJdGVtTGFiZWwoKTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIHRoaXMuY3VycmVudExhYmVsID0gdGhpcy5sc3RPcHRpb25zLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpLm1hcChwID0+IHAubGFiZWwpLmpvaW4oJywgJyk7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5jdXJyZW50TGFiZWwgPSB0aGlzLmxzdE9wdGlvbnMuZmluZChwID0+IHAuc2VsZWN0ZWQpPy5sYWJlbDtcclxuICAgICAgdGhpcy5jdXJyZW50SXRlbXMgPSB0aGlzLmxzdE9wdGlvbnMuZmluZChwID0+IHAuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbHN0T3B0aW9uc0l0ZW1WYWx1ZTogU2lnbmFsPEl0ZW1WYWx1ZTxhbnk+W10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgYmluZExhYmVsID0gQmluZExhYmVsRmFjdG9yeSh0aGlzLmNvbmZpZ3VyYXRpb24oKSk7XHJcbiAgICBjb25zdCBiaW5kVmFsdWUgPSBCaW5kVmFsdWVGYWN0b3J5KHRoaXMuY29uZmlndXJhdGlvbigpKTtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zKCkuZmlsdGVyKHAgPT4gdGhpcy5zb21lbnRlQXRpdm9zKCkgJiYgdGhpcy5pc1NlcnZpY2VBdGl2bygpID8gcC5hdGl2byA6IHRydWUpIC5tYXAocCA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgSXRlbVZhbHVlPGFueT4oKTtcclxuICAgICAgaXRlbS5sYWJlbCA9IGJpbmRMYWJlbChwKTtcclxuICAgICAgaXRlbS52YWx1ZSA9IGJpbmRWYWx1ZShwKTtcclxuICAgICAgaXRlbS5pdGVtICA9IHA7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQgPSB0aGlzLnZhbHVlKCkgPT0gaXRlbS52YWx1ZTtcclxuICAgICAgaXRlbS5kaXNhYmxlZCA9IHAuZGlzYWJsZWQgfHwgZmFsc2UgfHwgKHRoaXMuaXNTZXJ2aWNlQXRpdm8gJiYgcC5hdGl2byA9PSBmYWxzZSk7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGxzdE9wdGlvbnM6IEl0ZW1WYWx1ZTxhbnk+W10gPSBbXTtcclxuICBVcGRhdGVMc3RPcHRpb25zKHNlYXJjaDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBVcGRhdGUgdGhlIHNlYXJjaCBcclxuICAgIGlmIChzZWFyY2gpIHtcclxuICAgICAgdGhpcy5sc3RPcHRpb25zID0gU2VhcmNoPEl0ZW1WYWx1ZTxhbnk+Pih0aGlzLmxzdE9wdGlvbnNJdGVtVmFsdWUoKSwgc2VhcmNoLCAoaXRlbTogSXRlbVZhbHVlPGFueT4pID0+IGl0ZW0ubGFiZWwpO1xyXG4gICAgfSBlbHNlIHsgXHJcbiAgICAgIHRoaXMubHN0T3B0aW9ucyA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpOyBcclxuICAgIH1cclxuICB9XHJcbiAgVXBkYXRlU2VsZWN0ZWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICBjb25zdCBhcnIgPSB0aGlzLnZhbHVlKCkgYXMgYW55W10gfHwgW107XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmxzdE9wdGlvbnMpIHtcclxuICAgICAgICBpdGVtLnNlbGVjdGVkID0gYXJyLmZpbmQocCA9PiBwID09IGl0ZW0udmFsdWUpICE9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sc3RPcHRpb25zLmZvckVhY2goKGl0ZW06IEl0ZW1WYWx1ZTxhbnk+KSA9PiB7IGl0ZW0uc2VsZWN0ZWQgPSB0aGlzLnZhbHVlKCkgPT0gaXRlbS52YWx1ZTsgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLlNldEN1cnJlbnRJdGVtTGFiZWwoKTtcclxuICB9XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoU0lvbkxhYmVsVGVtcGxhdGVEaXJlY3RpdmUgICAgICAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgbGFiZWxUZW1wbGF0ZSAgICAgIDogVGVtcGxhdGVSZWY8TGFiZWxUZW1wbGF0ZUNvbnRleHQ8VD4+O1xyXG4gIEBDb250ZW50Q2hpbGQoU0lvbk9wdGlvblRlbXBsYXRlRGlyZWN0aXZlICAgICAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgb3B0aW9uVGVtcGxhdGUgICAgIDogVGVtcGxhdGVSZWY8T3B0aW9uVGVtcGxhdGVDb250ZXh0PFQ+PjtcclxuICBAQ29udGVudENoaWxkKFNJb25QbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHBsYWNlaG9sZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFBsYWNlaG9sZGVyVGVtcGxhdGVDb250ZXh0PjtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0Q29udGFpbmVyJykgaW5wdXRDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0U2VsZWN0TGFiZWwnKSBpbnB1dFNlbGVjdExhYmVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBvdmVycmlkZSBmb2N1cyhldmVudDogTW91c2VFdmVudCk6IHZvaWQgeyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyBcclxuICAgIHN1cGVyKCk7IFxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgdGhpcy5VcGRhdGVMc3RPcHRpb25zKHRoaXMuc2VhcmNoVmFsdWUoKSk7XHJcbiAgICAgIHRoaXMuVXBkYXRlU2VsZWN0ZWQoKTtcclxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSkgXHJcbiAgfVxyXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRlci5BZGRDb21wb25lbnQodGhpcyk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24oKS5sb2FkZXIuUmVmcmVzaCh0aGlzLml0ZW1zKCkpO1xyXG4gIH1cclxuICBpc1NlcnZpY2VBdGl2bzogU2lnbmFsPGJvb2xlYW4+ID0gY29tcHV0ZWQoKCkgPT4geyByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uKCkubG9hZEZyb21TZXJ2aWNlIGluc3RhbmNlb2YgSHR0cFNlcnZpY2VBdGl2bzsgfSk7XHJcbiAgc29tZW50ZUF0aXZvczogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIEhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIFsgUG9wb3ZlciBdXHJcbiAgICBpZih0aGlzLnNlbGVjdENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSl7XHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIlRhYlwiKXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmIChldmVudC5rZXkgPT0gXCJFc2NhcGVcIil7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLkRpc21pc3MoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFsgaW5wdXRDb250YWluZXIgXVxyXG4gICAgaWYodGhpcy5pbnB1dENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSl7IFxyXG4gICAgICBpZihbXCJBcnJvd0Rvd25cIiwgXCJBcnJvd1VwXCJdLmluY2x1ZGVzKGV2ZW50LmtleSkpe1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5QcmVzZW50KGV2ZW50KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFsgaW5wdXRTZWxlY3RTZWFyY2hCYXIgXVxyXG4gICAgaWYodGhpcy5pbnB1dFNlYXJjaEJhci5uYXRpdmVFbGVtZW50ID09IGV2ZW50LnRhcmdldCl7XHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIkVudGVyXCIpe1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdCBpcyBub3QgYXRpdm8gaWdub3JlIHRoZSBzZWxlY3RlZCBpdGVtXHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMubHN0T3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXghXTtcclxuICAgICAgICBpZih0aGlzLmlzU2VydmljZUF0aXZvKCkgJiYgIWl0ZW0uaXRlbS5hdGl2bykgeyByZXR1cm47IH1cclxuICAgICAgICB0aGlzLlNlbGVjdChpdGVtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiQXJyb3dEb3duXCIpe1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJbmRleCA9PSB1bmRlZmluZWQpeyB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOyByZXR1cm47IH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggPCB0aGlzLmxzdE9wdGlvbnMubGVuZ3RoIC0gMSA/IHRoaXMuc2VsZWN0ZWRJbmRleCArIDEgOiB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgXHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIkFycm93VXBcIil7XHJcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZEluZGV4ID09IHVuZGVmaW5lZCl7IHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7IHJldHVybjsgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gKHRoaXMuc2VsZWN0ZWRJbmRleCA+IDAgPyB0aGlzLnNlbGVjdGVkSW5kZXggLSAxIDogdGhpcy5zZWxlY3RlZEluZGV4KVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8vWyBTZWFyY2ggQmFyIF1cclxuICBAVmlld0NoaWxkKCdpbnB1dFNlYXJjaEJhcicpIGlucHV0U2VhcmNoQmFyOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIHNlYXJjaEJhckNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICBzZWFyY2hWYWx1ZSAgICAgOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+ID0gIHNpZ25hbDxzdHJpbmc+KFwiXCIpO1xyXG4gIHByaXZhdGUgc2VhcmNoQmFyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLnNlYXJjaEJhckNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICApXHJcbiAgICB0aGlzLnNlYXJjaEJhclN1YnNjcmlwdGlvbiA9IG9ic2VydmFibGUuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7IFxyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KHZhbHVlKTsgXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIENsZWFyU2VhcmNoQmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hCYXJTdWJzY3JpcHRpb24pIHsgdGhpcy5zZWFyY2hCYXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLkNsZWFyU2VhcmNoQmFyKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogVCB8IFRbXSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICAgIHRoaXMuVXBkYXRlU2VsZWN0ZWQoKTtcclxuICB9XHJcbiAgXHJcbiAgb3ZlcnJpZGUgU2V0VmFsdWUob2JqOiBUIHwgVFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlLnNldChvYmopO1xyXG4gICAgdGhpcy5ydW5WYWxpZGF0aW9uKCk7XHJcbiAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkKCk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKCkpO1xyXG4gICAgaWYoIXRoaXMuY29uZmlndXJhdGlvbigpLm11bHRpcGxlKXtcclxuICAgICAgdGhpcy5EaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIENsZWFyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbigpLm11bHRpcGxlKXtcclxuICAgICAgdGhpcy5TZXRWYWx1ZShbXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5TZXRWYWx1ZSh1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgU2VsZWN0KGl0ZW1WYWx1ZTogSXRlbVZhbHVlPFQ+KTogdm9pZHtcclxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtVmFsdWUudmFsdWU7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUoKTtcclxuICAgICAgaWYoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKXtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnRWYWx1ZS5maW5kSW5kZXgocCA9PiBwID09IGl0ZW0pO1xyXG4gICAgICAgIGlmKGluZGV4ID4gLTEpe1xyXG4gICAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGN1cnJlbnRWYWx1ZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLlNldFZhbHVlKFsuLi5jdXJyZW50VmFsdWVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLlNldFZhbHVlKFtpdGVtXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUoaXRlbSk7XHJcbiAgICAgIHRoaXMuRGlzbWlzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFsgUG9wb3ZlciAvIE1vZGFsIF1cclxuICBAVmlld0NoaWxkKCdzZWxlY3RDb250ZW50Jykgc2VsZWN0Q29udGVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChTSW9uUG9wb3ZlckNvbXBvbmVudCkgcG9wb3ZlcjogU0lvblBvcG92ZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChJb25Nb2RhbCkgICAgICAgICAgICAgICBtb2RhbDogSW9uTW9kYWw7XHJcblxyXG4gIGZsb2F0aW5nVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG5cclxuXHJcbiAgYXN5bmMgUHJlc2VudChldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmKGlzUG9ydHJhaXQoKSl7XHJcbiAgICAgIC8vIE1vZGFsXHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwucHJlc2VudCgpO1xyXG4gICAgICB0aGlzLmlucHV0U2VhcmNoQmFyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gUG9wb3ZlclxyXG4gICAgYXdhaXQgdGhpcy5wb3BvdmVyLnByZXNlbnQoZXZlbnQpO1xyXG4gICAgdGhpcy5pbnB1dFNlYXJjaEJhci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG4gIGFzeW5jIERpc21pc3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZih0aGlzLm1vZGFsKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuZGlzbWlzcygpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5wb3BvdmVyKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucG9wb3Zlci5kaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICBpZih0aGlzLmlucHV0U2VsZWN0TGFiZWw/Lm5hdGl2ZUVsZW1lbnQpeyBcclxuICAgICAgdGhpcy5pbnB1dFNlbGVjdExhYmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgT25EaXNtaXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9hdGluZ1Zpc2libGUgPSBmYWxzZTsgXHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCgnJyk7XHJcbiAgICB0aGlzLnNlYXJjaEJhckNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gIH1cclxuICBPblByZXNlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsb2F0aW5nVmlzaWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBpc0FycmF5KG9iaiA6IGFueSApIHtcclxuICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKVxyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgSXRlbVZhbHVlPFQ+e1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdmFsdWU6IFQ7XHJcbiAgc2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpdGVtICAgIDogYW55OyBcclxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1BvcnRyYWl0KCkge1xyXG4gIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQgPiB3aW5kb3cuaW5uZXJXaWR0aDtcclxufSIsIjxkaXYgXHJcbiAgI2lucHV0Q29udGFpbmVyXHJcbiAgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIiBcclxuICAoY2xpY2spPVwiZm9jdXMoJGV2ZW50KTsgUHJlc2VudCgkZXZlbnQpXCJcclxuICBbY2xhc3MucmVxdWlyZWRdPVwicmVxdWlyZWQoKVwiIFxyXG4gIFtjbGFzcy5zdWJtaXR0ZWRdPVwic3VibWl0dGVkKClcIiBcclxuICBbY2xhc3MubWFudWFsLWZvY3VzXT1cImZsb2F0aW5nVmlzaWJsZVwiXHJcbiAgW2NsYXNzLmludmFsaWRdPVwiaW52YWxpZFwiIFxyXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0Zyb21Mb2FkZXIgfHwgZGlzYWJsZWQoKVwiXHJcbiAgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpIHx8IGxvYWRpbmdGcm9tTG9hZGVyXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1sYWJlbFwiPiBcclxuICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj5cclxuICAgICAge3tsYWJlbCgpfX0gXHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cInctZnVsbCB0cnVuY2F0ZSBvdXRsaW5lLW5vbmVcIiBbY2xhc3MucHItN109XCIhY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiIFtjbGFzcy5wci0xMF09XCJjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlXCIgICNpbnB1dFNlbGVjdExhYmVsIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgQGlmICghY29uZmlndXJhdGlvbigpLm11bHRpcGxlICYmIGN1cnJlbnRMYWJlbCl7XHJcbiAgICAgIEBpZihsYWJlbFRlbXBsYXRlKXtcclxuICAgICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGN1cnJlbnRMYWJlbCwgaXRlbTogY3VycmVudEl0ZW1zLml0ZW0gfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LXNlbGVjdC1sYWJlbFwiPiB7e2N1cnJlbnRMYWJlbH19IDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgKGNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSAmJiBpc0FycmF5KGN1cnJlbnRJdGVtcykgJiYgJGFueShjdXJyZW50SXRlbXMpLmxlbmd0aCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LXgtYXV0byBmbGV4IGdhcC0yIHNpemUtZnVsbCBtYXNrLXgvMlwiPlxyXG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBjdXJyZW50SXRlbXM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNsdWNpZC1ib3JkZXIgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBwbC0yXCI+XHJcbiAgICAgICAgICAgICAgQGlmKGxhYmVsVGVtcGxhdGUpe1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS5sYWJlbCwgaXRlbTogaXRlbS5pdGVtIH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LXNlbGVjdC1sYWJlbFwiPiB7e2l0ZW0ubGFiZWx9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGFzcGVjdC1zcXVhcmUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiU2VsZWN0KGl0ZW0udmFsdWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS0gPGlvbi1idXR0b24gY2xhc3M9XCJtLTAgaC1mdWxsXCIgKGNsaWNrKT1cIlNlbGVjdChpdGVtLnZhbHVlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgY29sb3I9XCJtZWRpdW1cIiBzaXplPVwic21hbGxcIiBmaWxsPVwib3V0bGluZVwiIHN0eWxlPVwiLS1ib3JkZXItcmFkaXVzOiAuNXJlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICBAaWYocGxhY2Vob2xkZXJUZW1wbGF0ZSl7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBsYWNlaG9sZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0aGlzLmNvbmZpZ3VyYXRpb24oKS5wbGFjZWhvbGRlciwgcGxhY2Vob2xkZXI6IHRoaXMuY29uZmlndXJhdGlvbigpLnBsYWNlaG9sZGVyIH1cIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1zZWxlY3QtbGFiZWwgIXRleHQtbWVkaXVtXCI+IHt7dGhpcy5jb25maWd1cmF0aW9uKCkucGxhY2Vob2xkZXJ9fSA8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImFic29sdXRlIGJvdHRvbS0xIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNpemUtN1wiIFtjbGFzcy5yaWdodC0xXT1cIiFjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlXCIgW2NsYXNzLnJpZ2h0LThdPVwiY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiPlxyXG4gICAgPGlvbi1pY29uIGNsYXNzPVwiLW1iLTAuNVwiIG5hbWU9XCJjaGV2cm9uLXVwXCI+PC9pb24taWNvbj5cclxuICAgIDxpb24taWNvbiBjbGFzcz1cIi1tdC0wLjVcIiBuYW1lPVwiY2hldnJvbi1kb3duXCI+PC9pb24taWNvbj5cclxuICA8L2Rpdj5cclxuICBAaWYoY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZSl7XHJcbiAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImFic29sdXRlIHJpZ2h0LTEgYm90dG9tLTFcIiAoY2xpY2spPVwiQ2xlYXIoJGV2ZW50KVwiIGNvbG9yPVwibWVkaXVtXCIgc2l6ZT1cInNtYWxsXCIgZmlsbD1cImNsZWFyXCIgc3R5bGU9XCItLWJvcmRlci1yYWRpdXM6IC41cmVtXCI+XHJcbiAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cclxuICAgIDwvaW9uLWJ1dHRvbj5cclxuICB9IFxyXG5cclxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIiBbY2xhc3MubG9hZGluZ109XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0Zyb21Mb2FkZXJcIj5cclxuICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxpb24tbW9kYWwgI21vZGFsIChpb25Nb2RhbFdpbGxQcmVzZW50KT1cIk9uUHJlc2VudCgpXCIgKGRpZERpc21pc3MpPVwiT25EaXNtaXNzKClcIiBzdHlsZT1cIi0td2lkdGg6IDkwJTsgLS1oZWlnaHQ6IDkwJTtcIiBba2VlcENvbnRlbnRzTW91bnRlZF09XCJ0cnVlXCI+XHJcbiAgPG5nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3RDb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2lvbi1tb2RhbD5cclxuXHJcbjxzaW9uLXBvcG92ZXIgXHJcbiAgICAjcG9wb3ZlciBcclxuICAgIFt3aWR0aF09XCJpbnB1dENvbnRhaW5lci5vZmZzZXRXaWR0aCArICdweCdcIiBcclxuICAgIChvbldpbGxQcmVzZW50KT1cIk9uUHJlc2VudCgpXCIgXHJcbiAgICAob25EaWREaXNtaXNzKT1cIk9uRGlzbWlzcygpXCIgXHJcbiAgICBbYW5jaG9yXT1cImlucHV0Q29udGFpbmVyXCIgXHJcbiAgICBbcGxhY2VtZW50XT1cImNvbmZpZ3VyYXRpb24oKS5wb3BvdmVyQ29uZmlndXJhdGlvbi5wbGFjZW1lbnRcIiBcclxuICAgIFtmbGlwXT1cImNvbmZpZ3VyYXRpb24oKS5wb3BvdmVyQ29uZmlndXJhdGlvbi5mbGlwXCJcclxuICA+XHJcbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3RDb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuPC9zaW9uLXBvcG92ZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI3NlbGVjdENvbnRlbnRUZW1wbGF0ZT5cclxuICA8ZGl2ICNzZWxlY3RDb250ZW50IGNsYXNzPVwic2VsZWN0LWNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWJhci1jb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtYmFyLWljb24tY29udGFpbmVyICFib3JkZXItci0wIGJvcmRlci1wcmltYXJ5LzcwIGJnLXByaW1hcnkvNzAgc2hyaW5rLTBcIj5cclxuICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYXJrXCIgbmFtZT1cInNlYXJjaFwiPjwvaW9uLWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgI2lucHV0U2VhcmNoQmFyIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtYmFyIGJvcmRlci1wcmltYXJ5LzcwICFyb3VuZGVkLWwtbm9uZVwiIFtmb3JtQ29udHJvbF09XCJzZWFyY2hCYXJDb250cm9sXCIvPlxyXG4gICAgPC9kaXY+IFxyXG4gICAgPHVsIGNsYXNzPVwic2VsZWN0LWl0ZW0tbGlzdCBtYXNrLXlcIiByb2xlPVwibGlzdGJveFwiIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCInc2lvbi1pcy0nICsgc2VsZWN0ZWRJbmRleFwiPlxyXG4gICAgICBAaWYoZmxvYXRpbmdWaXNpYmxlKXtcclxuICAgICAgICBAZm9yIChpdGVtIG9mIGxzdE9wdGlvbnM7IHRyYWNrIGl0ZW0udmFsdWUpIHsgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYmFzZU9wdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBpbmRleDogJGluZGV4IH1cIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgPC91bD5cclxuICAgIEBpZihpc1NlcnZpY2VBdGl2bygpKXtcclxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCB0ZXh0LXhzIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgPGlvbi1jaGVja2JveCBbbmdNb2RlbF09XCJzb21lbnRlQXRpdm9zKClcIiAobmdNb2RlbENoYW5nZSk9XCJzb21lbnRlQXRpdm9zLnNldCgkZXZlbnQpXCIgY2xhc3M9XCJzY2FsZS03NVwiPiBTb21lbnRlIGF0aXZvcyA8L2lvbi1jaGVja2JveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2Jhc2VPcHRpb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gIDxsaSBbaWRdPVwiJ3Npb24taXMtJyArIGluZGV4XCIgY2xhc3M9XCJzZWxlY3QtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCIgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpbmRleCA9PSBzZWxlY3RlZEluZGV4XCIgKG1vdXNlZW50ZXIpPVwic2VsZWN0ZWRJbmRleCA9IGluZGV4XCIgKGNsaWNrKT1cIlNlbGVjdChpdGVtKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1pdGVtLWNoZWNrbWFyay1jb250ZWluZXJcIj5cclxuICAgICAgQGlmKGl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICA8aW9uLWljb24gY2xhc3M9XCJzZWxlY3QtaXRlbS1jaGVja21hcmtcIiBjb2xvcj1cInByaW1hcnlcIiBuYW1lPVwiY2hlY2ttYXJrXCI+PC9pb24taWNvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKG9wdGlvblRlbXBsYXRlKSB7XHJcbiAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0uaXRlbSB9XCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1pdGVtLWxhYmVsXCI+IHt7aXRlbS5sYWJlbH19IDwvc3Bhbj5cclxuICAgIH1cclxuICA8L2xpPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|