novo-elements 10.5.0 → 10.6.0-next.2

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 (72) hide show
  1. package/elements/common/overlay/Overlay.d.ts +2 -1
  2. package/elements/data-table/data-table-clear-button.component.d.ts +1 -0
  3. package/elements/data-table/interfaces.d.ts +10 -1
  4. package/elements/modal/modal.component.d.ts +1 -1
  5. package/elements/places/places.component.d.ts +2 -0
  6. package/elements/query-builder/condition-builder/condition-builder.component.d.ts +3 -2
  7. package/elements/query-builder/condition-builder/condition-builder.component.scss +10 -0
  8. package/elements/query-builder/condition-definitions/address-condition.definition.d.ts +26 -6
  9. package/elements/query-builder/condition-definitions/string-condition.definition.d.ts +1 -0
  10. package/elements/query-builder/condition-templates/condition-templates.component.d.ts +3 -1
  11. package/elements/query-builder/criteria-builder/criteria-builder.component.d.ts +3 -2
  12. package/elements/query-builder/query-builder.types.d.ts +41 -0
  13. package/elements/toast/Toast.scss +6 -8
  14. package/esm2022/elements/autocomplete/autocomplete.component.mjs +1 -1
  15. package/esm2022/elements/color-picker/color-input.component.mjs +1 -1
  16. package/esm2022/elements/common/overlay/Overlay.mjs +9 -3
  17. package/esm2022/elements/data-table/data-table-clear-button.component.mjs +32 -7
  18. package/esm2022/elements/data-table/interfaces.mjs +2 -1
  19. package/esm2022/elements/date-picker/DatePickerInput.mjs +1 -1
  20. package/esm2022/elements/date-picker/DateRangeInput.mjs +1 -1
  21. package/esm2022/elements/date-picker/MultiDateInput.mjs +1 -1
  22. package/esm2022/elements/dropdown/Dropdown.mjs +1 -1
  23. package/esm2022/elements/field/toggle/picker-toggle.component.mjs +1 -1
  24. package/esm2022/elements/modal/modal.component.mjs +3 -3
  25. package/esm2022/elements/picker/Picker.mjs +1 -1
  26. package/esm2022/elements/places/places.component.mjs +6 -1
  27. package/esm2022/elements/query-builder/condition-builder/condition-builder.component.mjs +6 -4
  28. package/esm2022/elements/query-builder/condition-definitions/address-condition.definition.mjs +149 -54
  29. package/esm2022/elements/query-builder/condition-definitions/string-condition.definition.mjs +10 -10
  30. package/esm2022/elements/query-builder/condition-group/condition-group.component.mjs +1 -1
  31. package/esm2022/elements/query-builder/condition-templates/condition-templates.component.mjs +7 -5
  32. package/esm2022/elements/query-builder/criteria-builder/criteria-builder.component.mjs +6 -4
  33. package/esm2022/elements/query-builder/query-builder.types.mjs +7 -1
  34. package/esm2022/elements/search/SearchBox.mjs +1 -1
  35. package/esm2022/elements/select/Select.mjs +1 -1
  36. package/esm2022/elements/time-picker/TimePickerInput.mjs +1 -1
  37. package/esm2022/elements/toast/Toast.mjs +2 -2
  38. package/esm2022/services/novo-label-service.mjs +3 -1
  39. package/fesm2022/novo-elements-elements-autocomplete.mjs +1 -1
  40. package/fesm2022/novo-elements-elements-autocomplete.mjs.map +1 -1
  41. package/fesm2022/novo-elements-elements-color-picker.mjs +1 -1
  42. package/fesm2022/novo-elements-elements-color-picker.mjs.map +1 -1
  43. package/fesm2022/novo-elements-elements-common.mjs +8 -2
  44. package/fesm2022/novo-elements-elements-common.mjs.map +1 -1
  45. package/fesm2022/novo-elements-elements-data-table.mjs +32 -7
  46. package/fesm2022/novo-elements-elements-data-table.mjs.map +1 -1
  47. package/fesm2022/novo-elements-elements-date-picker.mjs +3 -3
  48. package/fesm2022/novo-elements-elements-date-picker.mjs.map +1 -1
  49. package/fesm2022/novo-elements-elements-dropdown.mjs +1 -1
  50. package/fesm2022/novo-elements-elements-dropdown.mjs.map +1 -1
  51. package/fesm2022/novo-elements-elements-field.mjs +1 -1
  52. package/fesm2022/novo-elements-elements-field.mjs.map +1 -1
  53. package/fesm2022/novo-elements-elements-modal.mjs +2 -2
  54. package/fesm2022/novo-elements-elements-modal.mjs.map +1 -1
  55. package/fesm2022/novo-elements-elements-picker.mjs +1 -1
  56. package/fesm2022/novo-elements-elements-picker.mjs.map +1 -1
  57. package/fesm2022/novo-elements-elements-places.mjs +5 -0
  58. package/fesm2022/novo-elements-elements-places.mjs.map +1 -1
  59. package/fesm2022/novo-elements-elements-query-builder.mjs +180 -75
  60. package/fesm2022/novo-elements-elements-query-builder.mjs.map +1 -1
  61. package/fesm2022/novo-elements-elements-search.mjs +1 -1
  62. package/fesm2022/novo-elements-elements-search.mjs.map +1 -1
  63. package/fesm2022/novo-elements-elements-select.mjs +1 -1
  64. package/fesm2022/novo-elements-elements-select.mjs.map +1 -1
  65. package/fesm2022/novo-elements-elements-time-picker.mjs +1 -1
  66. package/fesm2022/novo-elements-elements-time-picker.mjs.map +1 -1
  67. package/fesm2022/novo-elements-elements-toast.mjs +2 -2
  68. package/fesm2022/novo-elements-elements-toast.mjs.map +1 -1
  69. package/fesm2022/novo-elements-services.mjs +2 -0
  70. package/fesm2022/novo-elements-services.mjs.map +1 -1
  71. package/package.json +1 -1
  72. package/services/novo-label-service.d.ts +2 -0
@@ -209,7 +209,7 @@ export class ConditionBuilderComponent {
209
209
  this.cdr.markForCheck();
210
210
  }
