ng-tailwind 6.2.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/components/ngt-checkbox/ngt-checkbox.component.d.ts +6 -6
  2. package/components/ngt-datatable/ngt-datatable.component.d.ts +24 -24
  3. package/components/ngt-date/ngt-date.component.d.ts +8 -8
  4. package/components/ngt-dropdown/ngt-dropdown.component.d.ts +6 -6
  5. package/components/ngt-floating-button/ngt-floating-button.component.d.ts +13 -13
  6. package/components/ngt-form/ngt-form.component.d.ts +4 -4
  7. package/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.d.ts +5 -5
  8. package/components/ngt-popover/ngt-popover.component.d.ts +6 -6
  9. package/components/ngt-select/ngt-select.component.d.ts +8 -8
  10. package/components/ngt-shining/ngt-shining.component.d.ts +6 -6
  11. package/components/ngt-slider/ngt-slider.component.d.ts +6 -6
  12. package/components/ngt-svg/ngt-svg.module.d.ts +2 -3
  13. package/esm2022/components/ngt-action/ngt-action.component.mjs +3 -3
  14. package/esm2022/components/ngt-action/ngt-action.module.mjs +4 -4
  15. package/esm2022/components/ngt-button/ngt-button.component.mjs +3 -3
  16. package/esm2022/components/ngt-button/ngt-button.module.mjs +4 -4
  17. package/esm2022/components/ngt-checkbox/ngt-checkbox.component.mjs +11 -11
  18. package/esm2022/components/ngt-checkbox/ngt-checkbox.module.mjs +4 -4
  19. package/esm2022/components/ngt-content/ngt-content.component.mjs +3 -3
  20. package/esm2022/components/ngt-content/ngt-content.module.mjs +4 -4
  21. package/esm2022/components/ngt-context-menu/ngt-context-menu.component.mjs +3 -3
  22. package/esm2022/components/ngt-context-menu/ngt-context-menu.directive.mjs +3 -3
  23. package/esm2022/components/ngt-context-menu/ngt-context-menu.module.mjs +4 -4
  24. package/esm2022/components/ngt-datatable/ngt-datatable.component.mjs +37 -35
  25. package/esm2022/components/ngt-datatable/ngt-datatable.module.mjs +4 -4
  26. package/esm2022/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +3 -3
  27. package/esm2022/components/ngt-datatable/ngt-td/ngt-td.component.mjs +3 -3
  28. package/esm2022/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +3 -3
  29. package/esm2022/components/ngt-datatable/ngt-th/ngt-th.component.mjs +3 -3
  30. package/esm2022/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +4 -4
  31. package/esm2022/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +3 -3
  32. package/esm2022/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +3 -3
  33. package/esm2022/components/ngt-date/ngt-date.component.mjs +14 -15
  34. package/esm2022/components/ngt-date/ngt-date.module.mjs +6 -6
  35. package/esm2022/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +3 -3
  36. package/esm2022/components/ngt-dropdown/ngt-dropdown.component.mjs +11 -11
  37. package/esm2022/components/ngt-dropdown/ngt-dropdown.module.mjs +4 -4
  38. package/esm2022/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +3 -3
  39. package/esm2022/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +3 -3
  40. package/esm2022/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +3 -3
  41. package/esm2022/components/ngt-dropzone/ngt-dropzone.component.mjs +3 -3
  42. package/esm2022/components/ngt-dropzone/ngt-dropzone.module.mjs +4 -4
  43. package/esm2022/components/ngt-floating-button/ngt-floating-button.component.mjs +9 -9
  44. package/esm2022/components/ngt-floating-button/ngt-floating-button.module.mjs +4 -4
  45. package/esm2022/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +3 -3
  46. package/esm2022/components/ngt-form/ngt-form.component.mjs +10 -10
  47. package/esm2022/components/ngt-form/ngt-form.module.mjs +4 -4
  48. package/esm2022/components/ngt-header-nav/ngt-header-nav.component.mjs +3 -3
  49. package/esm2022/components/ngt-header-nav/ngt-header-nav.module.mjs +4 -4
  50. package/esm2022/components/ngt-helper/ngt-helper.component.mjs +4 -4
  51. package/esm2022/components/ngt-helper/ngt-helper.module.mjs +4 -4
  52. package/esm2022/components/ngt-input/ngt-input.component.mjs +3 -3
  53. package/esm2022/components/ngt-input/ngt-input.module.mjs +4 -4
  54. package/esm2022/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +3 -3
  55. package/esm2022/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +3 -3
  56. package/esm2022/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +3 -3
  57. package/esm2022/components/ngt-modal/ngt-modal.component.mjs +3 -3
  58. package/esm2022/components/ngt-modal/ngt-modal.module.mjs +4 -4
  59. package/esm2022/components/ngt-multi-select/ngt-multi-select.component.mjs +3 -3
  60. package/esm2022/components/ngt-multi-select/ngt-multi-select.module.mjs +4 -4
  61. package/esm2022/components/ngt-pagination/ngt-pagination.component.mjs +3 -3
  62. package/esm2022/components/ngt-pagination/ngt-pagination.module.mjs +4 -4
  63. package/esm2022/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +10 -10
  64. package/esm2022/components/ngt-popover/ngt-popover.component.mjs +11 -11
  65. package/esm2022/components/ngt-popover/ngt-popover.directive.mjs +4 -4
  66. package/esm2022/components/ngt-popover/ngt-popover.module.mjs +4 -4
  67. package/esm2022/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +3 -3
  68. package/esm2022/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +3 -3
  69. package/esm2022/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +3 -3
  70. package/esm2022/components/ngt-portlet/ngt-portlet.component.mjs +3 -3
  71. package/esm2022/components/ngt-portlet/ngt-portlet.module.mjs +4 -4
  72. package/esm2022/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +3 -3
  73. package/esm2022/components/ngt-radio-button/ngt-radio-button.component.mjs +3 -3
  74. package/esm2022/components/ngt-radio-button/ngt-radio-button.module.mjs +4 -4
  75. package/esm2022/components/ngt-section/ngt-section.component.mjs +4 -4
  76. package/esm2022/components/ngt-section/ngt-section.module.mjs +4 -4
  77. package/esm2022/components/ngt-select/ngt-select.component.mjs +14 -14
  78. package/esm2022/components/ngt-select/ngt-select.directive.mjs +9 -9
  79. package/esm2022/components/ngt-select/ngt-select.module.mjs +4 -4
  80. package/esm2022/components/ngt-shining/ngt-shining.component.mjs +11 -11
  81. package/esm2022/components/ngt-shining/ngt-shining.module.mjs +4 -4
  82. package/esm2022/components/ngt-sidenav/ngt-sidenav.component.mjs +3 -3
  83. package/esm2022/components/ngt-sidenav/ngt-sidenav.module.mjs +4 -4
  84. package/esm2022/components/ngt-slider/ngt-slider.component.mjs +12 -12
  85. package/esm2022/components/ngt-slider/ngt-slider.module.mjs +4 -4
  86. package/esm2022/components/ngt-svg/ngt-svg.component.mjs +5 -5
  87. package/esm2022/components/ngt-svg/ngt-svg.module.mjs +8 -12
  88. package/esm2022/components/ngt-tag/ngt-tag.component.mjs +3 -3
  89. package/esm2022/components/ngt-tag/ngt-tag.module.mjs +4 -4
  90. package/esm2022/components/ngt-textarea/ngt-textarea.component.mjs +3 -3
  91. package/esm2022/components/ngt-textarea/ngt-textarea.module.mjs +4 -4
  92. package/esm2022/components/ngt-validation/ngt-validation.component.mjs +3 -3
  93. package/esm2022/components/ngt-validation/ngt-validation.module.mjs +4 -4
  94. package/esm2022/directives/ngt-stylizable/ngt-stylizable.directive.mjs +3 -3
  95. package/esm2022/directives/ngt-stylizable/ngt-stylizable.module.mjs +4 -4
  96. package/esm2022/services/http/ngt-http-validation.service.mjs +1 -1
  97. package/fesm2022/ng-tailwind.mjs +400 -403
  98. package/fesm2022/ng-tailwind.mjs.map +1 -1
  99. package/package.json +1 -1
  100. package/services/http/ngt-http-validation.service.d.ts +3 -5
@@ -7,6 +7,12 @@ import { NgtFormComponent } from '../ngt-form/ngt-form.component';
7
7
  import { NgtSectionComponent } from '../ngt-section/ngt-section.component';
8
8
  import { NgtModalComponent } from '../ngt-modal/ngt-modal.component';
9
9
  import * as i0 from "@angular/core";
