@taiga-ui/experimental 4.21.0 → 4.22.0-canary.5cb8d03

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.
Files changed (24) hide show
  1. package/components/index.d.ts +1 -0
  2. package/components/input-phone-international/input-phone-international.component.d.ts +4 -2
  3. package/components/search-results/index.d.ts +5 -0
  4. package/components/search-results/search-history.component.d.ts +31 -0
  5. package/components/search-results/search-hotkey.directive.d.ts +9 -0
  6. package/components/search-results/search-results.component.d.ts +36 -0
  7. package/components/search-results/search-results.d.ts +4 -0
  8. package/components/search-results/search-results.options.d.ts +19 -0
  9. package/esm2022/components/index.mjs +2 -1
  10. package/esm2022/components/input-phone-international/input-phone-international.component.mjs +25 -22
  11. package/esm2022/components/search-results/index.mjs +6 -0
  12. package/esm2022/components/search-results/search-history.component.mjs +59 -0
  13. package/esm2022/components/search-results/search-hotkey.directive.mjs +30 -0
  14. package/esm2022/components/search-results/search-results.component.mjs +87 -0
  15. package/esm2022/components/search-results/search-results.mjs +9 -0
  16. package/esm2022/components/search-results/search-results.options.mjs +9 -0
  17. package/esm2022/components/search-results/taiga-ui-experimental-components-search-results.mjs +5 -0
  18. package/fesm2022/taiga-ui-experimental-components-input-phone-international.mjs +24 -21
  19. package/fesm2022/taiga-ui-experimental-components-input-phone-international.mjs.map +1 -1
  20. package/fesm2022/taiga-ui-experimental-components-search-results.mjs +181 -0
  21. package/fesm2022/taiga-ui-experimental-components-search-results.mjs.map +1 -0
  22. package/fesm2022/taiga-ui-experimental-components.mjs +1 -0
  23. package/fesm2022/taiga-ui-experimental-components.mjs.map +1 -1
  24. package/package.json +11 -5
@@ -2,3 +2,4 @@ export * from '@taiga-ui/experimental/components/accordion';
2
2
  export * from '@taiga-ui/experimental/components/expand';
3
3
  export * from '@taiga-ui/experimental/components/hint';
4
4
  export * from '@taiga-ui/experimental/components/input-phone-international';