211
211
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ConditionBuilderComponent, deps: [{ token: i1.NovoLabelService }, { token: i0.ChangeDetectorRef }, { token: i2.QueryBuilderService }, { token: i3.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
212
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.2.3", type: ConditionBuilderComponent, selector: "novo-condition-builder", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, isFirst: { classPropertyName: "isFirst", publicName: "isFirst", isSignal: true, isRequired: false, transformFunction: null }, andIndex: { classPropertyName: "andIndex", publicName: "andIndex", isSignal: false, isRequired: false, transformFunction: null }, groupIndex: { classPropertyName: "groupIndex", publicName: "groupIndex", isSignal: false, isRequired: false, transformFunction: null }, inputConfig: { classPropertyName: "inputConfig", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, inputEditTypeFn: { classPropertyName: "inputEditTypeFn", publicName: "editTypeFn", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.condition-host": "this.isConditionHost" } }, providers: [{ provide: NOVO_CONDITION_BUILDER, useExisting: ConditionBuilderComponent },
212
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.2.3", type: ConditionBuilderComponent, selector: "novo-condition-builder", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, isFirst: { classPropertyName: "isFirst", publicName: "isFirst", isSignal: true, isRequired: false, transformFunction: null }, andIndex: { classPropertyName: "andIndex", publicName: "andIndex", isSignal: false, isRequired: false, transformFunction: null }, groupIndex: { classPropertyName: "groupIndex", publicName: "groupIndex", isSignal: false, isRequired: false, transformFunction: null }, addressConfig: { classPropertyName: "addressConfig", publicName: "addressConfig", isSignal: false, isRequired: false, transformFunction: null }, inputConfig: { classPropertyName: "inputConfig", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, inputEditTypeFn: { classPropertyName: "inputEditTypeFn", publicName: "editTypeFn", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.condition-host": "this.isConditionHost" } }, providers: [{ provide: NOVO_CONDITION_BUILDER, useExisting: ConditionBuilderComponent },
213
213
  {
214
214
  provide: QueryBuilderService,
215
215
  deps: [NovoLabelService, [new SkipSelf(), new Optional(), QueryBuilderService]],
@@ -220,7 +220,7 @@ export class ConditionBuilderComponent {
220
220
  return queryBuilderService;
221
221
  }
222
222
  }
223
- ], viewQueries: [{ propertyName: "_operatorOutlet", first: true, predicate: ConditionOperatorOutlet, descendants: true, static: true }, { propertyName: "_inputOutlet", first: true, predicate: ConditionInputOutlet, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"parentForm\">\n <novo-grid gap=\"1rem\" [columns]=\"gridColumns()\" align=\"end\">\n <novo-field class=\"condition-field\" *ngIf=\"!staticFieldSelection()\">\n <novo-select\n [placeholder]=\"labels.chooseAField\"\n formControlName=\"field\"\n (onSelect)=\"updateFieldSelection()\"\n overlayWidth=\"24rem\"\n overlayHeight=\"20rem\"\n [displayWith]=\"fieldDisplayWith\"\n [style.minWidth.px]=\"160\"\n [style.maxWidth.px]=\"(isFirst() || isConditionHost) ? 200 : 160\"\n [displayIcon]=\"displayIcon\">\n <novo-optgroup class=\"filter-search-results\">\n <novo-option>\n <novo-select-search [formControl]=\"searchTerm\" [clearSearchInput]=\"false\"></novo-select-search>\n </novo-option>\n <ng-container *ngIf=\"results$ | async as results; else loading\">\n <ng-container *ngIf=\"results.length\">\n <novo-option *ngFor=\"let field of results\" value=\"{{ field.name }}\"\n [attr.data-automation-id]=\"field.name\">\n {{ field.label || field.name }}\n </novo-option>\n </ng-container>\n </ng-container>\n </novo-optgroup>\n </novo-select>\n </novo-field>\n\n <div class=\"condition-operator\">\n <ng-container conditionOperatorOutlet></ng-container>\n </div>\n\n <div class=\"condition-input\">\n <ng-container conditionInputOutlet></ng-container>\n </div>\n </novo-grid>\n <ng-content></ng-content>\n</form>\n\n<novo-condition-templates *ngIf=\"isConditionHost\"></novo-condition-templates>\n\n<!-- EMPTY STATE TEMPLATE -->\n<!-- <ng-template #empty>\n <novo-non-ideal-state>\n <novo-icon size=\"xl\" color=\"grapefruit\">search</novo-icon>\n <novo-title>No results found.</novo-title>\n <novo-text>Your search didn't find anything. Try searching for something else.</novo-text>\n </novo-non-ideal-state>\n</ng-template> -->\n\n<!-- LOADING TEMPLATE -->\n<ng-template #loading>\n <novo-loading></novo-loading>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%}:host.condition-host{padding:var(--spacing-md);margin-bottom:1rem}:host .condition-field{grid-template-columns:minmax(fit-content,1fr);width:100%;width:-webkit-fill-available}:host .condition-operator::ng-deep .novo-select{min-width:13rem}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical{grid-template-columns:minmax(fit-content,1fr);width:-webkit-fill-available}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical .novo-input-element{width:100%}:host .condition-input::ng-deep novo-field{width:fit-content}:host .condition-input::ng-deep .novo-field-infix{white-space:nowrap;overflow:hidden}:host .condition-input::ng-deep novo-chip-list{width:36rem}:host .condition-input::ng-deep novo-chip-list novo-chip{max-width:33rem}:host .condition-input::ng-deep novo-chips{border-bottom:none!important}:host .condition-input::ng-deep novo-chips input{padding-left:0!important}:host .condition-input::ng-deep novo-radio-group{padding:0!important}:host .and-or-filter-button{box-sizing:border-box;background:#fff;border:1px solid #ddd;color:#5691f5;display:inline-block;position:relative;cursor:pointer;margin:.4rem auto;align-items:center;text-align:center;-webkit-user-select:none;user-select:none;outline:none;white-space:nowrap;text-transform:uppercase;overflow:hidden;transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.GapDirective, selector: "[gap]", inputs: ["gap"] }, { kind: "component", type: i6.NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayIcon", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { kind: "component", type: i7.NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "customOverlayOrigin", "width"], outputs: ["valueChanges", "stateChanges"] }, { kind: "component", type: i5.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { kind: "component", type: i5.NovoOptgroup, selector: "novo-optgroup", inputs: ["disabled", "label"], exportAs: ["novoOptgroup"] }, { kind: "component", type: i8.NovoGridElement, selector: "novo-grid", inputs: ["direction", "align", "justify", "columns"] }, { kind: "component", type: i9.NovoLoadingElement, selector: "novo-loading", inputs: ["theme", "color", "size"] }, { kind: "component", type: i10.NovoSelectSearchComponent, selector: "novo-select-search", inputs: ["name", "placeholderLabel", "type", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: ConditionInputOutlet, selector: "[conditionInputOutlet]" }, { kind: "directive", type: ConditionOperatorOutlet, selector: "[conditionOperatorOutlet]" }, { kind: "component", type: i11.NovoConditionTemplatesComponent, selector: "novo-condition-templates" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
223
+ ], viewQueries: [{ propertyName: "_operatorOutlet", first: true, predicate: ConditionOperatorOutlet, descendants: true, static: true }, { propertyName: "_inputOutlet", first: true, predicate: ConditionInputOutlet, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"parentForm\">\n <novo-grid gap=\"1rem\" [columns]=\"gridColumns()\" align=\"end\">\n <novo-field class=\"condition-field\" *ngIf=\"!staticFieldSelection()\">\n <novo-select\n [placeholder]=\"labels.chooseAField\"\n formControlName=\"field\"\n (onSelect)=\"updateFieldSelection()\"\n overlayWidth=\"24rem\"\n overlayHeight=\"20rem\"\n [displayWith]=\"fieldDisplayWith\"\n [style.minWidth.px]=\"160\"\n [style.maxWidth.px]=\"(isFirst() || isConditionHost) ? 200 : 160\"\n [displayIcon]=\"displayIcon\">\n <novo-optgroup class=\"filter-search-results\">\n <novo-option>\n <novo-select-search [formControl]=\"searchTerm\" [clearSearchInput]=\"false\"></novo-select-search>\n </novo-option>\n <ng-container *ngIf=\"results$ | async as results; else loading\">\n <ng-container *ngIf=\"results.length\">\n <novo-option *ngFor=\"let field of results\" value=\"{{ field.name }}\"\n [attr.data-automation-id]=\"field.name\">\n {{ field.label || field.name }}\n </novo-option>\n </ng-container>\n </ng-container>\n </novo-optgroup>\n </novo-select>\n </novo-field>\n\n <div class=\"condition-operator\">\n <ng-container conditionOperatorOutlet></ng-container>\n </div>\n\n <div class=\"condition-input\">\n <ng-container conditionInputOutlet></ng-container>\n </div>\n </novo-grid>\n <ng-content></ng-content>\n</form>\n\n<novo-condition-templates *ngIf=\"isConditionHost\" [addressConfig]=\"addressConfig\"/>\n\n<!-- EMPTY STATE TEMPLATE -->\n<!-- <ng-template #empty>\n <novo-non-ideal-state>\n <novo-icon size=\"xl\" color=\"grapefruit\">search</novo-icon>\n <novo-title>No results found.</novo-title>\n <novo-text>Your search didn't find anything. Try searching for something else.</novo-text>\n </novo-non-ideal-state>\n</ng-template> -->\n\n<!-- LOADING TEMPLATE -->\n<ng-template #loading>\n <novo-loading></novo-loading>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%}:host.condition-host{padding:var(--spacing-md);margin-bottom:1rem}:host .condition-field{grid-template-columns:minmax(fit-content,1fr);width:100%;width:-webkit-fill-available}:host .condition-operator::ng-deep .novo-select{min-width:13rem}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical{grid-template-columns:minmax(fit-content,1fr);width:-webkit-fill-available}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical .novo-input-element{width:100%}:host .condition-input::ng-deep novo-field{width:fit-content}:host .condition-input::ng-deep novo-field.address-radius{width:100px;min-width:100px;max-width:100px;margin-right:1rem}:host .condition-input::ng-deep novo-field.address-radius novo-select{min-width:70px}:host .condition-input::ng-deep .novo-field-infix{white-space:nowrap;overflow:hidden}:host .condition-input::ng-deep novo-chip-list{width:36rem}:host .condition-input::ng-deep novo-chip-list novo-chip{max-width:33rem}:host .condition-input::ng-deep novo-chips{border-bottom:none!important}:host .condition-input::ng-deep novo-chips input{padding-left:0!important}:host .condition-input::ng-deep novo-radio-group{padding:0!important}:host .and-or-filter-button{box-sizing:border-box;background:#fff;border:1px solid #ddd;color:#5691f5;display:inline-block;position:relative;cursor:pointer;margin:.4rem auto;align-items:center;text-align:center;-webkit-user-select:none;user-select:none;outline:none;white-space:nowrap;text-transform:uppercase;overflow:hidden;transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.GapDirective, selector: "[gap]", inputs: ["gap"] }, { kind: "component", type: i6.NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayIcon", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { kind: "component", type: i7.NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "customOverlayOrigin", "width"], outputs: ["valueChanges", "stateChanges"] }, { kind: "component", type: i5.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { kind: "component", type: i5.NovoOptgroup, selector: "novo-optgroup", inputs: ["disabled", "label"], exportAs: ["novoOptgroup"] }, { kind: "component", type: i8.NovoGridElement, selector: "novo-grid", inputs: ["direction", "align", "justify", "columns"] }, { kind: "component", type: i9.NovoLoadingElement, selector: "novo-loading", inputs: ["theme", "color", "size"] }, { kind: "component", type: i10.NovoSelectSearchComponent, selector: "novo-select-search", inputs: ["name", "placeholderLabel", "type", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: ConditionInputOutlet, selector: "[conditionInputOutlet]" }, { kind: "directive", type: ConditionOperatorOutlet, selector: "[conditionOperatorOutlet]" }, { kind: "component", type: i11.NovoConditionTemplatesComponent, selector: "novo-condition-templates", inputs: ["addressConfig"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
224
224
  }
225
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ConditionBuilderComponent, decorators: [{
226
226
  type: Component,
@@ -235,7 +235,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
235
235
  return queryBuilderService;
236
236
  }
237
237
  }
238
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"parentForm\">\n <novo-grid gap=\"1rem\" [columns]=\"gridColumns()\" align=\"end\">\n <novo-field class=\"condition-field\" *ngIf=\"!staticFieldSelection()\">\n <novo-select\n [placeholder]=\"labels.chooseAField\"\n formControlName=\"field\"\n (onSelect)=\"updateFieldSelection()\"\n overlayWidth=\"24rem\"\n overlayHeight=\"20rem\"\n [displayWith]=\"fieldDisplayWith\"\n [style.minWidth.px]=\"160\"\n [style.maxWidth.px]=\"(isFirst() || isConditionHost) ? 200 : 160\"\n [displayIcon]=\"displayIcon\">\n <novo-optgroup class=\"filter-search-results\">\n <novo-option>\n <novo-select-search [formControl]=\"searchTerm\" [clearSearchInput]=\"false\"></novo-select-search>\n </novo-option>\n <ng-container *ngIf=\"results$ | async as results; else loading\">\n <ng-container *ngIf=\"results.length\">\n <novo-option *ngFor=\"let field of results\" value=\"{{ field.name }}\"\n [attr.data-automation-id]=\"field.name\">\n {{ field.label || field.name }}\n </novo-option>\n </ng-container>\n </ng-container>\n </novo-optgroup>\n </novo-select>\n </novo-field>\n\n <div class=\"condition-operator\">\n <ng-container conditionOperatorOutlet></ng-container>\n </div>\n\n <div class=\"condition-input\">\n <ng-container conditionInputOutlet></ng-container>\n </div>\n </novo-grid>\n <ng-content></ng-content>\n</form>\n\n<novo-condition-templates *ngIf=\"isConditionHost\"></novo-condition-templates>\n\n<!-- EMPTY STATE TEMPLATE -->\n<!-- <ng-template #empty>\n <novo-non-ideal-state>\n <novo-icon size=\"xl\" color=\"grapefruit\">search</novo-icon>\n <novo-title>No results found.</novo-title>\n <novo-text>Your search didn't find anything. Try searching for something else.</novo-text>\n </novo-non-ideal-state>\n</ng-template> -->\n\n<!-- LOADING TEMPLATE -->\n<ng-template #loading>\n <novo-loading></novo-loading>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%}:host.condition-host{padding:var(--spacing-md);margin-bottom:1rem}:host .condition-field{grid-template-columns:minmax(fit-content,1fr);width:100%;width:-webkit-fill-available}:host .condition-operator::ng-deep .novo-select{min-width:13rem}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical{grid-template-columns:minmax(fit-content,1fr);width:-webkit-fill-available}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical .novo-input-element{width:100%}:host .condition-input::ng-deep novo-field{width:fit-content}:host .condition-input::ng-deep .novo-field-infix{white-space:nowrap;overflow:hidden}:host .condition-input::ng-deep novo-chip-list{width:36rem}:host .condition-input::ng-deep novo-chip-list novo-chip{max-width:33rem}:host .condition-input::ng-deep novo-chips{border-bottom:none!important}:host .condition-input::ng-deep novo-chips input{padding-left:0!important}:host .condition-input::ng-deep novo-radio-group{padding:0!important}:host .and-or-filter-button{box-sizing:border-box;background:#fff;border:1px solid #ddd;color:#5691f5;display:inline-block;position:relative;cursor:pointer;margin:.4rem auto;align-items:center;text-align:center;-webkit-user-select:none;user-select:none;outline:none;white-space:nowrap;text-transform:uppercase;overflow:hidden;transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}\n"] }]
238
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"parentForm\">\n <novo-grid gap=\"1rem\" [columns]=\"gridColumns()\" align=\"end\">\n <novo-field class=\"condition-field\" *ngIf=\"!staticFieldSelection()\">\n <novo-select\n [placeholder]=\"labels.chooseAField\"\n formControlName=\"field\"\n (onSelect)=\"updateFieldSelection()\"\n overlayWidth=\"24rem\"\n overlayHeight=\"20rem\"\n [displayWith]=\"fieldDisplayWith\"\n [style.minWidth.px]=\"160\"\n [style.maxWidth.px]=\"(isFirst() || isConditionHost) ? 200 : 160\"\n [displayIcon]=\"displayIcon\">\n <novo-optgroup class=\"filter-search-results\">\n <novo-option>\n <novo-select-search [formControl]=\"searchTerm\" [clearSearchInput]=\"false\"></novo-select-search>\n </novo-option>\n <ng-container *ngIf=\"results$ | async as results; else loading\">\n <ng-container *ngIf=\"results.length\">\n <novo-option *ngFor=\"let field of results\" value=\"{{ field.name }}\"\n [attr.data-automation-id]=\"field.name\">\n {{ field.label || field.name }}\n </novo-option>\n </ng-container>\n </ng-container>\n </novo-optgroup>\n </novo-select>\n </novo-field>\n\n <div class=\"condition-operator\">\n <ng-container conditionOperatorOutlet></ng-container>\n </div>\n\n <div class=\"condition-input\">\n <ng-container conditionInputOutlet></ng-container>\n </div>\n </novo-grid>\n <ng-content></ng-content>\n</form>\n\n<novo-condition-templates *ngIf=\"isConditionHost\" [addressConfig]=\"addressConfig\"/>\n\n<!-- EMPTY STATE TEMPLATE -->\n<!-- <ng-template #empty>\n <novo-non-ideal-state>\n <novo-icon size=\"xl\" color=\"grapefruit\">search</novo-icon>\n <novo-title>No results found.</novo-title>\n <novo-text>Your search didn't find anything. Try searching for something else.</novo-text>\n </novo-non-ideal-state>\n</ng-template> -->\n\n<!-- LOADING TEMPLATE -->\n<ng-template #loading>\n <novo-loading></novo-loading>\n</ng-template>\n", styles: [":host{position:relative;display:block;width:100%}:host.condition-host{padding:var(--spacing-md);margin-bottom:1rem}:host .condition-field{grid-template-columns:minmax(fit-content,1fr);width:100%;width:-webkit-fill-available}:host .condition-operator::ng-deep .novo-select{min-width:13rem}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical{grid-template-columns:minmax(fit-content,1fr);width:-webkit-fill-available}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical .novo-input-element{width:100%}:host .condition-input::ng-deep novo-field{width:fit-content}:host .condition-input::ng-deep novo-field.address-radius{width:100px;min-width:100px;max-width:100px;margin-right:1rem}:host .condition-input::ng-deep novo-field.address-radius novo-select{min-width:70px}:host .condition-input::ng-deep .novo-field-infix{white-space:nowrap;overflow:hidden}:host .condition-input::ng-deep novo-chip-list{width:36rem}:host .condition-input::ng-deep novo-chip-list novo-chip{max-width:33rem}:host .condition-input::ng-deep novo-chips{border-bottom:none!important}:host .condition-input::ng-deep novo-chips input{padding-left:0!important}:host .condition-input::ng-deep novo-radio-group{padding:0!important}:host .and-or-filter-button{box-sizing:border-box;background:#fff;border:1px solid #ddd;color:#5691f5;display:inline-block;position:relative;cursor:pointer;margin:.4rem auto;align-items:center;text-align:center;-webkit-user-select:none;user-select:none;outline:none;white-space:nowrap;text-transform:uppercase;overflow:hidden;transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}\n"] }]
239
239
  }], ctorParameters: () => [{ type: i1.NovoLabelService }, { type: i0.ChangeDetectorRef }, { type: i2.QueryBuilderService }, { type: i3.ControlContainer }], propDecorators: { _operatorOutlet: [{
240
240
  type: ViewChild,
241
241
  args: [ConditionOperatorOutlet, { static: true }]
@@ -248,8 +248,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
248
248
  type: Input
249
249
  }], groupIndex: [{
250
250
  type: Input
251
+ }], addressConfig: [{
252
+ type: Input
251
253
  }], isConditionHost: [{
252
254
  type: HostBinding,
253
255
  args: ['class.condition-host']
254
256
  }] } });
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvcXVlcnktYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBSUwsUUFBUSxFQUVSLFFBQVEsRUFDUixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixLQUFLLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFHakU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFtQixhQUErQixFQUFTLFVBQXNCO1FBQTlELGtCQUFhLEdBQWIsYUFBYSxD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O3dCQUNyRjs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDOzRCQUMvRSxVQUFVLEVBQUUsQ0FBQyxZQUE4QixFQUFFLG1CQUF5QyxFQUFFLEVBQUU7Z0NBQ3hGLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29DQUN6QixtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUM5RCxDQUFDO2dDQUNELE9BQU8sbUJBQW1CLENBQUM7NEJBQzdCLENBQUM7eUJBQ0Y7cUJBQ0YsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07c0xBR08sZUFBZTtzQkFBcEUsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0QsWUFBWTtzQkFBOUQsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXhDLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBK0JDLGVBQWU7c0JBRHJCLFdBQVc7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgU2tpcFNlbGYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgY29tcHV0ZWQsXG4gIGlucHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5vdm9MYWJlbFNlcnZpY2UgfSBmcm9tICdub3ZvLWVsZW1lbnRzL3NlcnZpY2VzJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VDb25kaXRpb25GaWVsZERlZiB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJDb25maWcsIFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTk9WT19DT05ESVRJT05fQlVJTERFUiB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIudG9rZW5zJztcbmltcG9ydCB7IEJhc2VGaWVsZERlZiwgRmllbGRDb25maWcsIFF1ZXJ5RmlsdGVyT3V0bGV0IH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci50eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBoYW5kbGUgZm9yIHRoZSB0YWJsZSB0byBncmFiIHRoZSB2aWV3IGNvbnRhaW5lcidzIG5nLWNvbnRhaW5lciB0byBpbnNlcnQgZGF0YSByb3dzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY29uZGl0aW9uSW5wdXRPdXRsZXRdJyB9KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbklucHV0T3V0bGV0IGltcGxlbWVudHMgUXVlcnlGaWx0ZXJPdXRsZXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBoYW5kbGUgZm9yIHRoZSB0YWJsZSB0byBncmFiIHRoZSB2aWV3IGNvbnRhaW5lcidzIG5nLWNvbnRhaW5lciB0byBpbnNlcnQgZGF0YSByb3dzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY29uZGl0aW9uT3BlcmF0b3JPdXRsZXRdJyB9KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbk9wZXJhdG9yT3V0bGV0IGltcGxlbWVudHMgUXVlcnlGaWx0ZXJPdXRsZXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tY29uZGl0aW9uLWJ1aWxkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb25kaXRpb24tYnVpbGRlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5PVk9fQ09ORElUSU9OX0JVSUxERVIsIHVzZUV4aXN0aW5nOiBDb25kaXRpb25CdWlsZGVyQ29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogUXVlcnlCdWlsZGVyU2VydmljZSxcbiAgICAgIGRlcHM6IFtOb3ZvTGFiZWxTZXJ2aWNlLCBbbmV3IFNraXBTZWxmKCksIG5ldyBPcHRpb25hbCgpLCBRdWVyeUJ1aWxkZXJTZXJ2aWNlXV0sXG4gICAgICB1c2VGYWN0b3J5OiAobGFiZWxTZXJ2aWNlOiBOb3ZvTGFiZWxTZXJ2aWNlLCBxdWVyeUJ1aWxkZXJTZXJ2aWNlPzogUXVlcnlCdWlsZGVyU2VydmljZSkgPT4ge1xuICAgICAgICBpZiAoIXF1ZXJ5QnVpbGRlclNlcnZpY2UpIHtcbiAgICAgICAgICBxdWVyeUJ1aWxkZXJTZXJ2aWNlID0gbmV3IFF1ZXJ5QnVpbGRlclNlcnZpY2UobGFiZWxTZXJ2aWNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnlCdWlsZGVyU2VydmljZTtcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25CdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoQ29uZGl0aW9uT3BlcmF0b3JPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIF9vcGVyYXRvck91dGxldDogQ29uZGl0aW9uT3BlcmF0b3JPdXRsZXQ7XG4gIEBWaWV3Q2hpbGQoQ29uZGl0aW9uSW5wdXRPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIF9pbnB1dE91dGxldDogQ29uZGl0aW9uSW5wdXRPdXRsZXQ7XG5cbiAgQElucHV0KCkgbGFiZWw6IGFueTtcbiAgaXNGaXJzdCA9IGlucHV0KGZhbHNlKTtcbiAgQElucHV0KCkgYW5kSW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgZ3JvdXBJbmRleDogbnVtYmVyO1xuXG4gIC8vIFRoaXMgY29tcG9uZW50IGNhbiBlaXRoZXIgYmUgZGlyZWN0bHkgaG9zdGVkIGFzIGEgaG9zdCB0byBhIGNvbmRpdGlvbiwgb3IgaXQgY2FuIGJlIHBhcnQgb2YgYSBjb25kaXRpb24gZ3JvdXAgd2l0aGluIGEgY3JpdGVyaWEgYnVpbGRlci5cbiAgLy8gSW4gdGhlIGZvcm1lciBjYXNlLCBjb25maWcgd2lsbCBjb21lIGZyb20gaW5wdXRzLCBhbmQgd2Ugd2lsbCBpbnN0YW50aWF0ZSBvdXIgb3duIFF1ZXJ5QnVpbGRlclNlcnZpY2UuIEluIHRoZSBsYXR0ZXIsIGl0IGNvbWVzIGZyb21cbiAgLy8gdGhlIFF1ZXJ5QnVpbGRlclNlcnZpY2UuXG4gIGlucHV0Q29uZmlnID0gaW5wdXQ8UXVlcnlCdWlsZGVyQ29uZmlnPihudWxsLCB7IGFsaWFzOiAnY29uZmlnJ30pO1xuICBpbnB1dEVkaXRUeXBlRm4gPSBpbnB1dDwoZmllbGQ6IEJhc2VGaWVsZERlZikgPT4gc3RyaW5nPihudWxsLCB7IGFsaWFzOiAnZWRpdFR5cGVGbid9KTtcbiAgcHJpdmF0ZSBjb25maWcgPSBjb21wdXRlZDxRdWVyeUJ1aWxkZXJDb25maWc+KCgpID0+IHtcbiAgICBpZiAodGhpcy5pc0NvbmRpdGlvbkhvc3QpIHtcbiAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5jb25maWcgPSB0aGlzLmlucHV0Q29uZmlnKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuY29uZmlnO1xuICB9KTtcbiAgcHJpdmF0ZSBlZGl0VHlwZUZuID0gY29tcHV0ZWQ8KGZpZWxkOiBCYXNlRmllbGREZWYpID0+IHN0cmluZz4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzQ29uZGl0aW9uSG9zdCkge1xuICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmVkaXRUeXBlRm4gPSB0aGlzLmlucHV0RWRpdFR5cGVGbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmVkaXRUeXBlRm47XG4gIH0pO1xuXG4gIHB1YmxpYyBwYXJlbnRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBmaWVsZENvbmZpZzogRmllbGRDb25maWc8QmFzZUZpZWxkRGVmPjtcbiAgcHVibGljIHNlYXJjaGVzITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVzdWx0cyQ6IFByb21pc2U8YW55W10+O1xuICBwdWJsaWMgc2VhcmNoVGVybTogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgcHVibGljIGZpZWxkRGlzcGxheVdpdGg7XG4gIHB1YmxpYyBkaXNwbGF5SWNvbjogc3RyaW5nO1xuXG4gIHB1YmxpYyBzdGF0aWNGaWVsZFNlbGVjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuc3RhdGljRmllbGRTZWxlY3Rpb24pO1xuICBwcml2YXRlIF9sYXN0Q29udGV4dDogYW55ID0ge307XG4gIEBIb3N0QmluZGluZygnY2xhc3MuY29uZGl0aW9uLWhvc3QnKVxuICBwdWJsaWMgaXNDb25kaXRpb25Ib3N0ID0gZmFsc2U7XG5cbiAgcHVibGljIGdyaWRDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRpY0ZpZWxkU2VsZWN0aW9uKCkpIHtcbiAgICAgIHJldHVybiAnMTNyZW0gMWZyJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RDb2x1bW5XaWR0aCA9IHRoaXMuaXNGaXJzdCgpID8gJzIwcmVtJyA6ICcxNnJlbSc7XG4gICAgICByZXR1cm4gYCR7Zmlyc3RDb2x1bW5XaWR0aH0gMTNyZW0gMWZyYDtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbGFiZWxzOiBOb3ZvTGFiZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHF1ZXJ5QnVpbGRlclNlcnZpY2U6IFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICApIHtcbiAgICBpZiAoIXF1ZXJ5QnVpbGRlclNlcnZpY2UuY29tcG9uZW50SG9zdCkge1xuICAgICAgcXVlcnlCdWlsZGVyU2VydmljZS5jb21wb25lbnRIb3N0ID0gdGhpcztcbiAgICAgIHRoaXMuaXNDb25kaXRpb25Ib3N0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ3JvdXBJbmRleCA9IDA7XG4gICAgICB0aGlzLmFuZEluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhcmVudEZvcm0gPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5wYXJlbnRGb3JtLmNvbnRyb2xzLmZpZWxkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMudXBkYXRlRmllbGRTZWxlY3Rpb24oKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuaW5wdXRDb25maWc/LnByZXZpb3VzVmFsdWU/LnN0YXRpY0ZpZWxkU2VsZWN0aW9uICYmXG4gICAgICBjaGFuZ2VzLmlucHV0Q29uZmlnLnByZXZpb3VzVmFsdWUuc3RhdGljRmllbGRTZWxlY3Rpb24gIT09IGNoYW5nZXMuaW5wdXRDb25maWcuY3VycmVudFZhbHVlLnN0YXRpY0ZpZWxkU2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMucGFyZW50Rm9ybS5jb250cm9scy5maWVsZC5zZXRWYWx1ZShjaGFuZ2VzLmlucHV0Q29uZmlnLmN1cnJlbnRWYWx1ZS5zdGF0aWNGaWVsZFNlbGVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuY29uZmlnKCk/LmZpZWxkcyB8fCBbXTtcbiAgICBmaWVsZHMubGVuZ3RoICYmIHRoaXMuY2hhbmdlRmllbGRPcHRpb25zKGZpZWxkc1swXSk7XG4gICAgdGhpcy5zZWFyY2hlcyA9IHRoaXMuc2VhcmNoVGVybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLnJlc3VsdHMkID0gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICB0aGlzLmZpZWxkQ29uZmlnLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIChmKSA9PiBmLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtLnRvTG93ZXJDYXNlKCkpIHx8IGYubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtLnZhbHVlPy5maWVsZCAhPT0gbnVsbCkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLnVwZGF0ZUZpZWxkU2VsZWN0aW9uKCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoZXMudW5zdWJzY3JpYmUoKTtcbiAgICAvLyBDbGVhciBhbGwgb3V0bGV0cyBhbmQgTWFwc1xuICAgIFt0aGlzLl9vcGVyYXRvck91dGxldC52aWV3Q29udGFpbmVyLCB0aGlzLl9pbnB1dE91dGxldC52aWV3Q29udGFpbmVyXS5mb3JFYWNoKChkZWYpID0+IHtcbiAgICAgIGRlZi5jbGVhcigpO1xuICAgIH0pO1xuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgQ29uZGl0aW9ucyBcIkZpZWxkXCIgT3B0aW9ucyB0byBDaGFuZ2UgYmFzZSBvbiBuZXcgU2NvcGVcbiAgICogQHBhcmFtIGZpZWxkQ29uZmlnXG4gICAqL1xuICBjaGFuZ2VGaWVsZE9wdGlvbnMoZmllbGRDb25maWc6IEZpZWxkQ29uZmlnPEJhc2VGaWVsZERlZj4pIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnID0gZmllbGRDb25maWc7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLnJlc3VsdHMkID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZmllbGRDb25maWcub3B0aW9ucyk7XG4gIH1cblxuICBnZXRGaWVsZCgpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucGFyZW50Rm9ybT8udmFsdWU/LmZpZWxkO1xuICAgIGlmICghZmllbGQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmZpZWxkQ29uZmlnLmZpbmQoZmllbGQpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdEZpZWxkKCkge1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRDb25maWcub3B0aW9ucztcbiAgICBpZiAoZmllbGRzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmaWVsZHNbMF0ubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB1cGRhdGVGaWVsZFNlbGVjdGlvbigpIHtcbiAgICBjb25zdCBmaWVsZENvbmYgPSB0aGlzLmdldEZpZWxkKCk7XG4gICAgaWYgKCFmaWVsZENvbmYpIHtcbiAgICAgIHRoaXMucGFyZW50Rm9ybS5nZXQoJ2ZpZWxkJykuc2V0VmFsdWUodGhpcy5nZXREZWZhdWx0RmllbGQoKSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmllbGREaXNwbGF5V2l0aCA9ICgpID0+IGZpZWxkQ29uZi5sYWJlbCB8fCBmaWVsZENvbmYubmFtZTtcbiAgICAgIHRoaXMuZGlzcGxheUljb24gPSBmaWVsZENvbmYuaWNvbiB8fCBudWxsO1xuICAgIH1cbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnBhcmVudEZvcm0udmFsdWU7XG5cbiAgICBpZiAodGhpcy5fbGFzdENvbnRleHQuZmllbGQgIT09IGZpZWxkKSB7XG4gICAgICBpZiAodGhpcy5fbGFzdENvbnRleHQuZmllbGQpIHtcbiAgICAgICAgLy8gb25seSBjbGVhcmluZyBvcGVyYXRvci92YWx1ZSBpZiBmaWVsZCB3YXMgcHJldmlvdXNseSBkZWZpbmVkIHNvIHdlIGNhbiBwcmVsb2FkIHZhbHVlcyBvbnRvIHRoZSBmb3JtXG4gICAgICAgIHRoaXMucGFyZW50Rm9ybS5nZXQoJ3ZhbHVlJykuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIHRoaXMucGFyZW50Rm9ybS5nZXQoJ29wZXJhdG9yJykuc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZUZpZWxkVGVtcGxhdGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdENvbnRleHQgPSB7IC4uLnRoaXMucGFyZW50Rm9ybS52YWx1ZSB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRGVmaW5pdGlvbkZvckZpZWxkKGZpZWxkKSB7XG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuO1xuICAgIGNvbnN0IGVkaXRUeXBlID0gdGhpcy5lZGl0VHlwZUZuKCkoZmllbGQpO1xuICAgIC8vIERvbid0IGxvb2sgYXQgZGF0YVNwZWNpYWxpemF0aW9uIGl0IGlzIG5vIGdvb2QsIHRoaXMgbWlzc2VzIGN1cnJlbmN5LCBhbmQgcGVyY2VudFxuICAgIGNvbnN0IHsgbmFtZSB9ID0gZmllbGQ7XG4gICAgY29uc3QgZmllbGREZWZzQnlOYW1lID0gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmdldEZpZWxkRGVmc0J5TmFtZSgpO1xuICAgIC8vIENoZWNrIEZpZWxkcyBieSBwcmlvcml0eSBmb3IgbWF0Y2ggRmllbGQgRGVmaW5pdGlvblxuICAgIGNvbnN0IGtleSA9IFtuYW1lLCBlZGl0VHlwZT8udG9VcHBlckNhc2UoKSwgJ0RFRkFVTFQnXS5maW5kKChpdCkgPT4gZmllbGREZWZzQnlOYW1lLmhhcyhpdCkpO1xuICAgIHJldHVybiBmaWVsZERlZnNCeU5hbWUuZ2V0KGtleSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkVGVtcGxhdGVzKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmZpbmREZWZpbml0aW9uRm9yRmllbGQodGhpcy5nZXRGaWVsZCgpKTtcblxuICAgIGlmICghdGhpcy5wYXJlbnRGb3JtLmdldCgnb3BlcmF0b3InKS52YWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRGb3JtLmdldCgnb3BlcmF0b3InKS5zZXRWYWx1ZShkZWZpbml0aW9uLmRlZmF1bHRPcGVyYXRvcik7XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVGaWVsZE9wZXJhdG9ycyhkZWZpbml0aW9uKTtcbiAgICB0aGlzLmNyZWF0ZUZpZWxkSW5wdXQoZGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkT3BlcmF0b3JzKGRlZmluaXRpb246IEJhc2VDb25kaXRpb25GaWVsZERlZikge1xuICAgIHRoaXMuX29wZXJhdG9yT3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgY29uc3QgY29udGV4dCA9IHsgJGltcGxpY2l0OiB0aGlzLnBhcmVudEZvcm0sIGZpZWxkTWV0YTogdGhpcy5nZXRGaWVsZCgpIH07XG4gICAgICB0aGlzLl9vcGVyYXRvck91dGxldC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhkZWZpbml0aW9uLmZpZWxkT3BlcmF0b3JzLnRlbXBsYXRlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkSW5wdXQoZGVmaW5pdGlvbjogQmFzZUNvbmRpdGlvbkZpZWxkRGVmKSB7XG4gICAgdGhpcy5faW5wdXRPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0geyAkaW1wbGljaXQ6IHRoaXMucGFyZW50Rm9ybSwgZmllbGRNZXRhOiB0aGlzLmdldEZpZWxkKCksIHZpZXdJbmRleDogdGhpcy5ncm91cEluZGV4LnRvU3RyaW5nKCkgKyB0aGlzLmFuZEluZGV4LnRvU3RyaW5nKCkgfTtcbiAgICAgIHRoaXMuX2lucHV0T3V0bGV0LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGRlZmluaXRpb24uZmllbGRJbnB1dC50ZW1wbGF0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cInBhcmVudEZvcm1cIj5cbiAgPG5vdm8tZ3JpZCBnYXA9XCIxcmVtXCIgW2NvbHVtbnNdPVwiZ3JpZENvbHVtbnMoKVwiIGFsaWduPVwiZW5kXCI+XG4gICAgPG5vdm8tZmllbGQgY2xhc3M9XCJjb25kaXRpb24tZmllbGRcIiAqbmdJZj1cIiFzdGF0aWNGaWVsZFNlbGVjdGlvbigpXCI+XG4gICAgICA8bm92by1zZWxlY3RcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVscy5jaG9vc2VBRmllbGRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaWVsZFwiXG4gICAgICAgIChvblNlbGVjdCk9XCJ1cGRhdGVGaWVsZFNlbGVjdGlvbigpXCJcbiAgICAgICAgb3ZlcmxheVdpZHRoPVwiMjRyZW1cIlxuICAgICAgICBvdmVybGF5SGVpZ2h0PVwiMjByZW1cIlxuICAgICAgICBbZGlzcGxheVdpdGhdPVwiZmllbGREaXNwbGF5V2l0aFwiXG4gICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCIxNjBcIlxuICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwiKGlzRmlyc3QoKSB8fCBpc0NvbmRpdGlvbkhvc3QpID8gMjAwIDogMTYwXCJcbiAgICAgICAgW2Rpc3BsYXlJY29uXT1cImRpc3BsYXlJY29uXCI+XG4gICAgICAgIDxub3ZvLW9wdGdyb3VwIGNsYXNzPVwiZmlsdGVyLXNlYXJjaC1yZXN1bHRzXCI+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uPlxuICAgICAgICAgICAgPG5vdm8tc2VsZWN0LXNlYXJjaCBbZm9ybUNvbnRyb2xdPVwic2VhcmNoVGVybVwiIFtjbGVhclNlYXJjaElucHV0XT1cImZhbHNlXCI+PC9ub3ZvLXNlbGVjdC1zZWFyY2g+XG4gICAgICAgICAgPC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVzdWx0cyQgfCBhc3luYyBhcyByZXN1bHRzOyBlbHNlIGxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXN1bHRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8bm92by1vcHRpb24gKm5nRm9yPVwibGV0IGZpZWxkIG9mIHJlc3VsdHNcIiB2YWx1ZT1cInt7IGZpZWxkLm5hbWUgfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJmaWVsZC5uYW1lXCI+XG4gICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfHwgZmllbGQubmFtZSB9fVxuICAgICAgICAgICAgICA8L25vdm8tb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbm92by1vcHRncm91cD5cbiAgICAgIDwvbm92by1zZWxlY3Q+XG4gICAgPC9ub3ZvLWZpZWxkPlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbmRpdGlvbi1vcGVyYXRvclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBjb25kaXRpb25PcGVyYXRvck91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb25kaXRpb24taW5wdXRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgY29uZGl0aW9uSW5wdXRPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbm92by1ncmlkPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Zvcm0+XG5cbjxub3ZvLWNvbmRpdGlvbi10ZW1wbGF0ZXMgKm5nSWY9XCJpc0NvbmRpdGlvbkhvc3RcIj48L25vdm8tY29uZGl0aW9uLXRlbXBsYXRlcz5cblxuPCEtLSBFTVBUWSBTVEFURSBURU1QTEFURSAtLT5cbjwhLS0gPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgPG5vdm8tbm9uLWlkZWFsLXN0YXRlPlxuICAgIDxub3ZvLWljb24gc2l6ZT1cInhsXCIgY29sb3I9XCJncmFwZWZydWl0XCI+c2VhcmNoPC9ub3ZvLWljb24+XG4gICAgPG5vdm8tdGl0bGU+Tm8gcmVzdWx0cyBmb3VuZC48L25vdm8tdGl0bGU+XG4gICAgPG5vdm8tdGV4dD5Zb3VyIHNlYXJjaCBkaWRuJ3QgZmluZCBhbnl0aGluZy4gVHJ5IHNlYXJjaGluZyBmb3Igc29tZXRoaW5nIGVsc2UuPC9ub3ZvLXRleHQ+XG4gIDwvbm92by1ub24taWRlYWwtc3RhdGU+XG48L25nLXRlbXBsYXRlPiAtLT5cblxuPCEtLSBMT0FESU5HIFRFTVBMQVRFIC0tPlxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8bm92by1sb2FkaW5nPjwvbm92by1sb2FkaW5nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvcXVlcnktYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBSUwsUUFBUSxFQUVSLFFBQVEsRUFDUixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixLQUFLLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFHakU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFtQixhQUErQixFQUFTLFVBQXNCO1FBQTlELGtCQUFhLEdBQWIsYUFBYSxD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O3dCQUNyRjs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDOzRCQUMvRSxVQUFVLEVBQUUsQ0FBQyxZQUE4QixFQUFFLG1CQUF5QyxFQUFFLEVBQUU7Z0NBQ3hGLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29DQUN6QixtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dDQUM5RCxDQUFDO2dDQUNELE9BQU8sbUJBQW1CLENBQUM7NEJBQzdCLENBQUM7eUJBQ0Y7cUJBQ0YsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07c0xBR08sZUFBZTtzQkFBcEUsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0QsWUFBWTtzQkFBOUQsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXhDLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkErQkMsZUFBZTtzQkFEckIsV0FBVzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBTa2lwU2VsZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBjb21wdXRlZCxcbiAgaW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTm92b0xhYmVsU2VydmljZSB9IGZyb20gJ25vdm8tZWxlbWVudHMvc2VydmljZXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmFzZUNvbmRpdGlvbkZpZWxkRGVmIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci5kaXJlY3RpdmVzJztcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlckNvbmZpZywgUXVlcnlCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOT1ZPX0NPTkRJVElPTl9CVUlMREVSIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci50b2tlbnMnO1xuaW1wb3J0IHsgQWRkcmVzc0NyaXRlcmlhQ29uZmlnLCBCYXNlRmllbGREZWYsIEZpZWxkQ29uZmlnLCBRdWVyeUZpbHRlck91dGxldCB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIudHlwZXMnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgaGFuZGxlIGZvciB0aGUgdGFibGUgdG8gZ3JhYiB0aGUgdmlldyBjb250YWluZXIncyBuZy1jb250YWluZXIgdG8gaW5zZXJ0IGRhdGEgcm93cy5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2NvbmRpdGlvbklucHV0T3V0bGV0XScgfSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25JbnB1dE91dGxldCBpbXBsZW1lbnRzIFF1ZXJ5RmlsdGVyT3V0bGV0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIGEgaGFuZGxlIGZvciB0aGUgdGFibGUgdG8gZ3JhYiB0aGUgdmlldyBjb250YWluZXIncyBuZy1jb250YWluZXIgdG8gaW5zZXJ0IGRhdGEgcm93cy5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2NvbmRpdGlvbk9wZXJhdG9yT3V0bGV0XScgfSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25PcGVyYXRvck91dGxldCBpbXBsZW1lbnRzIFF1ZXJ5RmlsdGVyT3V0bGV0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdub3ZvLWNvbmRpdGlvbi1idWlsZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOT1ZPX0NPTkRJVElPTl9CVUlMREVSLCB1c2VFeGlzdGluZzogQ29uZGl0aW9uQnVpbGRlckNvbXBvbmVudCB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICAgICBkZXBzOiBbTm92b0xhYmVsU2VydmljZSwgW25ldyBTa2lwU2VsZigpLCBuZXcgT3B0aW9uYWwoKSwgUXVlcnlCdWlsZGVyU2VydmljZV1dLFxuICAgICAgdXNlRmFjdG9yeTogKGxhYmVsU2VydmljZTogTm92b0xhYmVsU2VydmljZSwgcXVlcnlCdWlsZGVyU2VydmljZT86IFF1ZXJ5QnVpbGRlclNlcnZpY2UpID0+IHtcbiAgICAgICAgaWYgKCFxdWVyeUJ1aWxkZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgcXVlcnlCdWlsZGVyU2VydmljZSA9IG5ldyBRdWVyeUJ1aWxkZXJTZXJ2aWNlKGxhYmVsU2VydmljZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5QnVpbGRlclNlcnZpY2U7XG4gICAgICB9XG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uQnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKENvbmRpdGlvbk9wZXJhdG9yT3V0bGV0LCB7IHN0YXRpYzogdHJ1ZSB9KSBfb3BlcmF0b3JPdXRsZXQ6IENvbmRpdGlvbk9wZXJhdG9yT3V0bGV0O1xuICBAVmlld0NoaWxkKENvbmRpdGlvbklucHV0T3V0bGV0LCB7IHN0YXRpYzogdHJ1ZSB9KSBfaW5wdXRPdXRsZXQ6IENvbmRpdGlvbklucHV0T3V0bGV0O1xuXG4gIEBJbnB1dCgpIGxhYmVsOiBhbnk7XG4gIGlzRmlyc3QgPSBpbnB1dChmYWxzZSk7XG4gIEBJbnB1dCgpIGFuZEluZGV4OiBudW1iZXI7XG4gIEBJbnB1dCgpIGdyb3VwSW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgYWRkcmVzc0NvbmZpZzogQWRkcmVzc0NyaXRlcmlhQ29uZmlnO1xuXG4gIC8vIFRoaXMgY29tcG9uZW50IGNhbiBlaXRoZXIgYmUgZGlyZWN0bHkgaG9zdGVkIGFzIGEgaG9zdCB0byBhIGNvbmRpdGlvbiwgb3IgaXQgY2FuIGJlIHBhcnQgb2YgYSBjb25kaXRpb24gZ3JvdXAgd2l0aGluIGEgY3JpdGVyaWEgYnVpbGRlci5cbiAgLy8gSW4gdGhlIGZvcm1lciBjYXNlLCBjb25maWcgd2lsbCBjb21lIGZyb20gaW5wdXRzLCBhbmQgd2Ugd2lsbCBpbnN0YW50aWF0ZSBvdXIgb3duIFF1ZXJ5QnVpbGRlclNlcnZpY2UuIEluIHRoZSBsYXR0ZXIsIGl0IGNvbWVzIGZyb21cbiAgLy8gdGhlIFF1ZXJ5QnVpbGRlclNlcnZpY2UuXG4gIGlucHV0Q29uZmlnID0gaW5wdXQ8UXVlcnlCdWlsZGVyQ29uZmlnPihudWxsLCB7IGFsaWFzOiAnY29uZmlnJ30pO1xuICBpbnB1dEVkaXRUeXBlRm4gPSBpbnB1dDwoZmllbGQ6IEJhc2VGaWVsZERlZikgPT4gc3RyaW5nPihudWxsLCB7IGFsaWFzOiAnZWRpdFR5cGVGbid9KTtcbiAgcHJpdmF0ZSBjb25maWcgPSBjb21wdXRlZDxRdWVyeUJ1aWxkZXJDb25maWc+KCgpID0+IHtcbiAgICBpZiAodGhpcy5pc0NvbmRpdGlvbkhvc3QpIHtcbiAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5jb25maWcgPSB0aGlzLmlucHV0Q29uZmlnKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuY29uZmlnO1xuICB9KTtcbiAgcHJpdmF0ZSBlZGl0VHlwZUZuID0gY29tcHV0ZWQ8KGZpZWxkOiBCYXNlRmllbGREZWYpID0+IHN0cmluZz4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzQ29uZGl0aW9uSG9zdCkge1xuICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmVkaXRUeXBlRm4gPSB0aGlzLmlucHV0RWRpdFR5cGVGbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmVkaXRUeXBlRm47XG4gIH0pO1xuXG4gIHB1YmxpYyBwYXJlbnRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBmaWVsZENvbmZpZzogRmllbGRDb25maWc8QmFzZUZpZWxkRGVmPjtcbiAgcHVibGljIHNlYXJjaGVzITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVzdWx0cyQ6IFByb21pc2U8YW55W10+O1xuICBwdWJsaWMgc2VhcmNoVGVybTogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgcHVibGljIGZpZWxkRGlzcGxheVdpdGg7XG4gIHB1YmxpYyBkaXNwbGF5SWNvbjogc3RyaW5nO1xuXG4gIHB1YmxpYyBzdGF0aWNGaWVsZFNlbGVjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuc3RhdGljRmllbGRTZWxlY3Rpb24pO1xuICBwcml2YXRlIF9sYXN0Q29udGV4dDogYW55ID0ge307XG4gIEBIb3N0QmluZGluZygnY2xhc3MuY29uZGl0aW9uLWhvc3QnKVxuICBwdWJsaWMgaXNDb25kaXRpb25Ib3N0ID0gZmFsc2U7XG5cbiAgcHVibGljIGdyaWRDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRpY0ZpZWxkU2VsZWN0aW9uKCkpIHtcbiAgICAgIHJldHVybiAnMTNyZW0gMWZyJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RDb2x1bW5XaWR0aCA9IHRoaXMuaXNGaXJzdCgpID8gJzIwcmVtJyA6ICcxNnJlbSc7XG4gICAgICByZXR1cm4gYCR7Zmlyc3RDb2x1bW5XaWR0aH0gMTNyZW0gMWZyYDtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbGFiZWxzOiBOb3ZvTGFiZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHF1ZXJ5QnVpbGRlclNlcnZpY2U6IFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICApIHtcbiAgICBpZiAoIXF1ZXJ5QnVpbGRlclNlcnZpY2UuY29tcG9uZW50SG9zdCkge1xuICAgICAgcXVlcnlCdWlsZGVyU2VydmljZS5jb21wb25lbnRIb3N0ID0gdGhpcztcbiAgICAgIHRoaXMuaXNDb25kaXRpb25Ib3N0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ3JvdXBJbmRleCA9IDA7XG4gICAgICB0aGlzLmFuZEluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhcmVudEZvcm0gPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5wYXJlbnRGb3JtLmNvbnRyb2xzLmZpZWxkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMudXBkYXRlRmllbGRTZWxlY3Rpb24oKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuaW5wdXRDb25maWc/LnByZXZpb3VzVmFsdWU/LnN0YXRpY0ZpZWxkU2VsZWN0aW9uICYmXG4gICAgICBjaGFuZ2VzLmlucHV0Q29uZmlnLnByZXZpb3VzVmFsdWUuc3RhdGljRmllbGRTZWxlY3Rpb24gIT09IGNoYW5nZXMuaW5wdXRDb25maWcuY3VycmVudFZhbHVlLnN0YXRpY0ZpZWxkU2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMucGFyZW50Rm9ybS5jb250cm9scy5maWVsZC5zZXRWYWx1ZShjaGFuZ2VzLmlucHV0Q29uZmlnLmN1cnJlbnRWYWx1ZS5zdGF0aWNGaWVsZFNlbGVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuY29uZmlnKCk/LmZpZWxkcyB8fCBbXTtcbiAgICBmaWVsZHMubGVuZ3RoICYmIHRoaXMuY2hhbmdlRmllbGRPcHRpb25zKGZpZWxkc1swXSk7XG4gICAgdGhpcy5zZWFyY2hlcyA9IHRoaXMuc2VhcmNoVGVybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLnJlc3VsdHMkID0gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICB0aGlzLmZpZWxkQ29uZmlnLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIChmKSA9PiBmLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtLnRvTG93ZXJDYXNlKCkpIHx8IGYubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtLnZhbHVlPy5maWVsZCAhPT0gbnVsbCkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLnVwZGF0ZUZpZWxkU2VsZWN0aW9uKCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoZXMudW5zdWJzY3JpYmUoKTtcbiAgICAvLyBDbGVhciBhbGwgb3V0bGV0cyBhbmQgTWFwc1xuICAgIFt0aGlzLl9vcGVyYXRvck91dGxldC52aWV3Q29udGFpbmVyLCB0aGlzLl9pbnB1dE91dGxldC52aWV3Q29udGFpbmVyXS5mb3JFYWNoKChkZWYpID0+IHtcbiAgICAgIGRlZi5jbGVhcigpO1xuICAgIH0pO1xuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgQ29uZGl0aW9ucyBcIkZpZWxkXCIgT3B0aW9ucyB0byBDaGFuZ2UgYmFzZSBvbiBuZXcgU2NvcGVcbiAgICogQHBhcmFtIGZpZWxkQ29uZmlnXG4gICAqL1xuICBjaGFuZ2VGaWVsZE9wdGlvbnMoZmllbGRDb25maWc6IEZpZWxkQ29uZmlnPEJhc2VGaWVsZERlZj4pIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnID0gZmllbGRDb25maWc7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLnJlc3VsdHMkID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZmllbGRDb25maWcub3B0aW9ucyk7XG4gIH1cblxuICBnZXRGaWVsZCgpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucGFyZW50Rm9ybT8udmFsdWU/LmZpZWxkO1xuICAgIGlmICghZmllbGQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmZpZWxkQ29uZmlnLmZpbmQoZmllbGQpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdEZpZWxkKCkge1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRDb25maWcub3B0aW9ucztcbiAgICBpZiAoZmllbGRzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmaWVsZHNbMF0ubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB1cGRhdGVGaWVsZFNlbGVjdGlvbigpIHtcbiAgICBjb25zdCBmaWVsZENvbmYgPSB0aGlzLmdldEZpZWxkKCk7XG4gICAgaWYgKCFmaWVsZENvbmYpIHtcbiAgICAgIHRoaXMucGFyZW50Rm9ybS5nZXQoJ2ZpZWxkJykuc2V0VmFsdWUodGhpcy5nZXREZWZhdWx0RmllbGQoKSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmllbGREaXNwbGF5V2l0aCA9ICgpID0+IGZpZWxkQ29uZi5sYWJlbCB8fCBmaWVsZENvbmYubmFtZTtcbiAgICAgIHRoaXMuZGlzcGxheUljb24gPSBmaWVsZENvbmYuaWNvbiB8fCBudWxsO1xuICAgIH1cbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnBhcmVudEZvcm0udmFsdWU7XG5cbiAgICBpZiAodGhpcy5fbGFzdENvbnRleHQuZmllbGQgIT09IGZpZWxkKSB7XG4gICAgICBpZiAodGhpcy5fbGFzdENvbnRleHQuZmllbGQpIHtcbiAgICAgICAgLy8gb25seSBjbGVhcmluZyBvcGVyYXRvci92YWx1ZSBpZiBmaWVsZCB3YXMgcHJldmlvdXNseSBkZWZpbmVkIHNvIHdlIGNhbiBwcmVsb2FkIHZhbHVlcyBvbnRvIHRoZSBmb3JtXG4gICAgICAgIHRoaXMucGFyZW50Rm9ybS5nZXQoJ3ZhbHVlJykuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIHRoaXMucGFyZW50Rm9ybS5nZXQoJ29wZXJhdG9yJykuc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZUZpZWxkVGVtcGxhdGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdENvbnRleHQgPSB7IC4uLnRoaXMucGFyZW50Rm9ybS52YWx1ZSB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRGVmaW5pdGlvbkZvckZpZWxkKGZpZWxkKSB7XG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuO1xuICAgIGNvbnN0IGVkaXRUeXBlID0gdGhpcy5lZGl0VHlwZUZuKCkoZmllbGQpO1xuICAgIC8vIERvbid0IGxvb2sgYXQgZGF0YVNwZWNpYWxpemF0aW9uIGl0IGlzIG5vIGdvb2QsIHRoaXMgbWlzc2VzIGN1cnJlbmN5LCBhbmQgcGVyY2VudFxuICAgIGNvbnN0IHsgbmFtZSB9ID0gZmllbGQ7XG4gICAgY29uc3QgZmllbGREZWZzQnlOYW1lID0gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmdldEZpZWxkRGVmc0J5TmFtZSgpO1xuICAgIC8vIENoZWNrIEZpZWxkcyBieSBwcmlvcml0eSBmb3IgbWF0Y2ggRmllbGQgRGVmaW5pdGlvblxuICAgIGNvbnN0IGtleSA9IFtuYW1lLCBlZGl0VHlwZT8udG9VcHBlckNhc2UoKSwgJ0RFRkFVTFQnXS5maW5kKChpdCkgPT4gZmllbGREZWZzQnlOYW1lLmhhcyhpdCkpO1xuICAgIHJldHVybiBmaWVsZERlZnNCeU5hbWUuZ2V0KGtleSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkVGVtcGxhdGVzKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmZpbmREZWZpbml0aW9uRm9yRmllbGQodGhpcy5nZXRGaWVsZCgpKTtcblxuICAgIGlmICghdGhpcy5wYXJlbnRGb3JtLmdldCgnb3BlcmF0b3InKS52YWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRGb3JtLmdldCgnb3BlcmF0b3InKS5zZXRWYWx1ZShkZWZpbml0aW9uLmRlZmF1bHRPcGVyYXRvcik7XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVGaWVsZE9wZXJhdG9ycyhkZWZpbml0aW9uKTtcbiAgICB0aGlzLmNyZWF0ZUZpZWxkSW5wdXQoZGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkT3BlcmF0b3JzKGRlZmluaXRpb246IEJhc2VDb25kaXRpb25GaWVsZERlZikge1xuICAgIHRoaXMuX29wZXJhdG9yT3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgY29uc3QgY29udGV4dCA9IHsgJGltcGxpY2l0OiB0aGlzLnBhcmVudEZvcm0sIGZpZWxkTWV0YTogdGhpcy5nZXRGaWVsZCgpIH07XG4gICAgICB0aGlzLl9vcGVyYXRvck91dGxldC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhkZWZpbml0aW9uLmZpZWxkT3BlcmF0b3JzLnRlbXBsYXRlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkSW5wdXQoZGVmaW5pdGlvbjogQmFzZUNvbmRpdGlvbkZpZWxkRGVmKSB7XG4gICAgdGhpcy5faW5wdXRPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0geyAkaW1wbGljaXQ6IHRoaXMucGFyZW50Rm9ybSwgZmllbGRNZXRhOiB0aGlzLmdldEZpZWxkKCksIHZpZXdJbmRleDogdGhpcy5ncm91cEluZGV4LnRvU3RyaW5nKCkgKyB0aGlzLmFuZEluZGV4LnRvU3RyaW5nKCkgfTtcbiAgICAgIHRoaXMuX2lucHV0T3V0bGV0LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGRlZmluaXRpb24uZmllbGRJbnB1dC50ZW1wbGF0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cInBhcmVudEZvcm1cIj5cbiAgPG5vdm8tZ3JpZCBnYXA9XCIxcmVtXCIgW2NvbHVtbnNdPVwiZ3JpZENvbHVtbnMoKVwiIGFsaWduPVwiZW5kXCI+XG4gICAgPG5vdm8tZmllbGQgY2xhc3M9XCJjb25kaXRpb24tZmllbGRcIiAqbmdJZj1cIiFzdGF0aWNGaWVsZFNlbGVjdGlvbigpXCI+XG4gICAgICA8bm92by1zZWxlY3RcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVscy5jaG9vc2VBRmllbGRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaWVsZFwiXG4gICAgICAgIChvblNlbGVjdCk9XCJ1cGRhdGVGaWVsZFNlbGVjdGlvbigpXCJcbiAgICAgICAgb3ZlcmxheVdpZHRoPVwiMjRyZW1cIlxuICAgICAgICBvdmVybGF5SGVpZ2h0PVwiMjByZW1cIlxuICAgICAgICBbZGlzcGxheVdpdGhdPVwiZmllbGREaXNwbGF5V2l0aFwiXG4gICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCIxNjBcIlxuICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwiKGlzRmlyc3QoKSB8fCBpc0NvbmRpdGlvbkhvc3QpID8gMjAwIDogMTYwXCJcbiAgICAgICAgW2Rpc3BsYXlJY29uXT1cImRpc3BsYXlJY29uXCI+XG4gICAgICAgIDxub3ZvLW9wdGdyb3VwIGNsYXNzPVwiZmlsdGVyLXNlYXJjaC1yZXN1bHRzXCI+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uPlxuICAgICAgICAgICAgPG5vdm8tc2VsZWN0LXNlYXJjaCBbZm9ybUNvbnRyb2xdPVwic2VhcmNoVGVybVwiIFtjbGVhclNlYXJjaElucHV0XT1cImZhbHNlXCI+PC9ub3ZvLXNlbGVjdC1zZWFyY2g+XG4gICAgICAgICAgPC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVzdWx0cyQgfCBhc3luYyBhcyByZXN1bHRzOyBlbHNlIGxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXN1bHRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8bm92by1vcHRpb24gKm5nRm9yPVwibGV0IGZpZWxkIG9mIHJlc3VsdHNcIiB2YWx1ZT1cInt7IGZpZWxkLm5hbWUgfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJmaWVsZC5uYW1lXCI+XG4gICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfHwgZmllbGQubmFtZSB9fVxuICAgICAgICAgICAgICA8L25vdm8tb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbm92by1vcHRncm91cD5cbiAgICAgIDwvbm92by1zZWxlY3Q+XG4gICAgPC9ub3ZvLWZpZWxkPlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbmRpdGlvbi1vcGVyYXRvclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBjb25kaXRpb25PcGVyYXRvck91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb25kaXRpb24taW5wdXRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgY29uZGl0aW9uSW5wdXRPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbm92by1ncmlkPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Zvcm0+XG5cbjxub3ZvLWNvbmRpdGlvbi10ZW1wbGF0ZXMgKm5nSWY9XCJpc0NvbmRpdGlvbkhvc3RcIiBbYWRkcmVzc0NvbmZpZ109XCJhZGRyZXNzQ29uZmlnXCIvPlxuXG48IS0tIEVNUFRZIFNUQVRFIFRFTVBMQVRFIC0tPlxuPCEtLSA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICA8bm92by1ub24taWRlYWwtc3RhdGU+XG4gICAgPG5vdm8taWNvbiBzaXplPVwieGxcIiBjb2xvcj1cImdyYXBlZnJ1aXRcIj5zZWFyY2g8L25vdm8taWNvbj5cbiAgICA8bm92by10aXRsZT5ObyByZXN1bHRzIGZvdW5kLjwvbm92by10aXRsZT5cbiAgICA8bm92by10ZXh0PllvdXIgc2VhcmNoIGRpZG4ndCBmaW5kIGFueXRoaW5nLiBUcnkgc2VhcmNoaW5nIGZvciBzb21ldGhpbmcgZWxzZS48L25vdm8tdGV4dD5cbiAgPC9ub3ZvLW5vbi1pZGVhbC1zdGF0ZT5cbjwvbmctdGVtcGxhdGU+IC0tPlxuXG48IS0tIExPQURJTkcgVEVNUExBVEUgLS0+XG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxub3ZvLWxvYWRpbmc+PC9ub3ZvLWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,9 +1,11 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, ElementRef, input, QueryList, signal, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
2
2
  import { NovoPickerToggleElement } from 'novo-elements/elements/field';
