ng-tailwind 4.1.13 → 4.1.14

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 (202) hide show
  1. package/README.md +24 -24
  2. package/animations/ngt-angular-animations.d.ts +5 -5
  3. package/base/ngt-base-ng-model.d.ts +32 -32
  4. package/components/ngt-action/ngt-action.component.d.ts +16 -16
  5. package/components/ngt-action/ngt-action.module.d.ts +10 -10
  6. package/components/ngt-button/ngt-button.component.d.ts +25 -25
  7. package/components/ngt-button/ngt-button.module.d.ts +10 -10
  8. package/components/ngt-checkbox/ngt-checkbox.component.d.ts +47 -46
  9. package/components/ngt-checkbox/ngt-checkbox.module.d.ts +10 -10
  10. package/components/ngt-content/ngt-content.component.d.ts +12 -12
  11. package/components/ngt-content/ngt-content.module.d.ts +8 -8
  12. package/components/ngt-datatable/ngt-datatable.component.d.ts +117 -117
  13. package/components/ngt-datatable/ngt-datatable.module.d.ts +24 -24
  14. package/components/ngt-datatable/ngt-tbody/ngt-tbody.component.d.ts +14 -14
  15. package/components/ngt-datatable/ngt-td/ngt-td.component.d.ts +14 -14
  16. package/components/ngt-datatable/ngt-td-check/ngt-td-check.component.d.ts +29 -29
  17. package/components/ngt-datatable/ngt-th/ngt-th.component.d.ts +51 -51
  18. package/components/ngt-datatable/ngt-th-check/ngt-th-check.component.d.ts +22 -22
  19. package/components/ngt-datatable/ngt-thead/ngt-thead.component.d.ts +13 -13
  20. package/components/ngt-datatable/ngt-tr/ngt-tr.component.d.ts +20 -20
  21. package/components/ngt-date/ngt-date.component.d.ts +79 -79
  22. package/components/ngt-date/ngt-date.module.d.ts +13 -13
  23. package/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.d.ts +8 -8
  24. package/components/ngt-dropdown/ngt-dropdown.component.d.ts +53 -53
  25. package/components/ngt-dropdown/ngt-dropdown.module.d.ts +9 -9
  26. package/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.d.ts +14 -14
  27. package/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.d.ts +25 -25
  28. package/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.d.ts +35 -35
  29. package/components/ngt-dropzone/ngt-dropzone.component.d.ts +86 -86
  30. package/components/ngt-dropzone/ngt-dropzone.meta.d.ts +27 -27
  31. package/components/ngt-dropzone/ngt-dropzone.module.d.ts +17 -17
  32. package/components/ngt-floating-button/ngt-floating-button.component.d.ts +35 -35
  33. package/components/ngt-floating-button/ngt-floating-button.module.d.ts +10 -10
  34. package/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.d.ts +10 -10
  35. package/components/ngt-form/ngt-form.component.d.ts +55 -55
  36. package/components/ngt-form/ngt-form.module.d.ts +9 -9
  37. package/components/ngt-header-nav/ngt-header-nav.component.d.ts +14 -14
  38. package/components/ngt-header-nav/ngt-header-nav.module.d.ts +8 -8
  39. package/components/ngt-helper/ngt-helper.component.d.ts +25 -25
  40. package/components/ngt-helper/ngt-helper.module.d.ts +10 -10
  41. package/components/ngt-input/ngt-input.component.d.ts +109 -109
  42. package/components/ngt-input/ngt-input.module.d.ts +14 -14
  43. package/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.d.ts +5 -5
  44. package/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.d.ts +5 -5
  45. package/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.d.ts +15 -15
  46. package/components/ngt-modal/ngt-modal.component.d.ts +25 -25
  47. package/components/ngt-modal/ngt-modal.module.d.ts +11 -11
  48. package/components/ngt-multi-select/ngt-multi-select.component.d.ts +103 -103
  49. package/components/ngt-multi-select/ngt-multi-select.module.d.ts +15 -15
  50. package/components/ngt-pagination/ngt-pagination.component.d.ts +43 -43
  51. package/components/ngt-pagination/ngt-pagination.module.d.ts +12 -12
  52. package/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.d.ts +15 -15
  53. package/components/ngt-popover/ngt-popover.component.d.ts +31 -31
  54. package/components/ngt-popover/ngt-popover.directive.d.ts +27 -27
  55. package/components/ngt-popover/ngt-popover.module.d.ts +11 -11
  56. package/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.d.ts +12 -12
  57. package/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.d.ts +12 -12
  58. package/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.d.ts +17 -17
  59. package/components/ngt-portlet/ngt-portlet.component.d.ts +20 -20
  60. package/components/ngt-portlet/ngt-portlet.module.d.ts +13 -13
  61. package/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.d.ts +9 -9
  62. package/components/ngt-radio-button/ngt-radio-button.component.d.ts +35 -35
  63. package/components/ngt-radio-button/ngt-radio-button.module.d.ts +11 -11
  64. package/components/ngt-section/ngt-section.component.d.ts +29 -29
  65. package/components/ngt-section/ngt-section.module.d.ts +11 -11
  66. package/components/ngt-select/ngt-select.component.d.ts +135 -135
  67. package/components/ngt-select/ngt-select.directive.d.ts +20 -20
  68. package/components/ngt-select/ngt-select.module.d.ts +16 -16
  69. package/components/ngt-shining/ngt-shining.component.d.ts +19 -19
  70. package/components/ngt-shining/ngt-shining.module.d.ts +8 -8
  71. package/components/ngt-sidenav/ngt-sidenav.component.d.ts +32 -32
  72. package/components/ngt-sidenav/ngt-sidenav.module.d.ts +8 -8
  73. package/components/ngt-slider/ngt-slider.component.d.ts +34 -34
  74. package/components/ngt-slider/ngt-slider.module.d.ts +9 -9
  75. package/components/ngt-svg/ngt-svg.component.d.ts +13 -13
  76. package/components/ngt-svg/ngt-svg.module.d.ts +10 -10
  77. package/components/ngt-tag/ngt-tag.component.d.ts +13 -13
  78. package/components/ngt-tag/ngt-tag.module.d.ts +9 -9
  79. package/components/ngt-textarea/ngt-textarea.component.d.ts +49 -49
  80. package/components/ngt-textarea/ngt-textarea.module.d.ts +13 -13
  81. package/components/ngt-validation/ngt-validation.component.d.ts +13 -13
  82. package/components/ngt-validation/ngt-validation.module.d.ts +8 -8
  83. package/directives/ngt-stylizable/ngt-stylizable.directive.d.ts +68 -68
  84. package/directives/ngt-stylizable/ngt-stylizable.module.d.ts +8 -8
  85. package/enums/size.enum.d.ts +8 -8
  86. package/esm2020/animations/ngt-angular-animations.mjs +34 -34
  87. package/esm2020/base/ngt-base-ng-model.mjs +90 -90
  88. package/esm2020/components/ngt-action/ngt-action.component.mjs +54 -54
  89. package/esm2020/components/ngt-action/ngt-action.module.mjs +28 -28
  90. package/esm2020/components/ngt-button/ngt-button.component.mjs +115 -115
  91. package/esm2020/components/ngt-button/ngt-button.module.mjs +28 -28
  92. package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +177 -175
  93. package/esm2020/components/ngt-checkbox/ngt-checkbox.module.mjs +28 -28
  94. package/esm2020/components/ngt-content/ngt-content.component.mjs +32 -32
  95. package/esm2020/components/ngt-content/ngt-content.module.mjs +20 -20
  96. package/esm2020/components/ngt-datatable/ngt-datatable.component.mjs +431 -431
  97. package/esm2020/components/ngt-datatable/ngt-datatable.module.mjs +95 -95
  98. package/esm2020/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +57 -57
  99. package/esm2020/components/ngt-datatable/ngt-td/ngt-td.component.mjs +62 -62
  100. package/esm2020/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +113 -113
  101. package/esm2020/components/ngt-datatable/ngt-th/ngt-th.component.mjs +211 -211
  102. package/esm2020/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +91 -91
  103. package/esm2020/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +55 -55
  104. package/esm2020/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +86 -86
  105. package/esm2020/components/ngt-date/ngt-date.component.mjs +418 -418
  106. package/esm2020/components/ngt-date/ngt-date.module.mjs +40 -40
  107. package/esm2020/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +19 -19
  108. package/esm2020/components/ngt-dropdown/ngt-dropdown.component.mjs +204 -204
  109. package/esm2020/components/ngt-dropdown/ngt-dropdown.module.mjs +21 -21
  110. package/esm2020/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +54 -54
  111. package/esm2020/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +66 -66
  112. package/esm2020/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +94 -94
  113. package/esm2020/components/ngt-dropzone/ngt-dropzone.component.mjs +464 -464
  114. package/esm2020/components/ngt-dropzone/ngt-dropzone.meta.mjs +24 -24
  115. package/esm2020/components/ngt-dropzone/ngt-dropzone.module.mjs +55 -55
  116. package/esm2020/components/ngt-floating-button/ngt-floating-button.component.mjs +119 -119
  117. package/esm2020/components/ngt-floating-button/ngt-floating-button.module.mjs +28 -28
  118. package/esm2020/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +22 -22
  119. package/esm2020/components/ngt-form/ngt-form.component.mjs +193 -193
  120. package/esm2020/components/ngt-form/ngt-form.module.mjs +29 -29
  121. package/esm2020/components/ngt-header-nav/ngt-header-nav.component.mjs +39 -39
  122. package/esm2020/components/ngt-header-nav/ngt-header-nav.module.mjs +20 -20
  123. package/esm2020/components/ngt-helper/ngt-helper.component.mjs +68 -68
  124. package/esm2020/components/ngt-helper/ngt-helper.module.mjs +28 -28
  125. package/esm2020/components/ngt-input/ngt-input.component.mjs +722 -722
  126. package/esm2020/components/ngt-input/ngt-input.module.mjs +47 -47
  127. package/esm2020/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +11 -11
  128. package/esm2020/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +11 -11
  129. package/esm2020/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +38 -38
  130. package/esm2020/components/ngt-modal/ngt-modal.component.mjs +102 -102
  131. package/esm2020/components/ngt-modal/ngt-modal.module.mjs +39 -39
  132. package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +446 -446
  133. package/esm2020/components/ngt-multi-select/ngt-multi-select.module.mjs +52 -52
  134. package/esm2020/components/ngt-pagination/ngt-pagination.component.mjs +162 -162
  135. package/esm2020/components/ngt-pagination/ngt-pagination.module.mjs +36 -36
  136. package/esm2020/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +40 -40
  137. package/esm2020/components/ngt-popover/ngt-popover.component.mjs +85 -85
  138. package/esm2020/components/ngt-popover/ngt-popover.directive.mjs +105 -105
  139. package/esm2020/components/ngt-popover/ngt-popover.module.mjs +36 -36
  140. package/esm2020/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +34 -34
  141. package/esm2020/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +33 -33
  142. package/esm2020/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +53 -53
  143. package/esm2020/components/ngt-portlet/ngt-portlet.component.mjs +74 -74
  144. package/esm2020/components/ngt-portlet/ngt-portlet.module.mjs +47 -47
  145. package/esm2020/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +19 -19
  146. package/esm2020/components/ngt-radio-button/ngt-radio-button.component.mjs +125 -125
  147. package/esm2020/components/ngt-radio-button/ngt-radio-button.module.mjs +29 -29
  148. package/esm2020/components/ngt-section/ngt-section.component.mjs +119 -119
  149. package/esm2020/components/ngt-section/ngt-section.module.mjs +32 -32
  150. package/esm2020/components/ngt-select/ngt-select.component.mjs +552 -552
  151. package/esm2020/components/ngt-select/ngt-select.directive.mjs +36 -36
  152. package/esm2020/components/ngt-select/ngt-select.module.mjs +65 -65
  153. package/esm2020/components/ngt-shining/ngt-shining.component.mjs +40 -40
  154. package/esm2020/components/ngt-shining/ngt-shining.module.mjs +20 -20
  155. package/esm2020/components/ngt-sidenav/ngt-sidenav.component.mjs +132 -132
  156. package/esm2020/components/ngt-sidenav/ngt-sidenav.module.mjs +20 -20
  157. package/esm2020/components/ngt-slider/ngt-slider.component.mjs +99 -99
  158. package/esm2020/components/ngt-slider/ngt-slider.module.mjs +24 -24
  159. package/esm2020/components/ngt-svg/ngt-svg.component.mjs +53 -53
  160. package/esm2020/components/ngt-svg/ngt-svg.module.mjs +28 -28
  161. package/esm2020/components/ngt-tag/ngt-tag.component.mjs +37 -37
  162. package/esm2020/components/ngt-tag/ngt-tag.module.mjs +24 -24
  163. package/esm2020/components/ngt-textarea/ngt-textarea.component.mjs +238 -238
  164. package/esm2020/components/ngt-textarea/ngt-textarea.module.mjs +43 -43
  165. package/esm2020/components/ngt-validation/ngt-validation.component.mjs +26 -26
  166. package/esm2020/components/ngt-validation/ngt-validation.module.mjs +20 -20
  167. package/esm2020/directives/ngt-stylizable/ngt-stylizable.directive.mjs +290 -290
  168. package/esm2020/directives/ngt-stylizable/ngt-stylizable.module.mjs +20 -20
  169. package/esm2020/enums/size.enum.mjs +11 -11
  170. package/esm2020/helpers/enum/enum.mjs +7 -7
  171. package/esm2020/helpers/form/form.mjs +14 -14
  172. package/esm2020/helpers/input-mask/input-mask.helper.mjs +23 -23
  173. package/esm2020/helpers/routing/route.mjs +11 -11
  174. package/esm2020/helpers/uuid.mjs +10 -10
  175. package/esm2020/ng-tailwind.mjs +4 -4
  176. package/esm2020/public-api.mjs +121 -121
  177. package/esm2020/services/http/ngt-attachment-http.service.mjs +3 -3
  178. package/esm2020/services/http/ngt-http-form.service.mjs +3 -3
  179. package/esm2020/services/http/ngt-http-resource.service.mjs +3 -3
  180. package/esm2020/services/http/ngt-http-validation.service.mjs +3 -3
  181. package/esm2020/services/http/ngt-http.service.mjs +3 -3
  182. package/esm2020/services/http/ngt-translate.service.mjs +3 -3
  183. package/esm2020/services/ngt-stylizable/ngt-stylizable.service.mjs +273 -273
  184. package/fesm2015/ng-tailwind.mjs +7792 -7790
  185. package/fesm2015/ng-tailwind.mjs.map +1 -1
  186. package/fesm2020/ng-tailwind.mjs +7655 -7653
  187. package/fesm2020/ng-tailwind.mjs.map +1 -1
  188. package/helpers/enum/enum.d.ts +1 -1
  189. package/helpers/form/form.d.ts +4 -4
  190. package/helpers/input-mask/input-mask.helper.d.ts +17 -17
  191. package/helpers/routing/route.d.ts +2 -2
  192. package/helpers/uuid.d.ts +1 -1
  193. package/index.d.ts +5 -5
  194. package/package.json +1 -1
  195. package/public-api.d.ts +83 -83
  196. package/services/http/ngt-attachment-http.service.d.ts +10 -10
  197. package/services/http/ngt-http-form.service.d.ts +5 -5
  198. package/services/http/ngt-http-resource.service.d.ts +12 -12
  199. package/services/http/ngt-http-validation.service.d.ts +11 -11
  200. package/services/http/ngt-http.service.d.ts +27 -27
  201. package/services/http/ngt-translate.service.d.ts +29 -29
  202. package/services/ngt-stylizable/ngt-stylizable.service.d.ts +96 -96