5
+ export * from '@taiga-ui/experimental/components/search-results';
@@ -24,7 +24,8 @@ export declare class TuiInputPhoneInternational extends TuiControl<string> {
24
24
  protected readonly search: import("@angular/core").WritableSignal<string>;
25
25
  protected readonly size: import("@angular/core").WritableSignal<"m" | "l" | "s">;
26
26
  protected readonly mask: import("@angular/core").Signal<MaskitoOptions | null>;
27
- protected readonly masked: import("@angular/core").Signal<string>;
27
+ protected readonly masked: import("@angular/core").WritableSignal<string>;
28
+ protected valueChangeEffect: import("@angular/core").EffectRef;
28
29
  protected readonly filtered: import("@angular/core").Signal<{
29
30
  iso: TuiCountryIsoCode;
30
31
  name: string;
@@ -36,11 +37,12 @@ export declare class TuiInputPhoneInternational extends TuiControl<string> {
36
37
  readonly countryIsoCodeChange: import("rxjs").Observable<TuiCountryIsoCode>;
37
38
  set countriesValue(value: readonly TuiCountryIsoCode[]);
38
39
  set isoCode(code: TuiCountryIsoCode);
40
+ writeValue(unmasked: string): void;
39
41
  protected set template(template: PolymorpheusContent);
40
- protected get unmasked(): string;
41
42
  protected onPaste(event: Event): void;
42
43
  protected onItemClick(code: TuiCountryIsoCode): void;
43
44
  private computeMask;
45
+ private unmask;
44
46
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiInputPhoneInternational, never>;
45
47
  static ɵcmp: i0.ɵɵComponentDeclaration<TuiInputPhoneInternational, "input[tuiInputPhoneInternational]", never, { "countrySearch": { "alias": "countrySearch"; "required": false; }; "countriesValue": { "alias": "countries"; "required": false; }; "isoCode": { "alias": "countryIsoCode"; "required": false; }; }, { "countryIsoCodeChange": "countryIsoCodeChange"; }, never, never, true, [{ directive: typeof i1.MaskitoDirective; inputs: {}; outputs: {}; }, { directive: typeof i2.TuiWithTextfield; inputs: {}; outputs: {}; }]>;
46
48
  }
@@ -0,0 +1,5 @@
1
+ export * from './search-history.component';
2
+ export * from './search-hotkey.directive';
3
+ export * from './search-results';
4
+ export * from './search-results.component';
5
+ export * from './search-results.options';
@@ -0,0 +1,31 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class TuiSearchHistory {
3
+ private readonly textfield;
4
+ private readonly storage;
5
+ private readonly control;
6
+ protected readonly close: import("@angular/core").Signal<string | undefined>;
7
+ protected readonly i18n: import("@angular/core").Signal<{
8
+ popular: string;
9
+ history: string;
10
+ placeholder: string;
11
+ hotkey: string;
12
+ all: string;
13
+ empty: string;
14
+ } | undefined>;
15
+ protected readonly options: {
16
+ key: string;
17
+ history: string;
18
+ popular: string;
19
+ empty: string;
20
+ remove: string;
21
+ };
22
+ protected readonly $: import("rxjs").Subscription | undefined;
23
+ protected history: readonly string[];
24
+ popular: readonly string[];
25
+ protected store(item: string): void;
26
+ protected remove(item: string): void;
27
+ protected select(item: string): void;
28
+ private get items();
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiSearchHistory, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<TuiSearchHistory, "tui-search-history", never, { "popular": { "alias": "popular"; "required": false; }; }, {}, never, never, true, never>;
31
+ }
@@ -0,0 +1,9 @@
1
+ import { TuiInputSearch } from '@taiga-ui/layout/components/input-search';
2
+ import * as i0 from "@angular/core";
3
+ export declare class TuiSearchHotkey {
4
+ private readonly platform;
5
+ protected readonly search: TuiInputSearch;
6
+ protected readonly placeholder: import("@angular/core").Signal<string | undefined>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiSearchHotkey, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiSearchHotkey, "input[tuiSearchHotkey]", never, {}, {}, never, never, true, never>;
9
+ }
@@ -0,0 +1,36 @@
1
+ import type { KeyValue } from '@angular/common';
2
+ import type { OnChanges } from '@angular/core';
3
+ import { TemplateRef } from '@angular/core';
4
+ import type { TuiContext } from '@taiga-ui/cdk/types';
5
+ import { TuiTextfieldComponent } from '@taiga-ui/core/components/textfield';
6
+ import * as i0 from "@angular/core";
7
+ export declare class TuiSearchResultsComponent<T> implements OnChanges {
8
+ private readonly el;
9
+ protected readonly options: {
10
+ key: string;
11
+ history: string;
12
+ popular: string;
13
+ empty: string;
14
+ remove: string;
15
+ };
16
+ protected readonly i18n: import("@angular/core").Signal<{
17
+ popular: string;
18
+ history: string;
19
+ placeholder: string;
20
+ hotkey: string;
21
+ all: string;
22
+ empty: string;
23
+ } | undefined>;
24
+ protected readonly textfield: TuiTextfieldComponent<any>;
25
+ protected active: number;
26
+ readonly template?: TemplateRef<TuiContext<T>>;
27
+ results: Record<string, readonly T[]> | null;
28
+ ngOnChanges(): void;
29
+ protected isEmpty(results: Record<string, readonly T[]>): boolean;
30
+ protected onArrow(current: HTMLElement, step: number): void;
31
+ protected tab(step: number): void;
32
+ protected notEmpty({ value }: KeyValue<string, readonly T[]>): boolean;
33
+ protected asIs(): number;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiSearchResultsComponent<any>, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<TuiSearchResultsComponent<any>, "tui-search-results", never, { "results": { "alias": "results"; "required": false; }; }, {}, ["template"], ["*"], true, never>;
36
+ }
@@ -0,0 +1,4 @@
1
+ import { TuiSearchHistory } from './search-history.component';
2
+ import { TuiSearchHotkey } from './search-hotkey.directive';
3
+ import { TuiSearchResultsComponent } from './search-results.component';
4
+ export declare const TuiSearchResults: (typeof TuiSearchHistory | typeof TuiSearchHotkey | typeof TuiSearchResultsComponent)[];
@@ -0,0 +1,19 @@
1
+ export declare const TUI_SEARCH_RESULTS_OPTIONS: import("@angular/core").InjectionToken<{
2
+ key: string;
3
+ history: string;
4
+ popular: string;
5
+ empty: string;
6
+ remove: string;
7
+ }>, tuiSearchResultsOptionsProvider: (item: Partial<{
8
+ key: string;
9
+ history: string;
10
+ popular: string;
11
+ empty: string;
12
+ remove: string;
13
+ }> | import("@angular/core").ProviderToken<Partial<{
14
+ key: string;
15
+ history: string;
16
+ popular: string;
17
+ empty: string;
18
+ remove: string;
19
+ }>>) => import("@angular/core").FactoryProvider;
@@ -2,4 +2,5 @@ export * from '@taiga-ui/experimental/components/accordion';
2
2
  export * from '@taiga-ui/experimental/components/expand';
3
3
  export * from '@taiga-ui/experimental/components/hint';
4
4
  export * from '@taiga-ui/experimental/components/input-phone-international';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcmltZW50YWwvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDZEQUE2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2V4cGVyaW1lbnRhbC9jb21wb25lbnRzL2FjY29yZGlvbic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvZXhwZXJpbWVudGFsL2NvbXBvbmVudHMvZXhwYW5kJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9leHBlcmltZW50YWwvY29tcG9uZW50cy9oaW50JztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9leHBlcmltZW50YWwvY29tcG9uZW50cy9pbnB1dC1waG9uZS1pbnRlcm5hdGlvbmFsJztcbiJdfQ==
5
+ export * from '@taiga-ui/experimental/components/search-results';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcmltZW50YWwvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDZEQUE2RCxDQUFDO0FBQzVFLGNBQWMsa0RBQWtELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvZXhwZXJpbWVudGFsL2NvbXBvbmVudHMvYWNjb3JkaW9uJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9leHBlcmltZW50YWwvY29tcG9uZW50cy9leHBhbmQnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2V4cGVyaW1lbnRhbC9jb21wb25lbnRzL2hpbnQnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2V4cGVyaW1lbnRhbC9jb21wb25lbnRzL2lucHV0LXBob25lLWludGVybmF0aW9uYWwnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2V4cGVyaW1lbnRhbC9jb21wb25lbnRzL3NlYXJjaC1yZXN1bHRzJztcbiJdfQ==
@@ -1,20 +1,19 @@
1
1
  import { NgForOf, NgIf } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, Input, Output, signal, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, Input, Output, signal, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation, } from '@angular/core';
3
3
  import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
4
4
  import { FormsModule } from '@angular/forms';
5
5
  import { MaskitoDirective } from '@maskito/angular';
6
6
  import { MASKITO_DEFAULT_OPTIONS, maskitoInitialCalibrationPlugin, maskitoTransform, } from '@maskito/core';
7
7
  import { maskitoGetCountryFromNumber, maskitoPhoneOptionsGenerator } from '@maskito/phone';
8
8
  import { tuiAsControl, TuiControl } from '@taiga-ui/cdk/classes';
9
- import { CHAR_PLUS, EMPTY_QUERY, TUI_DEFAULT_MATCHER } from '@taiga-ui/cdk/constants';
9
+ import { CHAR_PLUS, EMPTY_QUERY, TUI_ALLOW_SIGNAL_WRITES, TUI_DEFAULT_MATCHER, } from '@taiga-ui/cdk/constants';
10
10
  import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone';
11
11
  import { TuiAutoFocus, tuiAutoFocusOptionsProvider, } from '@taiga-ui/cdk/directives/auto-focus';
12
12
  import { TUI_IS_IOS, tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens';
13
- import { tuiInjectElement, tuiIsInputEvent } from '@taiga-ui/cdk/utils/dom';
13
+ import { tuiInjectElement, tuiIsInputEvent, tuiValueBinding, } from '@taiga-ui/cdk/utils/dom';
14
14
  import { tuiDirectiveBinding } from '@taiga-ui/cdk/utils/miscellaneous';
15
15
  import { TuiButton } from '@taiga-ui/core/components/button';
16
16
  import { TuiDataList, TuiOption } from '@taiga-ui/core/components/data-list';
17
- import { TuiIcon } from '@taiga-ui/core/components/icon';
18
17
  import { TUI_TEXTFIELD_OPTIONS, TuiTextfield, TuiTextfieldContent, TuiTextfieldDropdownDirective, TuiWithTextfield, } from '@taiga-ui/core/components/textfield';
19
18
  import { tuiDropdown, TuiDropdownOpen, tuiDropdownOpen, } from '@taiga-ui/core/directives/dropdown';
20
19
  import { TuiTitle } from '@taiga-ui/core/directives/title';
@@ -51,8 +50,10 @@ class TuiInputPhoneInternational extends TuiControl {
51
50
  this.search = signal('');
52
51
  this.size = inject(TUI_TEXTFIELD_OPTIONS).size;
53
52
  this.mask = tuiMaskito(computed(() => this.computeMask(this.code(), this.metadata())));
54
- this.masked = computed(() => maskitoTransform(this.value(), this.mask() || MASKITO_DEFAULT_OPTIONS) ||
55
- this.el.value);
53
+ this.masked = tuiValueBinding();
54
+ this.valueChangeEffect = effect(() => {
55
+ this.onChange(this.unmask(this.masked()));
56
+ }, TUI_ALLOW_SIGNAL_WRITES);
56
57
  this.filtered = computed(() => this.countries()
57
58
  .map((iso) => ({
58
59
  iso,
@@ -65,9 +66,11 @@ class TuiInputPhoneInternational extends TuiControl {
65
66
  .tuiActiveZoneChange.pipe(filter(() => !this.readOnly()), takeUntilDestroyed())
66
67
  .subscribe((active) => {
67
68
  const prefix = `${tuiGetCallingCode(this.code(), this.metadata())} `;
68
- const fallback = active ? this.el.value || prefix : this.el.value;
69
69
  this.search.set('');
70
- this.el.value = this.el.value === prefix ? '' : fallback;
70
+ this.masked.update((value) => {
71
+ const fallback = active ? value || prefix : value;
72
+ return value === prefix ? '' : fallback;
73
+ });
71
74
  });
72
75
  this.countrySearch = false;
73
76
  this.countryIsoCodeChange = toObservable(this.code).pipe(skip(1));
@@ -78,13 +81,13 @@ class TuiInputPhoneInternational extends TuiControl {
78
81
  set isoCode(code) {
79
82
  this.code.set(code);
80
83
  }
84
+ writeValue(unmasked) {
85
+ super.writeValue(unmasked);
86
+ this.masked.set(maskitoTransform(this.value() ?? '', this.mask() || MASKITO_DEFAULT_OPTIONS));
87
+ }
81
88
  set template(template) {
82
89
  this.dropdown.set(template);
83
90
  }
84
- get unmasked() {
85
- const value = this.el.value.replaceAll(NOT_FORM_CONTROL_SYMBOLS, '');
86
- return value === tuiGetCallingCode(this.code(), this.metadata()) ? '' : value;
87
- }
88
91
  onPaste(event) {
89
92
  const metadata = this.metadata();
90
93
  const data = tuiIsInputEvent(event) && event.data;
@@ -101,12 +104,10 @@ class TuiInputPhoneInternational extends TuiControl {
101
104
  }
102
105
  onItemClick(code) {
103
106
  this.el.focus();
104
- this.el.value = this.unmasked;
105
107
  this.open.set(false);
106
108
  this.code.set(code);
107
109
  this.search.set('');
108
- this.el.value = maskitoTransform(this.el.value || tuiGetCallingCode(code, this.metadata()), this.mask() || MASKITO_DEFAULT_OPTIONS);
109
- this.onChange(this.unmasked);
110
+ this.masked.set(maskitoTransform(this.value() || tuiGetCallingCode(code, this.metadata()), this.mask() || MASKITO_DEFAULT_OPTIONS));
110
111
  }
111
112
  computeMask(countryIsoCode, metadata) {
112
113
  if (!metadata) {
@@ -122,12 +123,16 @@ class TuiInputPhoneInternational extends TuiControl {
122
123
  plugins: [...plugins, maskitoInitialCalibrationPlugin()],
123
124
  };
124
125
  }
126
+ unmask(maskedValue) {
127
+ const value = maskedValue.replaceAll(NOT_FORM_CONTROL_SYMBOLS, '');
128
+ return value === tuiGetCallingCode(this.code(), this.metadata()) ? '' : value;
129
+ }
125
130
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputPhoneInternational, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
126
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputPhoneInternational, isStandalone: true, selector: "input[tuiInputPhoneInternational]", inputs: { countrySearch: "countrySearch", countriesValue: ["countries", "countriesValue"], isoCode: ["countryIsoCode", "isoCode"] }, outputs: { countryIsoCodeChange: "countryIsoCodeChange" }, host: { attributes: { "type": "tel" }, listeners: { "blur": "onTouched()", "input": "onChange(unmasked)", "click": "open.set(false)", "beforeinput.capture": "onPaste($event)" }, properties: { "attr.readonly": "readOnly() || null", "attr.inputmode": "!ios && open() ? \"none\" : null", "disabled": "disabled()", "value": "masked()" } }, providers: [
131
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputPhoneInternational, isStandalone: true, selector: "input[tuiInputPhoneInternational]", inputs: { countrySearch: "countrySearch", countriesValue: ["countries", "countriesValue"], isoCode: ["countryIsoCode", "isoCode"] }, outputs: { countryIsoCodeChange: "countryIsoCodeChange" }, host: { attributes: { "type": "tel" }, listeners: { "blur": "onTouched()", "input": "masked.set($event.target.value)", "click": "open.set(false)", "beforeinput.capture": "onPaste($event)" }, properties: { "attr.readonly": "readOnly() || null", "attr.inputmode": "!ios && open() ? \"none\" : null", "disabled": "disabled()" } }, providers: [
127
132
  tuiAsControl(TuiInputPhoneInternational),
128
133
  tuiFallbackValueProvider(''),
129
134
  tuiAutoFocusOptionsProvider({ preventScroll: true }),
130
- ], viewQueries: [{ propertyName: "template", first: true, predicate: TuiTextfieldDropdownDirective, descendants: true, read: TemplateRef }, { propertyName: "list", predicate: TuiOption, descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i1.MaskitoDirective }, { directive: i2.TuiWithTextfield }], ngImport: i0, template: "<ng-container *tuiTextfieldContent>\n <button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"mode()\"\n [class.t-ipi-select_readonly]=\"readOnly()\"\n [disabled]=\"disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"open()\"\n (mousedown.prevent)=\"interactive() && open.set(!open())\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()?.[code()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"code() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-container *tuiTextfieldDropdown>\n <div\n *ngIf=\"countrySearch\"\n #element\n class=\"t-ipi-search\"\n >\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiTextfield\n type=\"text\"\n [focused]=\"true\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!!element.closest('tui-dropdown-mobile')\"\n (keydown.arrowDown)=\"list.get(0)?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n\n <tui-data-list class=\"t-ipi-options\">\n <button\n *ngFor=\"let item of filtered()\"\n tuiOption\n type=\"button\"\n [tuiCell]=\"size()\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n </tui-data-list>\n</ng-container>\n", styles: ["[tuiInputPhoneInternational][tuiInputPhoneInternational]{left:var(--t-offset);border-start-start-radius:0;border-end-start-radius:0;inline-size:calc(100% - var(--t-offset))}tui-root:has(tui-dropdown-mobile) [tuiInputPhoneInternational][tuiInputPhoneInternational]{caret-color:transparent}[tuiInputPhoneInternational][tuiInputPhoneInternational]+label{padding-left:var(--t-offset)}tui-textfield[data-size=s]{--t-offset: 4.125rem}tui-textfield[data-size=s] .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]{--t-offset: 4.875rem}tui-textfield[data-size=m] .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]{--t-offset: 5.25rem}tui-textfield[data-size=l] .t-ipi-flag{margin:0 -.1875rem}.t-ipi-select{position:absolute;left:0;border-radius:inherit;border-start-end-radius:0;border-end-end-radius:0}.t-ipi-select_readonly{pointer-events:none}.t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}.t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}.t-ipi-code{color:var(--tui-text-secondary)}.t-ipi-search{position:sticky;top:0;z-index:1;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){.t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}tui-dropdown-mobile .t-ipi-search{background:var(--tui-background-elevation-1)}tui-dropdown-mobile .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TuiAutoFocus, selector: "[tuiAutoFocus]", inputs: ["tuiAutoFocus"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiCell, selector: "[tuiCell]:not(ng-template)", inputs: ["tuiCell"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: i4.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i4.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled", "value"] }, { kind: "pipe", type: TuiFlagPipe, name: "tuiFlag" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield", inputs: ["stringify", "content", "filler"] }, { kind: "directive", type: i2.TuiTextfieldDirective, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])" }, { kind: "directive", type: i2.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: i2.TuiTextfieldDropdownDirective, selector: "ng-template[tuiTextfieldDropdown]" }, { kind: "directive", type: TuiTextfieldContent, selector: "ng-template[tuiTextfieldContent]" }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
135
+ ], viewQueries: [{ propertyName: "template", first: true, predicate: TuiTextfieldDropdownDirective, descendants: true, read: TemplateRef }, { propertyName: "list", predicate: TuiOption, descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i1.MaskitoDirective }, { directive: i2.TuiWithTextfield }], ngImport: i0, template: "<ng-container *tuiTextfieldContent>\n <button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"mode()\"\n [class.t-ipi-select_readonly]=\"readOnly()\"\n [disabled]=\"disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"open()\"\n (mousedown.prevent)=\"interactive() && open.set(!open())\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()?.[code()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"code() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-container *tuiTextfieldDropdown>\n <div\n *ngIf=\"countrySearch\"\n #element\n class=\"t-ipi-search\"\n >\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiTextfield\n type=\"text\"\n [focused]=\"true\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!!element.closest('tui-dropdown-mobile')\"\n (keydown.arrowDown)=\"list.get(0)?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n\n <tui-data-list class=\"t-ipi-options\">\n <button\n *ngFor=\"let item of filtered()\"\n tuiOption\n type=\"button\"\n [tuiCell]=\"size()\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n </tui-data-list>\n</ng-container>\n", styles: ["[tuiInputPhoneInternational][tuiInputPhoneInternational]{left:var(--t-offset);border-start-start-radius:0;border-end-start-radius:0;inline-size:calc(100% - var(--t-offset))}tui-root:has(tui-dropdown-mobile) [tuiInputPhoneInternational][tuiInputPhoneInternational]{caret-color:transparent}[tuiInputPhoneInternational][tuiInputPhoneInternational]+label{padding-left:var(--t-offset)}tui-textfield[data-size=s]{--t-offset: 4.125rem}tui-textfield[data-size=s] .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]{--t-offset: 4.875rem}tui-textfield[data-size=m] .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]{--t-offset: 5.25rem}tui-textfield[data-size=l] .t-ipi-flag{margin:0 -.1875rem}tui-textfield .t-ipi-select{position:absolute;left:0;border-radius:inherit;border-start-end-radius:0;border-end-end-radius:0}tui-textfield .t-ipi-select_readonly{pointer-events:none}.t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}.t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}.t-ipi-code{color:var(--tui-text-secondary)}.t-ipi-search{position:sticky;top:0;z-index:1;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){.t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}tui-dropdown-mobile .t-ipi-search{background:var(--tui-background-elevation-1)}tui-dropdown-mobile .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TuiAutoFocus, selector: "[tuiAutoFocus]", inputs: ["tuiAutoFocus"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiCell, selector: "[tuiCell]:not(ng-template)", inputs: ["tuiCell", "tuiCellHeight"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: i4.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i4.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled", "value"] }, { kind: "pipe", type: TuiFlagPipe, name: "tuiFlag" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield", inputs: ["stringify", "content", "filler"] }, { kind: "directive", type: i2.TuiTextfieldDirective, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])" }, { kind: "directive", type: i2.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: i2.TuiTextfieldDropdownDirective, selector: "ng-template[tuiTextfieldDropdown]" }, { kind: "directive", type: TuiTextfieldContent, selector: "ng-template[tuiTextfieldContent]" }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
131
136
  }
132
137
  export { TuiInputPhoneInternational };
133
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputPhoneInternational, decorators: [{
@@ -142,7 +147,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
142
147
  TuiChevron,
143
148
  TuiDataList,
144
149
  TuiFlagPipe,
145
- TuiIcon,
146
150
  TuiTextfield,
147
151
  TuiTextfieldContent,
148
152
  TuiTitle,
@@ -155,12 +159,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
155
159
  '[attr.readonly]': 'readOnly() || null',
156
160
  '[attr.inputmode]': '!ios && open() ? "none" : null',
157
161
  '[disabled]': 'disabled()',
158
- '[value]': 'masked()',
159
162
  '(blur)': 'onTouched()',
160
- '(input)': 'onChange(unmasked)',
163
+ '(input)': 'masked.set($event.target.value)',
161
164
  '(click)': 'open.set(false)',
162
165
  '(beforeinput.capture)': 'onPaste($event)',
163
- }, template: "<ng-container *tuiTextfieldContent>\n <button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"mode()\"\n [class.t-ipi-select_readonly]=\"readOnly()\"\n [disabled]=\"disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"open()\"\n (mousedown.prevent)=\"interactive() && open.set(!open())\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()?.[code()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"code() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-container *tuiTextfieldDropdown>\n <div\n *ngIf=\"countrySearch\"\n #element\n class=\"t-ipi-search\"\n >\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiTextfield\n type=\"text\"\n [focused]=\"true\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!!element.closest('tui-dropdown-mobile')\"\n (keydown.arrowDown)=\"list.get(0)?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n\n <tui-data-list class=\"t-ipi-options\">\n <button\n *ngFor=\"let item of filtered()\"\n tuiOption\n type=\"button\"\n [tuiCell]=\"size()\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n </tui-data-list>\n</ng-container>\n", styles: ["[tuiInputPhoneInternational][tuiInputPhoneInternational]{left:var(--t-offset);border-start-start-radius:0;border-end-start-radius:0;inline-size:calc(100% - var(--t-offset))}tui-root:has(tui-dropdown-mobile) [tuiInputPhoneInternational][tuiInputPhoneInternational]{caret-color:transparent}[tuiInputPhoneInternational][tuiInputPhoneInternational]+label{padding-left:var(--t-offset)}tui-textfield[data-size=s]{--t-offset: 4.125rem}tui-textfield[data-size=s] .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]{--t-offset: 4.875rem}tui-textfield[data-size=m] .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]{--t-offset: 5.25rem}tui-textfield[data-size=l] .t-ipi-flag{margin:0 -.1875rem}.t-ipi-select{position:absolute;left:0;border-radius:inherit;border-start-end-radius:0;border-end-end-radius:0}.t-ipi-select_readonly{pointer-events:none}.t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}.t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}.t-ipi-code{color:var(--tui-text-secondary)}.t-ipi-search{position:sticky;top:0;z-index:1;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){.t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}tui-dropdown-mobile .t-ipi-search{background:var(--tui-background-elevation-1)}tui-dropdown-mobile .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}\n"] }]
166
+ }, template: "<ng-container *tuiTextfieldContent>\n <button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"mode()\"\n [class.t-ipi-select_readonly]=\"readOnly()\"\n [disabled]=\"disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"open()\"\n (mousedown.prevent)=\"interactive() && open.set(!open())\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()?.[code()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"code() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-container *tuiTextfieldDropdown>\n <div\n *ngIf=\"countrySearch\"\n #element\n class=\"t-ipi-search\"\n >\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiTextfield\n type=\"text\"\n [focused]=\"true\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!!element.closest('tui-dropdown-mobile')\"\n (keydown.arrowDown)=\"list.get(0)?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n\n <tui-data-list class=\"t-ipi-options\">\n <button\n *ngFor=\"let item of filtered()\"\n tuiOption\n type=\"button\"\n [tuiCell]=\"size()\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n </tui-data-list>\n</ng-container>\n", styles: ["[tuiInputPhoneInternational][tuiInputPhoneInternational]{left:var(--t-offset);border-start-start-radius:0;border-end-start-radius:0;inline-size:calc(100% - var(--t-offset))}tui-root:has(tui-dropdown-mobile) [tuiInputPhoneInternational][tuiInputPhoneInternational]{caret-color:transparent}[tuiInputPhoneInternational][tuiInputPhoneInternational]+label{padding-left:var(--t-offset)}tui-textfield[data-size=s]{--t-offset: 4.125rem}tui-textfield[data-size=s] .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]{--t-offset: 4.875rem}tui-textfield[data-size=m] .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]{--t-offset: 5.25rem}tui-textfield[data-size=l] .t-ipi-flag{margin:0 -.1875rem}tui-textfield .t-ipi-select{position:absolute;left:0;border-radius:inherit;border-start-end-radius:0;border-end-end-radius:0}tui-textfield .t-ipi-select_readonly{pointer-events:none}.t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}.t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}.t-ipi-code{color:var(--tui-text-secondary)}.t-ipi-search{position:sticky;top:0;z-index:1;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){.t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}tui-dropdown-mobile .t-ipi-search{background:var(--tui-background-elevation-1)}tui-dropdown-mobile .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}\n"] }]
164
167
  }], propDecorators: { list: [{
165
168
  type: ViewChildren,
166
169
  args: [TuiOption, { read: ElementRef }]
@@ -178,4 +181,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
178
181
  type: ViewChild,
179
182
  args: [TuiTextfieldDropdownDirective, { read: TemplateRef }]
180
183
  }] } });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGhvbmUtaW50ZXJuYXRpb25hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcmltZW50YWwvY29tcG9uZW50cy9pbnB1dC1waG9uZS1pbnRlcm5hdGlvbmFsL2lucHV0LXBob25lLWludGVybmF0aW9uYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXhwZXJpbWVudGFsL2NvbXBvbmVudHMvaW5wdXQtcGhvbmUtaW50ZXJuYXRpb25hbC9pbnB1dC1waG9uZS1pbnRlcm5hdGlvbmFsLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQsT0FBTyxFQUNILHVCQUF1QixFQUN2QiwrQkFBK0IsRUFDL0IsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQywyQkFBMkIsRUFBRSw0QkFBNEIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFD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RG5DLE1BQU07Z0JBSUksY0FBYztzQkFEeEIsS0FBSzt1QkFBQyxXQUFXO2dCQU1QLE9BQU87c0JBRGpCLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQU1ULFFBQVE7c0JBRHJCLFNBQVM7dUJBQUMsNkJBQTZCLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ0Zvck9mLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHR5cGUge1F1ZXJ5TGlzdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TWFza2l0b0RpcmVjdGl2ZX0gZnJvbSAnQG1hc2tpdG8vYW5ndWxhcic7XG5pbXBvcnQgdHlwZSB7TWFza2l0b09wdGlvbnN9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBNQVNLSVRPX0RFRkFVTFRfT1BUSU9OUyxcbiAgICBtYXNraXRvSW5pdGlhbENhbGlicmF0aW9uUGx1Z2luLFxuICAgIG1hc2tpdG9UcmFuc2Zvcm0sXG59IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHttYXNraXRvR2V0Q291bnRyeUZyb21OdW1iZXIsIG1hc2tpdG9QaG9uZU9wdGlvbnNHZW5lcmF0b3J9IGZyb20gJ0BtYXNraXRvL3Bob25lJztcbmltcG9ydCB7dHVpQXNDb250cm9sLCBUdWlDb250cm9sfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NsYXNzZXMnO1xuaW1wb3J0IHtDSEFSX1BMVVMsIEVNUFRZX1FVRVJZLCBUVUlfREVGQVVMVF9NQVRDSEVSfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge1R1aUFjdGl2ZVpvbmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZSc7XG5pbXBvcnQge1xuICAgIFR1aUF1dG9Gb2N1cyxcbiAgICB0dWlBdXRvRm9jdXNPcHRpb25zUHJvdmlkZXIsXG59IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hdXRvLWZvY3VzJztcbmltcG9ydCB7VFVJX0lTX0lPUywgdHVpRmFsbGJhY2tWYWx1ZVByb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnQsIHR1aUlzSW5wdXRFdmVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlEaXJlY3RpdmVCaW5kaW5nfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHtUdWlCdXR0b259IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7VHVpRGF0YUxpc3QsIFR1aU9wdGlvbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9kYXRhLWxpc3QnO1xuaW1wb3J0IHtUdWlJY29ufSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHtcbiAgICBUVUlfVEVYVEZJRUxEX09QVElPTlMsXG4gICAgVHVpVGV4dGZpZWxkLFxuICAgIFR1aVRleHRmaWVsZENvbnRlbnQsXG4gICAgVHVpVGV4dGZpZWxkRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgVHVpV2l0aFRleHRmaWVsZCxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHtcbiAgICB0dWlEcm9wZG93bixcbiAgICBUdWlEcm9wZG93bk9wZW4sXG4gICAgdHVpRHJvcGRvd25PcGVuLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duJztcbmltcG9ydCB7VHVpVGl0bGV9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvdGl0bGUnO1xuaW1wb3J0IHtUdWlGbGFnUGlwZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvcGlwZXMnO1xuaW1wb3J0IHtUVUlfQ09NTU9OX0lDT05TfSBmcm9tICdAdGFpZ2EtdWkvY29yZS90b2tlbnMnO1xuaW1wb3J0IHR5cGUge1R1aUNvdW50cnlJc29Db2RlfSBmcm9tICdAdGFpZ2EtdWkvaTE4bi90eXBlcyc7XG5pbXBvcnQge1RVSV9JTlBVVF9QSE9ORV9JTlRFUk5BVElPTkFMX09QVElPTlN9IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9pbnB1dC1waG9uZS1pbnRlcm5hdGlvbmFsJztcbmltcG9ydCB7VHVpQ2hldnJvbn0gZnJvbSAnQHRhaWdhLXVpL2tpdC9kaXJlY3RpdmVzL2NoZXZyb24nO1xuaW1wb3J0IHtUVUlfQ09VTlRSSUVTLCBUVUlfSU5URVJOQVRJT05BTF9TRUFSQ0h9IGZyb20gJ0B0YWlnYS11aS9raXQvdG9rZW5zJztcbmltcG9ydCB7dHVpR2V0Q2FsbGluZ0NvZGUsIHR1aU1hc2tpdG99IGZyb20gJ0B0YWlnYS11aS9raXQvdXRpbHMnO1xuaW1wb3J0IHtUdWlDZWxsfSBmcm9tICdAdGFpZ2EtdWkvbGF5b3V0L2NvbXBvbmVudHMvY2VsbCc7XG5pbXBvcnQgdHlwZSB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQge3ZhbGlkYXRlUGhvbmVOdW1iZXJMZW5ndGh9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB0eXBlIHtNZXRhZGF0YUpzb259IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzL2NvcmUnO1xuaW1wb3J0IHtmaWx0ZXIsIGZyb20sIHNraXB9IGZyb20gJ3J4anMnO1xuXG5jb25zdCBOT1RfRk9STV9DT05UUk9MX1NZTUJPTFMgPSAvW14rXFxkXS9nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnaW5wdXRbdHVpSW5wdXRQaG9uZUludGVybmF0aW9uYWxdJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBOZ0Zvck9mLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBUdWlBdXRvRm9jdXMsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpQ2VsbCxcbiAgICAgICAgVHVpQ2hldnJvbixcbiAgICAgICAgVHVpRGF0YUxpc3QsXG4gICAgICAgIFR1aUZsYWdQaXBlLFxuICAgICAgICBUdWlJY29uLFxuICAgICAgICBUdWlUZXh0ZmllbGQsXG4gICAgICAgIFR1aVRleHRmaWVsZENvbnRlbnQsXG4gICAgICAgIFR1aVRpdGxlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXBob25lLWludGVybmF0aW9uYWwudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtcGhvbmUtaW50ZXJuYXRpb25hbC5zdHlsZS5sZXNzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgdHVpQXNDb250cm9sKFR1aUlucHV0UGhvbmVJbnRlcm5hdGlvbmFsKSxcbiAgICAgICAgdHVpRmFsbGJhY2tWYWx1ZVByb3ZpZGVyKCcnKSxcbiAgICAgICAgdHVpQXV0b0ZvY3VzT3B0aW9uc1Byb3ZpZGVyKHtwcmV2ZW50U2Nyb2xsOiB0cnVlfSksXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW01hc2tpdG9EaXJlY3RpdmUsIFR1aVdpdGhUZXh0ZmllbGRdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgdHlwZTogJ3RlbCcsXG4gICAgICAgICdbYXR0ci5yZWFkb25seV0nOiAncmVhZE9ubHkoKSB8fCBudWxsJyxcbiAgICAgICAgJ1thdHRyLmlucHV0bW9kZV0nOiAnIWlvcyAmJiBvcGVuKCkgPyBcIm5vbmVcIiA6IG51bGwnLFxuICAgICAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAgICAgJ1t2YWx1ZV0nOiAnbWFza2VkKCknLFxuICAgICAgICAnKGJsdXIpJzogJ29uVG91Y2hlZCgpJyxcbiAgICAgICAgJyhpbnB1dCknOiAnb25DaGFuZ2UodW5tYXNrZWQpJyxcbiAgICAgICAgJyhjbGljayknOiAnb3Blbi5zZXQoZmFsc2UpJyxcbiAgICAgICAgJyhiZWZvcmVpbnB1dC5jYXB0dXJlKSc6ICdvblBhc3RlKCRldmVudCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUlucHV0UGhvbmVJbnRlcm5hdGlvbmFsIGV4dGVuZHMgVHVpQ29udHJvbDxzdHJpbmc+IHtcbiAgICBAVmlld0NoaWxkcmVuKFR1aU9wdGlvbiwge3JlYWQ6IEVsZW1lbnRSZWZ9KVxuICAgIHByb3RlY3RlZCByZWFkb25seSBsaXN0OiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD4+ID0gRU1QVFlfUVVFUlk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50PEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlvcyA9IGluamVjdChUVUlfSVNfSU9TKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWNvbnMgPSBpbmplY3QoVFVJX0NPTU1PTl9JQ09OUyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3QoVFVJX0lOUFVUX1BIT05FX0lOVEVSTkFUSU9OQUxfT1BUSU9OUyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvdW50cmllcyA9IHNpZ25hbCh0aGlzLm9wdGlvbnMuY291bnRyaWVzKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29kZSA9IHNpZ25hbCh0aGlzLm9wdGlvbnMuY291bnRyeUlzb0NvZGUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsYWJlbCA9IHRvU2lnbmFsKGluamVjdChUVUlfSU5URVJOQVRJT05BTF9TRUFSQ0gpKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWV0YWRhdGEgPSB0b1NpZ25hbChmcm9tKHRoaXMub3B0aW9ucy5tZXRhZGF0YSkpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBuYW1lcyA9IHRvU2lnbmFsKGluamVjdChUVUlfQ09VTlRSSUVTKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wZW4gPSB0dWlEcm9wZG93bk9wZW4oKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd24gPSB0dWlEcm9wZG93bihudWxsKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VhcmNoID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzaXplID0gaW5qZWN0KFRVSV9URVhURklFTERfT1BUSU9OUykuc2l6ZTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXNrID0gdHVpTWFza2l0byhcbiAgICAgICAgY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlTWFzayh0aGlzLmNvZGUoKSwgdGhpcy5tZXRhZGF0YSgpKSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXNrZWQgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIG1hc2tpdG9UcmFuc2Zvcm0odGhpcy52YWx1ZSgpLCB0aGlzLm1hc2soKSB8fCBNQVNLSVRPX0RFRkFVTFRfT1BUSU9OUykgfHxcbiAgICAgICAgICAgIHRoaXMuZWwudmFsdWUsXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJlZCA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuY291bnRyaWVzKClcbiAgICAgICAgICAgIC5tYXAoKGlzbykgPT4gKHtcbiAgICAgICAgICAgICAgICBpc28sXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lcygpPy5baXNvXSB8fCAnJyxcbiAgICAgICAgICAgICAgICBjb2RlOiB0dWlHZXRDYWxsaW5nQ29kZShpc28sIHRoaXMubWV0YWRhdGEoKSksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHtuYW1lLCBjb2RlfSkgPT4gVFVJX0RFRkFVTFRfTUFUQ0hFUihuYW1lICsgY29kZSwgdGhpcy5zZWFyY2goKSkpLFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW5hYmxlZCA9IHR1aURpcmVjdGl2ZUJpbmRpbmcoXG4gICAgICAgIFR1aURyb3Bkb3duT3BlbixcbiAgICAgICAgJ3R1aURyb3Bkb3duRW5hYmxlZCcsXG4gICAgICAgIHRoaXMuaW50ZXJhY3RpdmUsXG4gICAgICAgIHt9LFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJCA9IGluamVjdChUdWlBY3RpdmVab25lKVxuICAgICAgICAudHVpQWN0aXZlWm9uZUNoYW5nZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnJlYWRPbmx5KCkpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoYWN0aXZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBgJHt0dWlHZXRDYWxsaW5nQ29kZSh0aGlzLmNvZGUoKSwgdGhpcy5tZXRhZGF0YSgpKX0gYDtcbiAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrID0gYWN0aXZlID8gdGhpcy5lbC52YWx1ZSB8fCBwcmVmaXggOiB0aGlzLmVsLnZhbHVlO1xuXG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5zZXQoJycpO1xuICAgICAgICAgICAgdGhpcy5lbC52YWx1ZSA9IHRoaXMuZWwudmFsdWUgPT09IHByZWZpeCA/ICcnIDogZmFsbGJhY2s7XG4gICAgICAgIH0pO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY291bnRyeVNlYXJjaCA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGNvdW50cnlJc29Db2RlQ2hhbmdlID0gdG9PYnNlcnZhYmxlKHRoaXMuY29kZSkucGlwZShza2lwKDEpKTtcblxuICAgIEBJbnB1dCgnY291bnRyaWVzJylcbiAgICBwdWJsaWMgc2V0IGNvdW50cmllc1ZhbHVlKHZhbHVlOiByZWFkb25seSBUdWlDb3VudHJ5SXNvQ29kZVtdKSB7XG4gICAgICAgIHRoaXMuY291bnRyaWVzLnNldCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCdjb3VudHJ5SXNvQ29kZScpXG4gICAgcHVibGljIHNldCBpc29Db2RlKGNvZGU6IFR1aUNvdW50cnlJc29Db2RlKSB7XG4gICAgICAgIHRoaXMuY29kZS5zZXQoY29kZSk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZChUdWlUZXh0ZmllbGREcm9wZG93bkRpcmVjdGl2ZSwge3JlYWQ6IFRlbXBsYXRlUmVmfSlcbiAgICBwcm90ZWN0ZWQgc2V0IHRlbXBsYXRlKHRlbXBsYXRlOiBQb2x5bW9ycGhldXNDb250ZW50KSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uc2V0KHRlbXBsYXRlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHVubWFza2VkKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5lbC52YWx1ZS5yZXBsYWNlQWxsKE5PVF9GT1JNX0NPTlRST0xfU1lNQk9MUywgJycpO1xuXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHVpR2V0Q2FsbGluZ0NvZGUodGhpcy5jb2RlKCksIHRoaXMubWV0YWRhdGEoKSkgPyAnJyA6IHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblBhc3RlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMubWV0YWRhdGEoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHR1aUlzSW5wdXRFdmVudChldmVudCkgJiYgZXZlbnQuZGF0YTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZGF0YSB8fFxuICAgICAgICAgICAgIW1ldGFkYXRhIHx8XG4gICAgICAgICAgICAoIWV2ZW50LmlucHV0VHlwZS5pbmNsdWRlcygnRHJvcCcpICYmICFldmVudC5pbnB1dFR5cGUuaW5jbHVkZXMoJ1Bhc3RlJykpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhLnN0YXJ0c1dpdGgoQ0hBUl9QTFVTKSA/IGRhdGEgOiBDSEFSX1BMVVMgKyBkYXRhO1xuICAgICAgICBjb25zdCBjb2RlID0gbWFza2l0b0dldENvdW50cnlGcm9tTnVtYmVyKHZhbHVlLCBtZXRhZGF0YSk7XG5cbiAgICAgICAgaWYgKGNvZGUgJiYgdmFsaWRhdGVQaG9uZU51bWJlckxlbmd0aCh2YWx1ZSkgIT09ICdUT09fU0hPUlQnKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUuc2V0KGNvZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uSXRlbUNsaWNrKGNvZGU6IFR1aUNvdW50cnlJc29Db2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWwuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5lbC52YWx1ZSA9IHRoaXMudW5tYXNrZWQ7XG4gICAgICAgIHRoaXMub3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNvZGUuc2V0KGNvZGUpO1xuICAgICAgICB0aGlzLnNlYXJjaC5zZXQoJycpO1xuICAgICAgICB0aGlzLmVsLnZhbHVlID0gbWFza2l0b1RyYW5zZm9ybShcbiAgICAgICAgICAgIHRoaXMuZWwudmFsdWUgfHwgdHVpR2V0Q2FsbGluZ0NvZGUoY29kZSwgdGhpcy5tZXRhZGF0YSgpKSxcbiAgICAgICAgICAgIHRoaXMubWFzaygpIHx8IE1BU0tJVE9fREVGQVVMVF9PUFRJT05TLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudW5tYXNrZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZU1hc2soXG4gICAgICAgIGNvdW50cnlJc29Db2RlOiBUdWlDb3VudHJ5SXNvQ29kZSxcbiAgICAgICAgbWV0YWRhdGE/OiBNZXRhZGF0YUpzb24sXG4gICAgKTogTWFza2l0b09wdGlvbnMgfCBudWxsIHtcbiAgICAgICAgaWYgKCFtZXRhZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7cGx1Z2lucywgLi4ub3B0aW9uc30gPSBtYXNraXRvUGhvbmVPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgICAgIGNvdW50cnlJc29Db2RlLFxuICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICBzZXBhcmF0b3I6IHRoaXMub3B0aW9ucy5zZXBhcmF0b3IsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgcGx1Z2luczogWy4uLnBsdWdpbnMsIG1hc2tpdG9Jbml0aWFsQ2FsaWJyYXRpb25QbHVnaW4oKV0sXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHVpVGV4dGZpZWxkQ29udGVudD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJ0ZXh0ZmllbGRcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgIHR1aUNoZXZyb25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwidC1pcGktc2VsZWN0XCJcbiAgICAgICAgW2F0dHIuZGF0YS1tb2RlXT1cIm1vZGUoKVwiXG4gICAgICAgIFtjbGFzcy50LWlwaS1zZWxlY3RfcmVhZG9ubHldPVwicmVhZE9ubHkoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgW3R1aUFwcGVhcmFuY2VGb2N1c109XCJvcGVuKClcIlxuICAgICAgICAobW91c2Vkb3duLnByZXZlbnQpPVwiaW50ZXJhY3RpdmUoKSAmJiBvcGVuLnNldCghb3BlbigpKVwiXG4gICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgICBjbGFzcz1cInQtaXBpLWZsYWdcIlxuICAgICAgICAgICAgW2FsdF09XCJuYW1lcygpPy5bY29kZSgpXVwiXG4gICAgICAgICAgICBbY2xhc3MudC1pcGktZmxhZ19zbWFsbF09XCJzaXplKCkgPT09ICdzJ1wiXG4gICAgICAgICAgICBbc3JjXT1cImNvZGUoKSB8IHR1aUZsYWdcIlxuICAgICAgICAvPlxuICAgIDwvYnV0dG9uPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICp0dWlUZXh0ZmllbGREcm9wZG93bj5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY291bnRyeVNlYXJjaFwiXG4gICAgICAgICNlbGVtZW50XG4gICAgICAgIGNsYXNzPVwidC1pcGktc2VhcmNoXCJcbiAgICA+XG4gICAgICAgIDx0dWktdGV4dGZpZWxkXG4gICAgICAgICAgICBbaWNvblN0YXJ0XT1cImljb25zLnNlYXJjaFwiXG4gICAgICAgICAgICBbdHVpVGV4dGZpZWxkU2l6ZV09XCJzaXplKCkgPT09ICdzJyA/ICdzJyA6ICdtJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgdHVpVGV4dGZpZWxkXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIFtmb2N1c2VkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWwoKVwiXG4gICAgICAgICAgICAgICAgW3R1aUF1dG9Gb2N1c109XCIhIWVsZW1lbnQuY2xvc2VzdCgndHVpLWRyb3Bkb3duLW1vYmlsZScpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd0Rvd24pPVwibGlzdC5nZXQoMCk/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKClcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaC5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8dHVpLWRhdGEtbGlzdCBjbGFzcz1cInQtaXBpLW9wdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWQoKVwiXG4gICAgICAgICAgICB0dWlPcHRpb25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW3R1aUNlbGxdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtLmlzbylcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInQtaXBpLWZsYWdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy50LWlwaS1mbGFnX3NtYWxsXT1cInNpemUoKSA9PT0gJ3MnXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0uaXNvIHwgdHVpRmxhZ1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gdHVpVGl0bGU+e3sgaXRlbS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0LWlwaS1jb2RlXCI+e3sgaXRlbS5jb2RlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L3R1aS1kYXRhLWxpc3Q+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGhvbmUtaW50ZXJuYXRpb25hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcmltZW50YWwvY29tcG9uZW50cy9pbnB1dC1waG9uZS1pbnRlcm5hdGlvbmFsL2lucHV0LXBob25lLWludGVybmF0aW9uYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXhwZXJpbWVudGFsL2NvbXBvbmVudHMvaW5wdXQtcGhvbmUtaW50ZXJuYXRpb25hbC9pbnB1dC1waG9uZS1pbnRlcm5hdGlvbmFsLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRWxELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsK0JBQStCLEVBQy9CLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9E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SSxFQUFFLFVBQVUsRUFBQztnQkE2RHBDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSVUsb0JBQW9CO3NCQURuQyxNQUFNO2dCQUlJLGNBQWM7c0JBRHhCLEtBQUs7dUJBQUMsV0FBVztnQkFNUCxPQUFPO3NCQURqQixLQUFLO3VCQUFDLGdCQUFnQjtnQkFhVCxRQUFRO3NCQURyQixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdGb3JPZiwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB0eXBlIHtRdWVyeUxpc3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXNraXRvRGlyZWN0aXZlfSBmcm9tICdAbWFza2l0by9hbmd1bGFyJztcbmltcG9ydCB0eXBlIHtNYXNraXRvT3B0aW9uc30gZnJvbSAnQG1hc2tpdG8vY29yZSc7XG5pbXBvcnQge1xuICAgIE1BU0tJVE9fREVGQVVMVF9PUFRJT05TLFxuICAgIG1hc2tpdG9Jbml0aWFsQ2FsaWJyYXRpb25QbHVnaW4sXG4gICAgbWFza2l0b1RyYW5zZm9ybSxcbn0gZnJvbSAnQG1hc2tpdG8vY29yZSc7XG5pbXBvcnQge21hc2tpdG9HZXRDb3VudHJ5RnJvbU51bWJlciwgbWFza2l0b1Bob25lT3B0aW9uc0dlbmVyYXRvcn0gZnJvbSAnQG1hc2tpdG8vcGhvbmUnO1xuaW1wb3J0IHt0dWlBc0NvbnRyb2wsIFR1aUNvbnRyb2x9IGZyb20gJ0B0YWlnYS11aS9jZGsvY2xhc3Nlcyc7XG5pbXBvcnQge1xuICAgIENIQVJfUExVUyxcbiAgICBFTVBUWV9RVUVSWSxcbiAgICBUVUlfQUxMT1dfU0lHTkFMX1dSSVRFUyxcbiAgICBUVUlfREVGQVVMVF9NQVRDSEVSLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge1R1aUFjdGl2ZVpvbmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZSc7XG5pbXBvcnQge1xuICAgIFR1aUF1dG9Gb2N1cyxcbiAgICB0dWlBdXRvRm9jdXNPcHRpb25zUHJvdmlkZXIsXG59IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hdXRvLWZvY3VzJztcbmltcG9ydCB7VFVJX0lTX0lPUywgdHVpRmFsbGJhY2tWYWx1ZVByb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge1xuICAgIHR1aUluamVjdEVsZW1lbnQsXG4gICAgdHVpSXNJbnB1dEV2ZW50LFxuICAgIHR1aVZhbHVlQmluZGluZyxcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlEaXJlY3RpdmVCaW5kaW5nfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHtUdWlCdXR0b259IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7VHVpRGF0YUxpc3QsIFR1aU9wdGlvbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9kYXRhLWxpc3QnO1xuaW1wb3J0IHtcbiAgICBUVUlfVEVYVEZJRUxEX09QVElPTlMsXG4gICAgVHVpVGV4dGZpZWxkLFxuICAgIFR1aVRleHRmaWVsZENvbnRlbnQsXG4gICAgVHVpVGV4dGZpZWxkRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgVHVpV2l0aFRleHRmaWVsZCxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHtcbiAgICB0dWlEcm9wZG93bixcbiAgICBUdWlEcm9wZG93bk9wZW4sXG4gICAgdHVpRHJvcGRvd25PcGVuLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duJztcbmltcG9ydCB7VHVpVGl0bGV9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvdGl0bGUnO1xuaW1wb3J0IHtUdWlGbGFnUGlwZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvcGlwZXMnO1xuaW1wb3J0IHtUVUlfQ09NTU9OX0lDT05TfSBmcm9tICdAdGFpZ2EtdWkvY29yZS90b2tlbnMnO1xuaW1wb3J0IHR5cGUge1R1aUNvdW50cnlJc29Db2RlfSBmcm9tICdAdGFpZ2EtdWkvaTE4bi90eXBlcyc7XG5pbXBvcnQge1RVSV9JTlBVVF9QSE9ORV9JTlRFUk5BVElPTkFMX09QVElPTlN9IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9pbnB1dC1waG9uZS1pbnRlcm5hdGlvbmFsJztcbmltcG9ydCB7VHVpQ2hldnJvbn0gZnJvbSAnQHRhaWdhLXVpL2tpdC9kaXJlY3RpdmVzL2NoZXZyb24nO1xuaW1wb3J0IHtUVUlfQ09VTlRSSUVTLCBUVUlfSU5URVJOQVRJT05BTF9TRUFSQ0h9IGZyb20gJ0B0YWlnYS11aS9raXQvdG9rZW5zJztcbmltcG9ydCB7dHVpR2V0Q2FsbGluZ0NvZGUsIHR1aU1hc2tpdG99IGZyb20gJ0B0YWlnYS11aS9raXQvdXRpbHMnO1xuaW1wb3J0IHtUdWlDZWxsfSBmcm9tICdAdGFpZ2EtdWkvbGF5b3V0L2NvbXBvbmVudHMvY2VsbCc7XG5pbXBvcnQgdHlwZSB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQge3ZhbGlkYXRlUGhvbmVOdW1iZXJMZW5ndGh9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB0eXBlIHtNZXRhZGF0YUpzb259IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzL2NvcmUnO1xuaW1wb3J0IHtmaWx0ZXIsIGZyb20sIHNraXB9IGZyb20gJ3J4anMnO1xuXG5jb25zdCBOT1RfRk9STV9DT05UUk9MX1NZTUJPTFMgPSAvW14rXFxkXS9nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnaW5wdXRbdHVpSW5wdXRQaG9uZUludGVybmF0aW9uYWxdJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBOZ0Zvck9mLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBUdWlBdXRvRm9jdXMsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpQ2VsbCxcbiAgICAgICAgVHVpQ2hldnJvbixcbiAgICAgICAgVHVpRGF0YUxpc3QsXG4gICAgICAgIFR1aUZsYWdQaXBlLFxuICAgICAgICBUdWlUZXh0ZmllbGQsXG4gICAgICAgIFR1aVRleHRmaWVsZENvbnRlbnQsXG4gICAgICAgIFR1aVRpdGxlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXBob25lLWludGVybmF0aW9uYWwudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtcGhvbmUtaW50ZXJuYXRpb25hbC5zdHlsZS5sZXNzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgdHVpQXNDb250cm9sKFR1aUlucHV0UGhvbmVJbnRlcm5hdGlvbmFsKSxcbiAgICAgICAgdHVpRmFsbGJhY2tWYWx1ZVByb3ZpZGVyKCcnKSxcbiAgICAgICAgdHVpQXV0b0ZvY3VzT3B0aW9uc1Byb3ZpZGVyKHtwcmV2ZW50U2Nyb2xsOiB0cnVlfSksXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW01hc2tpdG9EaXJlY3RpdmUsIFR1aVdpdGhUZXh0ZmllbGRdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgdHlwZTogJ3RlbCcsXG4gICAgICAgICdbYXR0ci5yZWFkb25seV0nOiAncmVhZE9ubHkoKSB8fCBudWxsJyxcbiAgICAgICAgJ1thdHRyLmlucHV0bW9kZV0nOiAnIWlvcyAmJiBvcGVuKCkgPyBcIm5vbmVcIiA6IG51bGwnLFxuICAgICAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAgICAgJyhibHVyKSc6ICdvblRvdWNoZWQoKScsXG4gICAgICAgICcoaW5wdXQpJzogJ21hc2tlZC5zZXQoJGV2ZW50LnRhcmdldC52YWx1ZSknLFxuICAgICAgICAnKGNsaWNrKSc6ICdvcGVuLnNldChmYWxzZSknLFxuICAgICAgICAnKGJlZm9yZWlucHV0LmNhcHR1cmUpJzogJ29uUGFzdGUoJGV2ZW50KScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpSW5wdXRQaG9uZUludGVybmF0aW9uYWwgZXh0ZW5kcyBUdWlDb250cm9sPHN0cmluZz4ge1xuICAgIEBWaWV3Q2hpbGRyZW4oVHVpT3B0aW9uLCB7cmVhZDogRWxlbWVudFJlZn0pXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxpc3Q6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50Pj4gPSBFTVBUWV9RVUVSWTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQ8SFRNTElucHV0RWxlbWVudD4oKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW9zID0gaW5qZWN0KFRVSV9JU19JT1MpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpY29ucyA9IGluamVjdChUVUlfQ09NTU9OX0lDT05TKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9ucyA9IGluamVjdChUVUlfSU5QVVRfUEhPTkVfSU5URVJOQVRJT05BTF9PUFRJT05TKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY291bnRyaWVzID0gc2lnbmFsKHRoaXMub3B0aW9ucy5jb3VudHJpZXMpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb2RlID0gc2lnbmFsKHRoaXMub3B0aW9ucy5jb3VudHJ5SXNvQ29kZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxhYmVsID0gdG9TaWduYWwoaW5qZWN0KFRVSV9JTlRFUk5BVElPTkFMX1NFQVJDSCkpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtZXRhZGF0YSA9IHRvU2lnbmFsKGZyb20odGhpcy5vcHRpb25zLm1ldGFkYXRhKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWVzID0gdG9TaWduYWwoaW5qZWN0KFRVSV9DT1VOVFJJRVMpKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3BlbiA9IHR1aURyb3Bkb3duT3BlbigpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkcm9wZG93biA9IHR1aURyb3Bkb3duKG51bGwpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWFyY2ggPSBzaWduYWw8c3RyaW5nPignJyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpemUgPSBpbmplY3QoVFVJX1RFWFRGSUVMRF9PUFRJT05TKS5zaXplO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1hc2sgPSB0dWlNYXNraXRvKFxuICAgICAgICBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXB1dGVNYXNrKHRoaXMuY29kZSgpLCB0aGlzLm1ldGFkYXRhKCkpKSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1hc2tlZCA9IHR1aVZhbHVlQmluZGluZygpO1xuXG4gICAgcHJvdGVjdGVkIHZhbHVlQ2hhbmdlRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnVubWFzayh0aGlzLm1hc2tlZCgpKSk7XG4gICAgfSwgVFVJX0FMTE9XX1NJR05BTF9XUklURVMpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlcmVkID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5jb3VudHJpZXMoKVxuICAgICAgICAgICAgLm1hcCgoaXNvKSA9PiAoe1xuICAgICAgICAgICAgICAgIGlzbyxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWVzKCk/Lltpc29dIHx8ICcnLFxuICAgICAgICAgICAgICAgIGNvZGU6IHR1aUdldENhbGxpbmdDb2RlKGlzbywgdGhpcy5tZXRhZGF0YSgpKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoe25hbWUsIGNvZGV9KSA9PiBUVUlfREVGQVVMVF9NQVRDSEVSKG5hbWUgKyBjb2RlLCB0aGlzLnNlYXJjaCgpKSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBlbmFibGVkID0gdHVpRGlyZWN0aXZlQmluZGluZyhcbiAgICAgICAgVHVpRHJvcGRvd25PcGVuLFxuICAgICAgICAndHVpRHJvcGRvd25FbmFibGVkJyxcbiAgICAgICAgdGhpcy5pbnRlcmFjdGl2ZSxcbiAgICAgICAge30sXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSAkID0gaW5qZWN0KFR1aUFjdGl2ZVpvbmUpXG4gICAgICAgIC50dWlBY3RpdmVab25lQ2hhbmdlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMucmVhZE9ubHkoKSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChhY3RpdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGAke3R1aUdldENhbGxpbmdDb2RlKHRoaXMuY29kZSgpLCB0aGlzLm1ldGFkYXRhKCkpfSBgO1xuXG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5zZXQoJycpO1xuICAgICAgICAgICAgdGhpcy5tYXNrZWQudXBkYXRlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrID0gYWN0aXZlID8gdmFsdWUgfHwgcHJlZml4IDogdmFsdWU7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHByZWZpeCA/ICcnIDogZmFsbGJhY2s7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb3VudHJ5U2VhcmNoID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgY291bnRyeUlzb0NvZGVDaGFuZ2UgPSB0b09ic2VydmFibGUodGhpcy5jb2RlKS5waXBlKHNraXAoMSkpO1xuXG4gICAgQElucHV0KCdjb3VudHJpZXMnKVxuICAgIHB1YmxpYyBzZXQgY291bnRyaWVzVmFsdWUodmFsdWU6IHJlYWRvbmx5IFR1aUNvdW50cnlJc29Db2RlW10pIHtcbiAgICAgICAgdGhpcy5jb3VudHJpZXMuc2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2NvdW50cnlJc29Db2RlJylcbiAgICBwdWJsaWMgc2V0IGlzb0NvZGUoY29kZTogVHVpQ291bnRyeUlzb0NvZGUpIHtcbiAgICAgICAgdGhpcy5jb2RlLnNldChjb2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh1bm1hc2tlZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUodW5tYXNrZWQpO1xuICAgICAgICB0aGlzLm1hc2tlZC5zZXQoXG4gICAgICAgICAgICBtYXNraXRvVHJhbnNmb3JtKHRoaXMudmFsdWUoKSA/PyAnJywgdGhpcy5tYXNrKCkgfHwgTUFTS0lUT19ERUZBVUxUX09QVElPTlMpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoVHVpVGV4dGZpZWxkRHJvcGRvd25EaXJlY3RpdmUsIHtyZWFkOiBUZW1wbGF0ZVJlZn0pXG4gICAgcHJvdGVjdGVkIHNldCB0ZW1wbGF0ZSh0ZW1wbGF0ZTogUG9seW1vcnBoZXVzQ29udGVudCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duLnNldCh0ZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uUGFzdGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YSgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdHVpSXNJbnB1dEV2ZW50KGV2ZW50KSAmJiBldmVudC5kYXRhO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFkYXRhIHx8XG4gICAgICAgICAgICAhbWV0YWRhdGEgfHxcbiAgICAgICAgICAgICghZXZlbnQuaW5wdXRUeXBlLmluY2x1ZGVzKCdEcm9wJykgJiYgIWV2ZW50LmlucHV0VHlwZS5pbmNsdWRlcygnUGFzdGUnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEuc3RhcnRzV2l0aChDSEFSX1BMVVMpID8gZGF0YSA6IENIQVJfUExVUyArIGRhdGE7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBtYXNraXRvR2V0Q291bnRyeUZyb21OdW1iZXIodmFsdWUsIG1ldGFkYXRhKTtcblxuICAgICAgICBpZiAoY29kZSAmJiB2YWxpZGF0ZVBob25lTnVtYmVyTGVuZ3RoKHZhbHVlKSAhPT0gJ1RPT19TSE9SVCcpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZS5zZXQoY29kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25JdGVtQ2xpY2soY29kZTogVHVpQ291bnRyeUlzb0NvZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbC5mb2N1cygpO1xuICAgICAgICB0aGlzLm9wZW4uc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jb2RlLnNldChjb2RlKTtcbiAgICAgICAgdGhpcy5zZWFyY2guc2V0KCcnKTtcbiAgICAgICAgdGhpcy5tYXNrZWQuc2V0KFxuICAgICAgICAgICAgbWFza2l0b1RyYW5zZm9ybShcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlKCkgfHwgdHVpR2V0Q2FsbGluZ0NvZGUoY29kZSwgdGhpcy5tZXRhZGF0YSgpKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1hc2soKSB8fCBNQVNLSVRPX0RFRkFVTFRfT1BUSU9OUyxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlTWFzayhcbiAgICAgICAgY291bnRyeUlzb0NvZGU6IFR1aUNvdW50cnlJc29Db2RlLFxuICAgICAgICBtZXRhZGF0YT86IE1ldGFkYXRhSnNvbixcbiAgICApOiBNYXNraXRvT3B0aW9ucyB8IG51bGwge1xuICAgICAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtwbHVnaW5zLCAuLi5vcHRpb25zfSA9IG1hc2tpdG9QaG9uZU9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICAgICAgY291bnRyeUlzb0NvZGUsXG4gICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgIHNlcGFyYXRvcjogdGhpcy5vcHRpb25zLnNlcGFyYXRvcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBwbHVnaW5zOiBbLi4ucGx1Z2lucywgbWFza2l0b0luaXRpYWxDYWxpYnJhdGlvblBsdWdpbigpXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVubWFzayhtYXNrZWRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtYXNrZWRWYWx1ZS5yZXBsYWNlQWxsKE5PVF9GT1JNX0NPTlRST0xfU1lNQk9MUywgJycpO1xuXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHVpR2V0Q2FsbGluZ0NvZGUodGhpcy5jb2RlKCksIHRoaXMubWV0YWRhdGEoKSkgPyAnJyA6IHZhbHVlO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnR1aVRleHRmaWVsZENvbnRlbnQ+XG4gICAgPGJ1dHRvblxuICAgICAgICBhcHBlYXJhbmNlPVwidGV4dGZpZWxkXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIHR1aUJ1dHRvblxuICAgICAgICB0dWlDaGV2cm9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInQtaXBpLXNlbGVjdFwiXG4gICAgICAgIFthdHRyLmRhdGEtbW9kZV09XCJtb2RlKClcIlxuICAgICAgICBbY2xhc3MudC1pcGktc2VsZWN0X3JlYWRvbmx5XT1cInJlYWRPbmx5KClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgIFtzaXplXT1cInNpemUoKVwiXG4gICAgICAgIFt0dWlBcHBlYXJhbmNlRm9jdXNdPVwib3BlbigpXCJcbiAgICAgICAgKG1vdXNlZG93bi5wcmV2ZW50KT1cImludGVyYWN0aXZlKCkgJiYgb3Blbi5zZXQoIW9wZW4oKSlcIlxuICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJ0LWlwaS1mbGFnXCJcbiAgICAgICAgICAgIFthbHRdPVwibmFtZXMoKT8uW2NvZGUoKV1cIlxuICAgICAgICAgICAgW2NsYXNzLnQtaXBpLWZsYWdfc21hbGxdPVwic2l6ZSgpID09PSAncydcIlxuICAgICAgICAgICAgW3NyY109XCJjb2RlKCkgfCB0dWlGbGFnXCJcbiAgICAgICAgLz5cbiAgICA8L2J1dHRvbj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqdHVpVGV4dGZpZWxkRHJvcGRvd24+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvdW50cnlTZWFyY2hcIlxuICAgICAgICAjZWxlbWVudFxuICAgICAgICBjbGFzcz1cInQtaXBpLXNlYXJjaFwiXG4gICAgPlxuICAgICAgICA8dHVpLXRleHRmaWVsZFxuICAgICAgICAgICAgW2ljb25TdGFydF09XCJpY29ucy5zZWFyY2hcIlxuICAgICAgICAgICAgW3R1aVRleHRmaWVsZFNpemVdPVwic2l6ZSgpID09PSAncycgPyAncycgOiAnbSdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBbZm9jdXNlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsKClcIlxuICAgICAgICAgICAgICAgIFt0dWlBdXRvRm9jdXNdPVwiISFlbGVtZW50LmNsb3Nlc3QoJ3R1aS1kcm9wZG93bi1tb2JpbGUnKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uYXJyb3dEb3duKT1cImxpc3QuZ2V0KDApPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2guc2V0KCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgIDwvZGl2PlxuXG4gICAgPHR1aS1kYXRhLWxpc3QgY2xhc3M9XCJ0LWlwaS1vcHRpb25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkKClcIlxuICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFt0dWlDZWxsXT1cInNpemUoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbS5pc28pXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0LWlwaS1mbGFnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudC1pcGktZmxhZ19zbWFsbF09XCJzaXplKCkgPT09ICdzJ1wiXG4gICAgICAgICAgICAgICAgW3NyY109XCJpdGVtLmlzbyB8IHR1aUZsYWdcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIHR1aVRpdGxlPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidC1pcGktY29kZVwiPnt7IGl0ZW0uY29kZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC90dWktZGF0YS1saXN0PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from './search-history.component';