3
3
  import { PlacesListComponent } from 'novo-elements/elements/places';
4
4
  import { NovoLabelService } from 'novo-elements/services';
5
+ import { Helpers } from 'novo-elements/utils';
6
+ import { Subscription } from 'rxjs';
7
+ import { Operator, RadiusUnits } from '../query-builder.types';
5
8
  import { AbstractConditionFieldDef } from './abstract-condition.definition';
6
- import { Operator } from '../query-builder.types';
7
9
  import * as i0 from "@angular/core";
8
10
  import * as i1 from "novo-elements/services";
9
11
  import * as i2 from "@angular/common";
@@ -12,9 +14,10 @@ import * as i4 from "novo-elements/elements/places";
12
14
  import * as i5 from "novo-elements/elements/common";
13
15
  import * as i6 from "novo-elements/elements/select";
14
16
  import * as i7 from "novo-elements/elements/field";
15
- import * as i8 from "novo-elements/elements/icon";
16
- import * as i9 from "novo-elements/elements/chips";
17
- import * as i10 from "../query-builder.directives";
17
+ import * as i8 from "novo-elements/elements/flex";
18
+ import * as i9 from "novo-elements/elements/icon";
19
+ import * as i10 from "novo-elements/elements/chips";
20
+ import * as i11 from "../query-builder.directives";
18
21
  /**
19
22
  * Handle selection of field values when a list of options is provided.
20
23
  */