10
+ export declare enum NgtCheckboxMode {
11
+ DEFAULT = "DEFAULT",
12
+ TOGGLE = "TOGGLE",
13
+ SIDE_TOGGLE = "SIDE_TOGGLE",
14
+ RADIO = "RADIO"
15
+ }
10
16
  export declare class NgtCheckboxComponent extends NgtBaseNgModel implements AfterViewInit, OnChanges, OnDestroy {
11
17
  private injector;
12
18
  private renderer;
@@ -45,9 +51,3 @@ export declare class NgtCheckboxComponent extends NgtBaseNgModel implements Afte
45
51
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtCheckboxComponent, [null, null, { optional: true; host: true; }, { optional: true; self: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
46
52
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtCheckboxComponent, "ngt-checkbox", never, { "label": { "alias": "label"; "required": false; }; "shining": { "alias": "shining"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; "isClickDisabled": { "alias": "isClickDisabled"; "required": false; }; "name": { "alias": "name"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "helpTitle": { "alias": "helpTitle"; "required": false; }; "helpTextColor": { "alias": "helpTextColor"; "required": false; }; "helpText": { "alias": "helpText"; "required": false; }; "helperAutoXReverse": { "alias": "helperAutoXReverse"; "required": false; }; }, {}, never, never, false, never>;
47
53
  }
48
- export declare enum NgtCheckboxMode {
49
- DEFAULT = "DEFAULT",
50
- TOGGLE = "TOGGLE",
51
- SIDE_TOGGLE = "SIDE_TOGGLE",
52
- RADIO = "RADIO"
53
- }
@@ -6,6 +6,30 @@ import { NgtModalComponent } from '../ngt-modal/ngt-modal.component';
6
6
  import { NgtPaginationComponent } from '../ngt-pagination/ngt-pagination.component';
7
7
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
8
8
  import * as i0 from "@angular/core";
9
+ export declare enum NgtDatatableType {
10
+ REMOTE = "REMOTE",
11
+ FIXED = "FIXED"
12
+ }
13
+ export declare enum NgtDatatableSearchType {
14
+ DEFAULT = "DEFAULT",
15
+ SILENT = "SILENT"
16
+ }
17
+ export declare enum NgtDatatableParam {
18
+ STAY_IN_PAGE = 1,
19
+ RESET_PAGE = 0,
20
+ ENABLE_LOADER = 1,
21
+ DISABLE_LOADER = 0
22
+ }
23
+ export declare class NgtCheckedElement {
24
+ id: string;
25
+ checked: boolean;
26
+ reference: any;
27
+ }
28
+ export declare class NgtCustomFilter {
29
+ term: string;
30
+ tagValue: string;
31
+ tagLabel?: string;
32
+ }
9
33
  export declare class NgtDatatableComponent implements OnInit, OnDestroy {
10
34
  private injector;
11
35
  private ngtHttpService;
@@ -99,27 +123,3 @@ export declare class NgtDatatableComponent implements OnInit, OnDestroy {
99
123
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtDatatableComponent, [null, null, null, { optional: true; }]>;
100
124
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtDatatableComponent, "ngt-datatable", never, { "remoteResource": { "alias": "remoteResource"; "required": false; }; "type": { "alias": "type"; "required": false; }; "filterTagBgColor": { "alias": "filterTagBgColor"; "required": false; }; "filterTagMargin": { "alias": "filterTagMargin"; "required": false; }; "paginationMargin": { "alias": "paginationMargin"; "required": false; }; "inputSearch": { "alias": "inputSearch"; "required": false; }; "searchDelay": { "alias": "searchDelay"; "required": false; }; "searchTermMinLength": { "alias": "searchTermMinLength"; "required": false; }; "searchTermOnEnter": { "alias": "searchTermOnEnter"; "required": false; }; "defaultFilters": { "alias": "defaultFilters"; "required": false; }; "filtersDescription": { "alias": "filtersDescription"; "required": false; }; "canSelectAllRegisters": { "alias": "canSelectAllRegisters"; "required": false; }; }, { "onDataChange": "onDataChange"; "onClearFilter": "onClearFilter"; "onClearSelectedElements": "onClearSelectedElements"; "onSelectedElementsChange": "onSelectedElementsChange"; "onToogleAllCheckboxes": "onToogleAllCheckboxes"; "onToogleCheckbox": "onToogleCheckbox"; "onSelectAllRegisters": "onSelectAllRegisters"; "onOpenSearchModal": "onOpenSearchModal"; "onSearch": "onSearch"; }, never, ["*"], false, never>;
101
125
  }
102
- export declare enum NgtDatatableType {
103
- REMOTE = "REMOTE",
104
- FIXED = "FIXED"
105
- }
106
- export declare enum NgtDatatableSearchType {
107
- DEFAULT = "DEFAULT",
108
- SILENT = "SILENT"
109
- }
110
- export declare enum NgtDatatableParam {
111
- STAY_IN_PAGE = 1,
112
- RESET_PAGE = 0,
113
- ENABLE_LOADER = 1,
114
- DISABLE_LOADER = 0
115
- }
116
- export declare class NgtCheckedElement {
117
- id: string;
118
- checked: boolean;
119
- reference: any;
120
- }
121
- export declare class NgtCustomFilter {
122
- term: string;
123
- tagValue: string;
124
- tagLabel?: string;
125
- }
@@ -9,6 +9,14 @@ import { NgtFormComponent } from '../ngt-form/ngt-form.component';
9
9
  import { NgtSectionComponent } from '../ngt-section/ngt-section.component';
10
10
  import { NgtModalComponent } from '../ngt-modal/ngt-modal.component';
11
11
  import * as i0 from "@angular/core";
12
+ export declare enum NgtDateLocale {
13
+ BRAZIL = "BRAZIL",
14
+ US = "US"
15
+ }
16
+ export declare enum NgtDateMode {
17
+ SINGLE = "SINGLE",
18
+ RANGE = "RANGE"
19
+ }
12
20
  export declare class NgtDateComponent extends NgtBaseNgModel implements OnInit, OnDestroy {
13
21
  formContainer: ControlContainer;
14
22
  private injector;
@@ -76,11 +84,3 @@ export declare class NgtDateComponent extends NgtBaseNgModel implements OnInit,
76
84
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtDateComponent, [{ optional: true; host: true; }, null, { optional: true; self: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
77
85
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtDateComponent, "ngt-date", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "helpTitle": { "alias": "helpTitle"; "required": false; }; "helpText": { "alias": "helpText"; "required": false; }; "helpTextColor": { "alias": "helpTextColor"; "required": false; }; "shining": { "alias": "shining"; "required": false; }; "dateFormat": { "alias": "dateFormat"; "required": false; }; "dateFormatNgModel": { "alias": "dateFormatNgModel"; "required": false; }; "showCalendarIcon": { "alias": "showCalendarIcon"; "required": false; }; "helperReverseYPosition": { "alias": "helperReverseYPosition"; "required": false; }; "name": { "alias": "name"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; "isReadonly": { "alias": "isReadonly"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "time_24hr": { "alias": "time_24hr"; "required": false; }; "enableTime": { "alias": "enableTime"; "required": false; }; "noCalendar": { "alias": "noCalendar"; "required": false; }; "minuteIncrement": { "alias": "minuteIncrement"; "required": false; }; "allowInput": { "alias": "allowInput"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "defaultDate": { "alias": "defaultDate"; "required": false; }; "isRequired": { "alias": "isRequired"; "required": false; }; }, {}, never, ["*"], false, never>;
78
86
  }
79
- export declare enum NgtDateLocale {
80
- BRAZIL = "BRAZIL",
81
- US = "US"
82
- }
83
- export declare enum NgtDateMode {
84
- SINGLE = "SINGLE",
85
- RANGE = "RANGE"
86
- }
@@ -1,6 +1,12 @@
1
1
  import { ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, SimpleChanges } from '@angular/core';
2
2
  import { NgtDropdownContainerComponent } from './ngt-dropdown-container/ngt-dropdown-container.component';
3
3
  import * as i0 from "@angular/core";
4
+ export declare enum NgtDropdownOpenMethod {
5
+ CLICK = "CLICK",
6
+ POPOVER_CLICK = "POPOVER_CLICK",
7
+ RIGHT_CLICK = "RIGHT_CLICK",
8
+ HOVER = "HOVER"
9
+ }
4
10
  export declare class NgtDropdownComponent implements OnDestroy {
5
11
  private ngtDropdownContainer;
6
12
  private changeDetector;
@@ -45,9 +51,3 @@ export declare class NgtDropdownComponent implements OnDestroy {
45
51
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtDropdownComponent, [{ optional: true; skipSelf: true; }, null]>;
46
52
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtDropdownComponent, "ngt-dropdown", never, { "scrollable": { "alias": "scrollable"; "required": false; }; "autoXReverse": { "alias": "autoXReverse"; "required": false; }; "autoYReverse": { "alias": "autoYReverse"; "required": false; }; "reverseXPosition": { "alias": "reverseXPosition"; "required": false; }; "reverseYPosition": { "alias": "reverseYPosition"; "required": false; }; "closeOnClick": { "alias": "closeOnClick"; "required": false; }; "closeTimeout": { "alias": "closeTimeout"; "required": false; }; "openMethod": { "alias": "openMethod"; "required": false; }; }, { "onToggle": "onToggle"; "onHostClick": "onHostClick"; }, never, ["[host]", "[container]"], false, never>;
47
53
  }
48
- export declare enum NgtDropdownOpenMethod {
49
- CLICK = "CLICK",
50
- POPOVER_CLICK = "POPOVER_CLICK",
51
- RIGHT_CLICK = "RIGHT_CLICK",
52
- HOVER = "HOVER"
53
- }
@@ -2,6 +2,19 @@ import { Injector } from '@angular/core';
2
2
  import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
3
3
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
4
4
  import * as i0 from "@angular/core";
5
+ export interface NgtFloatingButtonMenu {
6
+ name?: string;
7
+ type: NgtFloatingButtonType;
8
+ icon?: string;
9
+ tooltip?: string;
10
+ externalLink?: boolean;
11
+ url?: string;
12
+ action?: Function;
13
+ }
14
+ export declare enum NgtFloatingButtonType {
15
+ NAVIGATION = "NAVIGATION",
16
+ ACTION = "ACTION"
17
+ }
5
18
  export declare class NgtFloatingButtonComponent {
6
19
  private injector;
7
20
  private ngtStylizableDirective;
@@ -20,16 +33,3 @@ export declare class NgtFloatingButtonComponent {
20
33
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtFloatingButtonComponent, [null, { optional: true; self: true; }]>;
21
34
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtFloatingButtonComponent, "ngt-floating-button", never, { "menus": { "alias": "menus"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "label": { "alias": "label"; "required": false; }; "withAnimation": { "alias": "withAnimation"; "required": false; }; }, {}, never, never, false, never>;
22
35
  }
23
- export interface NgtFloatingButtonMenu {
24
- name?: string;
25
- type: NgtFloatingButtonType;
26
- icon?: string;
27
- tooltip?: string;
28
- externalLink?: boolean;
29
- url?: string;
30
- action?: Function;
31
- }
32
- export declare enum NgtFloatingButtonType {
33
- NAVIGATION = "NAVIGATION",
34
- ACTION = "ACTION"
35
- }
@@ -5,6 +5,10 @@ import { Observable } from 'rxjs';
5
5
  import { NgtHttpFormService } from '../../services/http/ngt-http-form.service';
6
6
  import { NgtAbilityValidationService } from '../../services/validation/ngt-ability-validation.service';
7
7
  import * as i0 from "@angular/core";
8
+ export declare enum NgtFormState {
9
+ CREATING = "CREATING",
10
+ EDITING = "EDITING"
11
+ }
8
12
  export declare class NgtFormComponent implements OnInit, OnDestroy, AfterViewInit {
9
13
  router: Router;
10
14
  route: ActivatedRoute;
@@ -54,7 +58,3 @@ export declare class NgtFormComponent implements OnInit, OnDestroy, AfterViewIni
54
58
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtFormComponent, [null, null, { optional: true; host: true; }, { optional: true; host: true; }, null, null, { optional: true; }]>;
55
59
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtFormComponent, "ngt-form", never, { "guessFormState": { "alias": "guessFormState"; "required": false; }; "message": { "alias": "message"; "required": false; }; "routeIdentifier": { "alias": "routeIdentifier"; "required": false; }; "resource": { "alias": "resource"; "required": false; }; "customLayout": { "alias": "customLayout"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; }, { "onCreating": "onCreating"; "onEditing": "onEditing"; "onLoadingChange": "onLoadingChange"; "onShiningChange": "onShiningChange"; "setupComponent": "setupComponent"; "onResourceLoadingError": "onResourceLoadingError"; }, never, ["*"], false, never>;
56
60
  }
57
- export declare enum NgtFormState {
58
- CREATING = "CREATING",
59
- EDITING = "EDITING"
60
- }
@@ -1,5 +1,10 @@
1
1
  import { EventEmitter, TemplateRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
+ export declare enum NgtPopoverPosition {
4
+ DEFAULT = "TOP",
5
+ TOP = "TOP",
6
+ BOTTOM = "BOTTOM"
7
+ }
3
8
  export declare class NgtPopoverTooltipComponent {
4
9
  onMouseHoverEvent: EventEmitter<void>;
5
10
  onMouseLeaveEvent: EventEmitter<void>;
@@ -15,8 +20,3 @@ export declare class NgtPopoverTooltipComponent {
15
20
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtPopoverTooltipComponent, never>;
16
21
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtPopoverTooltipComponent, "ngt-popover-tooltip", never, {}, { "onMouseHoverEvent": "onMouseHoverEvent"; "onMouseLeaveEvent": "onMouseLeaveEvent"; }, never, never, false, never>;
17
22
  }
18
- export declare enum NgtPopoverPosition {
19
- DEFAULT = "TOP",
20
- TOP = "TOP",
21
- BOTTOM = "BOTTOM"
22
- }
@@ -3,6 +3,12 @@ import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-styl
3
3
  import { NgtTranslateService } from '../../services/http/ngt-translate.service';
4
4
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
5
5
  import * as i0 from "@angular/core";
6
+ export declare enum NgtPopoverOpenMethod {
7
+ CLICK = "CLICK",
8
+ POPOVER_CLICK = "POPOVER_CLICK",
9
+ RIGHT_CLICK = "RIGHT_CLICK",
10
+ HOVER = "HOVER"
11
+ }
6
12
  export declare class NgtPopoverComponent {
7
13
  ngtStylizableDirective: NgtStylizableDirective;
8
14
  ngtTranslateService: NgtTranslateService;
@@ -23,9 +29,3 @@ export declare class NgtPopoverComponent {
23
29
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtPopoverComponent, [{ optional: true; self: true; }, { optional: true; }, null]>;
24
30
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtPopoverComponent, "ngt-popover", never, { "closeTimeout": { "alias": "closeTimeout"; "required": false; }; "openMethod": { "alias": "openMethod"; "required": false; }; "closeOnClick": { "alias": "closeOnClick"; "required": false; }; "placeOnBottom": { "alias": "placeOnBottom"; "required": false; }; "placeOnLeft": { "alias": "placeOnLeft"; "required": false; }; }, { "onClick": "onClick"; }, never, ["*", "[popover-content]"], false, never>;
25
31
  }
26
- export declare enum NgtPopoverOpenMethod {
27
- CLICK = "CLICK",
28
- POPOVER_CLICK = "POPOVER_CLICK",
29
- RIGHT_CLICK = "RIGHT_CLICK",
30
- HOVER = "HOVER"
31
- }
@@ -11,6 +11,14 @@ import { NgtFormComponent } from '../ngt-form/ngt-form.component';
11
11
  import { NgtSectionComponent } from '../ngt-section/ngt-section.component';
12
12
  import { NgtModalComponent } from '../ngt-modal/ngt-modal.component';
13
13
  import * as i0 from "@angular/core";
14
+ export declare enum NgtSelectDropdownPanelHeight {
15
+ AUTO = "auto",
16
+ XS = "xs",
17
+ MD = "md",
18
+ SM = "sm",
19
+ LG = "lg",
20
+ XL = "xl"
21
+ }
14
22
  export declare class NgtSelectComponent extends NgtBaseNgModel implements OnChanges, OnDestroy, OnInit, DoCheck {
15
23
  ngtStylizableDirective: NgtStylizableDirective;
16
24
  formContainer: ControlContainer;
@@ -144,11 +152,3 @@ export declare class NgtSelectComponent extends NgtBaseNgModel implements OnChan
144
152
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtSelectComponent, [{ optional: true; self: true; }, { optional: true; host: true; }, { optional: true; }, null, null, null, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }, { optional: true; skipSelf: true; }]>;
145
153
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtSelectComponent, "ngt-select", never, { "label": { "alias": "label"; "required": false; }; "labelIcon": { "alias": "labelIcon"; "required": false; }; "labelIconColor": { "alias": "labelIconColor"; "required": false; }; "helpTitle": { "alias": "helpTitle"; "required": false; }; "helpText": { "alias": "helpText"; "required": false; }; "helpTextColor": { "alias": "helpTextColor"; "required": false; }; "shining": { "alias": "shining"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "loadingText": { "alias": "loadingText"; "required": false; }; "notFoundText": { "alias": "notFoundText"; "required": false; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; }; "typeToSearchText": { "alias": "typeToSearchText"; "required": false; }; "clearAllTooltip": { "alias": "clearAllTooltip"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "createText": { "alias": "createText"; "required": false; }; "labelForId": { "alias": "labelForId"; "required": false; }; "dropdownPanelMinHeight": { "alias": "dropdownPanelMinHeight"; "required": false; }; "helperReverseYPosition": { "alias": "helperReverseYPosition"; "required": false; }; "helperAutoXReverse": { "alias": "helperAutoXReverse"; "required": false; }; "name": { "alias": "name"; "required": false; }; "autoLoad": { "alias": "autoLoad"; "required": false; }; "allowCreate": { "alias": "allowCreate"; "required": false; }; "allowOriginalItemsUnselect": { "alias": "allowOriginalItemsUnselect"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; "isReadonly": { "alias": "isReadonly"; "required": false; }; "remoteResource": { "alias": "remoteResource"; "required": false; }; "hideSelected": { "alias": "hideSelected"; "required": false; }; "bindLabel": { "alias": "bindLabel"; "required": false; }; "bindValue": { "alias": "bindValue"; "required": false; }; "items": { "alias": "items"; "required": false; }; "inputAttrs": { "alias": "inputAttrs"; "required": false; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "groupBy": { "alias": "groupBy"; "required": false; }; "maxSelectedItems": { "alias": "maxSelectedItems"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "clearSearchOnAdd": { "alias": "clearSearchOnAdd"; "required": false; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "typeahead": { "alias": "typeahead"; "required": false; }; "guessCompareWith": { "alias": "guessCompareWith"; "required": false; }; "autoSelectUniqueOption": { "alias": "autoSelectUniqueOption"; "required": false; }; "groupValue": { "alias": "groupValue"; "required": false; }; "trackBy": { "alias": "trackBy"; "required": false; }; "sortSelectedItemsFn": { "alias": "sortSelectedItemsFn"; "required": false; }; "isAllowedToRemoveFn": { "alias": "isAllowedToRemoveFn"; "required": false; }; "isRequired": { "alias": "isRequired"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; }, { "onLoadRemoteResource": "onLoadRemoteResource"; "onSelectedItemRemove": "onSelectedItemRemove"; "onClear": "onClear"; "onClose": "onClose"; }, ["ngtOptionTemplate", "ngtOptionSelectedTemplate", "ngtSelectHeaderTemplate"], never, false, never>;
146
154
  }
147
- export declare enum NgtSelectDropdownPanelHeight {
148
- AUTO = "auto",
149
- XS = "xs",
150
- MD = "md",
151
- SM = "sm",
152
- LG = "lg",
153
- XL = "xl"
154
- }
@@ -2,6 +2,12 @@ import { Injector } from '@angular/core';
2
2
  import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
3
3
  import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
4
4
  import * as i0 from "@angular/core";
5
+ export declare enum NgtShiningWidth {
6
+ xs = "xs",
7
+ sm = "sm",
8
+ lg = "lg",
9
+ xl = "xl"
10
+ }
5
11
  export declare class NgtShiningComponent {
6
12
  private injector;
7
13
  private ngtStylizableDirective;
@@ -11,9 +17,3 @@ export declare class NgtShiningComponent {
11
17
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtShiningComponent, [null, { optional: true; self: true; }]>;
12
18
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtShiningComponent, "ngt-shining", never, { "shiningWidth": { "alias": "shiningWidth"; "required": false; }; }, {}, never, never, false, never>;
13
19
  }
14
- export declare enum NgtShiningWidth {
15
- xs = "xs",
16
- sm = "sm",
17
- lg = "lg",
18
- xl = "xl"
19
- }
@@ -3,6 +3,12 @@ import { ControlContainer } from '@angular/forms';
3
3
  import { NgtBaseNgModel } from '../../base/ngt-base-ng-model';
4
4
  import { NgtFormComponent } from '../ngt-form/ngt-form.component';
5
5
  import * as i0 from "@angular/core";
6
+ export declare enum NgtSliderColorSchemeEnum {
7
+ PRIMARY = "primary",
8
+ SUCCESS = "success",
9
+ WARNING = "warning",
10
+ DANGER = "danger"
11
+ }
6
12
  export declare class NgtSliderComponent extends NgtBaseNgModel implements AfterViewInit, OnDestroy {
7
13
  formContainer: ControlContainer;
8
14
  private renderer;
@@ -28,9 +34,3 @@ export declare class NgtSliderComponent extends NgtBaseNgModel implements AfterV
28
34
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtSliderComponent, [{ optional: true; host: true; }, null, { optional: true; skipSelf: true; }]>;
29
35
  static ɵcmp: i0.ɵɵComponentDeclaration<NgtSliderComponent, "ngt-slider", never, { "label": { "alias": "label"; "required": false; }; "shining": { "alias": "shining"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; "showPercentageSymbol": { "alias": "showPercentageSymbol"; "required": false; }; "name": { "alias": "name"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "color": { "alias": "color"; "required": false; }; }, {}, never, never, false, never>;
30
36
  }
31
- export declare enum NgtSliderColorSchemeEnum {
32
- PRIMARY = "primary",
33
- SUCCESS = "success",
34
- WARNING = "warning",
35
- DANGER = "danger"
36
- }
@@ -1,10 +1,9 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./ngt-svg.component";
3
3
  import * as i2 from "@angular/common";
4
- import * as i3 from "@angular/common/http";
5
- import * as i4 from "angular-svg-icon";
4
+ import * as i3 from "angular-svg-icon";
6
5
  export declare class NgtSvgModule {
7
6
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtSvgModule, never>;
8
- static ɵmod: i0.ɵɵNgModuleDeclaration<NgtSvgModule, [typeof i1.NgtSvgComponent], [typeof i2.CommonModule, typeof i3.HttpClientModule, typeof i4.AngularSvgIconModule], [typeof i1.NgtSvgComponent]>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NgtSvgModule, [typeof i1.NgtSvgComponent], [typeof i2.CommonModule, typeof i3.AngularSvgIconModule], [typeof i1.NgtSvgComponent]>;
9
8
  static ɵinj: i0.ɵɵInjectorDeclaration<NgtSvgModule>;
10
9
  }
@@ -56,10 +56,10 @@ export class NgtActionComponent {
56
56
  this.subscriptions.forEach(subscription => subscription.unsubscribe());
57
57
  this.subscriptions = [];
58
58
  }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtActionComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.NgtFormComponent, optional: true, skipSelf: true }, { token: i3.NgtSectionComponent, optional: true, skipSelf: true }, { token: i4.NgtModalComponent, optional: true, skipSelf: true }, { token: i5.NgtModalBodyComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NgtActionComponent, selector: "ngt-action", inputs: { href: "href", icon: "icon", ngtStyle: "ngtStyle", isDisabled: "isDisabled", forceEnable: "forceEnable" }, ngImport: i0, template: "<a *ngIf=\"href\"\n [class]=\"disabled() ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n [routerLink]=\"href\" (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\">\n </ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n\n<a *ngIf=\"!href\"\n [class]=\"disabled() ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text', 'border', 'color.border']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\"></ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i8.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }] }); }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtActionComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.NgtFormComponent, optional: true, skipSelf: true }, { token: i3.NgtSectionComponent, optional: true, skipSelf: true }, { token: i4.NgtModalComponent, optional: true, skipSelf: true }, { token: i5.NgtModalBodyComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NgtActionComponent, selector: "ngt-action", inputs: { href: "href", icon: "icon", ngtStyle: "ngtStyle", isDisabled: "isDisabled", forceEnable: "forceEnable" }, ngImport: i0, template: "<a *ngIf=\"href\"\n [class]=\"disabled() ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n [routerLink]=\"href\" (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\">\n </ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n\n<a *ngIf=\"!href\"\n [class]=\"disabled() ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text', 'border', 'color.border']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\"></ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i8.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }] }); }
61
61
  }
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtActionComponent, decorators: [{
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtActionComponent, decorators: [{
63
63
  type: Component,
64
64
  args: [{ selector: 'ngt-action', template: "<a *ngIf=\"href\"\n [class]=\"disabled() ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n [routerLink]=\"href\" (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\">\n </ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>\n\n<a *ngIf=\"!href\"\n [class]=\"disabled() ? 'block rounded-full cursor-not-allowed text-gray-600 bg-gray-400 hover:bg-gray-400 opacity-50' : 'cursor-pointer'\"\n (click)='onClick($event)'>\n <div\n class=\"flex justify-center rounded-full {{ ngtStyle.compile(['h', 'w', 'color.bg', 'color.text', 'px', 'py', 'shadow', 'text', 'border', 'color.border']) }}\">\n <ngt-svg [src]=\"icon\" class='self-center' *ngIf=\"icon\"></ngt-svg>\n <div class=\"self-center\">\n <ng-content></ng-content>\n </div>\n </div>\n</a>" }]
65
65
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.NgtStylizableDirective, decorators: [{
@@ -5,15 +5,15 @@ import { NgtSvgModule } from '../ngt-svg/ngt-svg.module';
5
5
  import { NgtActionComponent } from './ngt-action.component';
6
6
  import * as i0 from "@angular/core";
7
7
  export class NgtActionModule {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: NgtActionModule, declarations: [NgtActionComponent], imports: [CommonModule,
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NgtActionModule, declarations: [NgtActionComponent], imports: [CommonModule,
10
10
  RouterModule,
11
11
  NgtSvgModule], exports: [NgtActionComponent] }); }
12
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtActionModule, imports: [CommonModule,
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtActionModule, imports: [CommonModule,
13
13
  RouterModule,
14
14
  NgtSvgModule] }); }
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtActionModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtActionModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  declarations: [NgtActionComponent],
@@ -102,10 +102,10 @@ export class NgtButtonComponent {
102
102
  this.subscriptions.forEach(subscription => subscription.unsubscribe());
103
103
  this.subscriptions = [];
104
104
  }
105
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtButtonComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i1.NgtFormComponent, optional: true, skipSelf: true }, { token: i2.NgtSectionComponent, optional: true, skipSelf: true }, { token: i3.NgtModalComponent, optional: true, skipSelf: true }, { token: i4.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
106
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NgtButtonComponent, selector: "ngt-button", inputs: { href: "href", type: "type", link: "link", loading: "loading", isDisabled: "isDisabled", forceEnable: "forceEnable", noSubmit: "noSubmit" }, usesOnChanges: true, ngImport: i0, template: "<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n\n<div class=\"relative {{ngtStyle.compile(['w', 'h'])}}\" (click)='onClick($event)'>\n <ng-container *ngIf='!link'>\n <button [ngClass]=\"{ 'disabled-button': disabled(), 'loading-button': loading }\" [disabled]=\"disabled()\"\n [type]=\"(loading || disabled() || noSubmit) ? 'button' : 'submit'\"\n class=\"flex justify-center items-center focus:outline-none cursor-pointer {{ ngtStyle.compile(['color.bg', 'color.text', 'color.border', 'px', 'py', 'border', 'text', 'font', 'w', 'h', 'rounded']) }}\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n\n <span *ngIf=\"loading\" class=\"ml-2\">\n <div class=\"div-loader h-5 w-5\"></div>\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf='link'>\n <a [routerLink]='href ? href : null' [ngClass]=\"{ 'disabled-button': disabled(), 'loading-button': loading }\"\n class=\"flex justify-center items-center focus:outline-none cursor-pointer {{ ngtStyle.compile(['color.bg', 'color.text', 'color.border', 'px', 'py', 'border', 'text', 'font','w', 'h', 'rounded']) }}\">\n <span class=\"w-full\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </span>\n\n <span *ngIf=\"loading\" class=\"ml-1\">\n <div class=\"div-loader\"></div>\n </span>\n </a>\n </ng-container>\n\n <legend *ngIf=\"forceEnable\" class=\"absolute top-0 cursor-pointer hover:opacity-25 hover:bg-gray-100 {{ ngtStyle.compile(['w', 'h']) }}\"\n (click)='onClick($event)'>\n </legend>\n</div>", styles: [".disabled-button{opacity:.5!important;cursor:not-allowed!important}.loading-button{opacity:.5!important;cursor:wait!important}.div-loader{border:3px solid #edf2f738;border-top-color:#edf2f7;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
105
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtButtonComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i1.NgtFormComponent, optional: true, skipSelf: true }, { token: i2.NgtSectionComponent, optional: true, skipSelf: true }, { token: i3.NgtModalComponent, optional: true, skipSelf: true }, { token: i4.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
106
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NgtButtonComponent, selector: "ngt-button", inputs: { href: "href", type: "type", link: "link", loading: "loading", isDisabled: "isDisabled", forceEnable: "forceEnable", noSubmit: "noSubmit" }, usesOnChanges: true, ngImport: i0, template: "<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n\n<div class=\"relative {{ngtStyle.compile(['w', 'h'])}}\" (click)='onClick($event)'>\n <ng-container *ngIf='!link'>\n <button [ngClass]=\"{ 'disabled-button': disabled(), 'loading-button': loading }\" [disabled]=\"disabled()\"\n [type]=\"(loading || disabled() || noSubmit) ? 'button' : 'submit'\"\n class=\"flex justify-center items-center focus:outline-none cursor-pointer {{ ngtStyle.compile(['color.bg', 'color.text', 'color.border', 'px', 'py', 'border', 'text', 'font', 'w', 'h', 'rounded']) }}\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n\n <span *ngIf=\"loading\" class=\"ml-2\">\n <div class=\"div-loader h-5 w-5\"></div>\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf='link'>\n <a [routerLink]='href ? href : null' [ngClass]=\"{ 'disabled-button': disabled(), 'loading-button': loading }\"\n class=\"flex justify-center items-center focus:outline-none cursor-pointer {{ ngtStyle.compile(['color.bg', 'color.text', 'color.border', 'px', 'py', 'border', 'text', 'font','w', 'h', 'rounded']) }}\">\n <span class=\"w-full\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </span>\n\n <span *ngIf=\"loading\" class=\"ml-1\">\n <div class=\"div-loader\"></div>\n </span>\n </a>\n </ng-container>\n\n <legend *ngIf=\"forceEnable\" class=\"absolute top-0 cursor-pointer hover:opacity-25 hover:bg-gray-100 {{ ngtStyle.compile(['w', 'h']) }}\"\n (click)='onClick($event)'>\n </legend>\n</div>", styles: [".disabled-button{opacity:.5!important;cursor:not-allowed!important}.loading-button{opacity:.5!important;cursor:wait!important}.div-loader{border:3px solid #edf2f738;border-top-color:#edf2f7;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
107
107
  }
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtButtonComponent, decorators: [{
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtButtonComponent, decorators: [{
109
109
  type: Component,
110
110
  args: [{ selector: 'ngt-button', template: "<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n\n<div class=\"relative {{ngtStyle.compile(['w', 'h'])}}\" (click)='onClick($event)'>\n <ng-container *ngIf='!link'>\n <button [ngClass]=\"{ 'disabled-button': disabled(), 'loading-button': loading }\" [disabled]=\"disabled()\"\n [type]=\"(loading || disabled() || noSubmit) ? 'button' : 'submit'\"\n class=\"flex justify-center items-center focus:outline-none cursor-pointer {{ ngtStyle.compile(['color.bg', 'color.text', 'color.border', 'px', 'py', 'border', 'text', 'font', 'w', 'h', 'rounded']) }}\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n\n <span *ngIf=\"loading\" class=\"ml-2\">\n <div class=\"div-loader h-5 w-5\"></div>\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf='link'>\n <a [routerLink]='href ? href : null' [ngClass]=\"{ 'disabled-button': disabled(), 'loading-button': loading }\"\n class=\"flex justify-center items-center focus:outline-none cursor-pointer {{ ngtStyle.compile(['color.bg', 'color.text', 'color.border', 'px', 'py', 'border', 'text', 'font','w', 'h', 'rounded']) }}\">\n <span class=\"w-full\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </span>\n\n <span *ngIf=\"loading\" class=\"ml-1\">\n <div class=\"div-loader\"></div>\n </span>\n </a>\n </ng-container>\n\n <legend *ngIf=\"forceEnable\" class=\"absolute top-0 cursor-pointer hover:opacity-25 hover:bg-gray-100 {{ ngtStyle.compile(['w', 'h']) }}\"\n (click)='onClick($event)'>\n </legend>\n</div>", styles: [".disabled-button{opacity:.5!important;cursor:not-allowed!important}.loading-button{opacity:.5!important;cursor:wait!important}.div-loader{border:3px solid #edf2f738;border-top-color:#edf2f7;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
111
111
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.NgtFormComponent, decorators: [{
@@ -5,15 +5,15 @@ import { NgtFormModule } from '../ngt-form/ngt-form.module';
5
5
  import { NgtButtonComponent } from './ngt-button.component';
6
6
  import * as i0 from "@angular/core";
7
7
  export class NgtButtonModule {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: NgtButtonModule, declarations: [NgtButtonComponent], imports: [CommonModule,
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NgtButtonModule, declarations: [NgtButtonComponent], imports: [CommonModule,
10
10
  RouterModule,
11
11
  NgtFormModule], exports: [NgtButtonComponent] }); }
12
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtButtonModule, imports: [CommonModule,
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtButtonModule, imports: [CommonModule,
13
13
  RouterModule,
14
14
  NgtFormModule] }); }
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtButtonModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtButtonModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  declarations: [NgtButtonComponent],
@@ -13,6 +13,13 @@ import * as i5 from "../ngt-modal/ngt-modal.component";
13
13
  import * as i6 from "@angular/common";
14
14
  import * as i7 from "../ngt-shining/ngt-shining.component";
15
15
  import * as i8 from "../ngt-helper/ngt-helper.component";
16
+ export var NgtCheckboxMode;
17
+ (function (NgtCheckboxMode) {
18
+ NgtCheckboxMode["DEFAULT"] = "DEFAULT";
19
+ NgtCheckboxMode["TOGGLE"] = "TOGGLE";
20
+ NgtCheckboxMode["SIDE_TOGGLE"] = "SIDE_TOGGLE";
21
+ NgtCheckboxMode["RADIO"] = "RADIO";
22
+ })(NgtCheckboxMode || (NgtCheckboxMode = {}));
16
23
  export class NgtCheckboxComponent extends NgtBaseNgModel {
17
24
  constructor(injector, renderer, formContainer, ngtStylizableDirective, ngtForm, ngtSection, ngtModal) {
18
25
  super();
@@ -98,8 +105,8 @@ export class NgtCheckboxComponent extends NgtBaseNgModel {
98
105
  this.subscriptions.forEach(subscription => subscription.unsubscribe());
99
106
  this.subscriptions = [];
100
107
  }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtCheckboxComponent, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i1.ControlContainer, host: true, optional: true }, { token: i2.NgtStylizableDirective, optional: true, self: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i4.NgtSectionComponent, optional: true, skipSelf: true }, { token: i5.NgtModalComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
102
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NgtCheckboxComponent, selector: "ngt-checkbox", inputs: { label: "label", shining: "shining", isDisabled: "isDisabled", isClickDisabled: "isClickDisabled", name: "name", mode: "mode", helpTitle: "helpTitle", helpTextColor: "helpTextColor", helpText: "helpText", helperAutoXReverse: "helperAutoXReverse" }, providers: [
108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtCheckboxComponent, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i1.ControlContainer, host: true, optional: true }, { token: i2.NgtStylizableDirective, optional: true, self: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i4.NgtSectionComponent, optional: true, skipSelf: true }, { token: i5.NgtModalComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NgtCheckboxComponent, selector: "ngt-checkbox", inputs: { label: "label", shining: "shining", isDisabled: "isDisabled", isClickDisabled: "isClickDisabled", name: "name", mode: "mode", helpTitle: "helpTitle", helpTextColor: "helpTextColor", helpText: "helpText", helperAutoXReverse: "helperAutoXReverse" }, providers: [
103
110
  NgtMakeProvider(NgtCheckboxComponent)
104
111
  ], viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label class=\"flex items-center {{ disabled() ? 'cursor-not-allowed opacity-50' : 'cursor-pointer' }}\"\n [class.flex-col]='isToggleMode()' style=\"max-width: max-content;\">\n <input type=\"checkbox\" [name]='name' class=\"hidden\" ([ngModel])='value' [disabled]=\"disabled() || isClickDisabled\"\n #element>\n\n <span *ngIf=\"isToggleMode() && label\" class=\"flex\">\n <span class=\"{{ ngtStyle.compile(['text', 'fontCase']) }} mb-2\">{{ label }}</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n </span>\n\n <ng-container *ngIf=\"isDefaultMode()\">\n <div style=\"transition: background-color .2s ease-out\" class=\"{{ value ? ngtStyle.compile(['color.bg']) : 'bg-white' }} {{ ngtStyle.compile(['h', 'w']) }}\n shadow rounded border border-gray-400 {{ !shining ? 'flex justify-center' : 'hidden' }}\">\n <svg class=\"fill-current self-center text-white pointer-events-none\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\">\n <path d=\"M0 11l2-2 5 5L18 3l2 2L7 18z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isRadioMode()\">\n <div style=\"transition: background-color .2s ease-out\"\n class=\"{{ value ? ngtStyle.compile(['color.border', 'color.text']) : 'border-gray-500' }}\n shadow w-6 h-6 rounded-full border-2 border-gray-400 {{ !shining ? 'flex justify-center' : 'hidden' }}\">\n <svg *ngIf=\"value\" class=\"fill-current self-center h-3\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 29.107 29.107\">\n <path\n d=\"M14.554 0C6.561 0 0 6.562 0 14.552c0 7.996 6.561 14.555 14.554 14.555 7.996 0 14.553-6.559 14.553-14.555C29.106 6.562 22.55 0 14.554 0z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isToggleMode() || isSideToggleMode()\">\n <div class=\"shadow w-14 h-7 rounded-full border border-gray-400 {{ shining ? 'hidden' : 'flex' }}\"\n [class.justify-end]=\"value\" style=\"padding: 1px;\">\n <div *ngIf=\"value\"\n class=\"flex text-sm text-white {{ ngtStyle.compile(['color.bg']) }} pointer-events-none rounded-full px-1.5 py-2\"\n @slideLeftToRight>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n <path d=\"M0 11l2-2 5 5L18 3l2 2L7 18z\" />\n </svg>\n </div>\n\n <div *ngIf=\"!value\" class=\"flex text-xl text-white bg-gray-300 pointer-events-none rounded-full px-1 py-3\"\n @slideRightToLeft>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path class=\"heroicon-ui\"\n d=\"M16.24 14.83a1 1 0 0 1-1.41 1.41L12 13.41l-2.83 2.83a1 1 0 0 1-1.41-1.41L10.59 12 7.76 9.17a1 1 0 0 1 1.41-1.41L12 10.59l2.83-2.83a1 1 0 0 1 1.41 1.41L13.41 12l2.83 2.83z\" />\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf='label && !shining && !isToggleMode()'>\n <span class=\"{{ ngtStyle.compile(['text', 'fontCase']) }} ml-2\">{{ label }}</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n </ng-container>\n</label>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"w-16 h-12\"></ngt-shining>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i8.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }], viewProviders: [
105
112
  { provide: ControlContainer, useExisting: NgForm }
@@ -118,7 +125,7 @@ export class NgtCheckboxComponent extends NgtBaseNgModel {
118
125
  ])
119
126
  ] }); }
120
127
  }
121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtCheckboxComponent, decorators: [{
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgtCheckboxComponent, decorators: [{
122
129
  type: Component,
123
130
  args: [{ selector: 'ngt-checkbox', providers: [
124
131
  NgtMakeProvider(NgtCheckboxComponent)
@@ -182,11 +189,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
182
189
  }], helperAutoXReverse: [{
183
190
  type: Input
184
191
  }] } });
185
- export var NgtCheckboxMode;
186
- (function (NgtCheckboxMode) {
187
- NgtCheckboxMode["DEFAULT"] = "DEFAULT";
188
- NgtCheckboxMode["TOGGLE"] = "TOGGLE";
189
- NgtCheckboxMode["SIDE_TOGGLE"] = "SIDE_TOGGLE";
190
- NgtCheckboxMode["RADIO"] = "RADIO";
191
- })(NgtCheckboxMode || (NgtCheckboxMode = {}));
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1jaGVja2JveC9uZ3QtY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWNoZWNrYm94L25ndC1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFFSCxTQUFTLEVBRVQsSUFBSSxFQUVKLEtBQUssRUFHTCxRQUFRLEVBRVIsSUFBSSxFQUVKLFFBQVEsRUFDUixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7QUE4QjVGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUFjO0lBa0JwRCxZQUNZLFFBQWtCLEVBQ2xCLFFBQW1CLEVBR3BCLGFBQStCLEVBRzlCLHNCQUE4QyxFQUc5QyxPQUF5QixFQUd6QixVQUErQixFQUcvQixRQUEyQjtRQUVuQyxLQUFLLEVBQUUsQ0FBQztRQWxCQSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFHcEIsa0JBQWEsR0FBYixhQUFhLENBQWtC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QVM7c0JBQXhCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGtCQUFrQjtzQkFBakMsS0FBSzs7QUE4R1YsTUFBTSxDQUFOLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN2QixzQ0FBbUIsQ0FBQTtJQUNuQixvQ0FBaUIsQ0FBQTtJQUNqQiw4Q0FBMkIsQ0FBQTtJQUMzQixrQ0FBZSxDQUFBO0FBQ25CLENBQUMsRUFMVyxlQUFlLEtBQWYsZUFBZSxRQUsxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd0QmFzZU5nTW9kZWwsIE5ndE1ha2VQcm92aWRlciB9IGZyb20gJy4uLy4uL2Jhc2Uvbmd0LWJhc2UtbmctbW9kZWwnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IGdldEVudW1Gcm9tU3RyaW5nIH0gZnJvbSAnLi4vLi4vaGVscGVycy9lbnVtL2VudW0nO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0U2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL25ndC1zZWN0aW9uL25ndC1zZWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3RNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL25ndC1tb2RhbC9uZ3QtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtY2hlY2tib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3QtY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0Q2hlY2tib3hDb21wb25lbnQpXG4gICAgXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3NsaWRlTGVmdFRvUmlnaHQnLCBbXG4gICAgICAgICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtNHB4KSByb3RhdGUoNDVkZWcpJywgb3BhY2l0eTogMCB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgyMDApXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKSxcblxuICAgICAgICB0cmlnZ2VyKCdzbGlkZVJpZ2h0VG9MZWZ0JywgW1xuICAgICAgICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoNHB4KSByb3RhdGUoNDVkZWcpJywgb3BhY2l0eTogMCB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgyMDApXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd0Q2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCdlbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzQ2xpY2tEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIG1vZGU6IE5ndENoZWNrYm94TW9kZSA9IE5ndENoZWNrYm94TW9kZS5ERUZBVUxUO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHRDb2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNTAwJztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscGVyQXV0b1hSZXZlcnNlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcblxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0Rm9ybTogTmd0Rm9ybUNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFNlY3Rpb246IE5ndFNlY3Rpb25Db21wb25lbnQsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RNb2RhbDogTmd0TW9kYWxDb21wb25lbnRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5uZ3RTdHlsaXphYmxlRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLm5ndFN0eWxlID0gdGhpcy5uZ3RTdHlsaXphYmxlRGlyZWN0aXZlLmdldE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5ndFN0eWxlID0gbmV3IE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5ndFN0eWxlLmxvYWQodGhpcy5pbmplY3RvciwgJ05ndENoZWNrYm94Jywge1xuICAgICAgICAgICAgaDogJ2gtNicsXG4gICAgICAgICAgICB3OiAndy02JyxcbiAgICAgICAgICAgIHRleHQ6ICd0ZXh0LXNtJyxcbiAgICAgICAgICAgIGZvbnRDYXNlOiAnJyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgYmc6ICdiZy1ncmF5LTUwMCcsXG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS01MDAnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJ2JvcmRlci1ncmF5LTUwMCcsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnY2hhbmdlJywgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uTmF0aXZlQ2hhbmdlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5tb2RlKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGUgPSBnZXRFbnVtRnJvbVN0cmluZyhjaGFuZ2VzLm1vZGUuY3VycmVudFZhbHVlLCBOZ3RDaGVja2JveE1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscygpKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25OYXRpdmVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHMoKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCAhPT0gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUb2dnbGVNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBOZ3RDaGVja2JveE1vZGUuVE9HR0xFO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1NpZGVUb2dnbGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBOZ3RDaGVja2JveE1vZGUuU0lERV9UT0dHTEU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRGVmYXVsdE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE5ndENoZWNrYm94TW9kZS5ERUZBVUxUO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1JhZGlvTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gTmd0Q2hlY2tib3hNb2RlLlJBRElPO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzRGlzYWJsZWRCeVBhcmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNEaXNhYmxlZEJ5UGFyZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ3RGb3JtPy5pc0Rpc2FibGVkXG4gICAgICAgICAgICB8fCB0aGlzLm5ndFNlY3Rpb24/LmlzRGlzYWJsZWRcbiAgICAgICAgICAgIHx8IHRoaXMubmd0TW9kYWw/LmlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBOZ3RDaGVja2JveE1vZGUge1xuICAgIERFRkFVTFQgPSAnREVGQVVMVCcsXG4gICAgVE9HR0xFID0gJ1RPR0dMRScsXG4gICAgU0lERV9UT0dHTEUgPSAnU0lERV9UT0dHTEUnLFxuICAgIFJBRElPID0gJ1JBRElPJ1xufVxuIiwiPGxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIge3sgZGlzYWJsZWQoKSA/ICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MCcgOiAnY3Vyc29yLXBvaW50ZXInIH19XCJcbiAgICBbY2xhc3MuZmxleC1jb2xdPSdpc1RvZ2dsZU1vZGUoKScgc3R5bGU9XCJtYXgtd2lkdGg6IG1heC1jb250ZW50O1wiPlxuICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbbmFtZV09J25hbWUnIGNsYXNzPVwiaGlkZGVuXCIgKFtuZ01vZGVsXSk9J3ZhbHVlJyBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKSB8fCBpc0NsaWNrRGlzYWJsZWRcIlxuICAgICAgICAjZWxlbWVudD5cblxuICAgIDxzcGFuICpuZ0lmPVwiaXNUb2dnbGVNb2RlKCkgJiYgbGFiZWxcIiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBuZ3RTdHlsZS5jb21waWxlKFsndGV4dCcsICdmb250Q2FzZSddKSB9fSBtYi0yXCI+e3sgbGFiZWwgfX08L3NwYW4+XG5cbiAgICAgICAgPG5ndC1oZWxwZXIgKm5nSWY9XCJoZWxwVGV4dFwiIFtoZWxwVGl0bGVdPVwiaGVscFRpdGxlXCIgW2ljb25Db2xvcl09XCJoZWxwVGV4dENvbG9yXCJcbiAgICAgICAgICAgIFthdXRvWFJldmVyc2VdPVwiaGVscGVyQXV0b1hSZXZlcnNlXCIgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgICAgICB7eyBoZWxwVGV4dCB9fVxuICAgICAgICA8L25ndC1oZWxwZXI+XG4gICAgPC9zcGFuPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVmYXVsdE1vZGUoKVwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwidHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZS1vdXRcIiBjbGFzcz1cInt7IHZhbHVlID8gbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLmJnJ10pIDogJ2JnLXdoaXRlJyB9fSAge3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnLCAndyddKSB9fVxuICAgICAgICAgICAgICAgICAgICBzaGFkb3cgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktNDAwIHt7ICFzaGluaW5nID8gJ2ZsZXgganVzdGlmeS1jZW50ZXInIDogJ2hpZGRlbicgfX1cIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJmaWxsLWN1cnJlbnQgc2VsZi1jZW50ZXIgdGV4dC13aGl0ZSBwb2ludGVyLWV2ZW50cy1ub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAxMWwyLTIgNSA1TDE4IDNsMiAyTDcgMTh6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JhZGlvTW9kZSgpXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJ0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLW91dFwiXG4gICAgICAgICAgICBjbGFzcz1cInt7IHZhbHVlID8gbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLmJvcmRlcicsICdjb2xvci50ZXh0J10pIDogJ2JvcmRlci1ncmF5LTUwMCcgfX1cbiAgICAgICAgICAgICAgICAgICAgc2hhZG93IHctNiBoLTYgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1ncmF5LTQwMCB7eyAhc2hpbmluZyA/ICdmbGV4IGp1c3RpZnktY2VudGVyJyA6ICdoaWRkZW4nIH19XCI+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPVwidmFsdWVcIiBjbGFzcz1cImZpbGwtY3VycmVudCBzZWxmLWNlbnRlciBoLTNcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI5LjEwNyAyOS4xMDdcIj5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjU1NCAwQzYuNTYxIDAgMCA2LjU2MiAwIDE0LjU1MmMwIDcuOTk2IDYuNTYxIDE0LjU1NSAxNC41NTQgMTQuNTU1IDcuOTk2IDAgMTQuNTUzLTYuNTU5IDE0LjU1My0xNC41NTVDMjkuMTA2IDYuNTYyIDIyLjU1IDAgMTQuNTU0IDB6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RvZ2dsZU1vZGUoKSB8fCBpc1NpZGVUb2dnbGVNb2RlKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvdyB3LTE0IGgtNyByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1ncmF5LTQwMCB7eyBzaGluaW5nID8gJ2hpZGRlbicgOiAnZmxleCcgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLmp1c3RpZnktZW5kXT1cInZhbHVlXCIgc3R5bGU9XCJwYWRkaW5nOiAxcHg7XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB0ZXh0LXNtIHRleHQtd2hpdGUge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLmJnJ10pIH19IHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC1mdWxsIHB4LTEuNSBweS0yXCJcbiAgICAgICAgICAgICAgICBAc2xpZGVMZWZ0VG9SaWdodD5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50IHNlbGYtY2VudGVyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDExbDItMiA1IDVMMTggM2wyIDJMNyAxOHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhdmFsdWVcIiBjbGFzcz1cImZsZXggdGV4dC14bCB0ZXh0LXdoaXRlIGJnLWdyYXktMzAwIHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC1mdWxsIHB4LTEgcHktM1wiXG4gICAgICAgICAgICAgICAgQHNsaWRlUmlnaHRUb0xlZnQ+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImZpbGwtY3VycmVudCBzZWxmLWNlbnRlclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiaGVyb2ljb24tdWlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNi4yNCAxNC44M2ExIDEgMCAwIDEtMS40MSAxLjQxTDEyIDEzLjQxbC0yLjgzIDIuODNhMSAxIDAgMCAxLTEuNDEtMS40MUwxMC41OSAxMiA3Ljc2IDkuMTdhMSAxIDAgMCAxIDEuNDEtMS40MUwxMiAxMC41OWwyLjgzLTIuODNhMSAxIDAgMCAxIDEuNDEgMS40MUwxMy40MSAxMmwyLjgzIDIuODN6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9J2xhYmVsICYmICFzaGluaW5nICYmICFpc1RvZ2dsZU1vZGUoKSc+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ3RleHQnLCAnZm9udENhc2UnXSkgfX0gbWwtMlwiPnt7IGxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxuZ3QtaGVscGVyICpuZ0lmPVwiaGVscFRleHRcIiBbaGVscFRpdGxlXT1cImhlbHBUaXRsZVwiIFtpY29uQ29sb3JdPVwiaGVscFRleHRDb2xvclwiXG4gICAgICAgICAgICBbYXV0b1hSZXZlcnNlXT1cImhlbHBlckF1dG9YUmV2ZXJzZVwiIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICAgICAgPC9uZ3QtaGVscGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9sYWJlbD5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwidy0xNiBoLTEyXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1jaGVja2JveC9uZ3QtY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWNoZWNrYm94L25ndC1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFFSCxTQUFTLEVBRVQsSUFBSSxFQUVKLEtBQUssRUFHTCxRQUFRLEVBRVIsSUFBSSxFQUVKLFFBQVEsRUFDUixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7QUFLNUYsTUFBTSxDQUFOLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN2QixzQ0FBbUIsQ0FBQTtJQUNuQixvQ0FBaUIsQ0FBQTtJQUNqQiw4Q0FBMkIsQ0FBQTtJQUMzQixrQ0FBZSxDQUFBO0FBQ25CLENBQUMsRUFMVyxlQUFlLEtBQWYsZUFBZSxRQUsxQjtBQTJCRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsY0FBYztJQWtCcEQsWUFDWSxRQUFrQixFQUNsQixRQUFtQixFQUdwQixhQUErQixF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O2dCQUV0QixLQUFLO3NCQUFwQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5ndFNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9uZ3Qtc2VjdGlvbi9uZ3Qtc2VjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtbW9kYWwvbmd0LW1vZGFsLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBlbnVtIE5ndENoZWNrYm94TW9kZSB7XG4gICAgREVGQVVMVCA9ICdERUZBVUxUJyxcbiAgICBUT0dHTEUgPSAnVE9HR0xFJyxcbiAgICBTSURFX1RPR0dMRSA9ICdTSURFX1RPR0dMRScsXG4gICAgUkFESU8gPSAnUkFESU8nXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWNoZWNrYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWNoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgTmd0TWFrZVByb3ZpZGVyKE5ndENoZWNrYm94Q29tcG9uZW50KVxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzbGlkZUxlZnRUb1JpZ2h0JywgW1xuICAgICAgICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTRweCkgcm90YXRlKDQ1ZGVnKScsIG9wYWNpdHk6IDAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoMjAwKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSksXG5cbiAgICAgICAgdHJpZ2dlcignc2xpZGVSaWdodFRvTGVmdCcsIFtcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDRweCkgcm90YXRlKDQ1ZGVnKScsIG9wYWNpdHk6IDAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoMjAwKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5ndENoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgTmd0QmFzZU5nTW9kZWwgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnZWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHNoaW5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0NsaWNrRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtb2RlOiBOZ3RDaGVja2JveE1vZGUgPSBOZ3RDaGVja2JveE1vZGUuREVGQVVMVDtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlckF1dG9YUmV2ZXJzZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcblxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpXG4gICAgICAgIHByaXZhdGUgbmd0U3R5bGl6YWJsZURpcmVjdGl2ZTogTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndEZvcm06IE5ndEZvcm1Db21wb25lbnQsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RTZWN0aW9uOiBOZ3RTZWN0aW9uQ29tcG9uZW50LFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0TW9kYWw6IE5ndE1vZGFsQ29tcG9uZW50XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RDaGVja2JveCcsIHtcbiAgICAgICAgICAgIGg6ICdoLTYnLFxuICAgICAgICAgICAgdzogJ3ctNicsXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXG4gICAgICAgICAgICBmb250Q2FzZTogJycsXG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIGJnOiAnYmctZ3JheS01MDAnLFxuICAgICAgICAgICAgICAgIHRleHQ6ICd0ZXh0LWdyYXktNTAwJyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICdib3JkZXItZ3JheS01MDAnLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NoYW5nZScsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubW9kZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gZ2V0RW51bUZyb21TdHJpbmcoY2hhbmdlcy5tb2RlLmN1cnJlbnRWYWx1ZSwgTmd0Q2hlY2tib3hNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95U3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHMoKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQgIT09IHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVG9nZ2xlTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gTmd0Q2hlY2tib3hNb2RlLlRPR0dMRTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTaWRlVG9nZ2xlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gTmd0Q2hlY2tib3hNb2RlLlNJREVfVE9HR0xFO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0RlZmF1bHRNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBOZ3RDaGVja2JveE1vZGUuREVGQVVMVDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNSYWRpb01vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE5ndENoZWNrYm94TW9kZS5SQURJTztcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQgfHwgdGhpcy5pc0Rpc2FibGVkQnlQYXJlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGlzYWJsZWRCeVBhcmVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmd0Rm9ybT8uaXNEaXNhYmxlZFxuICAgICAgICAgICAgfHwgdGhpcy5uZ3RTZWN0aW9uPy5pc0Rpc2FibGVkXG4gICAgICAgICAgICB8fCB0aGlzLm5ndE1vZGFsPy5pc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHt7IGRpc2FibGVkKCkgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnIDogJ2N1cnNvci1wb2ludGVyJyB9fVwiXG4gICAgW2NsYXNzLmZsZXgtY29sXT0naXNUb2dnbGVNb2RlKCknIHN0eWxlPVwibWF4LXdpZHRoOiBtYXgtY29udGVudDtcIj5cbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW25hbWVdPSduYW1lJyBjbGFzcz1cImhpZGRlblwiIChbbmdNb2RlbF0pPSd2YWx1ZScgW2Rpc2FibGVkXT1cImRpc2FibGVkKCkgfHwgaXNDbGlja0Rpc2FibGVkXCJcbiAgICAgICAgI2VsZW1lbnQ+XG5cbiAgICA8c3BhbiAqbmdJZj1cImlzVG9nZ2xlTW9kZSgpICYmIGxhYmVsXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ3RleHQnLCAnZm9udENhc2UnXSkgfX0gbWItMlwiPnt7IGxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxuZ3QtaGVscGVyICpuZ0lmPVwiaGVscFRleHRcIiBbaGVscFRpdGxlXT1cImhlbHBUaXRsZVwiIFtpY29uQ29sb3JdPVwiaGVscFRleHRDb2xvclwiXG4gICAgICAgICAgICBbYXV0b1hSZXZlcnNlXT1cImhlbHBlckF1dG9YUmV2ZXJzZVwiIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICAgICAgPC9uZ3QtaGVscGVyPlxuICAgIDwvc3Bhbj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRNb2RlKClcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cInRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2Utb3V0XCIgY2xhc3M9XCJ7eyB2YWx1ZSA/IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5iZyddKSA6ICdiZy13aGl0ZScgfX0gIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJywgJ3cnXSkgfX1cbiAgICAgICAgICAgICAgICAgICAgc2hhZG93IHJvdW5kZWQgYm9yZGVyIGJvcmRlci1ncmF5LTQwMCB7eyAhc2hpbmluZyA/ICdmbGV4IGp1c3RpZnktY2VudGVyJyA6ICdoaWRkZW4nIH19XCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50IHNlbGYtY2VudGVyIHRleHQtd2hpdGUgcG9pbnRlci1ldmVudHMtbm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMTFsMi0yIDUgNUwxOCAzbDIgMkw3IDE4elwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSYWRpb01vZGUoKVwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwidHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZS1vdXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyB2YWx1ZSA/IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5ib3JkZXInLCAnY29sb3IudGV4dCddKSA6ICdib3JkZXItZ3JheS01MDAnIH19XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvdyB3LTYgaC02IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItZ3JheS00MDAge3sgIXNoaW5pbmcgPyAnZmxleCBqdXN0aWZ5LWNlbnRlcicgOiAnaGlkZGVuJyB9fVwiPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInZhbHVlXCIgY2xhc3M9XCJmaWxsLWN1cnJlbnQgc2VsZi1jZW50ZXIgaC0zXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyOS4xMDcgMjkuMTA3XCI+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC41NTQgMEM2LjU2MSAwIDAgNi41NjIgMCAxNC41NTJjMCA3Ljk5NiA2LjU2MSAxNC41NTUgMTQuNTU0IDE0LjU1NSA3Ljk5NiAwIDE0LjU1My02LjU1OSAxNC41NTMtMTQuNTU1QzI5LjEwNiA2LjU2MiAyMi41NSAwIDE0LjU1NCAwelwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUb2dnbGVNb2RlKCkgfHwgaXNTaWRlVG9nZ2xlTW9kZSgpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3cgdy0xNCBoLTcgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItZ3JheS00MDAge3sgc2hpbmluZyA/ICdoaWRkZW4nIDogJ2ZsZXgnIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy5qdXN0aWZ5LWVuZF09XCJ2YWx1ZVwiIHN0eWxlPVwicGFkZGluZzogMXB4O1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdGV4dC1zbSB0ZXh0LXdoaXRlIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5iZyddKSB9fSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtZnVsbCBweC0xLjUgcHktMlwiXG4gICAgICAgICAgICAgICAgQHNsaWRlTGVmdFRvUmlnaHQ+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImZpbGwtY3VycmVudCBzZWxmLWNlbnRlclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAxMWwyLTIgNSA1TDE4IDNsMiAyTDcgMTh6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXZhbHVlXCIgY2xhc3M9XCJmbGV4IHRleHQteGwgdGV4dC13aGl0ZSBiZy1ncmF5LTMwMCBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtZnVsbCBweC0xIHB5LTNcIlxuICAgICAgICAgICAgICAgIEBzbGlkZVJpZ2h0VG9MZWZ0PlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJmaWxsLWN1cnJlbnQgc2VsZi1jZW50ZXJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImhlcm9pY29uLXVpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYuMjQgMTQuODNhMSAxIDAgMCAxLTEuNDEgMS40MUwxMiAxMy40MWwtMi44MyAyLjgzYTEgMSAwIDAgMS0xLjQxLTEuNDFMMTAuNTkgMTIgNy43NiA5LjE3YTEgMSAwIDAgMSAxLjQxLTEuNDFMMTIgMTAuNTlsMi44My0yLjgzYTEgMSAwIDAgMSAxLjQxIDEuNDFMMTMuNDEgMTJsMi44MyAyLjgzelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSdsYWJlbCAmJiAhc2hpbmluZyAmJiAhaXNUb2dnbGVNb2RlKCknPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWyd0ZXh0JywgJ2ZvbnRDYXNlJ10pIH19IG1sLTJcIj57eyBsYWJlbCB9fTwvc3Bhbj5cblxuICAgICAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIlxuICAgICAgICAgICAgW2F1dG9YUmV2ZXJzZV09XCJoZWxwZXJBdXRvWFJldmVyc2VcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAgICAgIHt7IGhlbHBUZXh0IH19XG4gICAgICAgIDwvbmd0LWhlbHBlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbGFiZWw+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9J3NoaW5pbmcnPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cInctMTYgaC0xMlwiPjwvbmd0LXNoaW5pbmc+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==