2
+ export * from './search-hotkey.directive';
3
+ export * from './search-results';
4
+ export * from './search-results.component';
5
+ export * from './search-results.options';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcmltZW50YWwvY29tcG9uZW50cy9zZWFyY2gtcmVzdWx0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NlYXJjaC1oaXN0b3J5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NlYXJjaC1ob3RrZXkuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoLXJlc3VsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gtcmVzdWx0cy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gtcmVzdWx0cy5vcHRpb25zJztcbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core';
3
+ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
4
+ import { NgControl } from '@angular/forms';
5
+ import { WA_LOCAL_STORAGE } from '@ng-web-apis/common';
6
+ import { TuiButton } from '@taiga-ui/core/components/button';
7
+ import { TuiTextfieldComponent } from '@taiga-ui/core/components/textfield';
8
+ import { TuiTitle } from '@taiga-ui/core/directives/title';
9
+ import { TUI_CLOSE_WORD } from '@taiga-ui/core/tokens';
10
+ import { TuiAvatar } from '@taiga-ui/kit/components/avatar';
11
+ import { TuiCell } from '@taiga-ui/layout/components/cell';
12
+ import { TUI_INPUT_SEARCH } from '@taiga-ui/layout/tokens';
13
+ import { filter, map } from 'rxjs';
14
+ import { TUI_SEARCH_RESULTS_OPTIONS } from './search-results.options';
15
+ import * as i0 from "@angular/core";
16
+ class TuiSearchHistory {
17
+ constructor() {
18
+ this.textfield = inject(TuiTextfieldComponent);
19
+ this.storage = inject(WA_LOCAL_STORAGE);
20
+ this.control = inject(NgControl);
21
+ this.close = toSignal(inject(TUI_CLOSE_WORD));
22
+ this.i18n = toSignal(inject(TUI_INPUT_SEARCH));
23
+ this.options = inject(TUI_SEARCH_RESULTS_OPTIONS);
24
+ this.$ = this.control.valueChanges
25
+ ?.pipe(map(String), filter((item) => !!item && !this.popular.includes(item)), takeUntilDestroyed())
26
+ .subscribe((value) => {
27
+ this.store(value);
28
+ });
29
+ this.history = this.items;
30
+ this.popular = [];
31
+ }
32
+ store(item) {
33
+ this.storage.setItem(this.options.key, JSON.stringify(Array.from(new Set([item.trim(), ...this.items]))
34
+ .filter((v, _, a) => v && !a.find((s) => s.startsWith(v) && s !== v))
35
+ .slice(0, 5)));
36
+ }
37
+ remove(item) {
38
+ this.textfield.input?.nativeElement.focus();
39
+ this.history = this.history.filter((v) => v !== item);
40
+ this.storage.setItem(this.options.key, JSON.stringify(this.items.filter((v) => v !== item)));
41
+ }
42
+ select(item) {
43
+ this.control.control?.setValue(item);
44
+ this.textfield.input?.nativeElement.focus();
45
+ }
46
+ get items() {
47
+ return JSON.parse(this.storage.getItem(this.options.key) || '[]');
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSearchHistory, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiSearchHistory, isStandalone: true, selector: "tui-search-history", inputs: { popular: "popular" }, ngImport: i0, template: "<label\n *ngIf=\"history.length\"\n class=\"t-sr-label\"\n>\n {{ i18n()?.history }}\n</label>\n<button\n *ngFor=\"let item of history\"\n tuiCell=\"m\"\n type=\"button\"\n (click)=\"select(item)\"\n (keydown.backspace)=\"remove(item)\"\n (keydown.delete)=\"remove(item)\"\n (mousedown.prevent)=\"(0)\"\n>\n <tui-avatar [src]=\"options.history\" />\n <span tuiTitle>{{ item }}</span>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n [iconStart]=\"options.remove\"\n (click.stop)=\"remove(item)\"\n >\n \uD83D\uDDD1\uFE0F\n </button>\n</button>\n<label\n *ngIf=\"popular.length\"\n class=\"t-sr-label\"\n>\n {{ i18n()?.popular }}\n</label>\n<button\n *ngFor=\"let item of popular\"\n tuiCell=\"m\"\n type=\"button\"\n (click)=\"select(item)\"\n (mousedown.prevent)=\"(0)\"\n>\n <tui-avatar [src]=\"options.popular\" />\n <span tuiTitle>{{ item }}</span>\n</button>\n", styles: [":host:not(:empty){display:block;padding:.325rem 0}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TuiAvatar, selector: "tui-avatar,button[tuiAvatar],a[tuiAvatar]", inputs: ["size", "round", "src"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiCell, selector: "[tuiCell]:not(ng-template)", inputs: ["tuiCell", "tuiCellHeight"] }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
51
+ }
52
+ export { TuiSearchHistory };
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSearchHistory, decorators: [{
54
+ type: Component,
55
+ args: [{ standalone: true, selector: 'tui-search-history', imports: [NgForOf, NgIf, NgTemplateOutlet, TuiAvatar, TuiButton, TuiCell, TuiTitle], changeDetection: ChangeDetectionStrategy.OnPush, template: "<label\n *ngIf=\"history.length\"\n class=\"t-sr-label\"\n>\n {{ i18n()?.history }}\n</label>\n<button\n *ngFor=\"let item of history\"\n tuiCell=\"m\"\n type=\"button\"\n (click)=\"select(item)\"\n (keydown.backspace)=\"remove(item)\"\n (keydown.delete)=\"remove(item)\"\n (mousedown.prevent)=\"(0)\"\n>\n <tui-avatar [src]=\"options.history\" />\n <span tuiTitle>{{ item }}</span>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n [iconStart]=\"options.remove\"\n (click.stop)=\"remove(item)\"\n >\n \uD83D\uDDD1\uFE0F\n </button>\n</button>\n<label\n *ngIf=\"popular.length\"\n class=\"t-sr-label\"\n>\n {{ i18n()?.popular }}\n</label>\n<button\n *ngFor=\"let item of popular\"\n tuiCell=\"m\"\n type=\"button\"\n (click)=\"select(item)\"\n (mousedown.prevent)=\"(0)\"\n>\n <tui-avatar [src]=\"options.popular\" />\n <span tuiTitle>{{ item }}</span>\n</button>\n", styles: [":host:not(:empty){display:block;padding:.325rem 0}\n"] }]
56
+ }], propDecorators: { popular: [{
57
+ type: Input
58
+ }] } });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWhpc3RvcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXhwZXJpbWVudGFsL2NvbXBvbmVudHMvc2VhcmNoLXJlc3VsdHMvc2VhcmNoLWhpc3RvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXhwZXJpbWVudGFsL2NvbXBvbmVudHMvc2VhcmNoLXJlc3VsdHMvc2VhcmNoLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDM0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxNQUFNLEVBQUUs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QU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDOytHQWxEUSxnQkFBZ0I7bUdBQWhCLGdCQUFnQiw4R0MvQjdCLHdoQ0E2Q0EsOEdEMUJjLE9BQU8sbUhBQUUsSUFBSSw2RkFBb0IsU0FBUyx3SEFBRSxTQUFTLG9JQUFFLE9BQU8sNkdBQUUsUUFBUTs7U0FZekUsZ0JBQWdCOzRGQUFoQixnQkFBZ0I7a0JBZjVCLFNBQVM7aUNBQ00sSUFBSSxZQUNOLG9CQUFvQixXQUNyQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLG1CQVVsRSx1QkFBdUIsQ0FBQyxNQUFNOzhCQXVCeEMsT0FBTztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ0Zvck9mLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtOZ0NvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7V0FfTE9DQUxfU1RPUkFHRX0gZnJvbSAnQG5nLXdlYi1hcGlzL2NvbW1vbic7XG5pbXBvcnQge1R1aUJ1dHRvbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHtUdWlUZXh0ZmllbGRDb21wb25lbnR9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvdGV4dGZpZWxkJztcbmltcG9ydCB7VHVpVGl0bGV9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvdGl0bGUnO1xuaW1wb3J0IHtUVUlfQ0xPU0VfV09SRH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7VHVpQXZhdGFyfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7VHVpQ2VsbH0gZnJvbSAnQHRhaWdhLXVpL2xheW91dC9jb21wb25lbnRzL2NlbGwnO1xuaW1wb3J0IHtUVUlfSU5QVVRfU0VBUkNIfSBmcm9tICdAdGFpZ2EtdWkvbGF5b3V0L3Rva2Vucyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtUVUlfU0VBUkNIX1JFU1VMVFNfT1BUSU9OU30gZnJvbSAnLi9zZWFyY2gtcmVzdWx0cy5vcHRpb25zJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3R1aS1zZWFyY2gtaGlzdG9yeScsXG4gICAgaW1wb3J0czogW05nRm9yT2YsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIFR1aUF2YXRhciwgVHVpQnV0dG9uLCBUdWlDZWxsLCBUdWlUaXRsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Q6bm90KDplbXB0eSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMzI1cmVtIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIGAsXG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVHVpU2VhcmNoSGlzdG9yeSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZXh0ZmllbGQgPSBpbmplY3QoVHVpVGV4dGZpZWxkQ29tcG9uZW50KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2UgPSBpbmplY3QoV0FfTE9DQUxfU1RPUkFHRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xvc2UgPSB0b1NpZ25hbChpbmplY3QoVFVJX0NMT1NFX1dPUkQpKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaTE4biA9IHRvU2lnbmFsKGluamVjdChUVUlfSU5QVVRfU0VBUkNIKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3QoVFVJX1NFQVJDSF9SRVNVTFRTX09QVElPTlMpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkID0gdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICA/LnBpcGUoXG4gICAgICAgICAgICBtYXAoU3RyaW5nKSxcbiAgICAgICAgICAgIGZpbHRlcigoaXRlbSkgPT4gISFpdGVtICYmICF0aGlzLnBvcHVsYXIuaW5jbHVkZXMoaXRlbSkpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUodmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgIHByb3RlY3RlZCBoaXN0b3J5ID0gdGhpcy5pdGVtcztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBvcHVsYXI6IHJlYWRvbmx5IHN0cmluZ1tdID0gW107XG5cbiAgICBwcm90ZWN0ZWQgc3RvcmUoaXRlbTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmtleSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20obmV3IFNldChbaXRlbS50cmltKCksIC4uLnRoaXMuaXRlbXNdKSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodiwgXywgYSkgPT4gdiAmJiAhYS5maW5kKChzKSA9PiBzLnN0YXJ0c1dpdGgodikgJiYgcyAhPT0gdikpXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCA1KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbW92ZShpdGVtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0ZmllbGQuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LmZpbHRlcigodikgPT4gdiAhPT0gaXRlbSk7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmtleSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuaXRlbXMuZmlsdGVyKCh2KSA9PiB2ICE9PSBpdGVtKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdChpdGVtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldFZhbHVlKGl0ZW0pO1xuICAgICAgICB0aGlzLnRleHRmaWVsZC5pbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGl0ZW1zKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5vcHRpb25zLmtleSkgfHwgJ1tdJyk7XG4gICAgfVxufVxuIiwiPGxhYmVsXG4gICAgKm5nSWY9XCJoaXN0b3J5Lmxlbmd0aFwiXG4gICAgY2xhc3M9XCJ0LXNyLWxhYmVsXCJcbj5cbiAgICB7eyBpMThuKCk/Lmhpc3RvcnkgfX1cbjwvbGFiZWw+XG48YnV0dG9uXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGlzdG9yeVwiXG4gICAgdHVpQ2VsbD1cIm1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJzZWxlY3QoaXRlbSlcIlxuICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJyZW1vdmUoaXRlbSlcIlxuICAgIChrZXlkb3duLmRlbGV0ZSk9XCJyZW1vdmUoaXRlbSlcIlxuICAgIChtb3VzZWRvd24ucHJldmVudCk9XCIoMClcIlxuPlxuICAgIDx0dWktYXZhdGFyIFtzcmNdPVwib3B0aW9ucy5oaXN0b3J5XCIgLz5cbiAgICA8c3BhbiB0dWlUaXRsZT57eyBpdGVtIH19PC9zcGFuPlxuICAgIDxidXR0b25cbiAgICAgICAgYXBwZWFyYW5jZT1cImljb25cIlxuICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2ljb25TdGFydF09XCJvcHRpb25zLnJlbW92ZVwiXG4gICAgICAgIChjbGljay5zdG9wKT1cInJlbW92ZShpdGVtKVwiXG4gICAgPlxuICAgICAgICDwn5eR77iPXG4gICAgPC9idXR0b24+XG48L2J1dHRvbj5cbjxsYWJlbFxuICAgICpuZ0lmPVwicG9wdWxhci5sZW5ndGhcIlxuICAgIGNsYXNzPVwidC1zci1sYWJlbFwiXG4+XG4gICAge3sgaTE4bigpPy5wb3B1bGFyIH19XG48L2xhYmVsPlxuPGJ1dHRvblxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBvcHVsYXJcIlxuICAgIHR1aUNlbGw9XCJtXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwic2VsZWN0KGl0ZW0pXCJcbiAgICAobW91c2Vkb3duLnByZXZlbnQpPVwiKDApXCJcbj5cbiAgICA8dHVpLWF2YXRhciBbc3JjXT1cIm9wdGlvbnMucG9wdWxhclwiIC8+XG4gICAgPHNwYW4gdHVpVGl0bGU+e3sgaXRlbSB9fTwvc3Bhbj5cbjwvYnV0dG9uPlxuIl19
@@ -0,0 +1,30 @@
1
+ import { Directive, inject } from '@angular/core';
2
+ import { toSignal } from '@angular/core/rxjs-interop';
3
+ import { WA_NAVIGATOR } from '@ng-web-apis/common';
4
+ import { TuiInputSearch } from '@taiga-ui/layout/components/input-search';
5
+ import { TUI_INPUT_SEARCH } from '@taiga-ui/layout/tokens';
6
+ import { map } from 'rxjs';
7
+ import * as i0 from "@angular/core";
8
+ class TuiSearchHotkey {
9
+ constructor() {
10
+ this.platform = inject(WA_NAVIGATOR).platform;
11
+ this.search = inject(TuiInputSearch);
12
+ this.placeholder = toSignal(inject(TUI_INPUT_SEARCH).pipe(map(({ hotkey }) => this.platform.startsWith('Mac') ? `⌘+K ${hotkey}` : `Alt+K ${hotkey}`)));
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSearchHotkey, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
15
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiSearchHotkey, isStandalone: true, selector: "input[tuiSearchHotkey]", host: { listeners: { "document:keydown.meta.k.stop": "search.open()", "document:keydown.alt.k.stop": "search.open()" }, properties: { "placeholder": "placeholder()" } }, ngImport: i0 }); }
16
+ }
17
+ export { TuiSearchHotkey };
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSearchHotkey, decorators: [{
19
+ type: Directive,
20
+ args: [{
21
+ standalone: true,
22
+ selector: 'input[tuiSearchHotkey]',
23
+ host: {
24
+ '[placeholder]': 'placeholder()',
25
+ '(document:keydown.meta.k.stop)': 'search.open()',
26
+ '(document:keydown.alt.k.stop)': 'search.open()',
27
+ },
28
+ }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWhvdGtleS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcmltZW50YWwvY29tcG9uZW50cy9zZWFyY2gtcmVzdWx0cy9zZWFyY2gtaG90a2V5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUV6QixNQVNhLGVBQWU7SUFUNUI7UUFVcUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFdkMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLFFBQVEsQ0FDckMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUN6QixHQUFHLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FDYixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsQ0FDeEUsQ0FDSixDQUNKLENBQUM7S0FDTDsrR0FYWSxlQUFlO21HQUFmLGVBQWU7O1NBQWYsZUFBZTs0RkFBZixlQUFlO2tCQVQzQixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxJQUFJLEVBQUU7d0JBQ0YsZUFBZSxFQUFFLGVBQWU7d0JBQ2hDLGdDQUFnQyxFQUFFLGVBQWU7d0JBQ2pELCtCQUErQixFQUFFLGVBQWU7cUJBQ25EO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1dBX05BVklHQVRPUn0gZnJvbSAnQG5nLXdlYi1hcGlzL2NvbW1vbic7XG5pbXBvcnQge1R1aUlucHV0U2VhcmNofSBmcm9tICdAdGFpZ2EtdWkvbGF5b3V0L2NvbXBvbmVudHMvaW5wdXQtc2VhcmNoJztcbmltcG9ydCB7VFVJX0lOUFVUX1NFQVJDSH0gZnJvbSAnQHRhaWdhLXVpL2xheW91dC90b2tlbnMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnaW5wdXRbdHVpU2VhcmNoSG90a2V5XScsXG4gICAgaG9zdDoge1xuICAgICAgICAnW3BsYWNlaG9sZGVyXSc6ICdwbGFjZWhvbGRlcigpJyxcbiAgICAgICAgJyhkb2N1bWVudDprZXlkb3duLm1ldGEuay5zdG9wKSc6ICdzZWFyY2gub3BlbigpJyxcbiAgICAgICAgJyhkb2N1bWVudDprZXlkb3duLmFsdC5rLnN0b3ApJzogJ3NlYXJjaC5vcGVuKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVNlYXJjaEhvdGtleSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybSA9IGluamVjdChXQV9OQVZJR0FUT1IpLnBsYXRmb3JtO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlYXJjaCA9IGluamVjdChUdWlJbnB1dFNlYXJjaCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gdG9TaWduYWwoXG4gICAgICAgIGluamVjdChUVUlfSU5QVVRfU0VBUkNIKS5waXBlKFxuICAgICAgICAgICAgbWFwKCh7aG90a2V5fSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnBsYXRmb3JtLnN0YXJ0c1dpdGgoJ01hYycpID8gYOKMmCtLICR7aG90a2V5fWAgOiBgQWx0K0sgJHtob3RrZXl9YCxcbiAgICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgKTtcbn1cbiJdfQ==