@@ -23,9 +26,42 @@ export class NovoDefaultAddressConditionDef extends AbstractConditionFieldDef {
23
26
  super(labels);
24
27
  this.element = element;
25
28
  this.labels = labels;
29
+ // Static defaults
30
+ this.radiusValues = [5, 10, 20, 30, 40, 50, 100];
31
+ this.defaultRadius = 30;
32
+ // Overridable defaults
33
+ this.defaults = {
34
+ radiusEnabled: false,
35
+ radiusUnits: 'miles',
36
+ };
37
+ this.config = input();
38
+ this.radiusUnits = computed(() => this.config()?.radiusUnits || this.defaults.radiusUnits);
39
+ this.radiusEnabled = computed(() => this.config()?.radiusEnabled || this.defaults.radiusEnabled);
40
+ this.radius = signal(this.defaultRadius);
41
+ this.radiusOptions = computed(() => {
42
+ const unitsLabel = this.radiusUnits() === RadiusUnits.miles ? this.labels.miles : this.labels.km;
43
+ return this.radiusValues.map(value => ({
44
+ label: `${value.toString()} ${unitsLabel}`,
45
+ value,
46
+ }));
47
+ });
26
48
  this.defaultOperator = Operator.includeAny;
27
49
  this.chipListModel = '';
28
50
  this.term = '';
51
+ this._addressChangesSubscription = Subscription.EMPTY;
52
+ }
53
+ ngAfterViewInit() {
54
+ setTimeout(() => {
55
+ // Initialize the radius value from existing data
56
+ this.assignRadiusFromValue();
57
+ // Update the radius on address value changes
58
+ this._addressChangesSubscription = this.inputChildren.changes.subscribe(() => {
59
+ this.assignRadiusFromValue();
60
+ });
61
+ });
62
+ }
63
+ ngOnDestroy() {
64
+ this._addressChangesSubscription.unsubscribe();
29
65
  }
