novo-elements 10.8.0-next.4 → 10.8.0-next.6

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 (45) hide show
  1. package/elements/button/Button.d.ts +4 -2
  2. package/elements/chips/ChipInput.d.ts +14 -9
  3. package/elements/chips/ChipList.scss +0 -14
  4. package/elements/common/mixins/overlay.mixin.d.ts +2 -0
  5. package/elements/field/field.d.ts +4 -2
  6. package/elements/field/field.scss +6 -0
  7. package/elements/form/extras/FormExtras.module.d.ts +14 -11
  8. package/elements/form/extras/index.d.ts +1 -0
  9. package/elements/form/extras/number-range/index.d.ts +1 -0
  10. package/elements/form/extras/number-range/number-range.component.d.ts +27 -0
  11. package/elements/query-builder/condition-definitions/number-condition.definition.d.ts +1 -1
  12. package/elements/query-builder/query-builder.module.d.ts +1 -1
  13. package/esm2022/elements/autocomplete/autocomplete.component.mjs +10 -4
  14. package/esm2022/elements/button/Button.mjs +11 -2
  15. package/esm2022/elements/chips/ChipInput.mjs +32 -11
  16. package/esm2022/elements/chips/ChipList.mjs +2 -2
  17. package/esm2022/elements/common/mixins/overlay.mixin.mjs +3 -1
  18. package/esm2022/elements/field/field.mjs +10 -4
  19. package/esm2022/elements/form/extras/FormExtras.module.mjs +20 -8
  20. package/esm2022/elements/form/extras/index.mjs +2 -1
  21. package/esm2022/elements/form/extras/number-range/index.mjs +2 -0
  22. package/esm2022/elements/form/extras/number-range/number-range.component.mjs +104 -0
  23. package/esm2022/elements/query-builder/condition-definitions/date-condition.definition.mjs +7 -7
  24. package/esm2022/elements/query-builder/condition-definitions/date-time-condition.definition.mjs +25 -9
  25. package/esm2022/elements/query-builder/condition-definitions/number-condition.definition.mjs +15 -6
  26. package/esm2022/elements/query-builder/query-builder.module.mjs +7 -4
  27. package/esm2022/services/novo-label-service.mjs +5 -2
  28. package/fesm2022/novo-elements-elements-autocomplete.mjs +9 -3
  29. package/fesm2022/novo-elements-elements-autocomplete.mjs.map +1 -1
  30. package/fesm2022/novo-elements-elements-button.mjs +10 -1
  31. package/fesm2022/novo-elements-elements-button.mjs.map +1 -1
  32. package/fesm2022/novo-elements-elements-chips.mjs +32 -14
  33. package/fesm2022/novo-elements-elements-chips.mjs.map +1 -1
  34. package/fesm2022/novo-elements-elements-common.mjs +2 -1
  35. package/fesm2022/novo-elements-elements-common.mjs.map +1 -1
  36. package/fesm2022/novo-elements-elements-field.mjs +9 -3
  37. package/fesm2022/novo-elements-elements-field.mjs.map +1 -1
  38. package/fesm2022/novo-elements-elements-form.mjs +114 -10
  39. package/fesm2022/novo-elements-elements-form.mjs.map +1 -1
  40. package/fesm2022/novo-elements-elements-query-builder.mjs +57 -30
  41. package/fesm2022/novo-elements-elements-query-builder.mjs.map +1 -1
  42. package/fesm2022/novo-elements-services.mjs +4 -1
  43. package/fesm2022/novo-elements-services.mjs.map +1 -1
  44. package/package.json +1 -1
  45. package/services/novo-label-service.d.ts +4 -1