@@ -1,552 +1,552 @@
1
- import { Component, ContentChild, EventEmitter, Host, Input, Optional, Output, Self, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
2
- import { ControlContainer, NgForm } from '@angular/forms';
3
- import { NgSelectComponent } from '@ng-select/ng-select';
4
- import { Observable, Subject } from 'rxjs';
5
- import { NgtBaseNgModel, NgtMakeProvider } from '../../base/ngt-base-ng-model';
6
- import { getEnumFromString } from '../../helpers/enum/enum';
7
- import { uuid } from '../../helpers/uuid';
8
- import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
9
- import { NgtSelectHeaderTmp, NgtSelectOptionSelectedTmp, NgtSelectOptionTmp } from './ngt-select.directive';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "../../directives/ngt-stylizable/ngt-stylizable.directive";
12
- import * as i2 from "@angular/forms";
13
- import * as i3 from "../ngt-form/ngt-form.component";
14
- import * as i4 from "../../services/http/ngt-http.service";
15
- import * as i5 from "../../services/http/ngt-translate.service";
16
- import * as i6 from "@angular/common";
17
- import * as i7 from "@ng-select/ng-select";
18
- import * as i8 from "../ngt-validation/ngt-validation.component";
19
- import * as i9 from "../ngt-shining/ngt-shining.component";
20
- import * as i10 from "../ngt-helper/ngt-helper.component";
21
- import * as i11 from "../ngt-svg/ngt-svg.component";
22
- export class NgtSelectComponent extends NgtBaseNgModel {
23
- constructor(ngtStylizableDirective, injector, formContainer, ngtFormComponent, ngtHttp, changeDetector, ngtTranslateService) {
24
- super();
25
- this.ngtStylizableDirective = ngtStylizableDirective;
26
- this.injector = injector;
27
- this.formContainer = formContainer;
28
- this.ngtFormComponent = ngtFormComponent;
29
- this.ngtHttp = ngtHttp;
30
- this.changeDetector = changeDetector;
31
- this.ngtTranslateService = ngtTranslateService;
32
- /** Visual */
33
- this.label = '';
34
- this.helpTextColor = 'text-green-500';
35
- this.shining = false;
36
- this.loading = false;
37
- this.loadingText = '';
38
- this.notFoundText = '';
39
- this.dropdownPosition = 'auto';
40
- this.typeToSearchText = '';
41
- this.clearAllTooltip = '';
42
- this.placeholder = '';
43
- this.createText = '';
44
- this.labelForId = '';
45
- this.dropdownPanelMinHeight = NgtSelectDropdownPanelHeight.AUTO;
46
- this.allowCreate = false;
47
- this.allowOriginalItemsUnselect = true;
48
- this.isDisabled = false;
49
- this.isReadonly = false;
50
- this.bindLabel = 'name';
51
- this.items = [];
52
- this.closeOnSelect = true;
53
- this.clearable = true;
54
- this.groupBy = null;
55
- this.multiple = false;
56
- this.searchable = true;
57
- this.clearSearchOnAdd = true;
58
- this.virtualScroll = true;
59
- this.guessCompareWith = true;
60
- /** Validation */
61
- this.isRequired = false;
62
- this.onLoadRemoteResource = new EventEmitter();
63
- this.onClear = new EventEmitter();
64
- this.nativeName = uuid();
65
- this.ngSelectItems = [];
66
- this.componentReady = false;
67
- this.originalPerPage = 15;
68
- this.subscriptions = [];
69
- this.currentState = {
70
- filters: {},
71
- sort: {
72
- field: '',
73
- direction: ''
74
- },
75
- pagination: {
76
- count: null,
77
- page: 1,
78
- pages: null,
79
- total: null,
80
- from: null,
81
- to: null,
82
- per_page: null
83
- }
84
- };
85
- this.compareWith = (a, b) => a === b;
86
- if (this.ngtFormComponent) {
87
- this.shining = this.ngtFormComponent.isShining();
88
- this.subscriptions.push(this.ngtFormComponent.onShiningChange.subscribe((shining) => {
89
- this.shining = shining;
90
- }));
91
- }
92
- if (this.ngtStylizableDirective) {
93
- this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
94
- }
95
- else {
96
- this.ngtStyle = new NgtStylizableService();
97
- }
98
- this.ngtStyle.load(this.injector, 'NgtSelect', {
99
- h: 'h-12',
100
- text: 'text-sm',
101
- fontCase: '',
102
- color: {
103
- bg: 'bg-white'
104
- }
105
- });
106
- }
107
- ngOnInit() {
108
- if (!this.formContainer) {
109
- console.error("The element must be inside a <form #form='ngForm'> tag!");
110
- }
111
- if (!this.name) {
112
- console.error("The element must contain a name attribute!");
113
- }
114
- if (!this.multiple && this.isRequired) {
115
- this.clearable = false;
116
- }
117
- if (this.multiple) {
118
- this.closeOnSelect = false;
119
- }
120
- setTimeout(() => {
121
- this.componentReady = true;
122
- this.initComponentValidation();
123
- }, 500);
124
- this.ngSelectItems = new Observable((observer) => {
125
- this.ngSearchObserver = observer;
126
- observer.next([]);
127
- });
128
- }
129
- ngAfterViewInit() {
130
- this.bindInnerInputUniqueId();
131
- }
132
- ngDoCheck() {
133
- if (!this.hadFirstItemsLoad && this.canLoadItems()) {
134
- this.hadFirstItemsLoad = true;
135
- this.initNgSelectItems();
136
- setTimeout(() => {
137
- this.replaceShowAddTag();
138
- this.ngSelectComponent.itemsList.mapSelectedItems();
139
- if (!this.getElementTitle() || this.getElementTitle() === 'null') {
140
- this.ngSelectComponent.element.parentElement.parentElement.parentElement.title = '';
141
- }
142
- this.originalItems = this.ngSelectComponent.selectedItems?.map((element) => element.value);
143
- this.changeDetector.detectChanges();
144
- }, 500);
145
- }
146
- }
147
- ngOnDestroy() {
148
- this.destroySubscriptions();
149
- }
150
- removeItem(event, item) {
151
- event.preventDefault();
152
- event.stopPropagation();
153
- return this.ngSelectComponent.clearItem(item);
154
- }
155
- refresh() {
156
- this.initNgSelectItems();
157
- this.initComponentValidation();
158
- }
159
- reset() {
160
- this.value = undefined;
161
- this.nativeValue = undefined;
162
- this.refresh();
163
- }
164
- ngOnChanges(changes) {
165
- if (changes.isRequired) {
166
- this.updateValidations();
167
- }
168
- if (changes.remoteResource || changes.items) {
169
- this.initNgSelectItems();
170
- }
171
- if (changes.dropdownPanelMinHeight) {
172
- this.dropdownPanelMinHeight = getEnumFromString(changes.dropdownPanelMinHeight.currentValue, NgtSelectDropdownPanelHeight);
173
- }
174
- }
175
- setFocus() {
176
- setTimeout(() => {
177
- this.ngSelectComponent.focus();
178
- });
179
- }
180
- onClearSelect() {
181
- if (!this.nativeValue) {
182
- this.markAsPristine();
183
- }
184
- this.currentState.filters = {};
185
- this.onClear.emit();
186
- }
187
- onRemoveSelectedItem(item) {
188
- if (!this.allowOriginalItemsUnselect && this.hadPreviousSelection(item.value)) {
189
- setTimeout(() => this.ngSelectComponent.select(item));
190
- }
191
- }
192
- getFilterInputValue() {
193
- let inputField = this.ngSelectComponent.searchInput ?
194
- this.ngSelectComponent.searchInput :
195
- this.ngSelectComponent['searchInput'];
196
- if (inputField &&
197
- inputField.nativeElement) {
198
- return inputField.nativeElement.value;
199
- }
200
- }
201
- search(filters) {
202
- this.currentState.filters = { ...this.currentState.filters, ...filters };
203
- if (!this.remoteResource) {
204
- return;
205
- }
206
- if (this.searchTimeout) {
207
- clearTimeout(this.searchTimeout);
208
- }
209
- this.loading = true;
210
- this.changeDetector.detectChanges();
211
- this.searchTimeout = setTimeout(() => {
212
- this.subscriptions.push(this.ngtHttp
213
- .get(this.remoteResource, this.currentState.filters, this.currentState.pagination)
214
- .subscribe((response) => {
215
- this.loading = false;
216
- this.bindCompareWithByResponse(response);
217
- this.ngSearchObserver.next(response.data);
218
- this.onLoadRemoteResource.emit(response.data);
219
- this.currentState.pagination = response.meta.pagination;
220
- this.changeDetector.detectChanges();
221
- }, (error) => {
222
- this.loading = false;
223
- this.changeDetector.detectChanges();
224
- console.error(error);
225
- this.ngSearchObserver.next([]);
226
- }));
227
- }, 500);
228
- }
229
- onNativeChange(value) {
230
- if (this.hasChangesBetweenModels(this.value, value)) {
231
- this.value = value;
232
- }
233
- }
234
- change(value) {
235
- if (this.hasChangesBetweenModels(value, this.nativeValue)) {
236
- if (Array.isArray(value)) {
237
- value = value.map((val) => val);
238
- }
239
- this.nativeValue = value;
240
- if (!value) {
241
- this.markAsPristine();
242
- }
243
- }
244
- }
245
- onScroll({ end }) {
246
- let currentPerPage = this.currentState.pagination.per_page;
247
- let maxItensInBackend = this.currentState.pagination.total;
248
- if (end >= currentPerPage && end <= maxItensInBackend) {
249
- this.currentState.pagination.per_page = parseInt(this.currentState.pagination.per_page) + this.originalPerPage;
250
- this.search({});
251
- }
252
- }
253
- hasSelectedValue() {
254
- return this.value && JSON.stringify(this.value);
255
- }
256
- getSelectClass() {
257
- let selectClass = this.dropdownPanelMinHeight ? 'ng-select-dropdown-panel-' + this.dropdownPanelMinHeight : 'ng-select-dropdown-panel-auto';
258
- if (this.isDisabled) {
259
- selectClass += ' select-border-disabled';
260
- }
261
- else if (this.formControl && this.formControl.errors && (this.formControl.dirty || (this.formContainer && this.formContainer['submitted']))) {
262
- selectClass += ' select-border-error';
263
- }
264
- else {
265
- selectClass += ' select-border-normal';
266
- }
267
- if (this.multiple) {
268
- selectClass += ` h-auto ${this.ngtStyle.compile(['color.bg', 'color.text'])}`;
269
- }
270
- else {
271
- selectClass += ` ${this.ngtStyle.compile(['h', 'color.bg', 'color.text'])}`;
272
- }
273
- return selectClass;
274
- }
275
- initNgSelectItems() {
276
- if (this.remoteResource && this.canLoadItems()) {
277
- this.ngSelectItems = new Observable(observer => {
278
- this.ngSearchObserver = observer;
279
- this.search({});
280
- });
281
- this.typeahead = new Subject();
282
- this.subscriptions.push(this.typeahead.subscribe((term) => {
283
- this.search({ term: term });
284
- }));
285
- }
286
- else if (this.items instanceof Observable) {
287
- this.ngSelectItems = this.items;
288
- }
289
- else {
290
- if (!this.items) {
291
- this.items = [];
292
- }
293
- this.ngSelectItems = new Observable((observer) => {
294
- this.ngSearchObserver = observer;
295
- observer.next(this.items);
296
- });
297
- }
298
- }
299
- initComponentValidation() {
300
- if (this.formContainer && this.formContainer.control && (this.formControl = this.formContainer.control.get(this.name))) {
301
- this.formControl = this.formContainer.control.get(this.name);
302
- this.markAsPristine();
303
- this.updateValidations();
304
- }
305
- }
306
- getElementTitle() {
307
- return this.ngSelectComponent.element.parentElement.parentElement.parentElement.title;
308
- }
309
- hasChangesBetweenModels(value, nativeValue) {
310
- return JSON.stringify(value) !== JSON.stringify(nativeValue);
311
- }
312
- updateValidations() {
313
- if (!this.formControl) {
314
- return;
315
- }
316
- let syncValidators = [];
317
- if (this.isRequired) {
318
- syncValidators.push(this.isRequiredValidator());
319
- }
320
- setTimeout(() => {
321
- this.formControl.setValidators(syncValidators);
322
- this.formControl.updateValueAndValidity();
323
- });
324
- }
325
- isRequiredValidator() {
326
- return (control) => {
327
- if (this.multiple) {
328
- if (Array.isArray(this.value) && this.value.length > 0) {
329
- return null;
330
- }
331
- }
332
- else if (control.value && JSON.stringify(control.value)) {
333
- return null;
334
- }
335
- return { 'required': true };
336
- };
337
- }
338
- replaceShowAddTag() {
339
- Object.defineProperty(this.ngSelectComponent, 'showAddTag', {
340
- get: () => {
341
- if (!this.ngSelectComponent['searchTerm']) {
342
- return false;
343
- }
344
- const term = this.ngSelectComponent['searchTerm'].toLocaleLowerCase();
345
- return this.ngSelectComponent.addTag && !this.ngSelectComponent.loading
346
- && (!this.hasTermInFilteredItems(term) && (!this.hasTermInSelectedItems(term)
347
- || !this.ngSelectComponent.hideSelected && this.ngSelectComponent.isOpen));
348
- }
349
- });
350
- }
351
- bindInnerInputUniqueId() {
352
- const childInputs = this.ngSelectComponent.element.getElementsByTagName('input');
353
- if (childInputs?.length) {
354
- const innerInput = childInputs[0];
355
- innerInput.id = uuid();
356
- }
357
- }
358
- bindCompareWithByResponse(response) {
359
- if (this.guessCompareWith) {
360
- if (response.data?.length && typeof response.data[0]['getApiId'] === 'function') {
361
- this.compareWith = (a, b) => a.getApiId() == b.getApiId();
362
- }
363
- else {
364
- this.compareWith = (a, b) => a === b;
365
- }
366
- }
367
- }
368
- hasTermInFilteredItems(term) {
369
- const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
370
- if (filteredItems?.length && this.isColoquentResource()) {
371
- return filteredItems.some((element) => {
372
- const elementValue = element.value.getAttribute(this.bindLabel);
373
- return elementValue && elementValue.toLocaleLowerCase() === term;
374
- });
375
- }
376
- return filteredItems.some((element) => {
377
- const elementValue = element.value[this.bindLabel];
378
- return elementValue && elementValue.toLocaleLowerCase() === term;
379
- });
380
- }
381
- hasTermInSelectedItems(term) {
382
- const selectedItems = this.ngSelectComponent.selectedItems;
383
- if (selectedItems?.length && this.isColoquentResource()) {
384
- return selectedItems.some((element) => {
385
- const elementValue = element.value.getAttribute(this.bindLabel);
386
- return elementValue && elementValue.toLocaleLowerCase() === term;
387
- });
388
- }
389
- return selectedItems.some((element) => {
390
- const elementValue = element.value[this.bindLabel];
391
- return elementValue && elementValue.toLocaleLowerCase() === term;
392
- });
393
- }
394
- hadPreviousSelection(item) {
395
- return !!this.originalItems?.find(element => this.compareWith(element, item));
396
- }
397
- isColoquentResource() {
398
- const items = this.ngSelectComponent.itemsList.items;
399
- return items?.length && typeof items[0].value['getAttribute'] === 'function';
400
- }
401
- canLoadItems() {
402
- return this.autoLoad || (!this.isDisabled && this.wasClicked);
403
- }
404
- destroySubscriptions() {
405
- this.subscriptions.forEach(subscription => subscription.unsubscribe());
406
- this.subscriptions = [];
407
- }
408
- }
409
- NgtSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtSelectComponent, deps: [{ token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i0.Injector }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i4.NgtHttpService }, { token: i0.ChangeDetectorRef }, { token: i5.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
410
- NgtSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NgtSelectComponent, selector: "ngt-select", inputs: { label: "label", labelIcon: "labelIcon", labelIconColor: "labelIconColor", helpTitle: "helpTitle", helpText: "helpText", helpTextColor: "helpTextColor", shining: "shining", loading: "loading", loadingText: "loadingText", notFoundText: "notFoundText", dropdownPosition: "dropdownPosition", typeToSearchText: "typeToSearchText", clearAllTooltip: "clearAllTooltip", placeholder: "placeholder", createText: "createText", labelForId: "labelForId", dropdownPanelMinHeight: "dropdownPanelMinHeight", helperReverseYPosition: "helperReverseYPosition", name: "name", autoLoad: "autoLoad", allowCreate: "allowCreate", allowOriginalItemsUnselect: "allowOriginalItemsUnselect", isDisabled: "isDisabled", isReadonly: "isReadonly", remoteResource: "remoteResource", hideSelected: "hideSelected", bindLabel: "bindLabel", bindValue: "bindValue", items: "items", inputAttrs: "inputAttrs", closeOnSelect: "closeOnSelect", clearable: "clearable", groupBy: "groupBy", maxSelectedItems: "maxSelectedItems", multiple: "multiple", searchable: "searchable", clearSearchOnAdd: "clearSearchOnAdd", virtualScroll: "virtualScroll", tabIndex: "tabIndex", typeahead: "typeahead", guessCompareWith: "guessCompareWith", groupValue: "groupValue", trackBy: "trackBy", isRequired: "isRequired", compareWith: "compareWith" }, outputs: { onLoadRemoteResource: "onLoadRemoteResource", onClear: "onClear" }, providers: [
411
- NgtMakeProvider(NgtSelectComponent)
412
- ], queries: [{ propertyName: "ngtOptionTemplate", first: true, predicate: NgtSelectOptionTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtOptionSelectedTemplate", first: true, predicate: NgtSelectOptionSelectedTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtSelectHeaderTemplate", first: true, predicate: NgtSelectHeaderTmp, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelectComponent", first: true, predicate: NgSelectComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" [helperReverseYPosition]=\"helperReverseYPosition\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ getSelectClass() }} normal-case\" style=\"min-height: 3rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [disabled]='isDisabled || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\"\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\n (click)=\"wasClicked = true\">\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:3rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i7.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i7.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: i8.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i9.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i10.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }, { kind: "component", type: i11.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], viewProviders: [
413
- { provide: ControlContainer, useExisting: NgForm }
414
- ], encapsulation: i0.ViewEncapsulation.None });
415
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgtSelectComponent, decorators: [{
416
- type: Component,
417
- args: [{ selector: 'ngt-select', providers: [
418
- NgtMakeProvider(NgtSelectComponent)
419
- ], viewProviders: [
420
- { provide: ControlContainer, useExisting: NgForm }
421
- ], encapsulation: ViewEncapsulation.None, template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" [helperReverseYPosition]=\"helperReverseYPosition\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ getSelectClass() }} normal-case\" style=\"min-height: 3rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [disabled]='isDisabled || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\"\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\n (click)=\"wasClicked = true\">\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:3rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"] }]
422
- }], ctorParameters: function () { return [{ type: i1.NgtStylizableDirective, decorators: [{
423
- type: Optional
424
- }, {
425
- type: Self
426
- }] }, { type: i0.Injector }, { type: i2.ControlContainer, decorators: [{
427
- type: Optional
428
- }, {
429
- type: Host
430
- }] }, { type: i3.NgtFormComponent, decorators: [{
431
- type: Optional
432
- }, {
433
- type: SkipSelf
434
- }] }, { type: i4.NgtHttpService }, { type: i0.ChangeDetectorRef }, { type: i5.NgtTranslateService, decorators: [{
435
- type: Optional
436
- }] }]; }, propDecorators: { ngSelectComponent: [{
437
- type: ViewChild,
438
- args: [NgSelectComponent, { static: true }]
439
- }], ngtOptionTemplate: [{
440
- type: ContentChild,
441
- args: [NgtSelectOptionTmp, { read: TemplateRef }]
442
- }], ngtOptionSelectedTemplate: [{
443
- type: ContentChild,
444
- args: [NgtSelectOptionSelectedTmp, { read: TemplateRef }]
445
- }], ngtSelectHeaderTemplate: [{
446
- type: ContentChild,
447
- args: [NgtSelectHeaderTmp, { read: TemplateRef }]
448
- }], label: [{
449
- type: Input
450
- }], labelIcon: [{
451
- type: Input
452
- }], labelIconColor: [{
453
- type: Input
454
- }], helpTitle: [{
455
- type: Input
456
- }], helpText: [{
457
- type: Input
458
- }], helpTextColor: [{
459
- type: Input
460
- }], shining: [{
461
- type: Input
462
- }], loading: [{
463
- type: Input
464
- }], loadingText: [{
465
- type: Input
466
- }], notFoundText: [{
467
- type: Input
468
- }], dropdownPosition: [{
469
- type: Input
470
- }], typeToSearchText: [{
471
- type: Input
472
- }], clearAllTooltip: [{
473
- type: Input
474
- }], placeholder: [{
475
- type: Input
476
- }], createText: [{
477
- type: Input
478
- }], labelForId: [{
479
- type: Input
480
- }], dropdownPanelMinHeight: [{
481
- type: Input
482
- }], helperReverseYPosition: [{
483
- type: Input
484
- }], name: [{
485
- type: Input
486
- }], autoLoad: [{
487
- type: Input
488
- }], allowCreate: [{
489
- type: Input
490
- }], allowOriginalItemsUnselect: [{
491
- type: Input
492
- }], isDisabled: [{
493
- type: Input
494
- }], isReadonly: [{
495
- type: Input
496
- }], remoteResource: [{
497
- type: Input
498
- }], hideSelected: [{
499
- type: Input
500
- }], bindLabel: [{
501
- type: Input
502
- }], bindValue: [{
503
- type: Input
504
- }], items: [{
505
- type: Input
506
- }], inputAttrs: [{
507
- type: Input
508
- }], closeOnSelect: [{
509
- type: Input
510
- }], clearable: [{
511
- type: Input
512
- }], groupBy: [{
513
- type: Input
514
- }], maxSelectedItems: [{
515
- type: Input
516
- }], multiple: [{
517
- type: Input
518
- }], searchable: [{
519
- type: Input
520
- }], clearSearchOnAdd: [{
521
- type: Input
522
- }], virtualScroll: [{
523
- type: Input
524
- }], tabIndex: [{
525
- type: Input
526
- }], typeahead: [{
527
- type: Input
528
- }], guessCompareWith: [{
529
- type: Input
530
- }], groupValue: [{
531
- type: Input
532
- }], trackBy: [{
533
- type: Input
534
- }], isRequired: [{
535
- type: Input
536
- }], onLoadRemoteResource: [{
537
- type: Output
538
- }], onClear: [{
539
- type: Output
540
- }], compareWith: [{
541
- type: Input
542
- }] } });
543
- export var NgtSelectDropdownPanelHeight;
544
- (function (NgtSelectDropdownPanelHeight) {
545
- NgtSelectDropdownPanelHeight["AUTO"] = "auto";
546
- NgtSelectDropdownPanelHeight["XS"] = "xs";
547
- NgtSelectDropdownPanelHeight["MD"] = "md";
548
- NgtSelectDropdownPanelHeight["SM"] = "sm";
549
- NgtSelectDropdownPanelHeight["LG"] = "lg";
550
- NgtSelectDropdownPanelHeight["XL"] = "xl";
551
- })(NgtSelectDropdownPanelHeight || (NgtSelectDropdownPanelHeight = {}));
552
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlbGVjdC9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBWSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQVksT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWM1RyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQTJGbEQsWUFFVyxzQkFBOEMs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c0JBQXZCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFHVSxVQUFVO3NCQUF6QixLQUFLO2dCQUVXLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQTJFUyxXQUFXO3NCQUExQixLQUFLOztBQXVZVixNQUFNLENBQU4sSUFBWSw0QkFPWDtBQVBELFdBQVksNEJBQTRCO0lBQ3BDLDZDQUFhLENBQUE7SUFDYix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFQVyw0QkFBNEIsS0FBNUIsNEJBQTRCLFFBT3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERvQ2hlY2ssXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ09wdGlvbiwgTmdTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V1aWQnO1xuaW1wb3J0IHsgTmd0SHR0cFJlc3BvbnNlLCBOZ3RIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0U2VsZWN0SGVhZGVyVG1wLCBOZ3RTZWxlY3RPcHRpb25TZWxlY3RlZFRtcCwgTmd0U2VsZWN0T3B0aW9uVG1wIH0gZnJvbSAnLi9uZ3Qtc2VsZWN0LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0U2VsZWN0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIERvQ2hlY2sge1xuICAgIEBWaWV3Q2hpbGQoTmdTZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBuZ1NlbGVjdENvbXBvbmVudDogTmdTZWxlY3RDb21wb25lbnQ7XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RPcHRpb25UbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoTmd0U2VsZWN0T3B0aW9uU2VsZWN0ZWRUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RIZWFkZXJUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndFNlbGVjdEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFZpc3VhbCAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbEljb25Db2xvcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHRDb2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNTAwJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgbm90Rm91bmRUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbiA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZVRvU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyQWxsVG9vbHRpcDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsRm9ySWQ6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93blBhbmVsTWluSGVpZ2h0OiBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0ID0gTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodC5BVVRPO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwZXJSZXZlcnNlWVBvc2l0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqIEJlaGF2aW9yICovXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93Q3JlYXRlOiBib29sZWFuIHwgUHJvbWlzZTxhbnk+IHwgRnVuY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVtb3RlUmVzb3VyY2U6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZVNlbGVjdGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBiaW5kTGFiZWw6IHN0cmluZyA9ICduYW1lJztcbiAgICBASW5wdXQoKSBwdWJsaWMgYmluZFZhbHVlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zOiBBcnJheTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+ID0gW107XG4gICAgQElucHV0KCkgcHVibGljIGlucHV0QXR0cnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgQElucHV0KCkgcHVibGljIGNsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cEJ5OiBzdHJpbmcgfCBGdW5jdGlvbiA9IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIG1heFNlbGVjdGVkSXRlbXM6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyU2VhcmNoT25BZGQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgdGFiSW5kZXg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZWFoZWFkOiBTdWJqZWN0PGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGd1ZXNzQ29tcGFyZVdpdGg6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cFZhbHVlOiAoZ3JvdXBLZXk6IHN0cmluZywgY2lsZHJlbjogYW55W10pID0+IE9iamVjdDtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHJhY2tCeTogKGl0ZW06IGFueSkgPT4gYW55O1xuXG4gICAgLyoqIFZhbGlkYXRpb24gKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkxvYWRSZW1vdGVSZXNvdXJjZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ2xlYXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBuYXRpdmVOYW1lID0gdXVpZCgpO1xuICAgIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG4gICAgcHVibGljIG5nU2VsZWN0SXRlbXM6IGFueSA9IFtdO1xuICAgIHB1YmxpYyBuYXRpdmVWYWx1ZTogYW55O1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyB3YXNDbGlja2VkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBuZ1NlYXJjaE9ic2VydmVyOiBPYnNlcnZlcjxhbnk+O1xuICAgIHByaXZhdGUgb3JpZ2luYWxQZXJQYWdlID0gMTU7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG4gICAgcHJpdmF0ZSBvcmlnaW5hbEl0ZW1zOiBBcnJheTxhbnk+O1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RhdGUgPSB7XG4gICAgICAgIGZpbHRlcnM6IHt9LFxuICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICBmaWVsZDogJycsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIGNvdW50OiBudWxsLFxuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIHBhZ2VzOiBudWxsLFxuICAgICAgICAgICAgdG90YWw6IG51bGwsXG4gICAgICAgICAgICBmcm9tOiBudWxsLFxuICAgICAgICAgICAgdG86IG51bGwsXG4gICAgICAgICAgICBwZXJfcGFnZTogbnVsbFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2VhcmNoVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgaGFkRmlyc3RJdGVtc0xvYWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKClcbiAgICAgICAgcHVibGljIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwdWJsaWMgbmd0Rm9ybUNvbXBvbmVudDogTmd0Rm9ybUNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBuZ3RIdHRwOiBOZ3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gdGhpcy5uZ3RGb3JtQ29tcG9uZW50LmlzU2hpbmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm1Db21wb25lbnQub25TaGluaW5nQ2hhbmdlLnN1YnNjcmliZSgoc2hpbmluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RTZWxlY3QnLCB7XG4gICAgICAgICAgICBoOiAnaC0xMicsXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXG4gICAgICAgICAgICBmb250Q2FzZTogJycsXG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIGJnOiAnYmctd2hpdGUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb21wYXJlV2l0aCA9IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYjtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGJlIGluc2lkZSBhIDxmb3JtICNmb3JtPSduZ0Zvcm0nPiB0YWchXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGNvbnRhaW4gYSBuYW1lIGF0dHJpYnV0ZSFcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VPblNlbGVjdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbXBvbmVudFZhbGlkYXRpb24oKTtcbiAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChbXSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYmluZElubmVySW5wdXRVbmlxdWVJZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oYWRGaXJzdEl0ZW1zTG9hZCAmJiB0aGlzLmNhbkxvYWRJdGVtcygpKSB7XG4gICAgICAgICAgICB0aGlzLmhhZEZpcnN0SXRlbXNMb2FkID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VTaG93QWRkVGFnKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5tYXBTZWxlY3RlZEl0ZW1zKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0RWxlbWVudFRpdGxlKCkgfHwgdGhpcy5nZXRFbGVtZW50VGl0bGUoKSA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcz8ubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95U3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmNsZWFySXRlbShpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVmcmVzaCgpIHtcbiAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xuICAgICAgICB0aGlzLmluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5yZW1vdGVSZXNvdXJjZSB8fCBjaGFuZ2VzLml0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPSBnZXRFbnVtRnJvbVN0cmluZyhjaGFuZ2VzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQuY3VycmVudFZhbHVlLCBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGb2N1cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VsZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMubmF0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMgPSB7fTtcblxuICAgICAgICB0aGlzLm9uQ2xlYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZVNlbGVjdGVkSXRlbShpdGVtOiBOZ09wdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3QgJiYgdGhpcy5oYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtLnZhbHVlKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdChpdGVtKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVySW5wdXRWYWx1ZSgpIHtcbiAgICAgICAgbGV0IGlucHV0RmllbGQgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlYXJjaElucHV0ID9cbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VhcmNoSW5wdXQgOlxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoSW5wdXQnXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpbnB1dEZpZWxkICYmXG4gICAgICAgICAgICBpbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycyA9IHsgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycywgLi4uZmlsdGVycyB9O1xuXG4gICAgICAgIGlmICghdGhpcy5yZW1vdGVSZXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KHRoaXMucmVtb3RlUmVzb3VyY2UsIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMsIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IE5ndEh0dHBSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRSZW1vdGVSZXNvdXJjZS5lbWl0KHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbiA9IHJlc3BvbnNlLm1ldGEucGFnaW5hdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OYXRpdmVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModGhpcy52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHZhbHVlLCB0aGlzLm5hdGl2ZVZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHZhbCkgPT4gdmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2Nyb2xsKHsgZW5kIH0pIHtcbiAgICAgICAgbGV0IGN1cnJlbnRQZXJQYWdlID0gdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZTtcbiAgICAgICAgbGV0IG1heEl0ZW5zSW5CYWNrZW5kID0gdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi50b3RhbDtcblxuICAgICAgICBpZiAoZW5kID49IGN1cnJlbnRQZXJQYWdlICYmIGVuZCA8PSBtYXhJdGVuc0luQmFja2VuZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZSA9IHBhcnNlSW50KHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24ucGVyX3BhZ2UpICsgdGhpcy5vcmlnaW5hbFBlclBhZ2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaCh7fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzU2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgJiYgSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlbGVjdENsYXNzKCkge1xuICAgICAgICBsZXQgc2VsZWN0Q2xhc3MgPSB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPyAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLScgKyB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgOiAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLWF1dG8nO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1kaXNhYmxlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtQ29udHJvbCAmJiB0aGlzLmZvcm1Db250cm9sLmVycm9ycyAmJiAodGhpcy5mb3JtQ29udHJvbC5kaXJ0eSB8fCAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10pKSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLWVycm9yJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1ub3JtYWwnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9IGAgaC1hdXRvICR7dGhpcy5uZ3RTdHlsZS5jb21waWxlKFsnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gYCAke3RoaXMubmd0U3R5bGUuY29tcGlsZShbJ2gnLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdENsYXNzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdE5nU2VsZWN0SXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW90ZVJlc291cmNlICYmIHRoaXMuY2FuTG9hZEl0ZW1zKCkpIHtcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCh7fSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5zdWJzY3JpYmUoKHRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiB0ZXJtIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDb21wb25lbnRWYWxpZGF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sICYmICh0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVsZW1lbnRUaXRsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5lbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnRpdGxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModmFsdWUsIG5hdGl2ZVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5hdGl2ZVZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzeW5jVmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy5pc1JlcXVpcmVkVmFsaWRhdG9yKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBKU09OLnN0cmluZ2lmeShjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyAncmVxdWlyZWQnOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlU2hvd0FkZFRhZygpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubmdTZWxlY3RDb21wb25lbnQsICdzaG93QWRkVGFnJywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10udG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmFkZFRhZyAmJiAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5sb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICYmICghdGhpcy5oYXNUZXJtSW5GaWx0ZXJlZEl0ZW1zKHRlcm0pICYmICghdGhpcy5oYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm0pXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5oaWRlU2VsZWN0ZWQgJiYgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pc09wZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kSW5uZXJJbnB1dFVuaXF1ZUlkKCkge1xuICAgICAgICBjb25zdCBjaGlsZElucHV0cyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcblxuICAgICAgICBpZiAoY2hpbGRJbnB1dHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJJbnB1dCA9IGNoaWxkSW5wdXRzWzBdO1xuXG4gICAgICAgICAgICBpbm5lcklucHV0LmlkID0gdXVpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlOiBOZ3RIdHRwUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ3Vlc3NDb21wYXJlV2l0aCkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/Lmxlbmd0aCAmJiB0eXBlb2YgcmVzcG9uc2UuZGF0YVswXVsnZ2V0QXBpSWQnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEuZ2V0QXBpSWQoKSA9PSBiLmdldEFwaUlkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEgPT09IGI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1Rlcm1JbkZpbHRlcmVkSXRlbXModGVybTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zO1xuXG4gICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm06IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWxlY3RlZEl0ZW1zO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vcmlnaW5hbEl0ZW1zPy5maW5kKGVsZW1lbnQgPT4gdGhpcy5jb21wYXJlV2l0aChlbGVtZW50LCBpdGVtKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbG9xdWVudFJlc291cmNlKCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0Lml0ZW1zO1xuXG4gICAgICAgIHJldHVybiBpdGVtcz8ubGVuZ3RoICYmIHR5cGVvZiBpdGVtc1swXS52YWx1ZVsnZ2V0QXR0cmlidXRlJ10gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5Mb2FkSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9Mb2FkIHx8ICghdGhpcy5pc0Rpc2FibGVkICYmIHRoaXMud2FzQ2xpY2tlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0IHtcbiAgICBBVVRPID0gJ2F1dG8nLFxuICAgIFhTID0gJ3hzJyxcbiAgICBNRCA9ICdtZCcsXG4gICAgU00gPSAnc20nLFxuICAgIExHID0gJ2xnJyxcbiAgICBYTCA9ICd4bCdcbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2hpZGRlbl09J3NoaW5pbmcnXG4gICAgY2xhc3M9XCJ7eyBzaGluaW5nID8gJycgOiAnYmxvY2snIH19IHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ3RleHQnLCAnZm9udCcsICdmb250Q2FzZSddKSB9fSBtYi0yIGZsZXhcIj5cbiAgICA8bmd0LXN2ZyAqbmdJZj1cImxhYmVsSWNvblwiIGNsYXNzPVwibXItMSB7e2xhYmVsSWNvbkNvbG9yfX1cIiBzcmM9XCJ7e2xhYmVsSWNvbn19XCI+PC9uZ3Qtc3ZnPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiICpuZ0lmPVwiaXNSZXF1aXJlZFwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIiBbaGVscGVyUmV2ZXJzZVlQb3NpdGlvbl09XCJoZWxwZXJSZXZlcnNlWVBvc2l0aW9uXCIgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgIHt7IGhlbHBUZXh0IH19XG4gICAgPC9uZ3QtaGVscGVyPlxuPC9sYWJlbD5cblxuPGRpdiBbaGlkZGVuXT0nc2hpbmluZycgY2xhc3M9XCJ7eyBnZXRTZWxlY3RDbGFzcygpIH19IG5vcm1hbC1jYXNlXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAzcmVtO1wiPlxuICAgIDxuZy1zZWxlY3QgY2xhc3M9XCJjdXN0b21cIiBbKG5nTW9kZWwpXT0nbmF0aXZlVmFsdWUnIFtuYW1lXT0nbmF0aXZlTmFtZScgW2FkZFRhZ109J2FsbG93Q3JlYXRlJ1xuICAgICAgICBbYWRkVGFnVGV4dF09XCJjcmVhdGVUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Q3JlYXRlVGV4dFwiIFtiaW5kTGFiZWxdPVwiYmluZExhYmVsXCJcbiAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW2hpZGVTZWxlY3RlZF09XCJoaWRlU2VsZWN0ZWRcIiBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZFwiXG4gICAgICAgIFtub3RGb3VuZFRleHRdPVwibm90Rm91bmRUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Tm90Rm91bmRUZXh0XCIgW3NlYXJjaGFibGVdPVwic2VhcmNoYWJsZVwiXG4gICAgICAgIFtkaXNhYmxlZF09J2lzRGlzYWJsZWQgfHwgaXNSZWFkb25seScgW2NsZWFyYWJsZV09XCJjbGVhcmFibGUgJiYgaGFzU2VsZWN0ZWRWYWx1ZSgpXCJcbiAgICAgICAgW2Nsb3NlT25TZWxlY3RdPVwiY2xvc2VPblNlbGVjdFwiIFt0cmFja0J5Rm5dPVwidHJhY2tCeVwiIFtsYWJlbEZvcklkXT1cImxhYmVsRm9ySWRcIlxuICAgICAgICBbdHlwZVRvU2VhcmNoVGV4dF09XCJ0eXBlVG9TZWFyY2hUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0VHlwZVRvU2VhcmNoVGV4dFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdFBsYWNlaG9sZGVyXCIgW2Ryb3Bkb3duUG9zaXRpb25dPVwiZHJvcGRvd25Qb3NpdGlvblwiXG4gICAgICAgIFtncm91cEJ5XT1cImdyb3VwQnlcIiBbY2xlYXJBbGxUZXh0XT1cImNsZWFyQWxsVG9vbHRpcCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdENsZWFyQWxsVG9vbHRpcFwiXG4gICAgICAgIFtjbGVhclNlYXJjaE9uQWRkXT1cImNsZWFyU2VhcmNoT25BZGRcIiBbYmluZFZhbHVlXT1cImJpbmRWYWx1ZVwiIFt2aXJ0dWFsU2Nyb2xsXT1cInZpcnR1YWxTY3JvbGxcIlxuICAgICAgICBbbG9hZGluZ1RleHRdPVwibG9hZGluZ1RleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RMb2FkaW5nVGV4dFwiIFttYXhTZWxlY3RlZEl0ZW1zXT1cIm1heFNlbGVjdGVkSXRlbXNcIlxuICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIiBbaXRlbXNdPVwibmdTZWxlY3RJdGVtcyB8IGFzeW5jXCIgW2dyb3VwVmFsdWVdPVwiZ3JvdXBWYWx1ZVwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgICBbY29tcGFyZVdpdGhdPSdjb21wYXJlV2l0aCcgW2lucHV0QXR0cnNdPVwiaW5wdXRBdHRyc1wiIChzY3JvbGwpPVwib25TY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgIChjaGFuZ2UpPVwib25OYXRpdmVDaGFuZ2UoJGV2ZW50KVwiIChjbGVhcik9J29uQ2xlYXJTZWxlY3QoKScgKHJlbW92ZSk9J29uUmVtb3ZlU2VsZWN0ZWRJdGVtKCRldmVudCknXG4gICAgICAgIChjbGljayk9XCJ3YXNDbGlja2VkID0gdHJ1ZVwiPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj0nbmd0U2VsZWN0SGVhZGVyVGVtcGxhdGUnIG5nLWhlYWRlci10bXA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibmd0U2VsZWN0SGVhZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgcHItMVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aXBsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctdmFsdWUtaWNvbiBweC0xIGgtZnVsbCBib3JkZXItciBtci0yIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ3RleHQnXSkgfX0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ncmVtb3ZlSXRlbSgkZXZlbnQsIGl0ZW0pJz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJuZy12YWx1ZS1pY29uIGZpbGwtY3VycmVudCBzZWxmLWNlbnRlclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjEgMTcuMmwtNS4zLTUuMyA1LjMtNS4zLTEuOC0xLjgtNS4zIDUuNC01LjMtNS4zLTEuOCAxLjcgNS4zIDUuMy01LjMgNS4zTDYuNyAxOWw1LjMtNS4zIDUuMyA1LjMgMS44LTEuOHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPSduZ3RPcHRpb25TZWxlY3RlZFRlbXBsYXRlJyBbbmdUZW1wbGF0ZU91dGxldF09XCJuZ3RPcHRpb25TZWxlY3RlZFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj0nIW5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGUnIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXNlYXJjaD1cInNlYXJjaFRlcm1cIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJuZ3RPcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSwgaW5kZXg6IGluZGV4LCBzZWFyY2hUZXJtOiBzZWFyY2ggfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXNlbGVjdD5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPSdzaGluaW5nJz5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJ7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCddKSB9fSB3LWZ1bGxcIj48L25ndC1zaGluaW5nPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZ3QtdmFsaWRhdGlvbiBbY29udHJvbF09XCJmb3JtQ29udHJvbFwiIFtjb250YWluZXJdPVwiZm9ybUNvbnRhaW5lclwiPjwvbmd0LXZhbGlkYXRpb24+XG5cbjxpbnB1dCAqbmdJZj0nY29tcG9uZW50UmVhZHknIHR5cGU9J2hpZGRlbicgW25nTW9kZWxdPVwidmFsdWVcIiBbbmFtZV09XCJuYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG4iXX0=
1
+ import { Component, ContentChild, EventEmitter, Host, Input, Optional, Output, Self, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
2
+ import { ControlContainer, NgForm } from '@angular/forms';
3
+ import { NgSelectComponent } from '@ng-select/ng-select';
4
+ import { Observable, Subject } from 'rxjs';
5
+ import { NgtBaseNgModel, NgtMakeProvider } from '../../base/ngt-base-ng-model';
6
+ import { getEnumFromString } from '../../helpers/enum/enum';
7
+ import { uuid } from '../../helpers/uuid';
8
+ import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
9
+ import { NgtSelectHeaderTmp, NgtSelectOptionSelectedTmp, NgtSelectOptionTmp } from './ngt-select.directive';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../../directives/ngt-stylizable/ngt-stylizable.directive";
12
+ import * as i2 from "@angular/forms";
13
+ import * as i3 from "../ngt-form/ngt-form.component";
14
+ import * as i4 from "../../services/http/ngt-http.service";
15
+ import * as i5 from "../../services/http/ngt-translate.service";
16
+ import * as i6 from "@angular/common";
17
+ import * as i7 from "@ng-select/ng-select";
18
+ import * as i8 from "../ngt-validation/ngt-validation.component";
19
+ import * as i9 from "../ngt-shining/ngt-shining.component";
20
+ import * as i10 from "../ngt-helper/ngt-helper.component";
21
+ import * as i11 from "../ngt-svg/ngt-svg.component";
22
+ export class NgtSelectComponent extends NgtBaseNgModel {
23
+ constructor(ngtStylizableDirective, injector, formContainer, ngtFormComponent, ngtHttp, changeDetector, ngtTranslateService) {
24
+ super();
25
+ this.ngtStylizableDirective = ngtStylizableDirective;
26
+ this.injector = injector;
27
+ this.formContainer = formContainer;
28
+ this.ngtFormComponent = ngtFormComponent;
29
+ this.ngtHttp = ngtHttp;
30
+ this.changeDetector = changeDetector;
31
+ this.ngtTranslateService = ngtTranslateService;
32
+ /** Visual */
33
+ this.label = '';
34
+ this.helpTextColor = 'text-green-500';
35
+ this.shining = false;
36
+ this.loading = false;
37
+ this.loadingText = '';
38
+ this.notFoundText = '';
39
+ this.dropdownPosition = 'auto';
40
+ this.typeToSearchText = '';
41
+ this.clearAllTooltip = '';
42
+ this.placeholder = '';
43
+ this.createText = '';
44
+ this.labelForId = '';
45
+ this.dropdownPanelMinHeight = NgtSelectDropdownPanelHeight.AUTO;
46
+ this.allowCreate = false;
47
+ this.allowOriginalItemsUnselect = true;
48
+ this.isDisabled = false;
49
+ this.isReadonly = false;
50
+ this.bindLabel = 'name';
51
+ this.items = [];
52
+ this.closeOnSelect = true;
53
+ this.clearable = true;
54
+ this.groupBy = null;
55
+ this.multiple = false;
56
+ this.searchable = true;
57
+ this.clearSearchOnAdd = true;
58
+ this.virtualScroll = true;
59
+ this.guessCompareWith = true;
60
+ /** Validation */
61
+ this.isRequired = false;
62
+ this.onLoadRemoteResource = new EventEmitter();
63
+ this.onClear = new EventEmitter();
64
+ this.nativeName = uuid();
65
+ this.ngSelectItems = [];
66
+ this.componentReady = false;
67
+ this.originalPerPage = 15;
68
+ this.subscriptions = [];
69
+ this.currentState = {
70
+ filters: {},
71
+ sort: {
72
+ field: '',
73
+ direction: ''
74
+ },
75
+ pagination: {
76
+ count: null,
77
+ page: 1,
78
+ pages: null,
79
+ total: null,
80
+ from: null,
81
+ to: null,
82
+ per_page: null
83
+ }
84
+ };
85
+ this.compareWith = (a, b) => a === b;
86
+ if (this.ngtFormComponent) {
87
+ this.shining = this.ngtFormComponent.isShining();
88
+ this.subscriptions.push(this.ngtFormComponent.onShiningChange.subscribe((shining) => {
89
+ this.shining = shining;
90
+ }));
91
+ }
92
+ if (this.ngtStylizableDirective) {
93
+ this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
94
+ }
95
+ else {
96
+ this.ngtStyle = new NgtStylizableService();
97
+ }
98
+ this.ngtStyle.load(this.injector, 'NgtSelect', {
99
+ h: 'h-12',
100
+ text: 'text-sm',
101
+ fontCase: '',
102
+ color: {
103
+ bg: 'bg-white'
104
+ }
105
+ });
106
+ }
107
+ ngOnInit() {
108
+ if (!this.formContainer) {
109
+ console.error("The element must be inside a <form #form='ngForm'> tag!");
110
+ }
111
+ if (!this.name) {
112
+ console.error("The element must contain a name attribute!");
113
+ }
114
+ if (!this.multiple && this.isRequired) {
115
+ this.clearable = false;
116
+ }
117
+ if (this.multiple) {
118
+ this.closeOnSelect = false;
119
+ }
120
+ setTimeout(() => {
121
+ this.componentReady = true;
122
+ this.initComponentValidation();
123
+ }, 500);
124
+ this.ngSelectItems = new Observable((observer) => {
125
+ this.ngSearchObserver = observer;
126
+ observer.next([]);
127
+ });
128
+ }
129
+ ngAfterViewInit() {
130
+ this.bindInnerInputUniqueId();
131
+ }
132
+ ngDoCheck() {
133
+ if (!this.hadFirstItemsLoad && this.canLoadItems()) {
134
+ this.hadFirstItemsLoad = true;
135
+ this.initNgSelectItems();
136
+ setTimeout(() => {
137
+ this.replaceShowAddTag();
138
+ this.ngSelectComponent.itemsList.mapSelectedItems();
139
+ if (!this.getElementTitle() || this.getElementTitle() === 'null') {
140
+ this.ngSelectComponent.element.parentElement.parentElement.parentElement.title = '';
141
+ }
142
+ this.originalItems = this.ngSelectComponent.selectedItems?.map((element) => element.value);
143
+ this.changeDetector.detectChanges();
144
+ }, 500);
145
+ }
146
+ }
147
+ ngOnDestroy() {
148
+ this.destroySubscriptions();
149
+ }
150
+ removeItem(event, item) {
151
+ event.preventDefault();
152
+ event.stopPropagation();
153
+ return this.ngSelectComponent.clearItem(item);
154
+ }
155
+ refresh() {
156
+ this.initNgSelectItems();
157
+ this.initComponentValidation();
158
+ }
159
+ reset() {
160
+ this.value = undefined;
161
+ this.nativeValue = undefined;
162
+ this.refresh();
163
+ }
164
+ ngOnChanges(changes) {
165
+ if (changes.isRequired) {
166
+ this.updateValidations();
167
+ }
168
+ if (changes.remoteResource || changes.items) {
169
+ this.initNgSelectItems();
170
+ }
171
+ if (changes.dropdownPanelMinHeight) {
172
+ this.dropdownPanelMinHeight = getEnumFromString(changes.dropdownPanelMinHeight.currentValue, NgtSelectDropdownPanelHeight);
173
+ }
174
+ }
175
+ setFocus() {
176
+ setTimeout(() => {
177
+ this.ngSelectComponent.focus();
178
+ });
179
+ }
180
+ onClearSelect() {
181
+ if (!this.nativeValue) {
182
+ this.markAsPristine();
183
+ }
184
+ this.currentState.filters = {};
185
+ this.onClear.emit();
186
+ }
187
+ onRemoveSelectedItem(item) {
188
+ if (!this.allowOriginalItemsUnselect && this.hadPreviousSelection(item.value)) {
189
+ setTimeout(() => this.ngSelectComponent.select(item));
190
+ }
191
+ }
192
+ getFilterInputValue() {
193
+ let inputField = this.ngSelectComponent.searchInput ?
194
+ this.ngSelectComponent.searchInput :
195
+ this.ngSelectComponent['searchInput'];
196
+ if (inputField &&
197
+ inputField.nativeElement) {
198
+ return inputField.nativeElement.value;
199
+ }
200
+ }
201
+ search(filters) {
202
+ this.currentState.filters = { ...this.currentState.filters, ...filters };
203
+ if (!this.remoteResource) {
204
+ return;
205
+ }
206
+ if (this.searchTimeout) {
207
+ clearTimeout(this.searchTimeout);
208
+ }
209
+ this.loading = true;
210
+ this.changeDetector.detectChanges();
211
+ this.searchTimeout = setTimeout(() => {
212
+ this.subscriptions.push(this.ngtHttp
213
+ .get(this.remoteResource, this.currentState.filters, this.currentState.pagination)
214
+ .subscribe((response) => {
215
+ this.loading = false;
216
+ this.bindCompareWithByResponse(response);
217
+ this.ngSearchObserver.next(response.data);
218
+ this.onLoadRemoteResource.emit(response.data);
219
+ this.currentState.pagination = response.meta.pagination;
220
+ this.changeDetector.detectChanges();
221
+ }, (error) => {
222
+ this.loading = false;
223
+ this.changeDetector.detectChanges();
224
+ console.error(error);
225
+ this.ngSearchObserver.next([]);
226
+ }));
227
+ }, 500);
228
+ }
229
+ onNativeChange(value) {
230
+ if (this.hasChangesBetweenModels(this.value, value)) {
231
+ this.value = value;
232
+ }
233
+ }
234
+ change(value) {
235
+ if (this.hasChangesBetweenModels(value, this.nativeValue)) {
236
+ if (Array.isArray(value)) {
237
+ value = value.map((val) => val);
238
+ }
239
+ this.nativeValue = value;
240
+ if (!value) {
241
+ this.markAsPristine();
242
+ }
243
+ }
244
+ }
245
+ onScroll({ end }) {
246
+ let currentPerPage = this.currentState.pagination.per_page;
247
+ let maxItensInBackend = this.currentState.pagination.total;
248
+ if (end >= currentPerPage && end <= maxItensInBackend) {
249
+ this.currentState.pagination.per_page = parseInt(this.currentState.pagination.per_page) + this.originalPerPage;
250
+ this.search({});
251
+ }
252
+ }
253
+ hasSelectedValue() {
254
+ return this.value && JSON.stringify(this.value);
255
+ }
256
+ getSelectClass() {
257
+ let selectClass = this.dropdownPanelMinHeight ? 'ng-select-dropdown-panel-' + this.dropdownPanelMinHeight : 'ng-select-dropdown-panel-auto';
258
+ if (this.isDisabled) {
259
+ selectClass += ' select-border-disabled';
260
+ }
261
+ else if (this.formControl && this.formControl.errors && (this.formControl.dirty || (this.formContainer && this.formContainer['submitted']))) {
262
+ selectClass += ' select-border-error';
263
+ }
264
+ else {
265
+ selectClass += ' select-border-normal';
266
+ }
267
+ if (this.multiple) {
268
+ selectClass += ` h-auto ${this.ngtStyle.compile(['color.bg', 'color.text'])}`;
269
+ }
270
+ else {
271
+ selectClass += ` ${this.ngtStyle.compile(['h', 'color.bg', 'color.text'])}`;
272
+ }
273
+ return selectClass;
274
+ }
275
+ initNgSelectItems() {
276
+ if (this.remoteResource && this.canLoadItems()) {
277
+ this.ngSelectItems = new Observable(observer => {
278
+ this.ngSearchObserver = observer;
279
+ this.search({});
280
+ });
281
+ this.typeahead = new Subject();
282
+ this.subscriptions.push(this.typeahead.subscribe((term) => {
283
+ this.search({ term: term });
284
+ }));
285
+ }
286
+ else if (this.items instanceof Observable) {
287
+ this.ngSelectItems = this.items;
288
+ }
289
+ else {
290
+ if (!this.items) {
291
+ this.items = [];
292
+ }
293
+ this.ngSelectItems = new Observable((observer) => {
294
+ this.ngSearchObserver = observer;
295
+ observer.next(this.items);
296
+ });
297
+ }
298
+ }
299
+ initComponentValidation() {
300
+ if (this.formContainer && this.formContainer.control && (this.formControl = this.formContainer.control.get(this.name))) {
301
+ this.formControl = this.formContainer.control.get(this.name);
302
+ this.markAsPristine();
303
+ this.updateValidations();
304
+ }
305
+ }
306
+ getElementTitle() {
307
+ return this.ngSelectComponent.element.parentElement.parentElement.parentElement.title;
308
+ }
309
+ hasChangesBetweenModels(value, nativeValue) {
310
+ return JSON.stringify(value) !== JSON.stringify(nativeValue);
311
+ }
312
+ updateValidations() {
313
+ if (!this.formControl) {
314
+ return;
315
+ }
316
+ let syncValidators = [];
317
+ if (this.isRequired) {
318
+ syncValidators.push(this.isRequiredValidator());
319
+ }
320
+ setTimeout(() => {
321
+ this.formControl.setValidators(syncValidators);
322
+ this.formControl.updateValueAndValidity();
323
+ });
324
+ }
325
+ isRequiredValidator() {
326
+ return (control) => {
327
+ if (this.multiple) {
328
+ if (Array.isArray(this.value) && this.value.length > 0) {
329
+ return null;
330
+ }
331
+ }
332
+ else if (control.value && JSON.stringify(control.value)) {
333
+ return null;
334
+ }
335
+ return { 'required': true };
336
+ };
337
+ }
338
+ replaceShowAddTag() {
339
+ Object.defineProperty(this.ngSelectComponent, 'showAddTag', {
340
+ get: () => {
341
+ if (!this.ngSelectComponent['searchTerm']) {
342
+ return false;
343
+ }
344
+ const term = this.ngSelectComponent['searchTerm'].toLocaleLowerCase();
345
+ return this.ngSelectComponent.addTag && !this.ngSelectComponent.loading
346
+ && (!this.hasTermInFilteredItems(term) && (!this.hasTermInSelectedItems(term)
347
+ || !this.ngSelectComponent.hideSelected && this.ngSelectComponent.isOpen));
348
+ }
349
+ });
350
+ }
351
+ bindInnerInputUniqueId() {
352
+ const childInputs = this.ngSelectComponent.element.getElementsByTagName('input');
353
+ if (childInputs?.length) {
354
+ const innerInput = childInputs[0];
355
+ innerInput.id = uuid();
356
+ }
357
+ }
358
+ bindCompareWithByResponse(response) {
359
+ if (this.guessCompareWith) {
360
+ if (response.data?.length && typeof response.data[0]['getApiId'] === 'function') {
361
+ this.compareWith = (a, b) => a.getApiId() == b.getApiId();
362
+ }
363
+ else {
364
+ this.compareWith = (a, b) => a === b;
365
+ }
366
+ }
367
+ }
368
+ hasTermInFilteredItems(term) {
369
+ const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
370
+ if (filteredItems?.length && this.isColoquentResource()) {
371
+ return filteredItems.some((element) => {
372
+ const elementValue = element.value.getAttribute(this.bindLabel);
373
+ return elementValue && elementValue.toLocaleLowerCase() === term;
374
+ });
375
+ }
376
+ return filteredItems.some((element) => {
377
+ const elementValue = element.value[this.bindLabel];
378
+ return elementValue && elementValue.toLocaleLowerCase() === term;
379
+ });
380
+ }
381
+ hasTermInSelectedItems(term) {
382
+ const selectedItems = this.ngSelectComponent.selectedItems;
383
+ if (selectedItems?.length && this.isColoquentResource()) {
384
+ return selectedItems.some((element) => {
385
+ const elementValue = element.value.getAttribute(this.bindLabel);
386
+ return elementValue && elementValue.toLocaleLowerCase() === term;
387
+ });
388
+ }
389
+ return selectedItems.some((element) => {
390
+ const elementValue = element.value[this.bindLabel];
391
+ return elementValue && elementValue.toLocaleLowerCase() === term;
392
+ });
393
+ }
394
+ hadPreviousSelection(item) {
395
+ return !!this.originalItems?.find(element => this.compareWith(element, item));
396
+ }
397
+ isColoquentResource() {
398
+ const items = this.ngSelectComponent.itemsList.items;
399
+ return items?.length && typeof items[0].value['getAttribute'] === 'function';
400
+ }
401
+ canLoadItems() {
402
+ return this.autoLoad || (!this.isDisabled && this.wasClicked);
403
+ }
404
+ destroySubscriptions() {
405
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
406
+ this.subscriptions = [];
407
+ }
408
+ }
409
+ NgtSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtSelectComponent, deps: [{ token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i0.Injector }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i4.NgtHttpService }, { token: i0.ChangeDetectorRef }, { token: i5.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
410
+ NgtSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtSelectComponent, selector: "ngt-select", inputs: { label: "label", labelIcon: "labelIcon", labelIconColor: "labelIconColor", helpTitle: "helpTitle", helpText: "helpText", helpTextColor: "helpTextColor", shining: "shining", loading: "loading", loadingText: "loadingText", notFoundText: "notFoundText", dropdownPosition: "dropdownPosition", typeToSearchText: "typeToSearchText", clearAllTooltip: "clearAllTooltip", placeholder: "placeholder", createText: "createText", labelForId: "labelForId", dropdownPanelMinHeight: "dropdownPanelMinHeight", helperReverseYPosition: "helperReverseYPosition", name: "name", autoLoad: "autoLoad", allowCreate: "allowCreate", allowOriginalItemsUnselect: "allowOriginalItemsUnselect", isDisabled: "isDisabled", isReadonly: "isReadonly", remoteResource: "remoteResource", hideSelected: "hideSelected", bindLabel: "bindLabel", bindValue: "bindValue", items: "items", inputAttrs: "inputAttrs", closeOnSelect: "closeOnSelect", clearable: "clearable", groupBy: "groupBy", maxSelectedItems: "maxSelectedItems", multiple: "multiple", searchable: "searchable", clearSearchOnAdd: "clearSearchOnAdd", virtualScroll: "virtualScroll", tabIndex: "tabIndex", typeahead: "typeahead", guessCompareWith: "guessCompareWith", groupValue: "groupValue", trackBy: "trackBy", isRequired: "isRequired", compareWith: "compareWith" }, outputs: { onLoadRemoteResource: "onLoadRemoteResource", onClear: "onClear" }, providers: [
411
+ NgtMakeProvider(NgtSelectComponent)
412
+ ], queries: [{ propertyName: "ngtOptionTemplate", first: true, predicate: NgtSelectOptionTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtOptionSelectedTemplate", first: true, predicate: NgtSelectOptionSelectedTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtSelectHeaderTemplate", first: true, predicate: NgtSelectHeaderTmp, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelectComponent", first: true, predicate: NgSelectComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" [hidden]='shining'\r\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\r\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\r\n {{ label }}:\r\n\r\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\r\n\r\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" [helperReverseYPosition]=\"helperReverseYPosition\" class=\"ml-1\">\r\n {{ helpText }}\r\n </ngt-helper>\r\n</label>\r\n\r\n<div [hidden]='shining' class=\"{{ getSelectClass() }} normal-case\" style=\"min-height: 3rem;\">\r\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\r\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\r\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\r\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\r\n [disabled]='isDisabled || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\r\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\r\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\r\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\r\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\r\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\r\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\r\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\r\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\"\r\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\r\n (click)=\"wasClicked = true\">\r\n\r\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\r\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\r\n </ng-template>\r\n </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div class=\"flex w-full items-center pr-1\">\r\n <ng-container *ngIf=\"multiple\">\r\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\r\n (click)='removeItem($event, item)'>\r\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\r\n </svg>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n\r\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-select>\r\n</div>\r\n\r\n<ng-container *ngIf='shining'>\r\n <div class=\"flex\">\r\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\r\n </div>\r\n</ng-container>\r\n\r\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\r\n\r\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\r\n", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:3rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i7.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i7.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: i8.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i9.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i10.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }, { kind: "component", type: i11.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], viewProviders: [
413
+ { provide: ControlContainer, useExisting: NgForm }
414
+ ], encapsulation: i0.ViewEncapsulation.None });
415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtSelectComponent, decorators: [{
416
+ type: Component,
417
+ args: [{ selector: 'ngt-select', providers: [
418
+ NgtMakeProvider(NgtSelectComponent)
419
+ ], viewProviders: [
420
+ { provide: ControlContainer, useExisting: NgForm }
421
+ ], encapsulation: ViewEncapsulation.None, template: "<label *ngIf=\"label\" [hidden]='shining'\r\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\r\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\r\n {{ label }}:\r\n\r\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\r\n\r\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" [helperReverseYPosition]=\"helperReverseYPosition\" class=\"ml-1\">\r\n {{ helpText }}\r\n </ngt-helper>\r\n</label>\r\n\r\n<div [hidden]='shining' class=\"{{ getSelectClass() }} normal-case\" style=\"min-height: 3rem;\">\r\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\r\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\r\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\r\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\r\n [disabled]='isDisabled || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\r\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\r\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\r\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\r\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\r\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\r\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\r\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\r\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\"\r\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\r\n (click)=\"wasClicked = true\">\r\n\r\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\r\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\r\n </ng-template>\r\n </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div class=\"flex w-full items-center pr-1\">\r\n <ng-container *ngIf=\"multiple\">\r\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\r\n (click)='removeItem($event, item)'>\r\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\r\n </svg>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n\r\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-select>\r\n</div>\r\n\r\n<ng-container *ngIf='shining'>\r\n <div class=\"flex\">\r\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\r\n </div>\r\n</ng-container>\r\n\r\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\r\n\r\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\r\n", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:3rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"] }]
422
+ }], ctorParameters: function () { return [{ type: i1.NgtStylizableDirective, decorators: [{
423
+ type: Optional
424
+ }, {
425
+ type: Self
426
+ }] }, { type: i0.Injector }, { type: i2.ControlContainer, decorators: [{
427
+ type: Optional
428
+ }, {
429
+ type: Host
430
+ }] }, { type: i3.NgtFormComponent, decorators: [{
431
+ type: Optional
432
+ }, {
433
+ type: SkipSelf
434
+ }] }, { type: i4.NgtHttpService }, { type: i0.ChangeDetectorRef }, { type: i5.NgtTranslateService, decorators: [{
435
+ type: Optional
436
+ }] }]; }, propDecorators: { ngSelectComponent: [{
437
+ type: ViewChild,
438
+ args: [NgSelectComponent, { static: true }]
439
+ }], ngtOptionTemplate: [{
440
+ type: ContentChild,
441
+ args: [NgtSelectOptionTmp, { read: TemplateRef }]
442
+ }], ngtOptionSelectedTemplate: [{
443
+ type: ContentChild,
444
+ args: [NgtSelectOptionSelectedTmp, { read: TemplateRef }]
445
+ }], ngtSelectHeaderTemplate: [{
446
+ type: ContentChild,
447
+ args: [NgtSelectHeaderTmp, { read: TemplateRef }]
448
+ }], label: [{
449
+ type: Input
450
+ }], labelIcon: [{
451
+ type: Input
452
+ }], labelIconColor: [{
453
+ type: Input
454
+ }], helpTitle: [{
455
+ type: Input
456
+ }], helpText: [{
457
+ type: Input
458
+ }], helpTextColor: [{
459
+ type: Input
460
+ }], shining: [{
461
+ type: Input
462
+ }], loading: [{
463
+ type: Input
464
+ }], loadingText: [{
465
+ type: Input
466
+ }], notFoundText: [{
467
+ type: Input
468
+ }], dropdownPosition: [{
469
+ type: Input
470
+ }], typeToSearchText: [{
471
+ type: Input
472
+ }], clearAllTooltip: [{
473
+ type: Input
474
+ }], placeholder: [{
475
+ type: Input
476
+ }], createText: [{
477
+ type: Input
478
+ }], labelForId: [{
479
+ type: Input
480
+ }], dropdownPanelMinHeight: [{
481
+ type: Input
482
+ }], helperReverseYPosition: [{
483
+ type: Input
484
+ }], name: [{
485
+ type: Input
486
+ }], autoLoad: [{
487
+ type: Input
488
+ }], allowCreate: [{
489
+ type: Input
490
+ }], allowOriginalItemsUnselect: [{
491
+ type: Input
492
+ }], isDisabled: [{
493
+ type: Input
494
+ }], isReadonly: [{
495
+ type: Input
496
+ }], remoteResource: [{
497
+ type: Input
498
+ }], hideSelected: [{
499
+ type: Input
500
+ }], bindLabel: [{
501
+ type: Input
502
+ }], bindValue: [{
503
+ type: Input
504
+ }], items: [{
505
+ type: Input
506
+ }], inputAttrs: [{
507
+ type: Input
508
+ }], closeOnSelect: [{
509
+ type: Input
510
+ }], clearable: [{
511
+ type: Input
512
+ }], groupBy: [{
513
+ type: Input
514
+ }], maxSelectedItems: [{
515
+ type: Input
516
+ }], multiple: [{
517
+ type: Input
518
+ }], searchable: [{
519
+ type: Input
520
+ }], clearSearchOnAdd: [{
521
+ type: Input
522
+ }], virtualScroll: [{
523
+ type: Input
524
+ }], tabIndex: [{
525
+ type: Input
526
+ }], typeahead: [{
527
+ type: Input
528
+ }], guessCompareWith: [{
529
+ type: Input
530
+ }], groupValue: [{
531
+ type: Input
532
+ }], trackBy: [{
533
+ type: Input
534
+ }], isRequired: [{
535
+ type: Input
536
+ }], onLoadRemoteResource: [{
537
+ type: Output
538
+ }], onClear: [{
539
+ type: Output
540
+ }], compareWith: [{
541
+ type: Input
542
+ }] } });
543
+ export var NgtSelectDropdownPanelHeight;
544
+ (function (NgtSelectDropdownPanelHeight) {
545
+ NgtSelectDropdownPanelHeight["AUTO"] = "auto";
546
+ NgtSelectDropdownPanelHeight["XS"] = "xs";
547
+ NgtSelectDropdownPanelHeight["MD"] = "md";
548
+ NgtSelectDropdownPanelHeight["SM"] = "sm";
549
+ NgtSelectDropdownPanelHeight["LG"] = "lg";
550
+ NgtSelectDropdownPanelHeight["XL"] = "xl";
551
+ })(NgtSelectDropdownPanelHeight || (NgtSelectDropdownPanelHeight = {}));
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlbGVjdC9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBWSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQVksT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWM1RyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQTJGbEQsWUFFVyxzQkFBOEMs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c0JBQXZCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFHVSxVQUFVO3NCQUF6QixLQUFLO2dCQUVXLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQTJFUyxXQUFXO3NCQUExQixLQUFLOztBQXVZVixNQUFNLENBQU4sSUFBWSw0QkFPWDtBQVBELFdBQVksNEJBQTRCO0lBQ3BDLDZDQUFhLENBQUE7SUFDYix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFQVyw0QkFBNEIsS0FBNUIsNEJBQTRCLFFBT3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkLFxyXG4gICAgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3QsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTZWxmLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFNraXBTZWxmLFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nT3B0aW9uLCBOZ1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTmd0QmFzZU5nTW9kZWwsIE5ndE1ha2VQcm92aWRlciB9IGZyb20gJy4uLy4uL2Jhc2Uvbmd0LWJhc2UtbmctbW9kZWwnO1xyXG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcclxuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXVpZCc7XHJcbmltcG9ydCB7IE5ndEh0dHBSZXNwb25zZSwgTmd0SHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmd0U2VsZWN0SGVhZGVyVG1wLCBOZ3RTZWxlY3RPcHRpb25TZWxlY3RlZFRtcCwgTmd0U2VsZWN0T3B0aW9uVG1wIH0gZnJvbSAnLi9uZ3Qtc2VsZWN0LmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbmd0LXNlbGVjdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5jc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE5ndE1ha2VQcm92aWRlcihOZ3RTZWxlY3RDb21wb25lbnQpXHJcbiAgICBdLFxyXG4gICAgdmlld1Byb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd0U2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgTmd0QmFzZU5nTW9kZWwgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBEb0NoZWNrIHtcclxuICAgIEBWaWV3Q2hpbGQoTmdTZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBuZ1NlbGVjdENvbXBvbmVudDogTmdTZWxlY3RDb21wb25lbnQ7XHJcbiAgICBAQ29udGVudENoaWxkKE5ndFNlbGVjdE9wdGlvblRtcCwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBwdWJsaWMgbmd0T3B0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKE5ndFNlbGVjdE9wdGlvblNlbGVjdGVkVG1wLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHB1YmxpYyBuZ3RPcHRpb25TZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RIZWFkZXJUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndFNlbGVjdEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKiBWaXN1YWwgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWxJY29uOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWxJY29uQ29sb3I6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbm90Rm91bmRUZXh0OiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93blBvc2l0aW9uID0gJ2F1dG8nO1xyXG4gICAgQElucHV0KCkgcHVibGljIHR5cGVUb1NlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyQWxsVG9vbHRpcDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNyZWF0ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsRm9ySWQ6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGRyb3Bkb3duUGFuZWxNaW5IZWlnaHQ6IE5ndFNlbGVjdERyb3Bkb3duUGFuZWxIZWlnaHQgPSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0LkFVVE87XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscGVyUmV2ZXJzZVlQb3NpdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgICAvKiogQmVoYXZpb3IgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dDcmVhdGU6IGJvb2xlYW4gfCBQcm9taXNlPGFueT4gfCBGdW5jdGlvbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGFsbG93T3JpZ2luYWxJdGVtc1Vuc2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIHJlbW90ZVJlc291cmNlOiBhbnk7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZVNlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGJpbmRMYWJlbDogc3RyaW5nID0gJ25hbWUnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGJpbmRWYWx1ZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zOiBBcnJheTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+ID0gW107XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5wdXRBdHRyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbG9zZU9uU2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGdyb3VwQnk6IHN0cmluZyB8IEZ1bmN0aW9uID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXhTZWxlY3RlZEl0ZW1zOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhclNlYXJjaE9uQWRkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyB0YWJJbmRleDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgcHVibGljIHR5cGVhaGVhZDogU3ViamVjdDxhbnk+O1xyXG4gICAgQElucHV0KCkgcHVibGljIGd1ZXNzQ29tcGFyZVdpdGg6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGdyb3VwVmFsdWU6IChncm91cEtleTogc3RyaW5nLCBjaWxkcmVuOiBhbnlbXSkgPT4gT2JqZWN0O1xyXG4gICAgQElucHV0KCkgcHVibGljIHRyYWNrQnk6IChpdGVtOiBhbnkpID0+IGFueTtcclxuXHJcbiAgICAvKiogVmFsaWRhdGlvbiAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uTG9hZFJlbW90ZVJlc291cmNlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsZWFyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHVibGljIG5hdGl2ZU5hbWUgPSB1dWlkKCk7XHJcbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xyXG4gICAgcHVibGljIG5nU2VsZWN0SXRlbXM6IGFueSA9IFtdO1xyXG4gICAgcHVibGljIG5hdGl2ZVZhbHVlOiBhbnk7XHJcbiAgICBwdWJsaWMgY29tcG9uZW50UmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyB3YXNDbGlja2VkOiBib29sZWFuO1xyXG5cclxuICAgIHByaXZhdGUgbmdTZWFyY2hPYnNlcnZlcjogT2JzZXJ2ZXI8YW55PjtcclxuICAgIHByaXZhdGUgb3JpZ2luYWxQZXJQYWdlID0gMTU7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgb3JpZ2luYWxJdGVtczogQXJyYXk8YW55PjtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRTdGF0ZSA9IHtcclxuICAgICAgICBmaWx0ZXJzOiB7fSxcclxuICAgICAgICBzb3J0OiB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJyxcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnaW5hdGlvbjoge1xyXG4gICAgICAgICAgICBjb3VudDogbnVsbCxcclxuICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgcGFnZXM6IG51bGwsXHJcbiAgICAgICAgICAgIHRvdGFsOiBudWxsLFxyXG4gICAgICAgICAgICBmcm9tOiBudWxsLFxyXG4gICAgICAgICAgICB0bzogbnVsbCxcclxuICAgICAgICAgICAgcGVyX3BhZ2U6IG51bGxcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgc2VhcmNoVGltZW91dDogYW55O1xyXG4gICAgcHJpdmF0ZSBoYWRGaXJzdEl0ZW1zTG9hZDogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKVxyXG4gICAgICAgIHB1YmxpYyBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlLFxyXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcclxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxyXG4gICAgICAgIHB1YmxpYyBuZ3RGb3JtQ29tcG9uZW50OiBOZ3RGb3JtQ29tcG9uZW50LFxyXG4gICAgICAgIHByaXZhdGUgbmd0SHR0cDogTmd0SHR0cFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgQE9wdGlvbmFsKClcclxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSB0aGlzLm5ndEZvcm1Db21wb25lbnQuaXNTaGluaW5nKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMubmd0Rm9ybUNvbXBvbmVudC5vblNoaW5pbmdDaGFuZ2Uuc3Vic2NyaWJlKChzaGluaW5nOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZ3RTdHlsaXphYmxlRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUuZ2V0Tmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5ndFN0eWxlID0gbmV3IE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5ndFN0eWxlLmxvYWQodGhpcy5pbmplY3RvciwgJ05ndFNlbGVjdCcsIHtcclxuICAgICAgICAgICAgaDogJ2gtMTInLFxyXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXHJcbiAgICAgICAgICAgIGZvbnRDYXNlOiAnJyxcclxuICAgICAgICAgICAgY29sb3I6IHtcclxuICAgICAgICAgICAgICAgIGJnOiAnYmctd2hpdGUnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEgPT09IGI7XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGJlIGluc2lkZSBhIDxmb3JtICNmb3JtPSduZ0Zvcm0nPiB0YWchXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcmFibGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VPblNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5uZ1NlbGVjdEl0ZW1zID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KFtdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuYmluZElubmVySW5wdXRVbmlxdWVJZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhZEZpcnN0SXRlbXNMb2FkICYmIHRoaXMuY2FuTG9hZEl0ZW1zKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5oYWRGaXJzdEl0ZW1zTG9hZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZVNob3dBZGRUYWcoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5tYXBTZWxlY3RlZEl0ZW1zKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdldEVsZW1lbnRUaXRsZSgpIHx8IHRoaXMuZ2V0RWxlbWVudFRpdGxlKCkgPT09ICdudWxsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcz8ubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShldmVudDogRXZlbnQsIGl0ZW06IGFueSkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmNsZWFySXRlbShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XHJcbiAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50VmFsaWRhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldCgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5pc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbnMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzLnJlbW90ZVJlc291cmNlIHx8IGNoYW5nZXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPSBnZXRFbnVtRnJvbVN0cmluZyhjaGFuZ2VzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQuY3VycmVudFZhbHVlLCBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEZvY3VzKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2xlYXJTZWxlY3QoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5hdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNsZWFyLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25SZW1vdmVTZWxlY3RlZEl0ZW0oaXRlbTogTmdPcHRpb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMuYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3QgJiYgdGhpcy5oYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0KGl0ZW0pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZpbHRlcklucHV0VmFsdWUoKSB7XHJcbiAgICAgICAgbGV0IGlucHV0RmllbGQgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlYXJjaElucHV0ID9cclxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWFyY2hJbnB1dCA6XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnRbJ3NlYXJjaElucHV0J107XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgaW5wdXRGaWVsZCAmJlxyXG4gICAgICAgICAgICBpbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0RmllbGQubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzID0geyAuLi50aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLCAuLi5maWx0ZXJzIH07XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZW1vdGVSZXNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RIdHRwXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldCh0aGlzLnJlbW90ZVJlc291cmNlLCB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLCB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZTogTmd0SHR0cFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRDb21wYXJlV2l0aEJ5UmVzcG9uc2UocmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KHJlc3BvbnNlLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkUmVtb3RlUmVzb3VyY2UuZW1pdChyZXNwb25zZS5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uID0gcmVzcG9uc2UubWV0YS5wYWdpbmF0aW9uO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KFtdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbk5hdGl2ZUNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHRoaXMudmFsdWUsIHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscyh2YWx1ZSwgdGhpcy5uYXRpdmVWYWx1ZSkpIHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcCgodmFsKSA9PiB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2Nyb2xsKHsgZW5kIH0pIHtcclxuICAgICAgICBsZXQgY3VycmVudFBlclBhZ2UgPSB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlO1xyXG4gICAgICAgIGxldCBtYXhJdGVuc0luQmFja2VuZCA9IHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24udG90YWw7XHJcblxyXG4gICAgICAgIGlmIChlbmQgPj0gY3VycmVudFBlclBhZ2UgJiYgZW5kIDw9IG1heEl0ZW5zSW5CYWNrZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24ucGVyX3BhZ2UgPSBwYXJzZUludCh0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlKSArIHRoaXMub3JpZ2luYWxQZXJQYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaCh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNTZWxlY3RlZFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICYmIEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWxlY3RDbGFzcygpIHtcclxuICAgICAgICBsZXQgc2VsZWN0Q2xhc3MgPSB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPyAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLScgKyB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgOiAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLWF1dG8nO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1kaXNhYmxlZCc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Db250cm9sICYmIHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzICYmICh0aGlzLmZvcm1Db250cm9sLmRpcnR5IHx8ICh0aGlzLmZvcm1Db250YWluZXIgJiYgdGhpcy5mb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSkpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1lcnJvcic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLW5vcm1hbCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSBgIGgtYXV0byAke3RoaXMubmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLmJnJywgJ2NvbG9yLnRleHQnXSl9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSBgICR7dGhpcy5uZ3RTdHlsZS5jb21waWxlKFsnaCcsICdjb2xvci5iZycsICdjb2xvci50ZXh0J10pfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VsZWN0Q2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0TmdTZWxlY3RJdGVtcygpIHtcclxuICAgICAgICBpZiAodGhpcy5yZW1vdGVSZXNvdXJjZSAmJiB0aGlzLmNhbkxvYWRJdGVtcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goe30pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuc3Vic2NyaWJlKCh0ZXJtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiB0ZXJtIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyID0gb2JzZXJ2ZXI7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Q29tcG9uZW50VmFsaWRhdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sICYmICh0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbC5nZXQodGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RWxlbWVudFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHZhbHVlLCBuYXRpdmVWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5hdGl2ZVZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRpb25zKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3luY1ZhbGlkYXRvcnMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuaXNSZXF1aXJlZFZhbGlkYXRvcigpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzUmVxdWlyZWRWYWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wudmFsdWUgJiYgSlNPTi5zdHJpbmdpZnkoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geyAncmVxdWlyZWQnOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlcGxhY2VTaG93QWRkVGFnKCkge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm5nU2VsZWN0Q29tcG9uZW50LCAnc2hvd0FkZFRhZycsIHtcclxuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubmdTZWxlY3RDb21wb25lbnRbJ3NlYXJjaFRlcm0nXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXJtID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoVGVybSddLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuYWRkVGFnICYmICF0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAmJiAoIXRoaXMuaGFzVGVybUluRmlsdGVyZWRJdGVtcyh0ZXJtKSAmJiAoIXRoaXMuaGFzVGVybUluU2VsZWN0ZWRJdGVtcyh0ZXJtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5oaWRlU2VsZWN0ZWQgJiYgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pc09wZW4pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmluZElubmVySW5wdXRVbmlxdWVJZCgpIHtcclxuICAgICAgICBjb25zdCBjaGlsZElucHV0cyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcclxuXHJcbiAgICAgICAgaWYgKGNoaWxkSW5wdXRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5uZXJJbnB1dCA9IGNoaWxkSW5wdXRzWzBdO1xyXG5cclxuICAgICAgICAgICAgaW5uZXJJbnB1dC5pZCA9IHV1aWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBiaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlOiBOZ3RIdHRwUmVzcG9uc2UpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5ndWVzc0NvbXBhcmVXaXRoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy5sZW5ndGggJiYgdHlwZW9mIHJlc3BvbnNlLmRhdGFbMF1bJ2dldEFwaUlkJ10gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEuZ2V0QXBpSWQoKSA9PSBiLmdldEFwaUlkKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBhcmVXaXRoID0gKGE6IGFueSwgYjogYW55KSA9PiBhID09PSBiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFzVGVybUluRmlsdGVyZWRJdGVtcyh0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pdGVtc0xpc3QuZmlsdGVyZWRJdGVtcztcclxuXHJcbiAgICAgICAgaWYgKGZpbHRlcmVkSXRlbXM/Lmxlbmd0aCAmJiB0aGlzLmlzQ29sb3F1ZW50UmVzb3VyY2UoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gKDxhbnk+ZWxlbWVudC52YWx1ZSlbdGhpcy5iaW5kTGFiZWxdO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhc1Rlcm1JblNlbGVjdGVkSXRlbXModGVybTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXM/Lmxlbmd0aCAmJiB0aGlzLmlzQ29sb3F1ZW50UmVzb3VyY2UoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gKDxhbnk+ZWxlbWVudC52YWx1ZSlbdGhpcy5iaW5kTGFiZWxdO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhZFByZXZpb3VzU2VsZWN0aW9uKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMub3JpZ2luYWxJdGVtcz8uZmluZChlbGVtZW50ID0+IHRoaXMuY29tcGFyZVdpdGgoZWxlbWVudCwgaXRlbSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNDb2xvcXVlbnRSZXNvdXJjZSgpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0Lml0ZW1zO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbXM/Lmxlbmd0aCAmJiB0eXBlb2YgaXRlbXNbMF0udmFsdWVbJ2dldEF0dHJpYnV0ZSddID09PSAnZnVuY3Rpb24nO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FuTG9hZEl0ZW1zKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9Mb2FkIHx8ICghdGhpcy5pc0Rpc2FibGVkICYmIHRoaXMud2FzQ2xpY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0IHtcclxuICAgIEFVVE8gPSAnYXV0bycsXHJcbiAgICBYUyA9ICd4cycsXHJcbiAgICBNRCA9ICdtZCcsXHJcbiAgICBTTSA9ICdzbScsXHJcbiAgICBMRyA9ICdsZycsXHJcbiAgICBYTCA9ICd4bCdcclxufVxyXG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtoaWRkZW5dPSdzaGluaW5nJ1xyXG4gICAgY2xhc3M9XCJ7eyBzaGluaW5nID8gJycgOiAnYmxvY2snIH19IHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ3RleHQnLCAnZm9udCcsICdmb250Q2FzZSddKSB9fSBtYi0yIGZsZXhcIj5cclxuICAgIDxuZ3Qtc3ZnICpuZ0lmPVwibGFiZWxJY29uXCIgY2xhc3M9XCJtci0xIHt7bGFiZWxJY29uQ29sb3J9fVwiIHNyYz1cInt7bGFiZWxJY29ufX1cIj48L25ndC1zdmc+XHJcbiAgICB7eyBsYWJlbCB9fTpcclxuXHJcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCBmb250LWJvbGQgdGV4dC1tZCBtbC0xXCIgKm5nSWY9XCJpc1JlcXVpcmVkXCI+Kjwvc3Bhbj5cclxuXHJcbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIiBbaGVscGVyUmV2ZXJzZVlQb3NpdGlvbl09XCJoZWxwZXJSZXZlcnNlWVBvc2l0aW9uXCIgY2xhc3M9XCJtbC0xXCI+XHJcbiAgICAgICAge3sgaGVscFRleHQgfX1cclxuICAgIDwvbmd0LWhlbHBlcj5cclxuPC9sYWJlbD5cclxuXHJcbjxkaXYgW2hpZGRlbl09J3NoaW5pbmcnIGNsYXNzPVwie3sgZ2V0U2VsZWN0Q2xhc3MoKSB9fSBub3JtYWwtY2FzZVwiIHN0eWxlPVwibWluLWhlaWdodDogM3JlbTtcIj5cclxuICAgIDxuZy1zZWxlY3QgY2xhc3M9XCJjdXN0b21cIiBbKG5nTW9kZWwpXT0nbmF0aXZlVmFsdWUnIFtuYW1lXT0nbmF0aXZlTmFtZScgW2FkZFRhZ109J2FsbG93Q3JlYXRlJ1xyXG4gICAgICAgIFthZGRUYWdUZXh0XT1cImNyZWF0ZVRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RDcmVhdGVUZXh0XCIgW2JpbmRMYWJlbF09XCJiaW5kTGFiZWxcIlxyXG4gICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiIFtoaWRlU2VsZWN0ZWRdPVwiaGlkZVNlbGVjdGVkXCIgW3R5cGVhaGVhZF09XCJ0eXBlYWhlYWRcIlxyXG4gICAgICAgIFtub3RGb3VuZFRleHRdPVwibm90Rm91bmRUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Tm90Rm91bmRUZXh0XCIgW3NlYXJjaGFibGVdPVwic2VhcmNoYWJsZVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT0naXNEaXNhYmxlZCB8fCBpc1JlYWRvbmx5JyBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZSAmJiBoYXNTZWxlY3RlZFZhbHVlKClcIlxyXG4gICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cImNsb3NlT25TZWxlY3RcIiBbdHJhY2tCeUZuXT1cInRyYWNrQnlcIiBbbGFiZWxGb3JJZF09XCJsYWJlbEZvcklkXCJcclxuICAgICAgICBbdHlwZVRvU2VhcmNoVGV4dF09XCJ0eXBlVG9TZWFyY2hUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0VHlwZVRvU2VhcmNoVGV4dFwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0UGxhY2Vob2xkZXJcIiBbZHJvcGRvd25Qb3NpdGlvbl09XCJkcm9wZG93blBvc2l0aW9uXCJcclxuICAgICAgICBbZ3JvdXBCeV09XCJncm91cEJ5XCIgW2NsZWFyQWxsVGV4dF09XCJjbGVhckFsbFRvb2x0aXAgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RDbGVhckFsbFRvb2x0aXBcIlxyXG4gICAgICAgIFtjbGVhclNlYXJjaE9uQWRkXT1cImNsZWFyU2VhcmNoT25BZGRcIiBbYmluZFZhbHVlXT1cImJpbmRWYWx1ZVwiIFt2aXJ0dWFsU2Nyb2xsXT1cInZpcnR1YWxTY3JvbGxcIlxyXG4gICAgICAgIFtsb2FkaW5nVGV4dF09XCJsb2FkaW5nVGV4dCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdExvYWRpbmdUZXh0XCIgW21heFNlbGVjdGVkSXRlbXNdPVwibWF4U2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgICAgW3RhYkluZGV4XT1cInRhYkluZGV4XCIgW2l0ZW1zXT1cIm5nU2VsZWN0SXRlbXMgfCBhc3luY1wiIFtncm91cFZhbHVlXT1cImdyb3VwVmFsdWVcIiBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICBbY29tcGFyZVdpdGhdPSdjb21wYXJlV2l0aCcgW2lucHV0QXR0cnNdPVwiaW5wdXRBdHRyc1wiIChzY3JvbGwpPVwib25TY3JvbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJvbk5hdGl2ZUNoYW5nZSgkZXZlbnQpXCIgKGNsZWFyKT0nb25DbGVhclNlbGVjdCgpJyAocmVtb3ZlKT0nb25SZW1vdmVTZWxlY3RlZEl0ZW0oJGV2ZW50KSdcclxuICAgICAgICAoY2xpY2spPVwid2FzQ2xpY2tlZCA9IHRydWVcIj5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPSduZ3RTZWxlY3RIZWFkZXJUZW1wbGF0ZScgbmctaGVhZGVyLXRtcD5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndFNlbGVjdEhlYWRlclRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBwci0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlwbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctdmFsdWUtaWNvbiBweC0xIGgtZnVsbCBib3JkZXItciBtci0yIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ3RleHQnXSkgfX0gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSdyZW1vdmVJdGVtKCRldmVudCwgaXRlbSknPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibmctdmFsdWUtaWNvbiBmaWxsLWN1cnJlbnQgc2VsZi1jZW50ZXJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS4xIDE3LjJsLTUuMy01LjMgNS4zLTUuMy0xLjgtMS44LTUuMyA1LjQtNS4zLTUuMy0xLjggMS43IDUuMyA1LjMtNS4zIDUuM0w2LjcgMTlsNS4zLTUuMyA1LjMgNS4zIDEuOC0xLjh6XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9J25ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGUnIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9JyFuZ3RPcHRpb25TZWxlY3RlZFRlbXBsYXRlJyBbbmdUZW1wbGF0ZU91dGxldF09XCJuZ3RPcHRpb25UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1zZWFyY2g9XCJzZWFyY2hUZXJtXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJuZ3RPcHRpb25UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXgsIHNlYXJjaFRlcm06IHNlYXJjaCB9XCI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctc2VsZWN0PlxyXG48L2Rpdj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9J3NoaW5pbmcnPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJ7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCddKSB9fSB3LWZ1bGxcIj48L25ndC1zaGluaW5nPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCI+PC9uZ3QtdmFsaWRhdGlvbj5cclxuXHJcbjxpbnB1dCAqbmdJZj0nY29tcG9uZW50UmVhZHknIHR5cGU9J2hpZGRlbicgW25nTW9kZWxdPVwidmFsdWVcIiBbbmFtZV09XCJuYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+XHJcbiJdfQ==