30
66
  onKeyup(event, viewIndex) {
31
67
  if (!["Escape" /* Key.Escape */, "Enter" /* Key.Enter */].includes(event.key)) {
@@ -68,12 +104,8 @@ export class NovoDefaultAddressConditionDef extends AbstractConditionFieldDef {
68
104
  place_id: event.place_id,
69
105
  };
70
106
  const current = this.getValue(formGroup);
71
- if (!Array.isArray(current)) {
72
- formGroup.get('value').setValue([valueToAdd]);
73
- }
74
- else {
75
- formGroup.get('value').setValue([...current, valueToAdd]);
76
- }
107
+ const updated = Array.isArray(current) ? [...current, valueToAdd] : [valueToAdd];
108
+ formGroup.get('value').setValue(this.updateRadiusInValues(formGroup, updated));
77
109
  this.inputChildren.forEach(input => {
78
110
  input.nativeElement.value = '';
79
111
  });
@@ -90,38 +122,86 @@ export class NovoDefaultAddressConditionDef extends AbstractConditionFieldDef {
90
122
  }
91
123
  this.closePlacesList(viewIndex);
92
124
  }
125
+ onRadiusSelect(formGroup, radius) {
126
+ this.radius.set(radius);
127
+ // We must dirty the form explicitly to show up as a user modification when it was done programmatically
128
+ formGroup.get('value').setValue(this.updateRadiusInValues(formGroup, this.getValue(formGroup)));
129
+ formGroup.markAsDirty();
130
+ }
131
+ assignRadiusFromValue() {
132
+ if (this.placesPicker?.model?.length) {
133
+ const addressData = this.placesPicker.model[0];
134
+ const initialRadius = addressData.radius?.value;
135
+ if (initialRadius && Helpers.isNumber(initialRadius)) {
136
+ this.radius.set(initialRadius);
137
+ }
138
+ }
139
+ }
140
+ updateRadiusInValues(formGroup, values) {
141
+ return values.map(val => ({
142
+ ...val,
143
+ radius: this.isRadiusOperatorSelected(formGroup) ? this.getRadiusData(formGroup) : undefined,
144
+ }));
145
+ }
146
+ getRadiusData(formGroup) {
147
+ return {
148
+ value: this.getRadius(formGroup),
149
+ units: this.radiusUnits(),
150
+ };
151
+ }
152
+ getRadius(formGroup) {
153
+ return this.isRadiusOperatorSelected(formGroup) ? this.radius() : undefined;
154
+ }
155
+ isRadiusOperatorSelected(formGroup) {
156
+ return formGroup.get('operator').value === 'radius';
157
+ }
93
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: NovoDefaultAddressConditionDef, deps: [{ token: i0.ElementRef }, { token: i1.NovoLabelService }], target: i0.ɵɵFactoryTarget.Component }); }
94
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: NovoDefaultAddressConditionDef, selector: "novo-address-condition-def", viewQueries: [{ propertyName: "placesPicker", first: true, predicate: ["placesPicker"], descendants: true }, { propertyName: "overlayChildren", predicate: NovoPickerToggleElement, descendants: true }, { propertyName: "inputChildren", predicate: ["addressInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.2.3", type: NovoDefaultAddressConditionDef, selector: "novo-address-condition-def", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "placesPicker", first: true, predicate: ["placesPicker"], descendants: true }, { propertyName: "overlayChildren", predicate: NovoPickerToggleElement, descendants: true }, { propertyName: "inputChildren", predicate: ["addressInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
95
160
  <ng-container novoConditionFieldDef>
96
161
  <novo-field *novoConditionOperatorsDef="let formGroup" [formGroup]="formGroup">
97
162
  <novo-select [placeholder]="labels.operator" formControlName="operator" (onSelect)="onOperatorSelect(formGroup)">
98
163
  <novo-option value="includeAny">{{ labels.includeAny }}</novo-option>
99
164
  <novo-option value="excludeAny">{{ labels.exclude }}</novo-option>
165
+ <novo-option value="radius" *ngIf="radiusEnabled()">{{ labels.radius }}</novo-option>
100
166
  </novo-select>
101
167
  </novo-field>
102
- <ng-container *novoConditionInputDef="let formGroup; viewIndex as viewIndex; fieldMeta as meta" [ngSwitch]="formGroup.value.operator" [formGroup]="formGroup">
103
- <novo-field *novoSwitchCases="['includeAny', 'excludeAny']" #novoField>
104
- <novo-chip-list [(ngModel)]="chipListModel" [ngModelOptions]="{ standalone: true }" (click)="openPlacesList(viewIndex)">
105
- <novo-chip *ngFor="let item of formGroup.get('value').value" (removed)="remove(item, formGroup, viewIndex)">
106
- <novo-text ellipsis>{{ item.formatted_address }}</novo-text>
107
- <novo-icon novoChipRemove>close</novo-icon>
108
- </novo-chip>
109
- <input
110
- novoChipInput
111
- [id]="viewIndex"
112
- [placeholder]="labels.location"
113
- (keyup)="onKeyup($event, viewIndex)"
114
- (keydown)="onKeydown($event, viewIndex)"
115
- [picker]="placesPicker"
116
- #addressInput />
117
- </novo-chip-list>
118
- <novo-picker-toggle [overlayId]="viewIndex" icon="location" novoSuffix>
119
- <google-places-list [term]="term" (select)="selectPlace($event, formGroup, viewIndex)" formControlName="value" #placesPicker></google-places-list>
120
- </novo-picker-toggle>
121
- </novo-field>
168
+ <ng-container *novoConditionInputDef="let formGroup; viewIndex as viewIndex; fieldMeta as meta" [formGroup]="formGroup">
169
+ <novo-flex justify="space-between" align="end">
170
+ <novo-field #novoRadiusField *ngIf="formGroup.value.operator === 'radius'" class="address-radius">
171
+ <novo-select
172
+ #radiusSelect [placeholder]="labels.radius"
173
+ (onSelect)="onRadiusSelect(formGroup, $event.selected)"
174
+ [value]="radius()"
175
+ [options]="radiusOptions()">
176
+ </novo-select>
177
+ </novo-field>
178
+ <novo-field #novoField class="address-location">
179
+ <novo-chip-list [(ngModel)]="chipListModel" [ngModelOptions]="{ standalone: true }" (click)="openPlacesList(viewIndex)">
180
+ <novo-chip *ngFor="let item of formGroup.get('value').value" (removed)="remove(item, formGroup, viewIndex)">
181
+ <novo-text ellipsis>{{ item.formatted_address }}</novo-text>
182
+ <novo-icon novoChipRemove>close</novo-icon>
183
+ </novo-chip>
184
+ <input
185
+ novoChipInput
186
+ [id]="viewIndex"
187
+ [placeholder]="labels.location"
188
+ (keyup)="onKeyup($event, viewIndex)"
189
+ (keydown)="onKeydown($event, viewIndex)"
190
+ [picker]="placesPicker"
191
+ #addressInput/>
192
+ </novo-chip-list>
193
+ <novo-picker-toggle [overlayId]="viewIndex" icon="location" novoSuffix>
194
+ <google-places-list
195
+ [term]="term"
196
+ (select)="selectPlace($event, formGroup, viewIndex)"
197
+ formControlName="value"
198
+ #placesPicker/>
199
+ </novo-picker-toggle>
200
+ </novo-field>
201
+ </novo-flex>
122
202
  </ng-container>
123
203
  </ng-container>
124
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.PlacesListComponent, selector: "google-places-list", inputs: ["userSettings"], outputs: ["termChange", "select"] }, { kind: "component", type: i5.NovoText, selector: "novo-text,[novo-text]", inputs: ["block"] }, { kind: "directive", type: i5.SwitchCasesDirective, selector: "[novoSwitchCases]", inputs: ["novoSwitchCases"] }, { kind: "component", type: i6.NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayIcon", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { kind: "component", type: i7.NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "customOverlayOrigin", "width"], outputs: ["valueChanges", "stateChanges"] }, { kind: "directive", type: i7.NovoFieldSuffixDirective, selector: "[novoSuffix]" }, { kind: "component", type: i7.NovoPickerToggleElement, selector: "novo-picker-toggle", inputs: ["for", "icon", "tabIndex", "aria-label", "triggerOnFocus", "overlayId", "width", "disabled"], exportAs: ["novoPickerToggle"] }, { kind: "directive", type: i7.NovoPickerDirective, selector: "input[picker]", inputs: ["picker", "autocomplete"] }, { kind: "component", type: i5.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { kind: "component", type: i8.NovoIconComponent, selector: "novo-icon", inputs: ["raised", "theme", "shape", "color", "size", "smaller", "larger", "alt", "name"] }, { kind: "component", type: i9.NovoChipElement, selector: "novo-chip, [novo-chip]", inputs: ["color", "tabIndex", "size", "type", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"] }, { kind: "directive", type: i9.NovoChipRemove, selector: "[novoChipRemove]" }, { kind: "directive", type: i9.NovoChipInput, selector: "input[novoChipInput]", inputs: ["novoChipInputAddOnBlur", "novoChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["novoChipInputTokenEnd"], exportAs: ["novoChipInput", "novoChipInputFor"] }, { kind: "component", type: i9.NovoChipList, selector: "novo-chip-list", inputs: ["errorStateMatcher", "multiple", "stacked", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["novoChipList"] }, { kind: "directive", type: i10.NovoConditionOperatorsDef, selector: "[novoConditionOperatorsDef]" }, { kind: "directive", type: i10.NovoConditionInputDef, selector: "[novoConditionInputDef]" }, { kind: "directive", type: i10.NovoConditionFieldDef, selector: "[novoConditionFieldDef]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
204
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.PlacesListComponent, selector: "google-places-list", inputs: ["userSettings"], outputs: ["termChange", "select"] }, { kind: "component", type: i5.NovoText, selector: "novo-text,[novo-text]", inputs: ["block"] }, { kind: "component", type: i6.NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayIcon", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { kind: "component", type: i7.NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "customOverlayOrigin", "width"], outputs: ["valueChanges", "stateChanges"] }, { kind: "directive", type: i7.NovoFieldSuffixDirective, selector: "[novoSuffix]" }, { kind: "component", type: i7.NovoPickerToggleElement, selector: "novo-picker-toggle", inputs: ["for", "icon", "tabIndex", "aria-label", "triggerOnFocus", "overlayId", "width", "disabled"], exportAs: ["novoPickerToggle"] }, { kind: "directive", type: i7.NovoPickerDirective, selector: "input[picker]", inputs: ["picker", "autocomplete"] }, { kind: "component", type: i5.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { kind: "component", type: i8.NovoFlexElement, selector: "novo-flex,novo-row", inputs: ["direction", "align", "justify", "wrap", "gap"] }, { kind: "component", type: i9.NovoIconComponent, selector: "novo-icon", inputs: ["raised", "theme", "shape", "color", "size", "smaller", "larger", "alt", "name"] }, { kind: "component", type: i10.NovoChipElement, selector: "novo-chip, [novo-chip]", inputs: ["color", "tabIndex", "size", "type", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"] }, { kind: "directive", type: i10.NovoChipRemove, selector: "[novoChipRemove]" }, { kind: "directive", type: i10.NovoChipInput, selector: "input[novoChipInput]", inputs: ["novoChipInputAddOnBlur", "novoChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["novoChipInputTokenEnd"], exportAs: ["novoChipInput", "novoChipInputFor"] }, { kind: "component", type: i10.NovoChipList, selector: "novo-chip-list", inputs: ["errorStateMatcher", "multiple", "stacked", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["novoChipList"] }, { kind: "directive", type: i11.NovoConditionOperatorsDef, selector: "[novoConditionOperatorsDef]" }, { kind: "directive", type: i11.NovoConditionInputDef, selector: "[novoConditionInputDef]" }, { kind: "directive", type: i11.NovoConditionFieldDef, selector: "[novoConditionFieldDef]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
125
205
  }
126
206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: NovoDefaultAddressConditionDef, decorators: [{
127
207
  type: Component,
@@ -133,28 +213,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
133
213
  <novo-select [placeholder]="labels.operator" formControlName="operator" (onSelect)="onOperatorSelect(formGroup)">
134
214
  <novo-option value="includeAny">{{ labels.includeAny }}</novo-option>
135
215
  <novo-option value="excludeAny">{{ labels.exclude }}</novo-option>
216
+ <novo-option value="radius" *ngIf="radiusEnabled()">{{ labels.radius }}</novo-option>
136
217
  </novo-select>
137
218
  </novo-field>
138
- <ng-container *novoConditionInputDef="let formGroup; viewIndex as viewIndex; fieldMeta as meta" [ngSwitch]="formGroup.value.operator" [formGroup]="formGroup">
139
- <novo-field *novoSwitchCases="['includeAny', 'excludeAny']" #novoField>
140
- <novo-chip-list [(ngModel)]="chipListModel" [ngModelOptions]="{ standalone: true }" (click)="openPlacesList(viewIndex)">
141
- <novo-chip *ngFor="let item of formGroup.get('value').value" (removed)="remove(item, formGroup, viewIndex)">
142
- <novo-text ellipsis>{{ item.formatted_address }}</novo-text>
143
- <novo-icon novoChipRemove>close</novo-icon>
144
- </novo-chip>
145
- <input
146
- novoChipInput
147
- [id]="viewIndex"
148
- [placeholder]="labels.location"
149
- (keyup)="onKeyup($event, viewIndex)"
150
- (keydown)="onKeydown($event, viewIndex)"
151
- [picker]="placesPicker"
152
- #addressInput />
153
- </novo-chip-list>
154
- <novo-picker-toggle [overlayId]="viewIndex" icon="location" novoSuffix>
155
- <google-places-list [term]="term" (select)="selectPlace($event, formGroup, viewIndex)" formControlName="value" #placesPicker></google-places-list>
156
- </novo-picker-toggle>
157
- </novo-field>
219
+ <ng-container *novoConditionInputDef="let formGroup; viewIndex as viewIndex; fieldMeta as meta" [formGroup]="formGroup">
220
+ <novo-flex justify="space-between" align="end">
221
+ <novo-field #novoRadiusField *ngIf="formGroup.value.operator === 'radius'" class="address-radius">
222
+ <novo-select
223
+ #radiusSelect [placeholder]="labels.radius"
224
+ (onSelect)="onRadiusSelect(formGroup, $event.selected)"
225
+ [value]="radius()"
226
+ [options]="radiusOptions()">
227
+ </novo-select>
228
+ </novo-field>
229
+ <novo-field #novoField class="address-location">
230
+ <novo-chip-list [(ngModel)]="chipListModel" [ngModelOptions]="{ standalone: true }" (click)="openPlacesList(viewIndex)">
231
+ <novo-chip *ngFor="let item of formGroup.get('value').value" (removed)="remove(item, formGroup, viewIndex)">
232
+ <novo-text ellipsis>{{ item.formatted_address }}</novo-text>
233
+ <novo-icon novoChipRemove>close</novo-icon>
234
+ </novo-chip>
235
+ <input
236
+ novoChipInput
237
+ [id]="viewIndex"
238
+ [placeholder]="labels.location"
239
+ (keyup)="onKeyup($event, viewIndex)"
240
+ (keydown)="onKeydown($event, viewIndex)"
241
+ [picker]="placesPicker"
242
+ #addressInput/>
243
+ </novo-chip-list>
244
+ <novo-picker-toggle [overlayId]="viewIndex" icon="location" novoSuffix>
245
+ <google-places-list
246
+ [term]="term"
247
+ (select)="selectPlace($event, formGroup, viewIndex)"
248
+ formControlName="value"
249
+ #placesPicker/>
250
+ </novo-picker-toggle>
251
+ </novo-field>
252
+ </novo-flex>
158
253
  </ng-container>
159
254
  </ng-container>
160
255
  `,
@@ -171,4 +266,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
171
266
  type: ViewChild,
172
267
  args: ['placesPicker']
173
268
  }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1jb25kaXRpb24uZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL3F1ZXJ5LWJ1aWxkZXIvY29uZGl0aW9uLWRlZmluaXRpb25zL2FkZHJlc3MtY29uZGl0aW9uLmRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEksT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7QUFFbEQ7O0dBRUc7QUFxQ0gsTUFBTSxPQUFPLDhCQUErQixTQUFRLHlCQUF5QjtJQVMzRSxZQUFtQixPQUFtQixFQUFTLE1BQXdCO1FBQ3JFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQURHLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUp2RSxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDdEMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsU0FBSSxHQUFXLEVBQUUsQ0FBQztJQUlsQixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTO1FBQ3RCLElBQUksQ0FBQyxvREFBdUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxD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QUFNLENBQUMsYUFBa0IsRUFBRSxTQUEwQixFQUFFLFNBQWlCO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQTtZQUM3QixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQixTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDOzhHQWpGVSw4QkFBOEI7a0dBQTlCLDhCQUE4QixxTUFDM0IsdUJBQXVCLDBKQW5DM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCVDs7MkZBSVUsOEJBQThCO2tCQXBDMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCVDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE9BQU87aUJBQ2pEOzhHQUV3QyxlQUFlO3NCQUFyRCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFDUCxhQUFhO3NCQUExQyxZQUFZO3VCQUFDLGNBQWM7Z0JBQ0QsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5vdm9QaWNrZXJUb2dnbGVFbGVtZW50IH0gZnJvbSAnbm92by1lbGVtZW50cy9lbGVtZW50cy9maWVsZCc7XG5pbXBvcnQgeyBQbGFjZXNMaXN0Q29tcG9uZW50IH0gZnJvbSAnbm92by1lbGVtZW50cy9lbGVtZW50cy9wbGFjZXMnO1xuaW1wb3J0IHsgTm92b0xhYmVsU2VydmljZSB9IGZyb20gJ25vdm8tZWxlbWVudHMvc2VydmljZXMnO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnbm92by1lbGVtZW50cy91dGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbmRpdGlvbkZpZWxkRGVmIH0gZnJvbSAnLi9hYnN0cmFjdC1jb25kaXRpb24uZGVmaW5pdGlvbic7XG5pbXBvcnQgeyBPcGVyYXRvciB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIudHlwZXMnO1xuXG4vKipcbiAqIEhhbmRsZSBzZWxlY3Rpb24gb2YgZmllbGQgdmFsdWVzIHdoZW4gYSBsaXN0IG9mIG9wdGlvbnMgaXMgcHJvdmlkZWQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tYWRkcmVzcy1jb25kaXRpb24tZGVmJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGFpbmVyIG5vdm9Db25kaXRpb25GaWVsZERlZj5cbiAgICAgIDxub3ZvLWZpZWxkICpub3ZvQ29uZGl0aW9uT3BlcmF0b3JzRGVmPVwibGV0IGZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICAgIDxub3ZvLXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwibGFiZWxzLm9wZXJhdG9yXCIgZm9ybUNvbnRyb2xOYW1lPVwib3BlcmF0b3JcIiAob25TZWxlY3QpPVwib25PcGVyYXRvclNlbGVjdChmb3JtR3JvdXApXCI+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uIHZhbHVlPVwiaW5jbHVkZUFueVwiPnt7IGxhYmVscy5pbmNsdWRlQW55IH19PC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgICA8bm92by1vcHRpb24gdmFsdWU9XCJleGNsdWRlQW55XCI+e3sgbGFiZWxzLmV4Y2x1ZGUgfX08L25vdm8tb3B0aW9uPlxuICAgICAgICA8L25vdm8tc2VsZWN0PlxuICAgICAgPC9ub3ZvLWZpZWxkPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbm92b0NvbmRpdGlvbklucHV0RGVmPVwibGV0IGZvcm1Hcm91cDsgdmlld0luZGV4IGFzIHZpZXdJbmRleDsgZmllbGRNZXRhIGFzIG1ldGFcIiBbbmdTd2l0Y2hdPVwiZm9ybUdyb3VwLnZhbHVlLm9wZXJhdG9yXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgPG5vdm8tZmllbGQgKm5vdm9Td2l0Y2hDYXNlcz1cIlsnaW5jbHVkZUFueScsICdleGNsdWRlQW55J11cIiAjbm92b0ZpZWxkPlxuICAgICAgICAgIDxub3ZvLWNoaXAtbGlzdCBbKG5nTW9kZWwpXT1cImNoaXBMaXN0TW9kZWxcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiAoY2xpY2spPVwib3BlblBsYWNlc0xpc3Qodmlld0luZGV4KVwiPlxuICAgICAgICAgICAgPG5vdm8tY2hpcCAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpLnZhbHVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlKGl0ZW0sIGZvcm1Hcm91cCwgdmlld0luZGV4KVwiPlxuICAgICAgICAgICAgICA8bm92by10ZXh0IGVsbGlwc2lzPnt7IGl0ZW0uZm9ybWF0dGVkX2FkZHJlc3MgfX08L25vdm8tdGV4dD5cbiAgICAgICAgICAgICAgPG5vdm8taWNvbiBub3ZvQ2hpcFJlbW92ZT5jbG9zZTwvbm92by1pY29uPlxuICAgICAgICAgICAgPC9ub3ZvLWNoaXA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgbm92b0NoaXBJbnB1dFxuICAgICAgICAgICAgICBbaWRdPVwidmlld0luZGV4XCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVscy5sb2NhdGlvblwiXG4gICAgICAgICAgICAgIChrZXl1cCk9XCJvbktleXVwKCRldmVudCwgdmlld0luZGV4KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQsIHZpZXdJbmRleClcIlxuICAgICAgICAgICAgICBbcGlja2VyXT1cInBsYWNlc1BpY2tlclwiXG4gICAgICAgICAgICAgICNhZGRyZXNzSW5wdXQgLz5cbiAgICAgICAgICA8L25vdm8tY2hpcC1saXN0PlxuICAgICAgICAgIDxub3ZvLXBpY2tlci10b2dnbGUgW292ZXJsYXlJZF09XCJ2aWV3SW5kZXhcIiBpY29uPVwibG9jYXRpb25cIiBub3ZvU3VmZml4PlxuICAgICAgICAgICAgPGdvb2dsZS1wbGFjZXMtbGlzdCBbdGVybV09XCJ0ZXJtXCIgKHNlbGVjdCk9XCJzZWxlY3RQbGFjZSgkZXZlbnQsIGZvcm1Hcm91cCwgdmlld0luZGV4KVwiIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCIgI3BsYWNlc1BpY2tlcj48L2dvb2dsZS1wbGFjZXMtbGlzdD5cbiAgICAgICAgICA8L25vdm8tcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPC9ub3ZvLWZpZWxkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbn0pXG5leHBvcnQgY2xhc3MgTm92b0RlZmF1bHRBZGRyZXNzQ29uZGl0aW9uRGVmIGV4dGVuZHMgQWJzdHJhY3RDb25kaXRpb25GaWVsZERlZiB7XG4gIEBWaWV3Q2hpbGRyZW4oTm92b1BpY2tlclRvZ2dsZUVsZW1lbnQpIG92ZXJsYXlDaGlsZHJlbjogUXVlcnlMaXN0PE5vdm9QaWNrZXJUb2dnbGVFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbignYWRkcmVzc0lucHV0JykgaW5wdXRDaGlsZHJlbjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdwbGFjZXNQaWNrZXInKSBwbGFjZXNQaWNrZXI6IFBsYWNlc0xpc3RDb21wb25lbnQ7XG5cbiAgZGVmYXVsdE9wZXJhdG9yID0gT3BlcmF0b3IuaW5jbHVkZUFueTtcbiAgY2hpcExpc3RNb2RlbDogYW55ID0gJyc7XG4gIHRlcm06IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLCBwdWJsaWMgbGFiZWxzOiBOb3ZvTGFiZWxTZXJ2aWNlKSB7XG4gICAgc3VwZXIobGFiZWxzKTtcbiAgfVxuXG4gIG9uS2V5dXAoZXZlbnQsIHZpZXdJbmRleCkge1xuICAgIGlmICghW0tleS5Fc2NhcGUsIEtleS5FbnRlcl0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgdGhpcy5vcGVuUGxhY2VzTGlzdCh2aWV3SW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLnRlcm0gPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQsIHZpZXdJbmRleCkge1xuICAgIGlmICghdGhpcy5wbGFjZXNQaWNrZXIuZHJvcGRvd25PcGVuKSB7XG4gICAgICB0aGlzLm9wZW5QbGFjZXNMaXN0KHZpZXdJbmRleCk7XG4gICAgICB0aGlzLnBsYWNlc1BpY2tlci5kcm9wZG93bk9wZW4gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoW0tleS5Fc2NhcGUsIEtleS5UYWJdLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIHRoaXMuY2xvc2VQbGFjZXNMaXN0KHZpZXdJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2VzUGlja2VyLm9uS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VmFsdWUoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGZvcm1Hcm91cC52YWx1ZS52YWx1ZSB8fCBbXTtcbiAgfVxuXG4gIGdldEN1cnJlbnRPdmVybGF5KHZpZXdJbmRleDogc3RyaW5nKTogTm92b1BpY2tlclRvZ2dsZUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLm92ZXJsYXlDaGlsZHJlbj8uZmluZChpdGVtID0+IGl0ZW0ub3ZlcmxheUlkID09PSB2aWV3SW5kZXgpO1xuICB9XG5cbiAgZ2V0Q3VycmVudElucHV0KHZpZXdJbmRleDogc3RyaW5nKTogRWxlbWVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRDaGlsZHJlbj8uZmluZChpdGVtID0+IChpdGVtIGFzIGFueSkubmF0aXZlRWxlbWVudC5pZCA9PT0gdmlld0luZGV4KTtcbiAgfVxuXG4gIG9wZW5QbGFjZXNMaXN0KHZpZXdJbmRleCkge1xuICAgIHRoaXMuZ2V0Q3VycmVudE92ZXJsYXkodmlld0luZGV4KT8ub3BlblBhbmVsKCk7XG4gIH1cblxuICBjbG9zZVBsYWNlc0xpc3Qodmlld0luZGV4KSB7XG4gICAgdGhpcy5nZXRDdXJyZW50T3ZlcmxheSh2aWV3SW5kZXgpPy5jbG9zZVBhbmVsKCk7XG4gIH1cblxuICBzZWxlY3RQbGFjZShldmVudDogYW55LCBmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCwgdmlld0luZGV4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZVRvQWRkID0ge1xuICAgICAgYWRkcmVzc19jb21wb25lbnRzOiBldmVudC5hZGRyZXNzX2NvbXBvbmVudHMsXG4gICAgICBmb3JtYXR0ZWRfYWRkcmVzczogZXZlbnQuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBnZW9tZXRyeTogZXZlbnQuZ2VvbWV0cnksXG4gICAgICBwbGFjZV9pZDogZXZlbnQucGxhY2VfaWQsXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRWYWx1ZShmb3JtR3JvdXApO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgZm9ybUdyb3VwLmdldCgndmFsdWUnKS5zZXRWYWx1ZShbdmFsdWVUb0FkZF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpLnNldFZhbHVlKFsuLi5jdXJyZW50LCB2YWx1ZVRvQWRkXSk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXRDaGlsZHJlbi5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9KVxuICAgIHRoaXMuZ2V0Q3VycmVudElucHV0KHZpZXdJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLmNsb3NlUGxhY2VzTGlzdCh2aWV3SW5kZXgpO1xuICB9XG5cbiAgcmVtb3ZlKHZhbHVlVG9SZW1vdmU6IGFueSwgZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wsIHZpZXdJbmRleDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0VmFsdWUoZm9ybUdyb3VwKTtcbiAgICBjb25zdCBpbmRleCA9IGN1cnJlbnQuaW5kZXhPZih2YWx1ZVRvUmVtb3ZlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBbLi4uY3VycmVudF1cbiAgICAgIG9sZFZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpLnNldFZhbHVlKG9sZFZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5jbG9zZVBsYWNlc0xpc3Qodmlld0luZGV4KTtcbiAgfVxufVxuIl19
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1jb25kaXRpb24uZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL3F1ZXJ5LWJ1aWxkZXIvY29uZGl0aW9uLWRlZmluaXRpb25zL2FkZHJlc3MtY29uZGl0aW9uLmRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixLQUFLLEVBR0wsU0FBUyxFQUVULE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQTZFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxSSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUU1RTs7R0FFRztBQW9ESCxNQUFNLE9BQU8sOEJBQStCLFNBQVEseUJBQXlCO0lBcUMzRSxZQUFtQixPQUFtQixFQUFTLE1BQXdCO1FBQ3JFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQURHLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQWhDdkUsa0JBQWtCO1FBQ2xCLGlCQUFZLEdBQWEsQ0FBQyxDQUFDLEVBQUUs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LEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVMsQ0FBQyxTQUEwQjtRQUMxQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDOUUsQ0FBQztJQUVPLHdCQUF3QixDQUFDLFNBQTBCO1FBQ3pELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDO0lBQ3RELENBQUM7OEdBbEtVLDhCQUE4QjtrR0FBOUIsOEJBQThCLDRVQUMzQix1QkFBdUIsMEpBbEQzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNUOzsyRkFJVSw4QkFBOEI7a0JBbkQxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNUO29CQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsT0FBTztpQkFDakQ7OEdBRXdDLGVBQWU7c0JBQXJELFlBQVk7dUJBQUMsdUJBQXVCO2dCQUNQLGFBQWE7c0JBQTFDLFlBQVk7dUJBQUMsY0FBYztnQkFDRCxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRWxlbWVudFJlZixcbiAgaW5wdXQsXG4gIElucHV0U2lnbmFsLFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbiAgU2lnbmFsLFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgV3JpdGFibGVTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOb3ZvUGlja2VyVG9nZ2xlRWxlbWVudCB9IGZyb20gJ25vdm8tZWxlbWVudHMvZWxlbWVudHMvZmllbGQnO1xuaW1wb3J0IHsgUGxhY2VzTGlzdENvbXBvbmVudCB9IGZyb20gJ25vdm8tZWxlbWVudHMvZWxlbWVudHMvcGxhY2VzJztcbmltcG9ydCB7IE5vdm9MYWJlbFNlcnZpY2UgfSBmcm9tICdub3ZvLWVsZW1lbnRzL3NlcnZpY2VzJztcbmltcG9ydCB7IEhlbHBlcnMsIEtleSB9IGZyb20gJ25vdm8tZWxlbWVudHMvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBZGRyZXNzQ3JpdGVyaWFDb25maWcsIEFkZHJlc3NEYXRhLCBBZGRyZXNzUmFkaXVzLCBBZGRyZXNzUmFkaXVzVW5pdHNOYW1lLCBPcGVyYXRvciwgUmFkaXVzVW5pdHMgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLnR5cGVzJztcbmltcG9ydCB7IEFic3RyYWN0Q29uZGl0aW9uRmllbGREZWYgfSBmcm9tICcuL2Fic3RyYWN0LWNvbmRpdGlvbi5kZWZpbml0aW9uJztcblxuLyoqXG4gKiBIYW5kbGUgc2VsZWN0aW9uIG9mIGZpZWxkIHZhbHVlcyB3aGVuIGEgbGlzdCBvZiBvcHRpb25zIGlzIHByb3ZpZGVkLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdub3ZvLWFkZHJlc3MtY29uZGl0aW9uLWRlZicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRhaW5lciBub3ZvQ29uZGl0aW9uRmllbGREZWY+XG4gICAgICA8bm92by1maWVsZCAqbm92b0NvbmRpdGlvbk9wZXJhdG9yc0RlZj1cImxldCBmb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8bm92by1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cImxhYmVscy5vcGVyYXRvclwiIGZvcm1Db250cm9sTmFtZT1cIm9wZXJhdG9yXCIgKG9uU2VsZWN0KT1cIm9uT3BlcmF0b3JTZWxlY3QoZm9ybUdyb3VwKVwiPlxuICAgICAgICAgIDxub3ZvLW9wdGlvbiB2YWx1ZT1cImluY2x1ZGVBbnlcIj57eyBsYWJlbHMuaW5jbHVkZUFueSB9fTwvbm92by1vcHRpb24+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uIHZhbHVlPVwiZXhjbHVkZUFueVwiPnt7IGxhYmVscy5leGNsdWRlIH19PC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgICA8bm92by1vcHRpb24gdmFsdWU9XCJyYWRpdXNcIiAqbmdJZj1cInJhZGl1c0VuYWJsZWQoKVwiPnt7IGxhYmVscy5yYWRpdXMgfX08L25vdm8tb3B0aW9uPlxuICAgICAgICA8L25vdm8tc2VsZWN0PlxuICAgICAgPC9ub3ZvLWZpZWxkPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbm92b0NvbmRpdGlvbklucHV0RGVmPVwibGV0IGZvcm1Hcm91cDsgdmlld0luZGV4IGFzIHZpZXdJbmRleDsgZmllbGRNZXRhIGFzIG1ldGFcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8bm92by1mbGV4IGp1c3RpZnk9XCJzcGFjZS1iZXR3ZWVuXCIgYWxpZ249XCJlbmRcIj5cbiAgICAgICAgICA8bm92by1maWVsZCAjbm92b1JhZGl1c0ZpZWxkICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLm9wZXJhdG9yID09PSAncmFkaXVzJ1wiIGNsYXNzPVwiYWRkcmVzcy1yYWRpdXNcIj5cbiAgICAgICAgICAgIDxub3ZvLXNlbGVjdFxuICAgICAgICAgICAgICAjcmFkaXVzU2VsZWN0IFtwbGFjZWhvbGRlcl09XCJsYWJlbHMucmFkaXVzXCJcbiAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cIm9uUmFkaXVzU2VsZWN0KGZvcm1Hcm91cCwgJGV2ZW50LnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJyYWRpdXMoKVwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cInJhZGl1c09wdGlvbnMoKVwiPlxuICAgICAgICAgICAgPC9ub3ZvLXNlbGVjdD5cbiAgICAgICAgICA8L25vdm8tZmllbGQ+XG4gICAgICAgICAgPG5vdm8tZmllbGQgI25vdm9GaWVsZCBjbGFzcz1cImFkZHJlc3MtbG9jYXRpb25cIj5cbiAgICAgICAgICAgIDxub3ZvLWNoaXAtbGlzdCBbKG5nTW9kZWwpXT1cImNoaXBMaXN0TW9kZWxcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiAoY2xpY2spPVwib3BlblBsYWNlc0xpc3Qodmlld0luZGV4KVwiPlxuICAgICAgICAgICAgICA8bm92by1jaGlwICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJykudmFsdWVcIiAocmVtb3ZlZCk9XCJyZW1vdmUoaXRlbSwgZm9ybUdyb3VwLCB2aWV3SW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgPG5vdm8tdGV4dCBlbGxpcHNpcz57eyBpdGVtLmZvcm1hdHRlZF9hZGRyZXNzIH19PC9ub3ZvLXRleHQ+XG4gICAgICAgICAgICAgICAgPG5vdm8taWNvbiBub3ZvQ2hpcFJlbW92ZT5jbG9zZTwvbm92by1pY29uPlxuICAgICAgICAgICAgICA8L25vdm8tY2hpcD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbm92b0NoaXBJbnB1dFxuICAgICAgICAgICAgICAgIFtpZF09XCJ2aWV3SW5kZXhcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbHMubG9jYXRpb25cIlxuICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvbktleXVwKCRldmVudCwgdmlld0luZGV4KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudCwgdmlld0luZGV4KVwiXG4gICAgICAgICAgICAgICAgW3BpY2tlcl09XCJwbGFjZXNQaWNrZXJcIlxuICAgICAgICAgICAgICAgICNhZGRyZXNzSW5wdXQvPlxuICAgICAgICAgICAgPC9ub3ZvLWNoaXAtbGlzdD5cbiAgICAgICAgICAgIDxub3ZvLXBpY2tlci10b2dnbGUgW292ZXJsYXlJZF09XCJ2aWV3SW5kZXhcIiBpY29uPVwibG9jYXRpb25cIiBub3ZvU3VmZml4PlxuICAgICAgICAgICAgICA8Z29vZ2xlLXBsYWNlcy1saXN0XG4gICAgICAgICAgICAgICAgW3Rlcm1dPVwidGVybVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3RQbGFjZSgkZXZlbnQsIGZvcm1Hcm91cCwgdmlld0luZGV4KVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICNwbGFjZXNQaWNrZXIvPlxuICAgICAgICAgICAgPC9ub3ZvLXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgPC9ub3ZvLWZpZWxkPlxuICAgICAgICA8L25vdm8tZmxleD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG59KVxuZXhwb3J0IGNsYXNzIE5vdm9EZWZhdWx0QWRkcmVzc0NvbmRpdGlvbkRlZiBleHRlbmRzIEFic3RyYWN0Q29uZGl0aW9uRmllbGREZWYgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkcmVuKE5vdm9QaWNrZXJUb2dnbGVFbGVtZW50KSBvdmVybGF5Q2hpbGRyZW46IFF1ZXJ5TGlzdDxOb3ZvUGlja2VyVG9nZ2xlRWxlbWVudD47XG4gIEBWaWV3Q2hpbGRyZW4oJ2FkZHJlc3NJbnB1dCcpIGlucHV0Q2hpbGRyZW46IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgncGxhY2VzUGlja2VyJykgcGxhY2VzUGlja2VyOiBQbGFjZXNMaXN0Q29tcG9uZW50O1xuXG4gIC8vIFN0YXRpYyBkZWZhdWx0c1xuICByYWRpdXNWYWx1ZXM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMzAsIDQwLCA1MCwgMTAwXTtcbiAgZGVmYXVsdFJhZGl1czogbnVtYmVyID0gMzA7XG5cbiAgLy8gT3ZlcnJpZGFibGUgZGVmYXVsdHNcbiAgZGVmYXVsdHM6IEFkZHJlc3NDcml0ZXJpYUNvbmZpZyA9IHtcbiAgICByYWRpdXNFbmFibGVkOiBmYWxzZSxcbiAgICByYWRpdXNVbml0czogJ21pbGVzJyxcbiAgfTtcbiAgY29uZmlnOiBJbnB1dFNpZ25hbDxBZGRyZXNzQ3JpdGVyaWFDb25maWc+ID0gaW5wdXQoKTtcbiAgcmFkaXVzVW5pdHM6IFNpZ25hbDxBZGRyZXNzUmFkaXVzVW5pdHNOYW1lPiA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5jb25maWcoKT8ucmFkaXVzVW5pdHMgfHwgdGhpcy5kZWZhdWx0cy5yYWRpdXNVbml0c1xuICApO1xuICByYWRpdXNFbmFibGVkOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuY29uZmlnKCk/LnJhZGl1c0VuYWJsZWQgfHwgdGhpcy5kZWZhdWx0cy5yYWRpdXNFbmFibGVkXG4gICk7XG5cbiAgcmFkaXVzOiBXcml0YWJsZVNpZ25hbDxudW1iZXI+ID0gc2lnbmFsKHRoaXMuZGVmYXVsdFJhZGl1cyk7XG4gIHJhZGl1c09wdGlvbnM6IFNpZ25hbDx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXI7IH1bXT4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdW5pdHNMYWJlbCA9IHRoaXMucmFkaXVzVW5pdHMoKSA9PT0gUmFkaXVzVW5pdHMubWlsZXMgPyB0aGlzLmxhYmVscy5taWxlcyA6IHRoaXMubGFiZWxzLmttO1xuICAgIHJldHVybiB0aGlzLnJhZGl1c1ZhbHVlcy5tYXAodmFsdWUgPT4gKHtcbiAgICAgIGxhYmVsOiBgJHt2YWx1ZS50b1N0cmluZygpfSAke3VuaXRzTGFiZWx9YCxcbiAgICAgIHZhbHVlLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgZGVmYXVsdE9wZXJhdG9yID0gT3BlcmF0b3IuaW5jbHVkZUFueTtcbiAgY2hpcExpc3RNb2RlbDogYW55ID0gJyc7XG4gIHRlcm06IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgX2FkZHJlc3NDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHB1YmxpYyBsYWJlbHM6IE5vdm9MYWJlbFNlcnZpY2UpIHtcbiAgICBzdXBlcihsYWJlbHMpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcmFkaXVzIHZhbHVlIGZyb20gZXhpc3RpbmcgZGF0YVxuICAgICAgdGhpcy5hc3NpZ25SYWRpdXNGcm9tVmFsdWUoKTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSByYWRpdXMgb24gYWRkcmVzcyB2YWx1ZSBjaGFuZ2VzXG4gICAgICB0aGlzLl9hZGRyZXNzQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuaW5wdXRDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYXNzaWduUmFkaXVzRnJvbVZhbHVlKCk7XG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fYWRkcmVzc0NoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uS2V5dXAoZXZlbnQsIHZpZXdJbmRleCkge1xuICAgIGlmICghW0tleS5Fc2NhcGUsIEtleS5FbnRlcl0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgdGhpcy5vcGVuUGxhY2VzTGlzdCh2aWV3SW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLnRlcm0gPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQsIHZpZXdJbmRleCkge1xuICAgIGlmICghdGhpcy5wbGFjZXNQaWNrZXIuZHJvcGRvd25PcGVuKSB7XG4gICAgICB0aGlzLm9wZW5QbGFjZXNMaXN0KHZpZXdJbmRleCk7XG4gICAgICB0aGlzLnBsYWNlc1BpY2tlci5kcm9wZG93bk9wZW4gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoW0tleS5Fc2NhcGUsIEtleS5UYWJdLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIHRoaXMuY2xvc2VQbGFjZXNMaXN0KHZpZXdJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2VzUGlja2VyLm9uS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VmFsdWUoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBBZGRyZXNzRGF0YVtdIHtcbiAgICByZXR1cm4gZm9ybUdyb3VwLnZhbHVlLnZhbHVlIHx8IFtdO1xuICB9XG5cbiAgZ2V0Q3VycmVudE92ZXJsYXkodmlld0luZGV4OiBzdHJpbmcpOiBOb3ZvUGlja2VyVG9nZ2xlRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheUNoaWxkcmVuPy5maW5kKGl0ZW0gPT4gaXRlbS5vdmVybGF5SWQgPT09IHZpZXdJbmRleCk7XG4gIH1cblxuICBnZXRDdXJyZW50SW5wdXQodmlld0luZGV4OiBzdHJpbmcpOiBFbGVtZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dENoaWxkcmVuPy5maW5kKGl0ZW0gPT4gKGl0ZW0gYXMgYW55KS5uYXRpdmVFbGVtZW50LmlkID09PSB2aWV3SW5kZXgpO1xuICB9XG5cbiAgb3BlblBsYWNlc0xpc3Qodmlld0luZGV4KSB7XG4gICAgdGhpcy5nZXRDdXJyZW50T3ZlcmxheSh2aWV3SW5kZXgpPy5vcGVuUGFuZWwoKTtcbiAgfVxuXG4gIGNsb3NlUGxhY2VzTGlzdCh2aWV3SW5kZXgpIHtcbiAgICB0aGlzLmdldEN1cnJlbnRPdmVybGF5KHZpZXdJbmRleCk/LmNsb3NlUGFuZWwoKTtcbiAgfVxuXG4gIHNlbGVjdFBsYWNlKGV2ZW50OiBhbnksIGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sLCB2aWV3SW5kZXg6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlVG9BZGQ6IEFkZHJlc3NEYXRhID0ge1xuICAgICAgYWRkcmVzc19jb21wb25lbnRzOiBldmVudC5hZGRyZXNzX2NvbXBvbmVudHMsXG4gICAgICBmb3JtYXR0ZWRfYWRkcmVzczogZXZlbnQuZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgICBnZW9tZXRyeTogZXZlbnQuZ2VvbWV0cnksXG4gICAgICBwbGFjZV9pZDogZXZlbnQucGxhY2VfaWQsXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50OiBBZGRyZXNzRGF0YSB8IEFkZHJlc3NEYXRhW10gPSB0aGlzLmdldFZhbHVlKGZvcm1Hcm91cCk7XG4gICAgY29uc3QgdXBkYXRlZDogQWRkcmVzc0RhdGFbXSA9IEFycmF5LmlzQXJyYXkoY3VycmVudCkgPyBbLi4uY3VycmVudCwgdmFsdWVUb0FkZF0gOiBbdmFsdWVUb0FkZF07XG4gICAgZm9ybUdyb3VwLmdldCgndmFsdWUnKS5zZXRWYWx1ZSh0aGlzLnVwZGF0ZVJhZGl1c0luVmFsdWVzKGZvcm1Hcm91cCwgdXBkYXRlZCkpO1xuXG4gICAgdGhpcy5pbnB1dENoaWxkcmVuLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH0pXG4gICAgdGhpcy5nZXRDdXJyZW50SW5wdXQodmlld0luZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuY2xvc2VQbGFjZXNMaXN0KHZpZXdJbmRleCk7XG4gIH1cblxuICByZW1vdmUodmFsdWVUb1JlbW92ZTogQWRkcmVzc0RhdGEsIGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sLCB2aWV3SW5kZXg6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldFZhbHVlKGZvcm1Hcm91cCk7XG4gICAgY29uc3QgaW5kZXggPSBjdXJyZW50LmluZGV4T2YodmFsdWVUb1JlbW92ZSk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gWy4uLmN1cnJlbnRdXG4gICAgICBvbGRWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgZm9ybUdyb3VwLmdldCgndmFsdWUnKS5zZXRWYWx1ZShvbGRWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2xvc2VQbGFjZXNMaXN0KHZpZXdJbmRleCk7XG4gIH1cblxuICBvblJhZGl1c1NlbGVjdChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCwgcmFkaXVzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJhZGl1cy5zZXQocmFkaXVzKTtcbiAgICAvLyBXZSBtdXN0IGRpcnR5IHRoZSBmb3JtIGV4cGxpY2l0bHkgdG8gc2hvdyB1cCBhcyBhIHVzZXIgbW9kaWZpY2F0aW9uIHdoZW4gaXQgd2FzIGRvbmUgcHJvZ3JhbW1hdGljYWxseVxuICAgIGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJykuc2V0VmFsdWUodGhpcy51cGRhdGVSYWRpdXNJblZhbHVlcyhmb3JtR3JvdXAsIHRoaXMuZ2V0VmFsdWUoZm9ybUdyb3VwKSkpO1xuICAgIGZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25SYWRpdXNGcm9tVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMucGxhY2VzUGlja2VyPy5tb2RlbD8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzRGF0YTogQWRkcmVzc0RhdGEgPSB0aGlzLnBsYWNlc1BpY2tlci5tb2RlbFswXTtcbiAgICAgIGNvbnN0IGluaXRpYWxSYWRpdXMgPSBhZGRyZXNzRGF0YS5yYWRpdXM/LnZhbHVlO1xuICAgICAgaWYgKGluaXRpYWxSYWRpdXMgJiYgSGVscGVycy5pc051bWJlcihpbml0aWFsUmFkaXVzKSkge1xuICAgICAgICB0aGlzLnJhZGl1cy5zZXQoaW5pdGlhbFJhZGl1cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSYWRpdXNJblZhbHVlcyhmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCwgdmFsdWVzOiBBZGRyZXNzRGF0YVtdKTogQWRkcmVzc0RhdGFbXSB7XG4gICAgcmV0dXJuIHZhbHVlcy5tYXAodmFsID0+ICh7XG4gICAgICAuLi52YWwsXG4gICAgICByYWRpdXM6IHRoaXMuaXNSYWRpdXNPcGVyYXRvclNlbGVjdGVkKGZvcm1Hcm91cCkgPyB0aGlzLmdldFJhZGl1c0RhdGEoZm9ybUdyb3VwKSA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJhZGl1c0RhdGEoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBBZGRyZXNzUmFkaXVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHRoaXMuZ2V0UmFkaXVzKGZvcm1Hcm91cCksXG4gICAgICB1bml0czogdGhpcy5yYWRpdXNVbml0cygpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFJhZGl1cyhmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNSYWRpdXNPcGVyYXRvclNlbGVjdGVkKGZvcm1Hcm91cCkgPyB0aGlzLnJhZGl1cygpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1JhZGl1c09wZXJhdG9yU2VsZWN0ZWQoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZm9ybUdyb3VwLmdldCgnb3BlcmF0b3InKS52YWx1ZSA9PT0gJ3JhZGl1cyc7XG4gIH1cbn1cbiJdfQ==