@@ -1,6 +1,6 @@
1
- import { ElementRef } from '@angular/core';
1
+ import { ElementRef, OnChanges, SimpleChanges } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare class NovoButtonElement {
3
+ export declare class NovoButtonElement implements OnChanges {
4
4
  element: ElementRef;
5
5
  /**
6
6
  * The text color of the button. Should be used for Icon buttons. see theme.
@@ -33,8 +33,10 @@ export declare class NovoButtonElement {
33
33
  * Make the button non-interactive.
34
34
  */
35
35
  disabled: boolean;
36
+ disabledAttr: undefined | '';
36
37
  private _icon;
37
38
  constructor(element: ElementRef);
39
+ ngOnChanges(changes: SimpleChanges): void;
38
40
  handleKeydown(event: KeyboardEvent): void;
39
41
  /** Focuses the input. */
40
42
  focus(options?: FocusOptions): void;
@@ -1,9 +1,11 @@
1
1
  import { BooleanInput } from '@angular/cdk/coercion';
2
- import { ElementRef, EventEmitter, OnChanges } from '@angular/core';
2
+ import { ElementRef, EventEmitter, OnChanges, OnDestroy } from '@angular/core';
3
3
  import { NgControl } from '@angular/forms';
4
4
  import { NovoChipsDefaultOptions } from './ChipDefaults';
5
5
  import { NovoChipList } from './ChipList';
6
6
  import { NovoChipTextControl } from './ChipTextControl';
7
+ import { NovoFieldElement } from 'novo-elements/elements/field';
8
+ import { Subject } from 'rxjs';
7
9
  import * as i0 from "@angular/core";
8
10
  /** Represents an input event on a `novoChipInput`. */
9
11
  export interface NovoChipInputEvent {
@@ -16,10 +18,11 @@ export interface NovoChipInputEvent {
16
18
  * Directive that adds chip-specific behaviors to an input element inside `<novo-form-field>`.
17
19
  * May be placed inside or outside of an `<novo-chip-list>`.
18
20
  */
19
- export declare class NovoChipInput implements NovoChipTextControl, OnChanges {
21
+ export declare class NovoChipInput implements NovoChipTextControl, OnChanges, OnDestroy {
20
22
  protected _elementRef: ElementRef<HTMLInputElement>;
21
- private _defaultOptions;
22
- private _chipList;
23
+ private readonly _defaultOptions;
24
+ private readonly _field;
25
+ private readonly _chipList;
23
26
  protected ngControl: NgControl;
24
27
  /** Whether the control is focused. */
25
28
  focused: boolean;
@@ -49,12 +52,14 @@ export declare class NovoChipInput implements NovoChipTextControl, OnChanges {
49
52
  get empty(): boolean;
50
53
  /** The native input element to which this directive is attached. */
51
54
  protected _inputElement: HTMLInputElement;
52
- constructor(_elementRef: ElementRef<HTMLInputElement>, _defaultOptions: NovoChipsDefaultOptions, _chipList: NovoChipList, ngControl: NgControl);
55
+ destroy$: Subject<void>;
56
+ constructor(_elementRef: ElementRef<HTMLInputElement>, _defaultOptions: NovoChipsDefaultOptions, _field: NovoFieldElement, _chipList: NovoChipList, ngControl: NgControl);
53
57
  ngOnChanges(): void;
58
+ ngOnDestroy(): void;
54
59
  /** Utility method to make host definition/tests more clear. */
55
60
  _keydown(event?: KeyboardEvent): void;
56
61
  /** Checks to see if the blur should emit the (chipEnd) event. */
57
- _blur(): void;
62
+ _blur(blurEvent: FocusEvent): void;
58
63
  _focus(): void;
59
64
  /** Checks to see if the (chipEnd) event needs to be emitted. */
60
65
  _emitChipEnd(event?: KeyboardEvent): void;
@@ -65,8 +70,8 @@ export declare class NovoChipInput implements NovoChipTextControl, OnChanges {
65
70
  clearValue(): void;
66
71
  /** Checks whether a keycode is one of the configured separators. */
67
72
  private _isSeparatorKey;
68
- static ngAcceptInputType_addOnBlur: BooleanInput;
69
- static ngAcceptInputType_disabled: BooleanInput;
70
- static ɵfac: i0.ɵɵFactoryDeclaration<NovoChipInput, never>;
73
+ static readonly ngAcceptInputType_addOnBlur: BooleanInput;
74
+ static readonly ngAcceptInputType_disabled: BooleanInput;
75
+ static ɵfac: i0.ɵɵFactoryDeclaration<NovoChipInput, [null, null, { optional: true; }, null, { optional: true; self: true; }]>;
71
76
  static ɵdir: i0.ɵɵDirectiveDeclaration<NovoChipInput, "input[novoChipInput]", ["novoChipInput", "novoChipInputFor"], { "addOnBlur": { "alias": "novoChipInputAddOnBlur"; "required": false; }; "separatorKeyCodes": { "alias": "novoChipInputSeparatorKeyCodes"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "id": { "alias": "id"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "chipEnd": "novoChipInputTokenEnd"; }, never, never, false, never>;
72
77
  }
@@ -40,24 +40,10 @@ $novo-chip-input-margin: 4px;
40
40
 
41
41
  novo-field.novo-focused {
42
42
  input.novo-chip-input {
43
- opacity: 1;
44
- width: $novo-chip-input-width;
45
- margin: $novo-chip-input-margin;
46
43
  flex: 1 0 $novo-chip-input-width;
47
44
  }
48
45
  }
49
46
 
50
- novo-field:not(.novo-focused) {
51
- .novo-field-input .novo-chip-list-has-value {
52
- margin-right: 2rem;
53
- input.novo-chip-input {
54
- opacity: 0;
55
- width: 0px !important;
56
- max-width: 0px !important;
57
- }
58
- }
59
- }
60
-
61
47
  input.novo-chip-input {
62
48
  width: 20px;
63
49
  margin: $novo-chip-input-margin;
@@ -1,3 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
1
2
  import { NovoOverlayTemplateComponent } from '../overlay';
2
3
  import { AbstractConstructor, Constructor } from './constructor';
3
4
  import { CanDisable } from './disabled.mixin';
@@ -9,6 +10,7 @@ export interface HasOverlay {
9
10
  closePanel(): void;
10
11
  togglePanel(): void;
11
12
  }
13
+ export declare const NOVO_OVERLAY_CONTAINER: InjectionToken<HasOverlay>;
12
14
  /** @docs-private */
13
15
  export type HasOverlayCtor = Constructor<HasOverlay>;
14
16
  /** Mixin to augment a directive with a `overlay` property. */
@@ -1,6 +1,6 @@
1
1
  import { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, OnDestroy, QueryList } from '@angular/core';
2
2
  import { NgControl } from '@angular/forms';
3
- import { NovoLabel } from 'novo-elements/elements/common';
3
+ import { NovoLabel, HasOverlay } from 'novo-elements/elements/common';
4
4
  import { NovoErrorElement } from './error/error';
5
5
  import { NovoFieldControl } from './field-control';
6
6
  import { NovoHintElement } from './hint/hint';
@@ -24,6 +24,7 @@ export declare class NovoFieldElement implements AfterContentInit, OnDestroy {
24
24
  _errorElements: QueryList<NovoErrorElement>;
25
25
  _prefixElements: QueryList<NovoFieldPrefixDirective>;
26
26
  _suffixElements: QueryList<NovoFieldSuffixDirective>;
27
+ _overlayElements: QueryList<HasOverlay>;
27
28
  _control: NovoFieldControl<any>;
28
29
  layout: 'horizontal' | 'vertical';
29
30
  appearance: 'standard' | 'outline' | 'fill' | 'list';
@@ -45,6 +46,7 @@ export declare class NovoFieldElement implements AfterContentInit, OnDestroy {
45
46
  ngOnDestroy(): void;
46
47
  /** Throws an error if the form field's control is missing. */
47
48
  protected _validateControlChild(): void;
49
+ blurEventIsInField(blurEvt: FocusEvent): boolean;
48
50
  _handleContainerClick(evt: MouseEvent): void;
49
51
  _isUnderlinedInput(): boolean;
50
52
  /** Determines whether to display hints or errors. */
@@ -53,5 +55,5 @@ export declare class NovoFieldElement implements AfterContentInit, OnDestroy {
53
55
  _shouldForward(prop: keyof NgControl): boolean;
54
56
  _hasLabel(): boolean;
55
57
  static ɵfac: i0.ɵɵFactoryDeclaration<NovoFieldElement, never>;
56
- static ɵcmp: i0.ɵɵComponentDeclaration<NovoFieldElement, "novo-field", never, { "layout": { "alias": "layout"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "customOverlayOrigin": { "alias": "customOverlayOrigin"; "required": false; }; "width": { "alias": "width"; "required": false; }; }, { "valueChanges": "valueChanges"; "stateChanges": "stateChanges"; }, ["_labelElement", "_control", "_hintElements", "_errorElements", "_prefixElements", "_suffixElements"], ["novo-label", "[novoPrefix]", "*", "[novoSuffix]", "novo-error", "novo-hint", "novo-hint[align=end]"], false, never>;
58
+ static ɵcmp: i0.ɵɵComponentDeclaration<NovoFieldElement, "novo-field", never, { "layout": { "alias": "layout"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "customOverlayOrigin": { "alias": "customOverlayOrigin"; "required": false; }; "width": { "alias": "width"; "required": false; }; }, { "valueChanges": "valueChanges"; "stateChanges": "stateChanges"; }, ["_labelElement", "_control", "_hintElements", "_errorElements", "_prefixElements", "_suffixElements", "_overlayElements"], ["novo-label", "[novoPrefix]", "*", "[novoSuffix]", "novo-error", "novo-hint", "novo-hint[align=end]"], false, never>;
57
59
  }
@@ -38,6 +38,12 @@
38
38
  }
39
39
  }
40
40
 
41
+ &.ng-invalid.ng-dirty.ng-touched {
42
+ .novo-field-input {
43
+ border-bottom: 1px solid $negative !important;
44
+ }
45
+ }
46
+
41
47
  .novo-field-input {
42
48
  grid-area: input;
43
49
  display: grid;
@@ -1,18 +1,21 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./address/Address";
3
3
  import * as i2 from "./file/FileInput";
4
- import * as i3 from "@angular/common";
5
- import * as i4 from "@angular/forms";
6
- import * as i5 from "novo-elements/pipes";
7
- import * as i6 from "novo-elements/elements/button";
8
- import * as i7 from "novo-elements/elements/select";
9
- import * as i8 from "novo-elements/elements/picker";
10
- import * as i9 from "novo-elements/elements/loading";
11
- import * as i10 from "novo-elements/elements/tooltip";
12
- import * as i11 from "novo-elements/elements/checkbox";
13
- import * as i12 from "@angular/cdk/drag-drop";
4
+ import * as i3 from "./number-range/number-range.component";
5
+ import * as i4 from "@angular/common";
6
+ import * as i5 from "@angular/forms";
7
+ import * as i6 from "novo-elements/pipes";
8
+ import * as i7 from "novo-elements/elements/button";
9
+ import * as i8 from "novo-elements/elements/select";
10
+ import * as i9 from "novo-elements/elements/picker";
11
+ import * as i10 from "novo-elements/elements/loading";
12
+ import * as i11 from "novo-elements/elements/tooltip";
13
+ import * as i12 from "novo-elements/elements/checkbox";
14
+ import * as i13 from "@angular/cdk/drag-drop";
15
+ import * as i14 from "novo-elements/elements/flex";
16
+ import * as i15 from "novo-elements/elements/field";
14
17
  export declare class NovoFormExtrasModule {
15
18
  static ɵfac: i0.ɵɵFactoryDeclaration<NovoFormExtrasModule, never>;
16
- static ɵmod: i0.ɵɵNgModuleDeclaration<NovoFormExtrasModule, [typeof i1.NovoAddressElement, typeof i2.NovoFileInputElement], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.NovoPipesModule, typeof i6.NovoButtonModule, typeof i7.NovoSelectModule, typeof i8.NovoPickerModule, typeof i9.NovoLoadingModule, typeof i10.NovoTooltipModule, typeof i11.NovoCheckboxModule, typeof i12.DragDropModule], [typeof i1.NovoAddressElement, typeof i2.NovoFileInputElement]>;
19
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NovoFormExtrasModule, [typeof i1.NovoAddressElement, typeof i2.NovoFileInputElement, typeof i3.NumberRangeComponent], [typeof i4.CommonModule, typeof i5.FormsModule, typeof i6.NovoPipesModule, typeof i7.NovoButtonModule, typeof i8.NovoSelectModule, typeof i9.NovoPickerModule, typeof i10.NovoLoadingModule, typeof i11.NovoTooltipModule, typeof i12.NovoCheckboxModule, typeof i13.DragDropModule, typeof i14.NovoFlexModule, typeof i15.NovoFieldModule, typeof i5.ReactiveFormsModule], [typeof i1.NovoAddressElement, typeof i2.NovoFileInputElement, typeof i3.NumberRangeComponent]>;
17
20
  static ɵinj: i0.ɵɵInjectorDeclaration<NovoFormExtrasModule>;
18
21
  }
@@ -1,3 +1,4 @@
1
1
  export * from './address';
2
2
  export * from './file';
3
+ export * from './number-range';
3
4
  export * from './FormExtras.module';
@@ -0,0 +1 @@
1
+ export * from './number-range.component';
@@ -0,0 +1,27 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
+ import { ControlValueAccessor, FormBuilder, FormGroup } from '@angular/forms';
3
+ import { NovoLabelService } from 'novo-elements/services';
4
+ import * as i0 from "@angular/core";
5
+ export declare class NumberRangeComponent implements OnInit, OnDestroy, ControlValueAccessor {
6
+ labels: NovoLabelService;
7
+ private formBuilder;
8
+ rangeForm: FormGroup;
9
+ _onChange: (value: any) => void;
10
+ _onTouched: () => void;
11
+ private _destroyed;
12
+ constructor(labels: NovoLabelService, formBuilder: FormBuilder);
13
+ ngOnInit(): void;
14
+ ngOnDestroy(): void;
15
+ minLessThanMaxValidator(group: FormGroup): {
16
+ [key: string]: boolean;
17
+ } | null;
18
+ writeValue(value: {
19
+ min: number;
20
+ max: number;
21
+ }): void;
22
+ registerOnChange(fn: any): void;
23
+ registerOnTouched(fn: any): void;
24
+ setDisabledState(isDisabled: boolean): void;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<NumberRangeComponent, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<NumberRangeComponent, "novo-number-range", never, {}, {}, never, never, false, never>;
27
+ }
@@ -4,7 +4,7 @@ import { NovoLabelService } from 'novo-elements/services';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
6
  * When constructing a query using a field that is an Int, Double, Number ...etc.
7
- * TODO: Do we implment currency formation here potentially>.?
7
+ * TODO: Do we implement currency formation here potentially?
8
8
  */
9
9
  export declare class NovoDefaultNumberConditionDef extends AbstractConditionFieldDef {
10
10
  defaultOperator: Operator;
@@ -40,6 +40,6 @@ import * as i38 from "novo-elements/elements/select-search";
40
40
  import * as i39 from "novo-elements/elements/dropdown";
41
41
  export declare class NovoQueryBuilderModule {
42
42
  static ɵfac: i0.ɵɵFactoryDeclaration<NovoQueryBuilderModule, never>;
43
- static ɵmod: i0.ɵɵNgModuleDeclaration<NovoQueryBuilderModule, [typeof i1.CriteriaBuilderComponent, typeof i2.ConditionBuilderComponent, typeof i2.ConditionInputOutlet, typeof i2.ConditionOperatorOutlet, typeof i3.ConditionGroupComponent, typeof i4.NovoDefaultAddressConditionDef, typeof i5.NovoDefaultBooleanConditionDef, typeof i6.NovoDefaultDateConditionDef, typeof i7.NovoDefaultDateTimeConditionDef, typeof i8.NovoConditionOperatorsDef, typeof i8.NovoConditionInputDef, typeof i8.NovoConditionFieldDef, typeof i9.NovoDefaultStringConditionDef, typeof i10.NovoDefaultNumberConditionDef, typeof i11.NovoDefaultIdConditionDef, typeof i12.NovoDefaultPickerConditionDef, typeof i13.NovoConditionTemplatesComponent], [typeof i14.CommonModule, typeof i15.FormsModule, typeof i15.ReactiveFormsModule, typeof i16.DragDropModule, typeof i17.CdkTableModule, typeof i18.GooglePlacesModule, typeof i19.NovoAutoCompleteModule, typeof i20.NovoButtonModule, typeof i21.NovoCommonModule, typeof i22.NovoFormModule, typeof i23.NovoSelectModule, typeof i24.NovoNonIdealStateModule, typeof i25.NovoFieldModule, typeof i21.NovoOptionModule, typeof i26.NovoFlexModule, typeof i27.NovoTabModule, typeof i28.NovoTabbedGroupPickerModule, typeof i29.NovoLoadingModule, typeof i30.NovoCardModule, typeof i31.NovoDatePickerModule, typeof i32.NovoDateTimePickerModule, typeof i33.NovoIconModule, typeof i21.NovoOverlayModule, typeof i34.NovoRadioModule, typeof i35.NovoSearchBoxModule, typeof i36.NovoSwitchModule, typeof i37.NovoChipsModule, typeof i38.NovoSelectSearchModule, typeof i39.NovoDropdownModule], [typeof i1.CriteriaBuilderComponent, typeof i2.ConditionBuilderComponent, typeof i4.NovoDefaultAddressConditionDef, typeof i5.NovoDefaultBooleanConditionDef, typeof i6.NovoDefaultDateConditionDef, typeof i7.NovoDefaultDateTimeConditionDef, typeof i8.NovoConditionOperatorsDef, typeof i8.NovoConditionInputDef, typeof i8.NovoConditionFieldDef, typeof i9.NovoDefaultStringConditionDef, typeof i10.NovoDefaultNumberConditionDef, typeof i11.NovoDefaultIdConditionDef, typeof i12.NovoDefaultPickerConditionDef, typeof i13.NovoConditionTemplatesComponent]>;
43
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NovoQueryBuilderModule, [typeof i1.CriteriaBuilderComponent, typeof i2.ConditionBuilderComponent, typeof i2.ConditionInputOutlet, typeof i2.ConditionOperatorOutlet, typeof i3.ConditionGroupComponent, typeof i4.NovoDefaultAddressConditionDef, typeof i5.NovoDefaultBooleanConditionDef, typeof i6.NovoDefaultDateConditionDef, typeof i7.NovoDefaultDateTimeConditionDef, typeof i8.NovoConditionOperatorsDef, typeof i8.NovoConditionInputDef, typeof i8.NovoConditionFieldDef, typeof i9.NovoDefaultStringConditionDef, typeof i10.NovoDefaultNumberConditionDef, typeof i11.NovoDefaultIdConditionDef, typeof i12.NovoDefaultPickerConditionDef, typeof i13.NovoConditionTemplatesComponent], [typeof i14.CommonModule, typeof i15.FormsModule, typeof i15.ReactiveFormsModule, typeof i16.DragDropModule, typeof i17.CdkTableModule, typeof i18.GooglePlacesModule, typeof i19.NovoAutoCompleteModule, typeof i20.NovoButtonModule, typeof i21.NovoCommonModule, typeof i22.NovoFormModule, typeof i23.NovoSelectModule, typeof i24.NovoNonIdealStateModule, typeof i25.NovoFieldModule, typeof i21.NovoOptionModule, typeof i26.NovoFlexModule, typeof i27.NovoTabModule, typeof i28.NovoTabbedGroupPickerModule, typeof i29.NovoLoadingModule, typeof i30.NovoCardModule, typeof i31.NovoDatePickerModule, typeof i32.NovoDateTimePickerModule, typeof i33.NovoIconModule, typeof i21.NovoOverlayModule, typeof i34.NovoRadioModule, typeof i35.NovoSearchBoxModule, typeof i36.NovoSwitchModule, typeof i37.NovoChipsModule, typeof i38.NovoSelectSearchModule, typeof i39.NovoDropdownModule, typeof i22.NovoFormExtrasModule], [typeof i1.CriteriaBuilderComponent, typeof i2.ConditionBuilderComponent, typeof i4.NovoDefaultAddressConditionDef, typeof i5.NovoDefaultBooleanConditionDef, typeof i6.NovoDefaultDateConditionDef, typeof i7.NovoDefaultDateTimeConditionDef, typeof i8.NovoConditionOperatorsDef, typeof i8.NovoConditionInputDef, typeof i8.NovoConditionFieldDef, typeof i9.NovoDefaultStringConditionDef, typeof i10.NovoDefaultNumberConditionDef, typeof i11.NovoDefaultIdConditionDef, typeof i12.NovoDefaultPickerConditionDef, typeof i13.NovoConditionTemplatesComponent]>;
44
44
  static ɵinj: i0.ɵɵInjectorDeclaration<NovoQueryBuilderModule>;
45
45
  }
@@ -14,7 +14,7 @@ import { Attribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, Conte
14
14
  import { fromEvent, interval, merge, of, Subscription } from 'rxjs';
15
15
  import { debounce, take } from 'rxjs/operators';
16
16
  import { BooleanInput } from 'novo-elements/utils';
17
- import { mixinDisabled, mixinOverlay, NovoOptgroup, NovoOption, NovoOverlayTemplateComponent, NOVO_OPTION_PARENT_COMPONENT, } from 'novo-elements/elements/common';
17
+ import { mixinDisabled, mixinOverlay, NovoOptgroup, NovoOption, NovoOverlayTemplateComponent, NOVO_OPTION_PARENT_COMPONENT, NOVO_OVERLAY_CONTAINER, } from 'novo-elements/elements/common';
18
18
  import { NovoFieldElement, NOVO_FORM_FIELD } from 'novo-elements/elements/field';
19
19
  import * as i0 from "@angular/core";
20
20
  import * as i1 from "novo-elements/elements/common";
@@ -272,7 +272,10 @@ export class NovoAutocompleteElement extends NovoAutocompleteMixins {
272
272
  return correspondingOption;
273
273
  }
274
274
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NovoAutocompleteElement, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: 'tabindex', attribute: true }, { token: NOVO_FORM_FIELD, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
275
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NovoAutocompleteElement, selector: "novo-autocomplete", inputs: { tabIndex: "tabIndex", triggerOn: "triggerOn", displayWith: "displayWith", ariaLabel: ["aria-label", "ariaLabel"], multiple: "multiple", disabled: "disabled", makeFirstItemActive: "makeFirstItemActive" }, outputs: { optionSelected: "optionSelected", optionActivated: "optionActivated" }, host: { properties: { "attr.tabindex": "disabled ? null : -1" }, classAttribute: "novo-autocomplete" }, providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement }], queries: [{ propertyName: "optionGroups", predicate: NovoOptgroup, descendants: true }, { propertyName: "options", predicate: NovoOption, descendants: true }], viewQueries: [{ propertyName: "overlay", first: true, predicate: NovoOverlayTemplateComponent, descendants: true }], exportAs: ["novoAutocomplete"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <div class=\"novo-autocomplete-options\" cdk-scrollable>\n <ng-content></ng-content>\n </div>\n</novo-overlay-template>", styles: [".novo-autocomplete-options{background-color:var(--background-bright);cursor:default;list-style:none;padding-inline-start:0px!important;box-shadow:0 -1px 3px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}\n"], dependencies: [{ kind: "component", type: i1.NovoOverlayTemplateComponent, selector: "novo-overlay-template", inputs: ["position", "scrollStrategy", "width", "minWidth", "height", "closeOnSelect", "hasBackdrop", "parent"], outputs: ["select", "opening", "closing", "backDropClicked"] }, { kind: "directive", type: i2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
275
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NovoAutocompleteElement, selector: "novo-autocomplete", inputs: { tabIndex: "tabIndex", triggerOn: "triggerOn", displayWith: "displayWith", ariaLabel: ["aria-label", "ariaLabel"], multiple: "multiple", disabled: "disabled", makeFirstItemActive: "makeFirstItemActive" }, outputs: { optionSelected: "optionSelected", optionActivated: "optionActivated" }, host: { properties: { "attr.tabindex": "disabled ? null : -1" }, classAttribute: "novo-autocomplete" }, providers: [
276
+ { provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement },
277
+ { provide: NOVO_OVERLAY_CONTAINER, useExisting: NovoAutocompleteElement }
278
+ ], queries: [{ propertyName: "optionGroups", predicate: NovoOptgroup, descendants: true }, { propertyName: "options", predicate: NovoOption, descendants: true }], viewQueries: [{ propertyName: "overlay", first: true, predicate: NovoOverlayTemplateComponent, descendants: true }], exportAs: ["novoAutocomplete"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <div class=\"novo-autocomplete-options\" cdk-scrollable>\n <ng-content></ng-content>\n </div>\n</novo-overlay-template>", styles: [".novo-autocomplete-options{background-color:var(--background-bright);cursor:default;list-style:none;padding-inline-start:0px!important;box-shadow:0 -1px 3px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}\n"], dependencies: [{ kind: "component", type: i1.NovoOverlayTemplateComponent, selector: "novo-overlay-template", inputs: ["position", "scrollStrategy", "width", "minWidth", "height", "closeOnSelect", "hasBackdrop", "parent"], outputs: ["select", "opening", "closing", "backDropClicked"] }, { kind: "directive", type: i2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
276
279
  }
277
280
  __decorate([
278
281
  BooleanInput(),
@@ -290,7 +293,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
290
293
  // Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the
291
294
  // consumer may have provided, while still being able to receive focus.
292
295
  '[attr.tabindex]': 'disabled ? null : -1',
293
- }, providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement }], exportAs: 'novoAutocomplete', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <div class=\"novo-autocomplete-options\" cdk-scrollable>\n <ng-content></ng-content>\n </div>\n</novo-overlay-template>", styles: [".novo-autocomplete-options{background-color:var(--background-bright);cursor:default;list-style:none;padding-inline-start:0px!important;box-shadow:0 -1px 3px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}\n"] }]
296
+ }, providers: [
297
+ { provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement },
298
+ { provide: NOVO_OVERLAY_CONTAINER, useExisting: NovoAutocompleteElement }
299
+ ], exportAs: 'novoAutocomplete', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <div class=\"novo-autocomplete-options\" cdk-scrollable>\n <ng-content></ng-content>\n </div>\n</novo-overlay-template>", styles: [".novo-autocomplete-options{background-color:var(--background-bright);cursor:default;list-style:none;padding-inline-start:0px!important;box-shadow:0 -1px 3px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}\n"] }]
294
300
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
295
301
  type: Attribute,
296
302
  args: ['tabindex']
@@ -328,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
328
334
  type: ViewChild,
329
335
  args: [NovoOverlayTemplateComponent]
330
336
  }] } });
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUdMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFPLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUlMLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFFViw0QkFBNEIsRUFDNUIsNEJBQTRCLEdBQzdCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFvQixn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ciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIGludGVydmFsLCBtZXJnZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2UsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIEtleSB9IGZyb20gJ25vdm8tZWxlbWVudHMvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBOb3ZvQ2hpcExpc3QgfSBmcm9tICdub3ZvLWVsZW1lbnRzL2VsZW1lbnRzL2NoaXBzJztcbmltcG9ydCB7XG4gIENhbkRpc2FibGUsXG4gIENhbkRpc2FibGVDdG9yLFxuICBIYXNPdmVybGF5Q3RvcixcbiAgbWl4aW5EaXNhYmxlZCxcbiAgbWl4aW5PdmVybGF5LFxuICBOb3ZvT3B0Z3JvdXAsXG4gIE5vdm9PcHRpb24sXG4gIE5vdm9PcHRpb25TZWxlY3Rpb25DaGFuZ2UsXG4gIE5vdm9PdmVybGF5VGVtcGxhdGVDb21wb25lbnQsXG4gIE5PVk9fT1BUSU9OX1BBUkVOVF9DT01QT05FTlQsXG59IGZyb20gJ25vdm8tZWxlbWVudHMvZWxlbWVudHMvY29tbW9uJztcbmltcG9ydCB7IE5vdm9GaWVsZENvbnRyb2wsIE5vdm9GaWVsZEVsZW1lbnQsIE5PVk9fRk9STV9GSUVMRCB9IGZyb20gJ25vdm8tZWxlbWVudHMvZWxlbWVudHMvZmllbGQnO1xuXG4vKiogRXZlbnQgb2JqZWN0IHRoYXQgaXMgZW1pdHRlZCB3aGVuIGFuIGF1dG9jb21wbGV0ZSBvcHRpb24gaXMgc2VsZWN0ZWQuICovXG5leHBvcnQgY2xhc3MgTm92b09wdGlvblNlbGVjdGVkRXZlbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKiogUmVmZXJlbmNlIHRvIHRoZSBhdXRvY29tcGxldGUgcGFuZWwgdGhhdCBlbWl0dGVkIHRoZSBldmVudC4gKi9cbiAgICBwdWJsaWMgc291cmNlOiBOb3ZvQXV0b2NvbXBsZXRlRWxlbWVudCxcbiAgICAvKiogT3B0aW9uIHRoYXQgd2FzIHNlbGVjdGVkLiAqL1xuICAgIHB1YmxpYyBvcHRpb246IE5vdm9PcHRpb24sXG4gICkge31cbn1cblxuLy8gQm9pbGVycGxhdGUgZm9yIGFwcGx5aW5nIG1peGluc1xuY2xhc3MgTm92b0F1dG9jb21wbGV0ZUJhc2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG5jb25zdCBOb3ZvQXV0b2NvbXBsZXRlTWl4aW5zOiBIYXNPdmVybGF5Q3RvciAmIENhbkRpc2FibGVDdG9yICYgdHlwZW9mIE5vdm9BdXRvY29tcGxldGVCYXNlID0gbWl4aW5PdmVybGF5KFxuICBtaXhpbkRpc2FibGVkKE5vdm9BdXRvY29tcGxldGVCYXNlKSxcbik7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICdhdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ25vdm8tYXV0b2NvbXBsZXRlJyxcbiAgICAvLyBBbHdheXMgc2V0IHRoZSB0YWJpbmRleCB0byAtMSBzbyB0aGF0IGl0IGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIGFueSBjdXN0b20gdGFiaW5kZXggdGhlXG4gICAgLy8gY29uc3VtZXIgbWF5IGhhdmUgcHJvdmlkZWQsIHdoaWxlIHN0aWxsIGJlaW5nIGFibGUgdG8gcmVjZWl2ZSBmb2N1cy5cbiAgICAnW2F0dHIudGFiaW5kZXhdJzogJ2Rpc2FibGVkID8gbnVsbCA6IC0xJyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOT1ZPX09QVElPTl9QQVJFTlRfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogTm92b0F1dG9jb21wbGV0ZUVsZW1lbnQgfV0sXG4gIGV4cG9ydEFzOiAnbm92b0F1dG9jb21wbGV0ZScsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZvQXV0b2NvbXBsZXRlRWxlbWVudFxuICBleHRlbmRzIE5vdm9BdXRvY29tcGxldGVNaXhpbnNcbiAgaW1wbGVtZW50cyBDYW5EaXNhYmxlLCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICBwcml2YXRlIF9zdGF0ZUNoYW5nZXMgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2FjdGl2ZU9wdGlvbkNoYW5nZXMgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX3NlbGVjdGVkT3B0aW9uQ2hhbmdlcyA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJpdmF0ZSBfa2V5RG93bkNoYW5nZXMgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgLyoqIE1hbmFnZXMgYWN0aXZlIGl0ZW0gaW4gb3B0aW9uIGxpc3QgYmFzZWQgb24ga2V5IGV2ZW50cy4gKi9cbiAgcHJpdmF0ZSBfa2V5TWFuYWdlcjogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8Tm92b09wdGlvbj47XG5cbiAgLyoqIE9sZCB2YWx1ZSBvZiB0aGUgbmF0aXZlIGlucHV0LiBVc2VkIHRvIHdvcmsgYXJvdW5kIGlzc3VlcyB3aXRoIHRoZSBgaW5wdXRgIGV2ZW50IG9uIElFLiAqL1xuICBwcml2YXRlIF9wcmV2aW91c1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTm92b09wdGdyb3VwLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbkdyb3VwczogUXVlcnlMaXN0PE5vdm9PcHRncm91cD47XG4gIEBDb250ZW50Q2hpbGRyZW4oTm92b09wdGlvbiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBvcHRpb25zOiBRdWVyeUxpc3Q8Tm92b09wdGlvbj47XG5cbiAgLyoqIEV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuZXZlciBhbiBvcHRpb24gZnJvbSB0aGUgbGlzdCBpcyBzZWxlY3RlZC4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG9wdGlvblNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8Tm92b09wdGlvblNlbGVjdGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxOb3ZvT3B0aW9uU2VsZWN0ZWRFdmVudD4oKTtcbiAgLyoqIEVtaXRzIHdoZW5ldmVyIGFuIG9wdGlvbiBpcyBhY3RpdmF0ZWQgdXNpbmcgdGhlIGtleWJvYXJkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgb3B0aW9uQWN0aXZhdGVkOiBFdmVudEVtaXR0ZXI8Tm92b09wdGlvblNlbGVjdGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxOb3ZvT3B0aW9uU2VsZWN0ZWRFdmVudD4oKTtcblxuICAvKiogVGFiaW5kZXggZm9yIHRoZSB0b2dnbGUuICovXG4gIEBJbnB1dCgpIHRhYkluZGV4OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKiBLZXkgdG8gdXNlIHRvIHRyaWdnZXIgYXV0b2NvbXBsZXRlLiB1c2VkIGZvciB0ZXh0YXJlYS4gKi9cbiAgQElucHV0KCkgdHJpZ2dlck9uOiAoY29udHJvbDogTm92b0ZpZWxkQ29udHJvbDxhbnk+KSA9PiBib29sZWFuID0gKGNvbnRyb2wpID0+IGNvbnRyb2wuZm9jdXNlZDtcblxuICAvKiogRnVuY3Rpb24gdGhhdCBtYXBzIGFuIG9wdGlvbidzIGNvbnRyb2wgdmFsdWUgdG8gaXRzIGRpc3BsYXkgdmFsdWUgaW4gdGhlIHRyaWdnZXIuICovXG4gIEBJbnB1dCgpIGRpc3BsYXlXaXRoOiAoKHZhbHVlOiBhbnkpID0+IHN0cmluZykgfCBudWxsID0gbnVsbDtcblxuICAvKiogU2NyZWVucmVhZGVyIGxhYmVsIGZvciB0aGUgYnV0dG9uLiAqL1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGUgdXNlciBzaG91bGQgYmUgYWxsb3dlZCB0byBzZWxlY3QgbXVsdGlwbGUgb3B0aW9ucy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgdG9nZ2xlIGJ1dHRvbiBpcyBkaXNhYmxlZC4gKi9cbiAgQElucHV0KClcbiAgQEJvb2xlYW5JbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9mb3JtRmllbGQ/Ll9jb250cm9sKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUZpZWxkLl9jb250cm9sLmRpc2FibGVkO1xuICAgIH1cbiAgICByZXR1cm4gISF0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgQEJvb2xlYW5JbnB1dCgpXG4gIG1ha2VGaXJzdEl0ZW1BY3RpdmU6IGJvb2xlYW47XG5cbiAgLyoqIEVsZW1lbnQgZm9yIHRoZSBwYW5lbCBjb250YWluaW5nIHRoZSBhdXRvY29tcGxldGUgb3B0aW9ucy4gKi9cbiAgQFZpZXdDaGlsZChOb3ZvT3ZlcmxheVRlbXBsYXRlQ29tcG9uZW50KVxuICBvdmVybGF5OiBOb3ZvT3ZlcmxheVRlbXBsYXRlQ29tcG9uZW50O1xuXG4gIGVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEF0dHJpYnV0ZSgndGFiaW5kZXgnKSBkZWZhdWx0VGFiSW5kZXg6IHN0cmluZyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5PVk9fRk9STV9GSUVMRCkgcHJpdmF0ZSBfZm9ybUZpZWxkOiBOb3ZvRmllbGRFbGVtZW50LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHBhcnNlZFRhYkluZGV4ID0gTnVtYmVyKGRlZmF1bHRUYWJJbmRleCk7XG4gICAgdGhpcy50YWJJbmRleCA9IHBhcnNlZFRhYkluZGV4IHx8IHBhcnNlZFRhYkluZGV4ID09PSAwID8gcGFyc2VkVGFiSW5kZXggOiBudWxsO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuX3dhdGNoU3RhdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5fd2F0Y2hTZWxlY3Rpb25FdmVudHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N0YXRlQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9rZXlEb3duQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8Tm92b09wdGlvbj4odGhpcy5vcHRpb25zKS53aXRoV3JhcCgpO1xuICAgIHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXMgPSB0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICB0aGlzLm9wdGlvbkFjdGl2YXRlZC5lbWl0KHsgc291cmNlOiB0aGlzLCBvcHRpb246IHRoaXMub3B0aW9ucy50b0FycmF5KClbaW5kZXhdIHx8IG51bGwgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5fZm9ybUZpZWxkLmdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKSB8fCB0aGlzLl9lbGVtZW50UmVmO1xuICAgIHRoaXMuX2tleURvd25DaGFuZ2VzID0gZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2hhbmRsZUtleWRvd24oZXZlbnQpKTtcbiAgICB0aGlzLm9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fd2F0Y2hTdGF0ZUNoYW5nZXMoKTtcbiAgICAgIHRoaXMuX3dhdGNoU2VsZWN0aW9uRXZlbnRzKCk7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1NlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5tYWtlRmlyc3RJdGVtQWN0aXZlICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5fd2F0Y2hTdGF0ZUNoYW5nZXMoKTtcbiAgICB0aGlzLl93YXRjaFNlbGVjdGlvbkV2ZW50cygpO1xuICB9XG5cbiAgY2hlY2tQYW5lbCgpIHtcbiAgICBjb25zdCBpc1RyaWdnZXJlZCA9IHRoaXMudHJpZ2dlck9uKHRoaXMuX2Zvcm1GaWVsZC5fY29udHJvbCk7XG4gICAgaWYgKGlzVHJpZ2dlcmVkICYmIHRoaXMuZWxlbWVudCkge1xuICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRUcmlnZ2VyVmFsdWUob3B0aW9uOiBOb3ZvT3B0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgdG9EaXNwbGF5ID0gdGhpcy5kaXNwbGF5V2l0aCA/IHRoaXMuZGlzcGxheVdpdGgob3B0aW9uKSA6IG9wdGlvbj8udmlld1ZhbHVlO1xuICAgIC8vIFNpbXBseSBmYWxsaW5nIGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBkaXNwbGF5IHZhbHVlIGlzIGZhbHN5IGRvZXMgbm90IHdvcmsgcHJvcGVybHkuXG4gICAgLy8gVGhlIGRpc3BsYXkgdmFsdWUgY2FuIGFsc28gYmUgdGhlIG51bWJlciB6ZXJvIGFuZCBzaG91bGRuJ3QgZmFsbCBiYWNrIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0b0Rpc3BsYXkgIT0gbnVsbCA/IHRvRGlzcGxheSA6ICcnO1xuICAgIGNvbnN0IG9wdGlvblZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgIC8vIElmIGl0J3MgdXNlZCB3aXRoaW4gYSBgTm92b0ZpZWxkYCwgd2Ugc2hvdWxkIHNldCBpdCB0aHJvdWdoIHRoZSBwcm9wZXJ0eSBzbyBpdCBjYW4gZ29cbiAgICAvLyB0aHJvdWdoIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgaWYgKHRoaXMuX2Zvcm1GaWVsZCkge1xuICAgICAgY29uc3QgeyBjb250cm9sVHlwZSwgbGFzdENhcmV0UG9zaXRpb24gPSAwIH0gPSB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2w7XG4gICAgICBpZiAoY29udHJvbFR5cGUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5fZm9ybUZpZWxkLl9jb250cm9sLnZhbHVlLnNwbGl0KCcnKTtcbiAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShsYXN0Q2FyZXRQb3NpdGlvbiwgMCwgZGlzcGxheVZhbHVlKTtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkLl9jb250cm9sLnZhbHVlID0gY3VycmVudFZhbHVlLmpvaW4oJycpO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sVHlwZSA9PT0gJ2NoaXAtbGlzdCcpIHtcbiAgICAgICAgY29uc3QgY2hpcExpc3QgPSB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wgYXMgTm92b0NoaXBMaXN0O1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wudmFsdWU7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUuaW5jbHVkZXMob3B0aW9uVmFsdWUpKSB7XG4gICAgICAgICAgY2hpcExpc3QucmVtb3ZlVmFsdWUob3B0aW9uVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoaXBMaXN0LmFkZFZhbHVlKG9wdGlvblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHZhbHVlVG9FbWl0OiBhbnkgPSBvcHRpb25WYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wudmFsdWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5pbmNsdWRlcyhvcHRpb25WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmFsdWVUb0VtaXQgPSBjdXJyZW50VmFsdWUuZmlsdGVyKChpdCkgPT4gaXQgPT09IG9wdGlvblZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlVG9FbWl0ID0gWy4uLmN1cnJlbnRWYWx1ZSwgb3B0aW9uVmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlID09PSBvcHRpb25WYWx1ZSkge1xuICAgICAgICAgICAgdmFsdWVUb0VtaXQgPSBbXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVUb0VtaXQgPSBbY3VycmVudFZhbHVlLCBvcHRpb25WYWx1ZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZSA9IHZhbHVlVG9FbWl0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBpbnB1dFZhbHVlO1xuICAgICAgY29uc29sZS53YXJuKGBBdXRvQ29tcGxldGUgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGhpbiBhIE5vdm9GaWVsZGApO1xuICAgIH1cbiAgICB0aGlzLl9wcmV2aW91c1ZhbHVlID0gb3B0aW9uVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYW55IHByZXZpb3VzIHNlbGVjdGVkIG9wdGlvbiBhbmQgZW1pdCBhIHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnQgZm9yIHRoaXMgb3B0aW9uXG4gICAqL1xuICBwcml2YXRlIF9jbGVhclByZXZpb3VzU2VsZWN0ZWRPcHRpb24oc2tpcDogTm92b09wdGlvbikge1xuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24gIT09IHNraXAgJiYgb3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbi5kZXNlbGVjdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEVtaXRzIHRoZSBgc2VsZWN0YCBldmVudC4gKi9cbiAgcHJpdmF0ZSBfZW1pdFNlbGVjdEV2ZW50KG9wdGlvbjogTm92b09wdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IE5vdm9PcHRpb25TZWxlY3RlZEV2ZW50KHRoaXMsIG9wdGlvbik7XG4gICAgdGhpcy5vcHRpb25TZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjbG9zZXMgdGhlIHBhbmVsLCBhbmQgaWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQsIGFsc28gc2V0cyB0aGUgYXNzb2NpYXRlZFxuICAgKiBjb250cm9sIHRvIHRoYXQgdmFsdWUuIEl0IHdpbGwgYWxzbyBtYXJrIHRoZSBjb250cm9sIGFzIGRpcnR5IGlmIHRoaXMgaW50ZXJhY3Rpb25cbiAgICogc3RlbW1lZCBmcm9tIHRoZSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0VmFsdWVBbmRDbG9zZShldmVudDogTm92b09wdGlvblNlbGVjdGlvbkNoYW5nZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuc291cmNlKSB7XG4gICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihldmVudC5zb3VyY2UpO1xuICAgICAgdGhpcy5fc2V0VHJpZ2dlclZhbHVlKGV2ZW50LnNvdXJjZSk7XG4gICAgICAvLyB0aGlzLl9vbkNoYW5nZShldmVudC5zb3VyY2UudmFsdWUpO1xuICAgICAgLy8gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAvLyB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wuZm9jdXMoKTtcbiAgICAgIHRoaXMuX2VtaXRTZWxlY3RFdmVudChldmVudC5zb3VyY2UpO1xuICAgICAgdGhpcy5fd2F0Y2hTZWxlY3Rpb25FdmVudHMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHRoaXMuY2xvc2VQYW5lbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hTZWxlY3Rpb25FdmVudHMoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uRXZlbnRzID0gdGhpcy5vcHRpb25zID8gbWVyZ2UoLi4udGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ub25TZWxlY3Rpb25DaGFuZ2UpKSA6IG9mKCk7XG4gICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25DaGFuZ2VzID0gc2VsZWN0aW9uRXZlbnRzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChldnQ6IE5vdm9PcHRpb25TZWxlY3Rpb25DaGFuZ2UpID0+IHtcbiAgICAgIHRoaXMuX3NldFZhbHVlQW5kQ2xvc2UoZXZ0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoU3RhdGVDaGFuZ2VzKCkge1xuICAgIGNvbnN0IGlucHV0U3RhdGVDaGFuZ2VkID0gdGhpcy5fZm9ybUZpZWxkLnN0YXRlQ2hhbmdlcztcbiAgICB0aGlzLl9zdGF0ZUNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdGF0ZUNoYW5nZXMgPSBtZXJnZShpbnB1dFN0YXRlQ2hhbmdlZClcbiAgICAgIC5waXBlKGRlYm91bmNlKCgpID0+IGludGVydmFsKDEwKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1NlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgICB0aGlzLmNoZWNrUGFuZWwoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBvcHRpb24sIGNvZXJjZWQgdG8gTWF0T3B0aW9uIHR5cGUuICovXG4gIGdldCBhY3RpdmVPcHRpb24oKTogTm92b09wdGlvbiB8IG51bGwge1xuICAgIGlmICh0aGlzLl9rZXlNYW5hZ2VyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICAvLyBQcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBvbiBhbGwgZXNjYXBlIGtleSBwcmVzc2VzLiBUaGlzIGlzIGhlcmUgcHJpbWFyaWx5IHRvIGJyaW5nIElFXG4gICAgLy8gaW4gbGluZSB3aXRoIG90aGVyIGJyb3dzZXJzLiBCeSBkZWZhdWx0LCBwcmVzc2luZyBlc2NhcGUgb24gSUUgd2lsbCBjYXVzZSBpdCB0byByZXZlcnRcbiAgICAvLyB0aGUgaW5wdXQgdmFsdWUgdG8gdGhlIG9uZSB0aGF0IGl0IGhhZCBvbiBmb2N1cywgaG93ZXZlciBpdCB3b24ndCBkaXNwYXRjaCBhbnkgZXZlbnRzXG4gICAgLy8gd2hpY2ggbWVhbnMgdGhhdCB0aGUgbW9kZWwgdmFsdWUgd2lsbCBiZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSB2aWV3LlxuICAgIGlmIChrZXkgPT09IEtleS5Fc2NhcGUgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24gJiYga2V5ID09PSBLZXkuRW50ZXIgJiYgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHRoaXMuYWN0aXZlT3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpO1xuICAgICAgLy8gdGhpcy5fcmVzZXRBY3RpdmVJdGVtKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmV2QWN0aXZlSXRlbSA9IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbTtcbiAgICAgIGNvbnN0IGlzQXJyb3dLZXkgPSBrZXkgPT09IEtleS5BcnJvd1VwIHx8IGtleSA9PT0gS2V5LkFycm93RG93bjtcblxuICAgICAgaWYgKHRoaXMucGFuZWxPcGVuIHx8IGtleSA9PT0gS2V5LlRhYikge1xuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyb3dLZXkgJiYgIXRoaXMub3ZlcmxheS5wYW5lbE9wZW4pIHtcbiAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgKGlzQXJyb3dLZXkgfHwgdGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSAhPT0gcHJldkFjdGl2ZUl0ZW0pIHtcbiAgICAgIC8vICAgdGhpcy5fc2Nyb2xsVG9PcHRpb24odGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4IHx8IDApO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wudmFsdWUpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZTtcbiAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IG9wdGlvbi5kZXNlbGVjdCgpKTtcbiAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRWYWx1ZTogYW55KSA9PiB0aGlzLl9zZWxlY3RWYWx1ZShjdXJyZW50VmFsdWUpKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRzIGFuZCBzZWxlY3RzIGFuZCBvcHRpb24gYmFzZWQgb24gaXRzIHZhbHVlLlxuICAgKiBAcmV0dXJucyBPcHRpb24gdGhhdCBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIF9zZWxlY3RWYWx1ZSh2YWx1ZTogYW55KTogTm92b09wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29ycmVzcG9uZGluZ09wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKChvcHRpb246IE5vdm9PcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvcnJlc3BvbmRpbmdPcHRpb24/LnNlbGVjdCgpO1xuICAgIHJldHVybiBjb3JyZXNwb25kaW5nT3B0aW9uO1xuICB9XG59XG4iLCI8bm92by1vdmVybGF5LXRlbXBsYXRlIFtwYXJlbnRdPVwiZWxlbWVudFwiIHBvc2l0aW9uPVwiYWJvdmUtYmVsb3dcIj5cbiAgPGRpdiBjbGFzcz1cIm5vdm8tYXV0b2NvbXBsZXRlLW9wdGlvbnNcIiBjZGstc2Nyb2xsYWJsZT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9ub3ZvLW92ZXJsYXktdGVtcGxhdGU+Il19
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUdMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFPLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUlMLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFFViw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLCtCQUErQixDQUFDO0FBQ3ZD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QUZYLEtBQUs7Z0JBZU4sbUJBQW1CO3NCQUZsQixLQUFLO2dCQU1OLE9BQU87c0JBRE4sU0FBUzt1QkFBQyw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBBdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIGludGVydmFsLCBtZXJnZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2UsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIEtleSB9IGZyb20gJ25vdm8tZWxlbWVudHMvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBOb3ZvQ2hpcExpc3QgfSBmcm9tICdub3ZvLWVsZW1lbnRzL2VsZW1lbnRzL2NoaXBzJztcbmltcG9ydCB7XG4gIENhbkRpc2FibGUsXG4gIENhbkRpc2FibGVDdG9yLFxuICBIYXNPdmVybGF5Q3RvcixcbiAgbWl4aW5EaXNhYmxlZCxcbiAgbWl4aW5PdmVybGF5LFxuICBOb3ZvT3B0Z3JvdXAsXG4gIE5vdm9PcHRpb24sXG4gIE5vdm9PcHRpb25TZWxlY3Rpb25DaGFuZ2UsXG4gIE5vdm9PdmVybGF5VGVtcGxhdGVDb21wb25lbnQsXG4gIE5PVk9fT1BUSU9OX1BBUkVOVF9DT01QT05FTlQsXG4gIE5PVk9fT1ZFUkxBWV9DT05UQUlORVIsXG59IGZyb20gJ25vdm8tZWxlbWVudHMvZWxlbWVudHMvY29tbW9uJztcbmltcG9ydCB7IE5vdm9GaWVsZENvbnRyb2wsIE5vdm9GaWVsZEVsZW1lbnQsIE5PVk9fRk9STV9GSUVMRCB9IGZyb20gJ25vdm8tZWxlbWVudHMvZWxlbWVudHMvZmllbGQnO1xuXG4vKiogRXZlbnQgb2JqZWN0IHRoYXQgaXMgZW1pdHRlZCB3aGVuIGFuIGF1dG9jb21wbGV0ZSBvcHRpb24gaXMgc2VsZWN0ZWQuICovXG5leHBvcnQgY2xhc3MgTm92b09wdGlvblNlbGVjdGVkRXZlbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKiogUmVmZXJlbmNlIHRvIHRoZSBhdXRvY29tcGxldGUgcGFuZWwgdGhhdCBlbWl0dGVkIHRoZSBldmVudC4gKi9cbiAgICBwdWJsaWMgc291cmNlOiBOb3ZvQXV0b2NvbXBsZXRlRWxlbWVudCxcbiAgICAvKiogT3B0aW9uIHRoYXQgd2FzIHNlbGVjdGVkLiAqL1xuICAgIHB1YmxpYyBvcHRpb246IE5vdm9PcHRpb24sXG4gICkge31cbn1cblxuLy8gQm9pbGVycGxhdGUgZm9yIGFwcGx5aW5nIG1peGluc1xuY2xhc3MgTm92b0F1dG9jb21wbGV0ZUJhc2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG5jb25zdCBOb3ZvQXV0b2NvbXBsZXRlTWl4aW5zOiBIYXNPdmVybGF5Q3RvciAmIENhbkRpc2FibGVDdG9yICYgdHlwZW9mIE5vdm9BdXRvY29tcGxldGVCYXNlID0gbWl4aW5PdmVybGF5KFxuICBtaXhpbkRpc2FibGVkKE5vdm9BdXRvY29tcGxldGVCYXNlKSxcbik7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICdhdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ25vdm8tYXV0b2NvbXBsZXRlJyxcbiAgICAvLyBBbHdheXMgc2V0IHRoZSB0YWJpbmRleCB0byAtMSBzbyB0aGF0IGl0IGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIGFueSBjdXN0b20gdGFiaW5kZXggdGhlXG4gICAgLy8gY29uc3VtZXIgbWF5IGhhdmUgcHJvdmlkZWQsIHdoaWxlIHN0aWxsIGJlaW5nIGFibGUgdG8gcmVjZWl2ZSBmb2N1cy5cbiAgICAnW2F0dHIudGFiaW5kZXhdJzogJ2Rpc2FibGVkID8gbnVsbCA6IC0xJyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBOT1ZPX09QVElPTl9QQVJFTlRfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogTm92b0F1dG9jb21wbGV0ZUVsZW1lbnQgfSxcbiAgICB7IHByb3ZpZGU6IE5PVk9fT1ZFUkxBWV9DT05UQUlORVIsIHVzZUV4aXN0aW5nOiBOb3ZvQXV0b2NvbXBsZXRlRWxlbWVudCB9XG4gIF0sXG4gIGV4cG9ydEFzOiAnbm92b0F1dG9jb21wbGV0ZScsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZvQXV0b2NvbXBsZXRlRWxlbWVudFxuICBleHRlbmRzIE5vdm9BdXRvY29tcGxldGVNaXhpbnNcbiAgaW1wbGVtZW50cyBDYW5EaXNhYmxlLCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICBwcml2YXRlIF9zdGF0ZUNoYW5nZXMgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX2FjdGl2ZU9wdGlvbkNoYW5nZXMgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX3NlbGVjdGVkT3B0aW9uQ2hhbmdlcyA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJpdmF0ZSBfa2V5RG93bkNoYW5nZXMgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgLyoqIE1hbmFnZXMgYWN0aXZlIGl0ZW0gaW4gb3B0aW9uIGxpc3QgYmFzZWQgb24ga2V5IGV2ZW50cy4gKi9cbiAgcHJpdmF0ZSBfa2V5TWFuYWdlcjogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8Tm92b09wdGlvbj47XG5cbiAgLyoqIE9sZCB2YWx1ZSBvZiB0aGUgbmF0aXZlIGlucHV0LiBVc2VkIHRvIHdvcmsgYXJvdW5kIGlzc3VlcyB3aXRoIHRoZSBgaW5wdXRgIGV2ZW50IG9uIElFLiAqL1xuICBwcml2YXRlIF9wcmV2aW91c1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTm92b09wdGdyb3VwLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbkdyb3VwczogUXVlcnlMaXN0PE5vdm9PcHRncm91cD47XG4gIEBDb250ZW50Q2hpbGRyZW4oTm92b09wdGlvbiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBvcHRpb25zOiBRdWVyeUxpc3Q8Tm92b09wdGlvbj47XG5cbiAgLyoqIEV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuZXZlciBhbiBvcHRpb24gZnJvbSB0aGUgbGlzdCBpcyBzZWxlY3RlZC4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG9wdGlvblNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8Tm92b09wdGlvblNlbGVjdGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxOb3ZvT3B0aW9uU2VsZWN0ZWRFdmVudD4oKTtcbiAgLyoqIEVtaXRzIHdoZW5ldmVyIGFuIG9wdGlvbiBpcyBhY3RpdmF0ZWQgdXNpbmcgdGhlIGtleWJvYXJkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgb3B0aW9uQWN0aXZhdGVkOiBFdmVudEVtaXR0ZXI8Tm92b09wdGlvblNlbGVjdGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxOb3ZvT3B0aW9uU2VsZWN0ZWRFdmVudD4oKTtcblxuICAvKiogVGFiaW5kZXggZm9yIHRoZSB0b2dnbGUuICovXG4gIEBJbnB1dCgpIHRhYkluZGV4OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKiBLZXkgdG8gdXNlIHRvIHRyaWdnZXIgYXV0b2NvbXBsZXRlLiB1c2VkIGZvciB0ZXh0YXJlYS4gKi9cbiAgQElucHV0KCkgdHJpZ2dlck9uOiAoY29udHJvbDogTm92b0ZpZWxkQ29udHJvbDxhbnk+KSA9PiBib29sZWFuID0gKGNvbnRyb2wpID0+IGNvbnRyb2wuZm9jdXNlZDtcblxuICAvKiogRnVuY3Rpb24gdGhhdCBtYXBzIGFuIG9wdGlvbidzIGNvbnRyb2wgdmFsdWUgdG8gaXRzIGRpc3BsYXkgdmFsdWUgaW4gdGhlIHRyaWdnZXIuICovXG4gIEBJbnB1dCgpIGRpc3BsYXlXaXRoOiAoKHZhbHVlOiBhbnkpID0+IHN0cmluZykgfCBudWxsID0gbnVsbDtcblxuICAvKiogU2NyZWVucmVhZGVyIGxhYmVsIGZvciB0aGUgYnV0dG9uLiAqL1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGUgdXNlciBzaG91bGQgYmUgYWxsb3dlZCB0byBzZWxlY3QgbXVsdGlwbGUgb3B0aW9ucy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgdG9nZ2xlIGJ1dHRvbiBpcyBkaXNhYmxlZC4gKi9cbiAgQElucHV0KClcbiAgQEJvb2xlYW5JbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9mb3JtRmllbGQ/Ll9jb250cm9sKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUZpZWxkLl9jb250cm9sLmRpc2FibGVkO1xuICAgIH1cbiAgICByZXR1cm4gISF0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgQEJvb2xlYW5JbnB1dCgpXG4gIG1ha2VGaXJzdEl0ZW1BY3RpdmU6IGJvb2xlYW47XG5cbiAgLyoqIEVsZW1lbnQgZm9yIHRoZSBwYW5lbCBjb250YWluaW5nIHRoZSBhdXRvY29tcGxldGUgb3B0aW9ucy4gKi9cbiAgQFZpZXdDaGlsZChOb3ZvT3ZlcmxheVRlbXBsYXRlQ29tcG9uZW50KVxuICBvdmVybGF5OiBOb3ZvT3ZlcmxheVRlbXBsYXRlQ29tcG9uZW50O1xuXG4gIGVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEF0dHJpYnV0ZSgndGFiaW5kZXgnKSBkZWZhdWx0VGFiSW5kZXg6IHN0cmluZyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5PVk9fRk9STV9GSUVMRCkgcHJpdmF0ZSBfZm9ybUZpZWxkOiBOb3ZvRmllbGRFbGVtZW50LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHBhcnNlZFRhYkluZGV4ID0gTnVtYmVyKGRlZmF1bHRUYWJJbmRleCk7XG4gICAgdGhpcy50YWJJbmRleCA9IHBhcnNlZFRhYkluZGV4IHx8IHBhcnNlZFRhYkluZGV4ID09PSAwID8gcGFyc2VkVGFiSW5kZXggOiBudWxsO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuX3dhdGNoU3RhdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5fd2F0Y2hTZWxlY3Rpb25FdmVudHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N0YXRlQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9rZXlEb3duQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8Tm92b09wdGlvbj4odGhpcy5vcHRpb25zKS53aXRoV3JhcCgpO1xuICAgIHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXMgPSB0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICB0aGlzLm9wdGlvbkFjdGl2YXRlZC5lbWl0KHsgc291cmNlOiB0aGlzLCBvcHRpb246IHRoaXMub3B0aW9ucy50b0FycmF5KClbaW5kZXhdIHx8IG51bGwgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5fZm9ybUZpZWxkLmdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKSB8fCB0aGlzLl9lbGVtZW50UmVmO1xuICAgIHRoaXMuX2tleURvd25DaGFuZ2VzID0gZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2hhbmRsZUtleWRvd24oZXZlbnQpKTtcbiAgICB0aGlzLm9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fd2F0Y2hTdGF0ZUNoYW5nZXMoKTtcbiAgICAgIHRoaXMuX3dhdGNoU2VsZWN0aW9uRXZlbnRzKCk7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1NlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5tYWtlRmlyc3RJdGVtQWN0aXZlICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5fd2F0Y2hTdGF0ZUNoYW5nZXMoKTtcbiAgICB0aGlzLl93YXRjaFNlbGVjdGlvbkV2ZW50cygpO1xuICB9XG5cbiAgY2hlY2tQYW5lbCgpIHtcbiAgICBjb25zdCBpc1RyaWdnZXJlZCA9IHRoaXMudHJpZ2dlck9uKHRoaXMuX2Zvcm1GaWVsZC5fY29udHJvbCk7XG4gICAgaWYgKGlzVHJpZ2dlcmVkICYmIHRoaXMuZWxlbWVudCkge1xuICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRUcmlnZ2VyVmFsdWUob3B0aW9uOiBOb3ZvT3B0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgdG9EaXNwbGF5ID0gdGhpcy5kaXNwbGF5V2l0aCA/IHRoaXMuZGlzcGxheVdpdGgob3B0aW9uKSA6IG9wdGlvbj8udmlld1ZhbHVlO1xuICAgIC8vIFNpbXBseSBmYWxsaW5nIGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBkaXNwbGF5IHZhbHVlIGlzIGZhbHN5IGRvZXMgbm90IHdvcmsgcHJvcGVybHkuXG4gICAgLy8gVGhlIGRpc3BsYXkgdmFsdWUgY2FuIGFsc28gYmUgdGhlIG51bWJlciB6ZXJvIGFuZCBzaG91bGRuJ3QgZmFsbCBiYWNrIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0b0Rpc3BsYXkgIT0gbnVsbCA/IHRvRGlzcGxheSA6ICcnO1xuICAgIGNvbnN0IG9wdGlvblZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgIC8vIElmIGl0J3MgdXNlZCB3aXRoaW4gYSBgTm92b0ZpZWxkYCwgd2Ugc2hvdWxkIHNldCBpdCB0aHJvdWdoIHRoZSBwcm9wZXJ0eSBzbyBpdCBjYW4gZ29cbiAgICAvLyB0aHJvdWdoIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgaWYgKHRoaXMuX2Zvcm1GaWVsZCkge1xuICAgICAgY29uc3QgeyBjb250cm9sVHlwZSwgbGFzdENhcmV0UG9zaXRpb24gPSAwIH0gPSB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2w7XG4gICAgICBpZiAoY29udHJvbFR5cGUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5fZm9ybUZpZWxkLl9jb250cm9sLnZhbHVlLnNwbGl0KCcnKTtcbiAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShsYXN0Q2FyZXRQb3NpdGlvbiwgMCwgZGlzcGxheVZhbHVlKTtcbiAgICAgICAgdGhpcy5fZm9ybUZpZWxkLl9jb250cm9sLnZhbHVlID0gY3VycmVudFZhbHVlLmpvaW4oJycpO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sVHlwZSA9PT0gJ2NoaXAtbGlzdCcpIHtcbiAgICAgICAgY29uc3QgY2hpcExpc3QgPSB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wgYXMgTm92b0NoaXBMaXN0O1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wudmFsdWU7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUuaW5jbHVkZXMob3B0aW9uVmFsdWUpKSB7XG4gICAgICAgICAgY2hpcExpc3QucmVtb3ZlVmFsdWUob3B0aW9uVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoaXBMaXN0LmFkZFZhbHVlKG9wdGlvblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHZhbHVlVG9FbWl0OiBhbnkgPSBvcHRpb25WYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wudmFsdWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5pbmNsdWRlcyhvcHRpb25WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmFsdWVUb0VtaXQgPSBjdXJyZW50VmFsdWUuZmlsdGVyKChpdCkgPT4gaXQgPT09IG9wdGlvblZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlVG9FbWl0ID0gWy4uLmN1cnJlbnRWYWx1ZSwgb3B0aW9uVmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlID09PSBvcHRpb25WYWx1ZSkge1xuICAgICAgICAgICAgdmFsdWVUb0VtaXQgPSBbXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVUb0VtaXQgPSBbY3VycmVudFZhbHVlLCBvcHRpb25WYWx1ZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZSA9IHZhbHVlVG9FbWl0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBpbnB1dFZhbHVlO1xuICAgICAgY29uc29sZS53YXJuKGBBdXRvQ29tcGxldGUgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGhpbiBhIE5vdm9GaWVsZGApO1xuICAgIH1cbiAgICB0aGlzLl9wcmV2aW91c1ZhbHVlID0gb3B0aW9uVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYW55IHByZXZpb3VzIHNlbGVjdGVkIG9wdGlvbiBhbmQgZW1pdCBhIHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnQgZm9yIHRoaXMgb3B0aW9uXG4gICAqL1xuICBwcml2YXRlIF9jbGVhclByZXZpb3VzU2VsZWN0ZWRPcHRpb24oc2tpcDogTm92b09wdGlvbikge1xuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24gIT09IHNraXAgJiYgb3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbi5kZXNlbGVjdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEVtaXRzIHRoZSBgc2VsZWN0YCBldmVudC4gKi9cbiAgcHJpdmF0ZSBfZW1pdFNlbGVjdEV2ZW50KG9wdGlvbjogTm92b09wdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IE5vdm9PcHRpb25TZWxlY3RlZEV2ZW50KHRoaXMsIG9wdGlvbik7XG4gICAgdGhpcy5vcHRpb25TZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjbG9zZXMgdGhlIHBhbmVsLCBhbmQgaWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQsIGFsc28gc2V0cyB0aGUgYXNzb2NpYXRlZFxuICAgKiBjb250cm9sIHRvIHRoYXQgdmFsdWUuIEl0IHdpbGwgYWxzbyBtYXJrIHRoZSBjb250cm9sIGFzIGRpcnR5IGlmIHRoaXMgaW50ZXJhY3Rpb25cbiAgICogc3RlbW1lZCBmcm9tIHRoZSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0VmFsdWVBbmRDbG9zZShldmVudDogTm92b09wdGlvblNlbGVjdGlvbkNoYW5nZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuc291cmNlKSB7XG4gICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihldmVudC5zb3VyY2UpO1xuICAgICAgdGhpcy5fc2V0VHJpZ2dlclZhbHVlKGV2ZW50LnNvdXJjZSk7XG4gICAgICAvLyB0aGlzLl9vbkNoYW5nZShldmVudC5zb3VyY2UudmFsdWUpO1xuICAgICAgLy8gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAvLyB0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wuZm9jdXMoKTtcbiAgICAgIHRoaXMuX2VtaXRTZWxlY3RFdmVudChldmVudC5zb3VyY2UpO1xuICAgICAgdGhpcy5fd2F0Y2hTZWxlY3Rpb25FdmVudHMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHRoaXMuY2xvc2VQYW5lbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hTZWxlY3Rpb25FdmVudHMoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uRXZlbnRzID0gdGhpcy5vcHRpb25zID8gbWVyZ2UoLi4udGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ub25TZWxlY3Rpb25DaGFuZ2UpKSA6IG9mKCk7XG4gICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25DaGFuZ2VzID0gc2VsZWN0aW9uRXZlbnRzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChldnQ6IE5vdm9PcHRpb25TZWxlY3Rpb25DaGFuZ2UpID0+IHtcbiAgICAgIHRoaXMuX3NldFZhbHVlQW5kQ2xvc2UoZXZ0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoU3RhdGVDaGFuZ2VzKCkge1xuICAgIGNvbnN0IGlucHV0U3RhdGVDaGFuZ2VkID0gdGhpcy5fZm9ybUZpZWxkLnN0YXRlQ2hhbmdlcztcbiAgICB0aGlzLl9zdGF0ZUNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdGF0ZUNoYW5nZXMgPSBtZXJnZShpbnB1dFN0YXRlQ2hhbmdlZClcbiAgICAgIC5waXBlKGRlYm91bmNlKCgpID0+IGludGVydmFsKDEwKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1NlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgICB0aGlzLmNoZWNrUGFuZWwoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBvcHRpb24sIGNvZXJjZWQgdG8gTWF0T3B0aW9uIHR5cGUuICovXG4gIGdldCBhY3RpdmVPcHRpb24oKTogTm92b09wdGlvbiB8IG51bGwge1xuICAgIGlmICh0aGlzLl9rZXlNYW5hZ2VyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICAvLyBQcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBvbiBhbGwgZXNjYXBlIGtleSBwcmVzc2VzLiBUaGlzIGlzIGhlcmUgcHJpbWFyaWx5IHRvIGJyaW5nIElFXG4gICAgLy8gaW4gbGluZSB3aXRoIG90aGVyIGJyb3dzZXJzLiBCeSBkZWZhdWx0LCBwcmVzc2luZyBlc2NhcGUgb24gSUUgd2lsbCBjYXVzZSBpdCB0byByZXZlcnRcbiAgICAvLyB0aGUgaW5wdXQgdmFsdWUgdG8gdGhlIG9uZSB0aGF0IGl0IGhhZCBvbiBmb2N1cywgaG93ZXZlciBpdCB3b24ndCBkaXNwYXRjaCBhbnkgZXZlbnRzXG4gICAgLy8gd2hpY2ggbWVhbnMgdGhhdCB0aGUgbW9kZWwgdmFsdWUgd2lsbCBiZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSB2aWV3LlxuICAgIGlmIChrZXkgPT09IEtleS5Fc2NhcGUgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24gJiYga2V5ID09PSBLZXkuRW50ZXIgJiYgdGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgIHRoaXMuYWN0aXZlT3B0aW9uLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpO1xuICAgICAgLy8gdGhpcy5fcmVzZXRBY3RpdmVJdGVtKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmV2QWN0aXZlSXRlbSA9IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbTtcbiAgICAgIGNvbnN0IGlzQXJyb3dLZXkgPSBrZXkgPT09IEtleS5BcnJvd1VwIHx8IGtleSA9PT0gS2V5LkFycm93RG93bjtcblxuICAgICAgaWYgKHRoaXMucGFuZWxPcGVuIHx8IGtleSA9PT0gS2V5LlRhYikge1xuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyb3dLZXkgJiYgIXRoaXMub3ZlcmxheS5wYW5lbE9wZW4pIHtcbiAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgKGlzQXJyb3dLZXkgfHwgdGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSAhPT0gcHJldkFjdGl2ZUl0ZW0pIHtcbiAgICAgIC8vICAgdGhpcy5fc2Nyb2xsVG9PcHRpb24odGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4IHx8IDApO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLl9mb3JtRmllbGQuX2NvbnRyb2wudmFsdWUpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZTtcbiAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IG9wdGlvbi5kZXNlbGVjdCgpKTtcbiAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRWYWx1ZTogYW55KSA9PiB0aGlzLl9zZWxlY3RWYWx1ZShjdXJyZW50VmFsdWUpKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRzIGFuZCBzZWxlY3RzIGFuZCBvcHRpb24gYmFzZWQgb24gaXRzIHZhbHVlLlxuICAgKiBAcmV0dXJucyBPcHRpb24gdGhhdCBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIF9zZWxlY3RWYWx1ZSh2YWx1ZTogYW55KTogTm92b09wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29ycmVzcG9uZGluZ09wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKChvcHRpb246IE5vdm9PcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBvcHRpb24udmFsdWUgPT09IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvcnJlc3BvbmRpbmdPcHRpb24/LnNlbGVjdCgpO1xuICAgIHJldHVybiBjb3JyZXNwb25kaW5nT3B0aW9uO1xuICB9XG59XG4iLCI8bm92by1vdmVybGF5LXRlbXBsYXRlIFtwYXJlbnRdPVwiZWxlbWVudFwiIHBvc2l0aW9uPVwiYWJvdmUtYmVsb3dcIj5cbiAgPGRpdiBjbGFzcz1cIm5vdm8tYXV0b2NvbXBsZXRlLW9wdGlvbnNcIiBjZGstc2Nyb2xsYWJsZT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9ub3ZvLW92ZXJsYXktdGVtcGxhdGU+Il19
@@ -40,6 +40,12 @@ export class NovoButtonElement {
40
40
  * Make the button non-interactive.
41
41
  */
42
42
  this.disabled = false;
43
+ this.disabledAttr = undefined;
44
+ }
45
+ ngOnChanges(changes) {
46
+ if (changes.disabled && this.element.nativeElement.tagName === 'BUTTON') {
47
+ this.disabledAttr = changes.disabled.currentValue ? '' : undefined;
48
+ }
43
49
  }
44
50
  handleKeydown(event) {
45
51
  if (("Enter" /* Key.Enter */ === event.key || " " /* Key.Space */ === event.key) && (this.disabled || this.loading)) {
@@ -51,7 +57,7 @@ export class NovoButtonElement {
51
57
  this.element.nativeElement.focus(options);
52
58
  }
53
59
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NovoButtonElement, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
54
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NovoButtonElement, selector: "novo-button,button[theme]", inputs: { color: "color", side: "side", size: "size", theme: "theme", loading: "loading", icon: "icon", disabled: "disabled" }, host: { listeners: { "keydown": "handleKeydown($event)" }, properties: { "attr.theme": "theme", "attr.color": "color", "attr.icon": "icon", "attr.loading": "loading", "attr.side": "side", "attr.size": "size", "attr.role": "'button'", "class.novo-button-disabled": "this.disabled" }, classAttribute: "novo-button" }, ngImport: i0, template: `
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NovoButtonElement, selector: "novo-button,button[theme]", inputs: { color: "color", side: "side", size: "size", theme: "theme", loading: "loading", icon: "icon", disabled: "disabled" }, host: { listeners: { "keydown": "handleKeydown($event)" }, properties: { "attr.theme": "theme", "attr.color": "color", "attr.icon": "icon", "attr.loading": "loading", "attr.side": "side", "attr.size": "size", "attr.role": "'button'", "class.novo-button-disabled": "this.disabled", "attr.disabled": "this.disabledAttr" }, classAttribute: "novo-button" }, usesOnChanges: true, ngImport: i0, template: `
55
61
  <!--Left Icon-->
56
62
  <i *ngIf="icon && side === 'left' && !loading" [ngClass]="icon" class="novo-button-icon novo-button-icon-left"></i>
57
63
  <!--Transcluded Content-->
@@ -156,8 +162,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
156
162
  }, {
157
163
  type: HostBinding,
158
164
  args: ['class.novo-button-disabled']
165
+ }], disabledAttr: [{
166
+ type: HostBinding,
167
+ args: ['attr.disabled']
159
168
  }], handleKeydown: [{
160
169
  type: HostListener,
161
170
  args: ['keydown', ['$event']]
162
171
  }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvYnV0dG9uL0J1dHRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxNQUFNO0FBQ04sT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQU8sTUFBTSxxQkFBcUIsQ0FBQzs7O0FBK0RqRSxNQUFNLE9BQU8saUJBQWlCO0lBc0I1Qjs7O09BR0c7SUFDSCxJQUNJLElBQUksQ0FBQyxJQUFZO1FBQ25CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQVlELFlBQW1CLE9BQW1CO1FBQW5CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUF6Q3RDOzs7V0FHRztRQUNNLFNBQUksR0FBVyxPQUFPLENBQUM7UUFLaEM7O1dBRUc7UUFDTSxVQUFLLEdBQVcsVUFBVSxDQUFDO1FBbUJwQzs7V0FFRztRQUlILGFBQVEsR0FBWSxLQUFLLENBQUM7SUFJZSxDQUFDO0lBRzFDLGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLENBQUMsNEJBQWMsS0FBSyxDQUFDLEdBQUcsSUFBSSx3QkFBYyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVGLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCx5QkFBeUI7SUFDekIsS0FBSyxDQUFDLE9BQXNCO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQTFEVSxpQkFBaUI7bUdBQWpCLGlCQUFpQiw2ZkF0Q2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DVDs7QUE2Q0Q7SUFGQyxZQUFZLEVBQUU7O21EQUVXOzRGQTFDZixpQkFBaUI7a0JBN0Q3QixTQUFTOytCQUNFLDJCQUEyQixRQUMvQjt3QkFDSixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsY0FBYyxFQUFFLE9BQU87d0JBQ3ZCLGNBQWMsRUFBRSxPQUFPO3dCQUN2QixhQUFhLEVBQUUsTUFBTTt3QkFDckIsZ0JBQWdCLEVBQUUsU0FBUzt3QkFDM0IsYUFBYSxFQUFFLE1BQU07d0JBQ3JCLGFBQWEsRUFBRSxNQUFNO3dCQUNyQixhQUFhLEVBQUUsVUFBVTtxQkFDMUIsWUFZUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ1QsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07K0VBTXRDLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLEtBQUs7c0JBQWIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLO2dCQWdCTixRQUFRO3NCQUhQLEtBQUs7O3NCQUVMLFdBQVc7dUJBQUMsNEJBQTRCO2dCQVF6QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTkcyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBIZWxwZXJzLCBLZXkgfSBmcm9tICdub3ZvLWVsZW1lbnRzL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbm92by1idXR0b24sYnV0dG9uW3RoZW1lXScsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ25vdm8tYnV0dG9uJyxcbiAgICAnW2F0dHIudGhlbWVdJzogJ3RoZW1lJyxcbiAgICAnW2F0dHIuY29sb3JdJzogJ2NvbG9yJyxcbiAgICAnW2F0dHIuaWNvbl0nOiAnaWNvbicsXG4gICAgJ1thdHRyLmxvYWRpbmddJzogJ2xvYWRpbmcnLFxuICAgICdbYXR0ci5zaWRlXSc6ICdzaWRlJyxcbiAgICAnW2F0dHIuc2l6ZV0nOiAnc2l6ZScsXG4gICAgJ1thdHRyLnJvbGVdJzogXCInYnV0dG9uJ1wiLFxuICB9LFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9zdHlsZXMvYnV0dG9uLnNjc3MnLFxuICAgICcuL3N0eWxlcy9idXR0b24tc3RhbmRhcmQuc2NzcycsXG4gICAgJy4vc3R5bGVzL2J1dHRvbi1wcmltYXJ5LnNjc3MnLFxuICAgICcuL3N0eWxlcy9idXR0b24tc2Vjb25kYXJ5LnNjc3MnLFxuICAgICcuL3N0eWxlcy9idXR0b24tZmFiLnNjc3MnLFxuICAgICcuL3N0eWxlcy9idXR0b24taWNvbi5zY3NzJyxcbiAgICAnLi9zdHlsZXMvYnV0dG9uLWRpYWxvZ3VlLnNjc3MnLFxuICAgICcuL3N0eWxlcy9idXR0b24tb3RoZXIuc2NzcycsXG4gIF0sXG5cbiAgdGVtcGxhdGU6IGBcbiAgICA8IS0tTGVmdCBJY29uLS0+XG4gICAgPGkgKm5nSWY9XCJpY29uICYmIHNpZGUgPT09ICdsZWZ0JyAmJiAhbG9hZGluZ1wiIFtuZ0NsYXNzXT1cImljb25cIiBjbGFzcz1cIm5vdm8tYnV0dG9uLWljb24gbm92by1idXR0b24taWNvbi1sZWZ0XCI+PC9pPlxuICAgIDwhLS1UcmFuc2NsdWRlZCBDb250ZW50LS0+XG4gICAgPHNwYW4gI3RleHRDb250ZW50IGNsYXNzPVwiYnV0dG9uLWNvbnRlbnRzXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Bhbj5cbiAgICA8IS0tUmlnaHQgSWNvbi0tPlxuICAgIDxpICpuZ0lmPVwiaWNvbiAmJiBzaWRlID09PSAncmlnaHQnICYmICFsb2FkaW5nXCIgW25nQ2xhc3NdPVwiaWNvblwiIGNsYXNzPVwibm92by1idXR0b24taWNvbiBub3ZvLWJ1dHRvbi1pY29uLXJpZ2h0XCI+PC9pPlxuICAgIDwhLS1Mb2FkaW5nLS0+XG4gICAgPGkgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJsb2FkaW5nIG5vdm8tYnV0dG9uLWxvYWRpbmdcIj5cbiAgICAgIDxzdmdcbiAgICAgICAgdmVyc2lvbj1cIjEuMVwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICB4bWxuczphPVwiaHR0cDovL25zLmFkb2JlLmNvbS9BZG9iZVNWR1ZpZXdlckV4dGVuc2lvbnMvMy4wL1wiXG4gICAgICAgIHg9XCIwcHhcIlxuICAgICAgICB5PVwiMHB4XCJcbiAgICAgICAgd2lkdGg9XCIxOC4ycHhcIlxuICAgICAgICBoZWlnaHQ9XCIxOC41cHhcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDE4LjIgMTguNVwiXG4gICAgICAgIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxOC4yIDE4LjU7XCJcbiAgICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIlxuICAgICAgPlxuICAgICAgICA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XG4gICAgICAgICAgLnNwaW5uZXIge1xuICAgICAgICAgICAgZmlsbDogI2ZmZmZmZjtcbiAgICAgICAgICB9XG4gICAgICAgIDwvc3R5bGU+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgY2xhc3M9XCJzcGlubmVyXCJcbiAgICAgICAgICBkPVwiTTkuMiwxOC41QzQuMSwxOC41LDAsMTQuNCwwLDkuMlM0LjEsMCw5LjIsMGMwLjksMCwxLjksMC4xLDIuNywwLjRjMC44LDAuMiwxLjIsMS4xLDEsMS45XG4gICAgICAgICAgICAgICAgICAgICAgICBjLTAuMiwwLjgtMS4xLDEuMi0xLjksMUMxMC41LDMuMSw5LjksMyw5LjIsM0M1LjgsMywzLDUuOCwzLDkuMnMyLjgsNi4yLDYuMiw2LjJjMi44LDAsNS4zLTEuOSw2LTQuN2MwLjItMC44LDEtMS4zLDEuOC0xLjFcbiAgICAgICAgICAgICAgICAgICAgICAgIGMwLjgsMC4yLDEuMywxLDEuMSwxLjhDMTcuMSwxNS43LDEzLjQsMTguNSw5LjIsMTguNXpcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9pPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTm92b0J1dHRvbkVsZW1lbnQge1xuICAvKipcbiAgICogVGhlIHRleHQgY29sb3Igb2YgdGhlIGJ1dHRvbi4gU2hvdWxkIGJlIHVzZWQgZm9yIEljb24gYnV0dG9ucy4gc2VlIHRoZW1lLlxuICAgKi9cbiAgQElucHV0KCkgY29sb3I6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaWRlIG9mIHRoZSBidXR0b24gdG8gZGlzcGxheSB0aGUgaWNvbi5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpIHNpZGU6IHN0cmluZyA9ICdyaWdodCc7XG4gIC8qKlxuICAgKiBcdFNldHMgdGhlIHNpemUgb2YgdGhlIGJ1dHRvbi4gT25lIG9mOiBzbSwgbGdcbiAgICovXG4gIEBJbnB1dCgpIHNpemU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBiYXNlIHN0eWxpbmcgdG8gYXBwbHkgdG8gdGhlIGJ1dHRvbi5cbiAgICovXG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmcgPSAnZGlhbG9ndWUnO1xuICAvKipcbiAgICogQ29uZGl0aW9uYWxseSBzaG93IGEgc3Bpbm5lciBvdmVyIHRoZSB0b3Agb2YgYSBidXR0b24uXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuICAvKipcbiAgICogT3B0aW9uYWxseSBkaXNwbGF5IGBidWxsaG9ybi1pY29uYCB3aXRoIHRoZSBidXR0b24gYWxvbmcgd2l0aCB0aGUgdGV4dC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBpY29uKGljb246IHN0cmluZykge1xuICAgIGlmIChpY29uKSB7XG4gICAgICB0aGlzLl9pY29uID0gYGJoaS0ke2ljb259YDtcbiAgICB9XG4gIH1cbiAgZ2V0IGljb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoZSBidXR0b24gbm9uLWludGVyYWN0aXZlLlxuICAgKi9cbiAgQElucHV0KClcbiAgQEJvb2xlYW5JbnB1dCgpXG4gIEBIb3N0QmluZGluZygnY2xhc3Mubm92by1idXR0b24tZGlzYWJsZWQnKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2ljb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZikge31cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICgoS2V5LkVudGVyID09PSBldmVudC5rZXkgfHwgS2V5LlNwYWNlID09PSBldmVudC5rZXkpICYmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykpIHtcbiAgICAgIEhlbHBlcnMuc3dhbGxvd0V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgaW5wdXQuICovXG4gIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhvcHRpb25zKTtcbiAgfVxufVxuIl19
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvYnV0dG9uL0J1dHRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxNQUFNO0FBQ04sT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFPLE1BQU0scUJBQXFCLENBQUM7OztBQStEakUsTUFBTSxPQUFPLGlCQUFpQjtJQXNCNUI7OztPQUdHO0lBQ0gsSUFDSSxJQUFJLENBQUMsSUFBWTtRQUNuQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFlRCxZQUFtQixPQUFtQjtRQUFuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBNUN0Qzs7O1dBR0c7UUFDTSxTQUFJLEdBQVcsT0FBTyxDQUFDO1FBS2hDOztXQUVHO1FBQ00sVUFBSyxHQUFXLFVBQVUsQ0FBQztRQW1CcEM7O1dBRUc7UUFJSCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLGlCQUFZLEdBQW1CLFNBQVMsQ0FBQztJQUlBLENBQUM7SUFFMUMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFHRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxDQUFDLDRCQUFjLEtBQUssQ0FBQyxHQUFHLElBQUksd0JBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1RixPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLEtBQUssQ0FBQyxPQUFzQjtRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQzsrR0FuRVUsaUJBQWlCO21HQUFqQixpQkFBaUIsd2pCQXRDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNUOztBQTZDRDtJQUZDLFlBQVksRUFBRTs7bURBRVc7NEZBMUNmLGlCQUFpQjtrQkE3RDdCLFNBQVM7K0JBQ0UsMkJBQTJCLFFBQy9CO3dCQUNKLEtBQUssRUFBRSxhQUFhO3dCQUNwQixjQUFjLEVBQUUsT0FBTzt3QkFDdkIsY0FBYyxFQUFFLE9BQU87d0JBQ3ZCLGFBQWEsRUFBRSxNQUFNO3dCQUNyQixnQkFBZ0IsRUFBRSxTQUFTO3dCQUMzQixhQUFhLEVBQUUsTUFBTTt3QkFDckIsYUFBYSxFQUFFLE1BQU07d0JBQ3JCLGFBQWEsRUFBRSxVQUFVO3FCQUMxQixZQVlTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DVCxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTsrRUFNdEMsS0FBSztzQkFBYixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBZ0JOLFFBQVE7c0JBSFAsS0FBSzs7c0JBRUwsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBSXpDLFlBQVk7c0JBRFgsV0FBVzt1QkFBQyxlQUFlO2dCQWM1QixhQUFhO3NCQURaLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTkcyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIEhlbHBlcnMsIEtleSB9IGZyb20gJ25vdm8tZWxlbWVudHMvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdub3ZvLWJ1dHRvbixidXR0b25bdGhlbWVdJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnbm92by1idXR0b24nLFxuICAgICdbYXR0ci50aGVtZV0nOiAndGhlbWUnLFxuICAgICdbYXR0ci5jb2xvcl0nOiAnY29sb3InLFxuICAgICdbYXR0ci5pY29uXSc6ICdpY29uJyxcbiAgICAnW2F0dHIubG9hZGluZ10nOiAnbG9hZGluZycsXG4gICAgJ1thdHRyLnNpZGVdJzogJ3NpZGUnLFxuICAgICdbYXR0ci5zaXplXSc6ICdzaXplJyxcbiAgICAnW2F0dHIucm9sZV0nOiBcIididXR0b24nXCIsXG4gIH0sXG4gIHN0eWxlVXJsczogW1xuICAgICcuL3N0eWxlcy9idXR0b24uc2NzcycsXG4gICAgJy4vc3R5bGVzL2J1dHRvbi1zdGFuZGFyZC5zY3NzJyxcbiAgICAnLi9zdHlsZXMvYnV0dG9uLXByaW1hcnkuc2NzcycsXG4gICAgJy4vc3R5bGVzL2J1dHRvbi1zZWNvbmRhcnkuc2NzcycsXG4gICAgJy4vc3R5bGVzL2J1dHRvbi1mYWIuc2NzcycsXG4gICAgJy4vc3R5bGVzL2J1dHRvbi1pY29uLnNjc3MnLFxuICAgICcuL3N0eWxlcy9idXR0b24tZGlhbG9ndWUuc2NzcycsXG4gICAgJy4vc3R5bGVzL2J1dHRvbi1vdGhlci5zY3NzJyxcbiAgXSxcblxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS1MZWZ0IEljb24tLT5cbiAgICA8aSAqbmdJZj1cImljb24gJiYgc2lkZSA9PT0gJ2xlZnQnICYmICFsb2FkaW5nXCIgW25nQ2xhc3NdPVwiaWNvblwiIGNsYXNzPVwibm92by1idXR0b24taWNvbiBub3ZvLWJ1dHRvbi1pY29uLWxlZnRcIj48L2k+XG4gICAgPCEtLVRyYW5zY2x1ZGVkIENvbnRlbnQtLT5cbiAgICA8c3BhbiAjdGV4dENvbnRlbnQgY2xhc3M9XCJidXR0b24tY29udGVudHNcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuICAgIDwhLS1SaWdodCBJY29uLS0+XG4gICAgPGkgKm5nSWY9XCJpY29uICYmIHNpZGUgPT09ICdyaWdodCcgJiYgIWxvYWRpbmdcIiBbbmdDbGFzc109XCJpY29uXCIgY2xhc3M9XCJub3ZvLWJ1dHRvbi1pY29uIG5vdm8tYnV0dG9uLWljb24tcmlnaHRcIj48L2k+XG4gICAgPCEtLUxvYWRpbmctLT5cbiAgICA8aSAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmcgbm92by1idXR0b24tbG9hZGluZ1wiPlxuICAgICAgPHN2Z1xuICAgICAgICB2ZXJzaW9uPVwiMS4xXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICAgIHhtbG5zOmE9XCJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlU1ZHVmlld2VyRXh0ZW5zaW9ucy8zLjAvXCJcbiAgICAgICAgeD1cIjBweFwiXG4gICAgICAgIHk9XCIwcHhcIlxuICAgICAgICB3aWR0aD1cIjE4LjJweFwiXG4gICAgICAgIGhlaWdodD1cIjE4LjVweFwiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMTguMiAxOC41XCJcbiAgICAgICAgc3R5bGU9XCJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE4LjIgMTguNTtcIlxuICAgICAgICB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiXG4gICAgICA+XG4gICAgICAgIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICAgICAgICAuc3Bpbm5lciB7XG4gICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgIH1cbiAgICAgICAgPC9zdHlsZT5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBjbGFzcz1cInNwaW5uZXJcIlxuICAgICAgICAgIGQ9XCJNOS4yLDE4LjVDNC4xLDE4LjUsMCwxNC40LDAsOS4yUzQuMSwwLDkuMiwwYzAuOSwwLDEuOSwwLjEsMi43LDAuNGMwLjgsMC4yLDEuMiwxLjEsMSwxLjlcbiAgICAgICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuOC0xLjEsMS4yLTEuOSwxQzEwLjUsMy4xLDkuOSwzLDkuMiwzQzUuOCwzLDMsNS44LDMsOS4yczIuOCw2LjIsNi4yLDYuMmMyLjgsMCw1LjMtMS45LDYtNC43YzAuMi0wLjgsMS0xLjMsMS44LTEuMVxuICAgICAgICAgICAgICAgICAgICAgICAgYzAuOCwwLjIsMS4zLDEsMS4xLDEuOEMxNy4xLDE1LjcsMTMuNCwxOC41LDkuMiwxOC41elwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2k+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZvQnV0dG9uRWxlbWVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgdGV4dCBjb2xvciBvZiB0aGUgYnV0dG9uLiBTaG91bGQgYmUgdXNlZCBmb3IgSWNvbiBidXR0b25zLiBzZWUgdGhlbWUuXG4gICAqL1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHNpZGUgb2YgdGhlIGJ1dHRvbiB0byBkaXNwbGF5IHRoZSBpY29uLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KCkgc2lkZTogc3RyaW5nID0gJ3JpZ2h0JztcbiAgLyoqXG4gICAqIFx0U2V0cyB0aGUgc2l6ZSBvZiB0aGUgYnV0dG9uLiBPbmUgb2Y6IHNtLCBsZ1xuICAgKi9cbiAgQElucHV0KCkgc2l6ZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGJhc2Ugc3R5bGluZyB0byBhcHBseSB0byB0aGUgYnV0dG9uLlxuICAgKi9cbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZyA9ICdkaWFsb2d1ZSc7XG4gIC8qKlxuICAgKiBDb25kaXRpb25hbGx5IHNob3cgYSBzcGlubmVyIG92ZXIgdGhlIHRvcCBvZiBhIGJ1dHRvbi5cbiAgICovXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGRpc3BsYXkgYGJ1bGxob3JuLWljb25gIHdpdGggdGhlIGJ1dHRvbiBhbG9uZyB3aXRoIHRoZSB0ZXh0LlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGljb24oaWNvbjogc3RyaW5nKSB7XG4gICAgaWYgKGljb24pIHtcbiAgICAgIHRoaXMuX2ljb24gPSBgYmhpLSR7aWNvbn1gO1xuICAgIH1cbiAgfVxuICBnZXQgaWNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgdGhlIGJ1dHRvbiBub24taW50ZXJhY3RpdmUuXG4gICAqL1xuICBASW5wdXQoKVxuICBAQm9vbGVhbklucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ub3ZvLWJ1dHRvbi1kaXNhYmxlZCcpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRpc2FibGVkJylcbiAgZGlzYWJsZWRBdHRyOiB1bmRlZmluZWQgfCAnJyA9IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9pY29uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkICYmIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdCVVRUT04nKSB7XG4gICAgICB0aGlzLmRpc2FibGVkQXR0ciA9IGNoYW5nZXMuZGlzYWJsZWQuY3VycmVudFZhbHVlID8gJycgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoKEtleS5FbnRlciA9PT0gZXZlbnQua2V5IHx8IEtleS5TcGFjZSA9PT0gZXZlbnQua2V5KSAmJiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpKSB7XG4gICAgICBIZWxwZXJzLnN3YWxsb3dFdmVudChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEZvY3VzZXMgdGhlIGlucHV0LiAqL1xuICBmb2N1cyhvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMob3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==