@openmrs/ngx-formentry 19.0.1-pre.492 → 19.0.1-pre.504

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 (200) hide show
  1. package/components/input/label.component.d.ts +1 -1
  2. package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +1 -1
  3. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +1 -1
  4. package/components/number-input/number-input.component.d.ts +1 -1
  5. package/components/select/select.component.d.ts +1 -1
  6. package/fesm2022/openmrs-ngx-formentry.mjs +364 -346
  7. package/fesm2022/openmrs-ngx-formentry.mjs.map +1 -1
  8. package/form-entry/helpers/js-expression-helper.d.ts +1 -1
  9. package/package.json +15 -16
  10. package/esm2022/abstract-controls-extension/afe-control-type.mjs +0 -8
  11. package/esm2022/abstract-controls-extension/afe-form-array.mjs +0 -89
  12. package/esm2022/abstract-controls-extension/afe-form-control.mjs +0 -91
  13. package/esm2022/abstract-controls-extension/afe-form-group.mjs +0 -66
  14. package/esm2022/abstract-controls-extension/control-extensions.mjs +0 -5
  15. package/esm2022/abstract-controls-extension/index.mjs +0 -5
  16. package/esm2022/abstract-controls-extension/value-change.listener.mjs +0 -2
  17. package/esm2022/change-tracking/control-relation.mjs +0 -42
  18. package/esm2022/change-tracking/control-relations.mjs +0 -32
  19. package/esm2022/components/afe-ng-select.component.mjs +0 -101
  20. package/esm2022/components/appointments-overview/appointments-overview.component.mjs +0 -116
  21. package/esm2022/components/check-box/checkbox.component.mjs +0 -110
  22. package/esm2022/components/check-box/checkbox.module.mjs +0 -19
  23. package/esm2022/components/custom-component-wrapper/custom-component-wrapper.component.mjs +0 -21
  24. package/esm2022/components/custom-component-wrapper/custom-component-wrapper.module.mjs +0 -22
  25. package/esm2022/components/custom-control-wrapper/custom-control-wrapper.component.mjs +0 -68
  26. package/esm2022/components/custom-control-wrapper/custom-control-wrapper.module.mjs +0 -23
  27. package/esm2022/components/date-time-picker/date-picker/date-picker.component.mjs +0 -188
  28. package/esm2022/components/date-time-picker/date-time-picker.component.mjs +0 -115
  29. package/esm2022/components/date-time-picker/date-time-picker.module.mjs +0 -48
  30. package/esm2022/components/date-time-picker/index.mjs +0 -9
  31. package/esm2022/components/date-time-picker/picker-modal/modal.component.mjs +0 -25
  32. package/esm2022/components/date-time-picker/pipes/moment.pipe.mjs +0 -17
  33. package/esm2022/components/date-time-picker/time-picker/time-picker.component.mjs +0 -121
  34. package/esm2022/components/file-upload/file-upload.component.mjs +0 -109
  35. package/esm2022/components/file-upload/file-upload.module.mjs +0 -37
  36. package/esm2022/components/file-upload/secure.pipe.mjs +0 -101
  37. package/esm2022/components/input/input.directive.mjs +0 -78
  38. package/esm2022/components/input/input.module.mjs +0 -23
  39. package/esm2022/components/input/label.component.mjs +0 -263
  40. package/esm2022/components/input/text-area.directive.mjs +0 -58
  41. package/esm2022/components/ngx-datetime-picker/ngx-datetime-picker.component.mjs +0 -87
  42. package/esm2022/components/ngx-datetime-picker/ngx-datetime-picker.module.mjs +0 -40
  43. package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.mjs +0 -114
  44. package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.mjs +0 -7
  45. package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.mjs +0 -347
  46. package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.mjs +0 -16
  47. package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.mjs +0 -39
  48. package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar-body.component.mjs +0 -142
  49. package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.mjs +0 -439
  50. package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.mjs +0 -373
  51. package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.mjs +0 -367
  52. package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar.component.mjs +0 -342
  53. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.mjs +0 -259
  54. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.mjs +0 -392
  55. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.mjs +0 -614
  56. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.mjs +0 -65
  57. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.mjs +0 -70
  58. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.mjs +0 -21
  59. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.mjs +0 -522
  60. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time.class.mjs +0 -166
  61. package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time.module.mjs +0 -97
  62. package/esm2022/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.mjs +0 -28
  63. package/esm2022/components/ngx-pick-datetime/lib/date-time/timer-box.component.mjs +0 -90
  64. package/esm2022/components/ngx-pick-datetime/lib/date-time/timer.component.mjs +0 -292
  65. package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog-config.class.mjs +0 -56
  66. package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog-container.component.mjs +0 -243
  67. package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.mjs +0 -119
  68. package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog.module.mjs +0 -26
  69. package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog.service.mjs +0 -233
  70. package/esm2022/components/ngx-pick-datetime/lib/utils/index.mjs +0 -5
  71. package/esm2022/components/ngx-pick-datetime/lib/utils/object.utils.mjs +0 -26
  72. package/esm2022/components/ngx-remote-select/ngx-remote-select.component.mjs +0 -151
  73. package/esm2022/components/ngx-remote-select/ngx-remote-select.module.mjs +0 -22
  74. package/esm2022/components/ngx-tabset/components/ngx-tab-set.component.mjs +0 -74
  75. package/esm2022/components/ngx-tabset/components/tab.component.mjs +0 -33
  76. package/esm2022/components/ngx-tabset/directives/hover-class.directive.mjs +0 -30
  77. package/esm2022/components/ngx-tabset/modules/ngx-tabset.module.mjs +0 -38
  78. package/esm2022/components/number-input/number-input.component.mjs +0 -254
  79. package/esm2022/components/number-input/number-input.module.mjs +0 -21
  80. package/esm2022/components/number-input/number.directive.mjs +0 -22
  81. package/esm2022/components/radio-button/radio.component.mjs +0 -98
  82. package/esm2022/components/radio-button/radio.module.mjs +0 -19
  83. package/esm2022/components/select/optgroup.directive.mjs +0 -19
  84. package/esm2022/components/select/option.directive.mjs +0 -19
  85. package/esm2022/components/select/select.component.mjs +0 -182
  86. package/esm2022/components/select/select.module.mjs +0 -23
  87. package/esm2022/components/workspace-launcher/workspace-launcher.component.mjs +0 -26
  88. package/esm2022/components/workspace-launcher/workspace-launcher.module.mjs +0 -19
  89. package/esm2022/form-entry/control-alerts/alert-helpers.mjs +0 -40
  90. package/esm2022/form-entry/control-alerts/can-generate-alert.mjs +0 -2
  91. package/esm2022/form-entry/control-calculators/can-calculate.mjs +0 -2
  92. package/esm2022/form-entry/control-hiders-disablers/can-disable.mjs +0 -2
  93. package/esm2022/form-entry/control-hiders-disablers/can-hide.mjs +0 -2
  94. package/esm2022/form-entry/control-hiders-disablers/disabler-helper.mjs +0 -32
  95. package/esm2022/form-entry/control-hiders-disablers/hider-helpers.mjs +0 -41
  96. package/esm2022/form-entry/data-sources/data-sources.mjs +0 -30
  97. package/esm2022/form-entry/data-sources/dummy-data-source.mjs +0 -104
  98. package/esm2022/form-entry/directives/collapse-animations.mjs +0 -11
  99. package/esm2022/form-entry/directives/collapse.directive.mjs +0 -172
  100. package/esm2022/form-entry/directives/historical-value.directive.mjs +0 -68
  101. package/esm2022/form-entry/error-renderer/error-renderer.component.mjs +0 -53
  102. package/esm2022/form-entry/expression-runner/expression-runner.mjs +0 -170
  103. package/esm2022/form-entry/form-entry.module.mjs +0 -188
  104. package/esm2022/form-entry/form-factory/control-relations.factory.mjs +0 -238
  105. package/esm2022/form-entry/form-factory/form-control.service.mjs +0 -118
  106. package/esm2022/form-entry/form-factory/form-node.mjs +0 -99
  107. package/esm2022/form-entry/form-factory/form.factory.mjs +0 -143
  108. package/esm2022/form-entry/form-factory/form.mjs +0 -190
  109. package/esm2022/form-entry/form-factory/hiders-disablers.factory.mjs +0 -68
  110. package/esm2022/form-entry/form-factory/index.mjs +0 -7
  111. package/esm2022/form-entry/form-factory/question.factory.mjs +0 -1123
  112. package/esm2022/form-entry/form-factory/show-messages.factory.mjs +0 -31
  113. package/esm2022/form-entry/form-factory/validation.factory.mjs +0 -182
  114. package/esm2022/form-entry/form-renderer/form-renderer.component.mjs +0 -277
  115. package/esm2022/form-entry/helpers/historical-expression-helper-service.mjs +0 -42
  116. package/esm2022/form-entry/helpers/historical-field-helper-service.mjs +0 -39
  117. package/esm2022/form-entry/helpers/js-expression-helper.mjs +0 -322
  118. package/esm2022/form-entry/helpers/risk-dataset-table.mjs +0 -247
  119. package/esm2022/form-entry/pipes/time-ago.pipe.mjs +0 -110
  120. package/esm2022/form-entry/question-models/checkbox.model.mjs +0 -11
  121. package/esm2022/form-entry/question-models/conditional-validation.model.mjs +0 -9
  122. package/esm2022/form-entry/question-models/custom-control-question.model.mjs +0 -10
  123. package/esm2022/form-entry/question-models/date-question.mjs +0 -12
  124. package/esm2022/form-entry/question-models/date-validation.model.mjs +0 -10
  125. package/esm2022/form-entry/question-models/decimal-validation.model.mjs +0 -19
  126. package/esm2022/form-entry/question-models/diagnosis-question.mjs +0 -12
  127. package/esm2022/form-entry/question-models/disallow-decimals-validation.model.mjs +0 -18
  128. package/esm2022/form-entry/question-models/file-upload-question.mjs +0 -13
  129. package/esm2022/form-entry/question-models/group-question.mjs +0 -12
  130. package/esm2022/form-entry/question-models/index.mjs +0 -24
  131. package/esm2022/form-entry/question-models/interfaces/base-options.mjs +0 -2
  132. package/esm2022/form-entry/question-models/interfaces/checkbox-options.mjs +0 -2
  133. package/esm2022/form-entry/question-models/interfaces/data-source.mjs +0 -2
  134. package/esm2022/form-entry/question-models/interfaces/date-question-options.mjs +0 -2
  135. package/esm2022/form-entry/question-models/interfaces/diagnosis-question-options.mjs +0 -2
  136. package/esm2022/form-entry/question-models/interfaces/file-upload-question-options.mjs +0 -2
  137. package/esm2022/form-entry/question-models/interfaces/group-question-options.mjs +0 -2
  138. package/esm2022/form-entry/question-models/interfaces/multi-select-options.mjs +0 -2
  139. package/esm2022/form-entry/question-models/interfaces/nested-questions.mjs +0 -7
  140. package/esm2022/form-entry/question-models/interfaces/radio-button-options.mjs +0 -2
  141. package/esm2022/form-entry/question-models/interfaces/remote-select-question-options.mjs +0 -2
  142. package/esm2022/form-entry/question-models/interfaces/repeating-question-options.mjs +0 -2
  143. package/esm2022/form-entry/question-models/interfaces/select-option.mjs +0 -2
  144. package/esm2022/form-entry/question-models/interfaces/select-question-options.mjs +0 -2
  145. package/esm2022/form-entry/question-models/interfaces/test-order-question-options.mjs +0 -2
  146. package/esm2022/form-entry/question-models/interfaces/text-area-question-options.mjs +0 -2
  147. package/esm2022/form-entry/question-models/interfaces/text-question-options.mjs +0 -2
  148. package/esm2022/form-entry/question-models/interfaces/ui-select-question-options.mjs +0 -2
  149. package/esm2022/form-entry/question-models/interfaces/workspace-launcher-options.mjs +0 -2
  150. package/esm2022/form-entry/question-models/js-expression-validation.model.mjs +0 -8
  151. package/esm2022/form-entry/question-models/max-length-validation.model.mjs +0 -9
  152. package/esm2022/form-entry/question-models/max-validation.model.mjs +0 -9
  153. package/esm2022/form-entry/question-models/min-length-validation.model.mjs +0 -9
  154. package/esm2022/form-entry/question-models/min-validation.model.mjs +0 -9
  155. package/esm2022/form-entry/question-models/models.mjs +0 -13
  156. package/esm2022/form-entry/question-models/multi-select-question.mjs +0 -11
  157. package/esm2022/form-entry/question-models/pair.model.mjs +0 -7
  158. package/esm2022/form-entry/question-models/question-base.mjs +0 -26
  159. package/esm2022/form-entry/question-models/radio-button.model.mjs +0 -12
  160. package/esm2022/form-entry/question-models/remote-select-question.mjs +0 -12
  161. package/esm2022/form-entry/question-models/rendering-type.mjs +0 -9
  162. package/esm2022/form-entry/question-models/repeating-question.mjs +0 -11
  163. package/esm2022/form-entry/question-models/select-option.mjs +0 -7
  164. package/esm2022/form-entry/question-models/select-question.mjs +0 -12
  165. package/esm2022/form-entry/question-models/test-order-question.mjs +0 -15
  166. package/esm2022/form-entry/question-models/text-area-input-question.mjs +0 -13
  167. package/esm2022/form-entry/question-models/text-input-question.mjs +0 -10
  168. package/esm2022/form-entry/question-models/ui-select-question.mjs +0 -11
  169. package/esm2022/form-entry/question-models/validation.model.mjs +0 -7
  170. package/esm2022/form-entry/question-models/workspace-launcher.model.mjs +0 -15
  171. package/esm2022/form-entry/services/debug-mode.service.mjs +0 -24
  172. package/esm2022/form-entry/services/form-errors.service.mjs +0 -21
  173. package/esm2022/form-entry/services/form-schema-compiler.service.mjs +0 -262
  174. package/esm2022/form-entry/services/historical-encounter-data.service.mjs +0 -172
  175. package/esm2022/form-entry/validators/conditional-answered.validator.mjs +0 -46
  176. package/esm2022/form-entry/validators/conditional-required.validator.mjs +0 -40
  177. package/esm2022/form-entry/validators/date.validator.mjs +0 -18
  178. package/esm2022/form-entry/validators/disallow-decimals.validator.mjs +0 -15
  179. package/esm2022/form-entry/validators/future-date-restriction.validator.mjs +0 -21
  180. package/esm2022/form-entry/validators/js-expression.validator.mjs +0 -26
  181. package/esm2022/form-entry/validators/max-date.validator.mjs +0 -23
  182. package/esm2022/form-entry/validators/max-length.validator.mjs +0 -17
  183. package/esm2022/form-entry/validators/max.validator.mjs +0 -21
  184. package/esm2022/form-entry/validators/min-date.validator.mjs +0 -23
  185. package/esm2022/form-entry/validators/min-length.validator.mjs +0 -17
  186. package/esm2022/form-entry/validators/min.validator.mjs +0 -21
  187. package/esm2022/form-entry/validators/required.validator.mjs +0 -11
  188. package/esm2022/form-entry/validators/validations.mjs +0 -5
  189. package/esm2022/form-entry/value-adapters/diagnosis.adapter.mjs +0 -241
  190. package/esm2022/form-entry/value-adapters/encounter.adapter.mjs +0 -190
  191. package/esm2022/form-entry/value-adapters/obs-adapter-helper.mjs +0 -559
  192. package/esm2022/form-entry/value-adapters/obs.adapter.mjs +0 -541
  193. package/esm2022/form-entry/value-adapters/order.adapter.mjs +0 -186
  194. package/esm2022/form-entry/value-adapters/patient-identifier.adapter.mjs +0 -77
  195. package/esm2022/form-entry/value-adapters/person-attribute.adapter.mjs +0 -88
  196. package/esm2022/form-entry/value-adapters/value.adapter.mjs +0 -2
  197. package/esm2022/lib/index.mjs +0 -59
  198. package/esm2022/openmrs-ngx-formentry.mjs +0 -5
  199. package/esm2022/public_api.mjs +0 -2
  200. package/esm2022/shared.module.mjs +0 -21
@@ -1,233 +0,0 @@
1
- /**
2
- * dialog.service
3
- */
4
- import { Inject, Injectable, InjectionToken, Injector, Optional, SkipSelf, TemplateRef } from '@angular/core';
5
- import { Location } from '@angular/common';
6
- import { OwlDialogConfig } from './dialog-config.class';
7
- import { OwlDialogRef } from './dialog-ref.class';
8
- import { OwlDialogContainerComponent } from './dialog-container.component';
9
- import { extendObject } from '../utils';
10
- import { defer, Subject } from 'rxjs';
11
- import { startWith } from 'rxjs/operators';
12
- import { Overlay, OverlayConfig, OverlayContainer } from '@angular/cdk/overlay';
13
- import { ComponentPortal, PortalInjector } from '@angular/cdk/portal';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "@angular/cdk/overlay";
16
- import * as i2 from "@angular/common";
17
- import * as i3 from "./dialog-config.class";
18
- export const OWL_DIALOG_DATA = new InjectionToken('OwlDialogData');
19
- /**
20
- * Injection token that determines the scroll handling while the dialog is open.
21
- * */
22
- export const OWL_DIALOG_SCROLL_STRATEGY = new InjectionToken('owl-dialog-scroll-strategy');
23
- export function OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
24
- const fn = () => overlay.scrollStrategies.block();
25
- return fn;
26
- }
27
- /** @docs-private */
28
- export const OWL_DIALOG_SCROLL_STRATEGY_PROVIDER = {
29
- provide: OWL_DIALOG_SCROLL_STRATEGY,
30
- deps: [Overlay],
31
- useFactory: OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY
32
- };
33
- /** I
34
- * njection token that can be used to specify default dialog options.
35
- * */
36
- export const OWL_DIALOG_DEFAULT_OPTIONS = new InjectionToken('owl-dialog-default-options');
37
- export class OwlDialogService {
38
- /** Keeps track of the currently-open dialogs. */
39
- get openDialogs() {
40
- return this.parentDialog
41
- ? this.parentDialog.openDialogs
42
- : this._openDialogsAtThisLevel;
43
- }
44
- /** Stream that emits when a dialog has been opened. */
45
- get afterOpen() {
46
- return this.parentDialog
47
- ? this.parentDialog.afterOpen
48
- : this._afterOpenAtThisLevel;
49
- }
50
- get _afterAllClosed() {
51
- const parent = this.parentDialog;
52
- return parent ? parent._afterAllClosed : this._afterAllClosedAtThisLevel;
53
- }
54
- constructor(overlay, injector, location, scrollStrategy, defaultOptions, parentDialog, overlayContainer) {
55
- this.overlay = overlay;
56
- this.injector = injector;
57
- this.location = location;
58
- this.defaultOptions = defaultOptions;
59
- this.parentDialog = parentDialog;
60
- this.overlayContainer = overlayContainer;
61
- this.ariaHiddenElements = new Map();
62
- this._openDialogsAtThisLevel = [];
63
- this._afterOpenAtThisLevel = new Subject();
64
- this._afterAllClosedAtThisLevel = new Subject();
65
- /**
66
- * Stream that emits when all open dialog have finished closing.
67
- * Will emit on subscribe if there are no open dialogs to begin with.
68
- */
69
- this.afterAllClosed = defer(() => this._openDialogsAtThisLevel.length
70
- ? this._afterAllClosed
71
- : this._afterAllClosed.pipe(startWith(undefined)));
72
- this.scrollStrategy = scrollStrategy;
73
- if (!parentDialog && location) {
74
- location.subscribe(() => this.closeAll());
75
- }
76
- }
77
- open(componentOrTemplateRef, config) {
78
- config = applyConfigDefaults(config, this.defaultOptions);
79
- if (config.id && this.getDialogById(config.id)) {
80
- throw Error(`Dialog with id "${config.id}" exists already. The dialog id must be unique.`);
81
- }
82
- const overlayRef = this.createOverlay(config);
83
- const dialogContainer = this.attachDialogContainer(overlayRef, config);
84
- const dialogRef = this.attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);
85
- if (!this.openDialogs.length) {
86
- this.hideNonDialogContentFromAssistiveTechnology();
87
- }
88
- this.openDialogs.push(dialogRef);
89
- dialogRef.afterClosed().subscribe(() => this.removeOpenDialog(dialogRef));
90
- this.afterOpen.next(dialogRef);
91
- return dialogRef;
92
- }
93
- /**
94
- * Closes all of the currently-open dialogs.
95
- */
96
- closeAll() {
97
- let i = this.openDialogs.length;
98
- while (i--) {
99
- this.openDialogs[i].close();
100
- }
101
- }
102
- /**
103
- * Finds an open dialog by its id.
104
- * @param id ID to use when looking up the dialog.
105
- */
106
- getDialogById(id) {
107
- return this.openDialogs.find((dialog) => dialog.id === id);
108
- }
109
- attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config) {
110
- const dialogRef = new OwlDialogRef(overlayRef, dialogContainer, config.id, this.location);
111
- if (config.hasBackdrop) {
112
- overlayRef.backdropClick().subscribe(() => {
113
- if (!dialogRef.disableClose) {
114
- dialogRef.close();
115
- }
116
- });
117
- }
118
- if (componentOrTemplateRef instanceof TemplateRef) {
119
- }
120
- else {
121
- const injector = this.createInjector(config, dialogRef, dialogContainer);
122
- const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, undefined, injector));
123
- dialogRef.componentInstance = contentRef.instance;
124
- }
125
- dialogRef
126
- .updateSize(config.width, config.height)
127
- .updatePosition(config.position);
128
- return dialogRef;
129
- }
130
- createInjector(config, dialogRef, dialogContainer) {
131
- const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
132
- const injectionTokens = new WeakMap();
133
- injectionTokens.set(OwlDialogRef, dialogRef);
134
- injectionTokens.set(OwlDialogContainerComponent, dialogContainer);
135
- injectionTokens.set(OWL_DIALOG_DATA, config.data);
136
- return new PortalInjector(userInjector || this.injector, injectionTokens);
137
- }
138
- createOverlay(config) {
139
- const overlayConfig = this.getOverlayConfig(config);
140
- return this.overlay.create(overlayConfig);
141
- }
142
- attachDialogContainer(overlayRef, config) {
143
- const containerPortal = new ComponentPortal(OwlDialogContainerComponent, config.viewContainerRef);
144
- const containerRef = overlayRef.attach(containerPortal);
145
- containerRef.instance.setConfig(config);
146
- return containerRef.instance;
147
- }
148
- getOverlayConfig(dialogConfig) {
149
- const state = new OverlayConfig({
150
- positionStrategy: this.overlay.position().global(),
151
- scrollStrategy: dialogConfig.scrollStrategy || this.scrollStrategy(),
152
- panelClass: dialogConfig.paneClass,
153
- hasBackdrop: dialogConfig.hasBackdrop,
154
- minWidth: dialogConfig.minWidth,
155
- minHeight: dialogConfig.minHeight,
156
- maxWidth: dialogConfig.maxWidth,
157
- maxHeight: dialogConfig.maxHeight
158
- });
159
- if (dialogConfig.backdropClass) {
160
- state.backdropClass = dialogConfig.backdropClass;
161
- }
162
- return state;
163
- }
164
- removeOpenDialog(dialogRef) {
165
- const index = this._openDialogsAtThisLevel.indexOf(dialogRef);
166
- if (index > -1) {
167
- this.openDialogs.splice(index, 1);
168
- // If all the dialogs were closed, remove/restore the `aria-hidden`
169
- // to a the siblings and emit to the `afterAllClosed` stream.
170
- if (!this.openDialogs.length) {
171
- this.ariaHiddenElements.forEach((previousValue, element) => {
172
- if (previousValue) {
173
- element.setAttribute('aria-hidden', previousValue);
174
- }
175
- else {
176
- element.removeAttribute('aria-hidden');
177
- }
178
- });
179
- this.ariaHiddenElements.clear();
180
- this._afterAllClosed.next();
181
- }
182
- }
183
- }
184
- /**
185
- * Hides all of the content that isn't an overlay from assistive technology.
186
- */
187
- hideNonDialogContentFromAssistiveTechnology() {
188
- const overlayContainer = this.overlayContainer.getContainerElement();
189
- // Ensure that the overlay container is attached to the DOM.
190
- if (overlayContainer.parentElement) {
191
- const siblings = overlayContainer.parentElement.children;
192
- for (let i = siblings.length - 1; i > -1; i--) {
193
- const sibling = siblings[i];
194
- if (sibling !== overlayContainer &&
195
- sibling.nodeName !== 'SCRIPT' &&
196
- sibling.nodeName !== 'STYLE' &&
197
- !sibling.hasAttribute('aria-live')) {
198
- this.ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));
199
- sibling.setAttribute('aria-hidden', 'true');
200
- }
201
- }
202
- }
203
- }
204
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OwlDialogService, deps: [{ token: i1.Overlay }, { token: i0.Injector }, { token: i2.Location, optional: true }, { token: OWL_DIALOG_SCROLL_STRATEGY }, { token: OWL_DIALOG_DEFAULT_OPTIONS, optional: true }, { token: OwlDialogService, optional: true, skipSelf: true }, { token: i1.OverlayContainer }], target: i0.ɵɵFactoryTarget.Injectable }); }
205
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OwlDialogService }); }
206
- }
207
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OwlDialogService, decorators: [{
208
- type: Injectable
209
- }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Injector }, { type: i2.Location, decorators: [{
210
- type: Optional
211
- }] }, { type: undefined, decorators: [{
212
- type: Inject,
213
- args: [OWL_DIALOG_SCROLL_STRATEGY]
214
- }] }, { type: i3.OwlDialogConfig, decorators: [{
215
- type: Optional
216
- }, {
217
- type: Inject,
218
- args: [OWL_DIALOG_DEFAULT_OPTIONS]
219
- }] }, { type: OwlDialogService, decorators: [{
220
- type: Optional
221
- }, {
222
- type: SkipSelf
223
- }] }, { type: i1.OverlayContainer }] });
224
- /**
225
- * Applies default options to the dialog config.
226
- * @param config Config to be modified.
227
- * @param defaultOptions Default config setting
228
- * @returns The new configuration object.
229
- */
230
- function applyConfigDefaults(config, defaultOptions) {
231
- return extendObject(new OwlDialogConfig(), config, defaultOptions);
232
- }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kaWFsb2cvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBRUwsTUFBTSxFQUNOLFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxFQUNSLFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxPQUFPLEVBQ1AsYUFBYSxFQUNiLGdCQUFnQixFQUdqQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxlQUFlLEVBRWYsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBRTdCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBTSxlQUFlLENBQUMsQ0FBQztBQUV4RTs7S0FFSztBQUNMLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksY0FBYyxDQUUxRCw0QkFBNEIsQ0FBQyxDQUFDO0FBRWhDLE1BQU0sVUFBVSwyQ0FB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QUFtQixDQUMxQixNQUF3QixFQUN4QixjQUFnQztJQUVoQyxPQUFPLFlBQVksQ0FBQyxJQUFJLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkaWFsb2cuc2VydmljZVxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIE9wdGlvbmFsLFxuICBTa2lwU2VsZixcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPd2xEaWFsb2dDb25maWcgfSBmcm9tICcuL2RpYWxvZy1jb25maWcuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGlhbG9nUmVmIH0gZnJvbSAnLi9kaWFsb2ctcmVmLmNsYXNzJztcbmltcG9ydCB7IE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZXh0ZW5kT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZGVmZXIsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlDb250YWluZXIsXG4gIE92ZXJsYXlSZWYsXG4gIFNjcm9sbFN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIENvbXBvbmVudFBvcnRhbCxcbiAgQ29tcG9uZW50VHlwZSxcbiAgUG9ydGFsSW5qZWN0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5cbmV4cG9ydCBjb25zdCBPV0xfRElBTE9HX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignT3dsRGlhbG9nRGF0YScpO1xuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiB0aGF0IGRldGVybWluZXMgdGhlIHNjcm9sbCBoYW5kbGluZyB3aGlsZSB0aGUgZGlhbG9nIGlzIG9wZW4uXG4gKiAqL1xuZXhwb3J0IGNvbnN0IE9XTF9ESUFMT0dfU0NST0xMX1NUUkFURUdZID0gbmV3IEluamVjdGlvblRva2VuPFxuICAoKSA9PiBTY3JvbGxTdHJhdGVneVxuPignb3dsLWRpYWxvZy1zY3JvbGwtc3RyYXRlZ3knKTtcblxuZXhwb3J0IGZ1bmN0aW9uIE9XTF9ESUFMT0dfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSX0ZBQ1RPUlkoXG4gIG92ZXJsYXk6IE92ZXJsYXlcbik6ICgpID0+IFNjcm9sbFN0cmF0ZWd5IHtcbiAgY29uc3QgZm4gPSAoKSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKTtcbiAgcmV0dXJuIGZuO1xufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IE9XTF9ESUFMT0dfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSID0ge1xuICBwcm92aWRlOiBPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWSxcbiAgZGVwczogW092ZXJsYXldLFxuICB1c2VGYWN0b3J5OiBPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUl9GQUNUT1JZXG59O1xuXG4vKiogSVxuICogbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGRlZmF1bHQgZGlhbG9nIG9wdGlvbnMuXG4gKiAqL1xuZXhwb3J0IGNvbnN0IE9XTF9ESUFMT0dfREVGQVVMVF9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE93bERpYWxvZ0NvbmZpZz4oXG4gICdvd2wtZGlhbG9nLWRlZmF1bHQtb3B0aW9ucydcbik7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPd2xEaWFsb2dTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhcmlhSGlkZGVuRWxlbWVudHMgPSBuZXcgTWFwPEVsZW1lbnQsIHN0cmluZyB8IG51bGw+KCk7XG5cbiAgcHJpdmF0ZSBfb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbDogT3dsRGlhbG9nUmVmPGFueT5bXSA9IFtdO1xuICBwcml2YXRlIF9hZnRlck9wZW5BdFRoaXNMZXZlbCA9IG5ldyBTdWJqZWN0PE93bERpYWxvZ1JlZjxhbnk+PigpO1xuICBwcml2YXRlIF9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnRseS1vcGVuIGRpYWxvZ3MuICovXG4gIGdldCBvcGVuRGlhbG9ncygpOiBPd2xEaWFsb2dSZWY8YW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnREaWFsb2dcbiAgICAgID8gdGhpcy5wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3NcbiAgICAgIDogdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbDtcbiAgfVxuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIGEgZGlhbG9nIGhhcyBiZWVuIG9wZW5lZC4gKi9cbiAgZ2V0IGFmdGVyT3BlbigpOiBTdWJqZWN0PE93bERpYWxvZ1JlZjxhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50RGlhbG9nXG4gICAgICA/IHRoaXMucGFyZW50RGlhbG9nLmFmdGVyT3BlblxuICAgICAgOiB0aGlzLl9hZnRlck9wZW5BdFRoaXNMZXZlbDtcbiAgfVxuXG4gIGdldCBfYWZ0ZXJBbGxDbG9zZWQoKTogYW55IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudERpYWxvZztcbiAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50Ll9hZnRlckFsbENsb3NlZCA6IHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nLlxuICAgKiBXaWxsIGVtaXQgb24gc3Vic2NyaWJlIGlmIHRoZXJlIGFyZSBubyBvcGVuIGRpYWxvZ3MgdG8gYmVnaW4gd2l0aC5cbiAgICovXG5cbiAgYWZ0ZXJBbGxDbG9zZWQ6IE9ic2VydmFibGU8e30+ID0gZGVmZXIoKCkgPT5cbiAgICB0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLmxlbmd0aFxuICAgICAgPyB0aGlzLl9hZnRlckFsbENsb3NlZFxuICAgICAgOiB0aGlzLl9hZnRlckFsbENsb3NlZC5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQpKVxuICApO1xuXG4gIHByaXZhdGUgc2Nyb2xsU3RyYXRlZ3k6ICgpID0+IFNjcm9sbFN0cmF0ZWd5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBASW5qZWN0KE9XTF9ESUFMT0dfU0NST0xMX1NUUkFURUdZKSBzY3JvbGxTdHJhdGVneTogYW55LFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChPV0xfRElBTE9HX0RFRkFVTFRfT1BUSU9OUylcbiAgICBwcml2YXRlIGRlZmF1bHRPcHRpb25zOiBPd2xEaWFsb2dDb25maWcsXG4gICAgQE9wdGlvbmFsKClcbiAgICBAU2tpcFNlbGYoKVxuICAgIHByaXZhdGUgcGFyZW50RGlhbG9nOiBPd2xEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheUNvbnRhaW5lcjogT3ZlcmxheUNvbnRhaW5lclxuICApIHtcbiAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5ID0gc2Nyb2xsU3RyYXRlZ3k7XG4gICAgaWYgKCFwYXJlbnREaWFsb2cgJiYgbG9jYXRpb24pIHtcbiAgICAgIGxvY2F0aW9uLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlQWxsKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuPFQ+KFxuICAgIGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcbiAgICBjb25maWc/OiBPd2xEaWFsb2dDb25maWdcbiAgKTogT3dsRGlhbG9nUmVmPGFueT4ge1xuICAgIGNvbmZpZyA9IGFwcGx5Q29uZmlnRGVmYXVsdHMoY29uZmlnLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIGlmIChjb25maWcuaWQgJiYgdGhpcy5nZXREaWFsb2dCeUlkKGNvbmZpZy5pZCkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgRGlhbG9nIHdpdGggaWQgXCIke2NvbmZpZy5pZH1cIiBleGlzdHMgYWxyZWFkeS4gVGhlIGRpYWxvZyBpZCBtdXN0IGJlIHVuaXF1ZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkoY29uZmlnKTtcbiAgICBjb25zdCBkaWFsb2dDb250YWluZXIgPSB0aGlzLmF0dGFjaERpYWxvZ0NvbnRhaW5lcihvdmVybGF5UmVmLCBjb25maWcpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuYXR0YWNoRGlhbG9nQ29udGVudDxUPihcbiAgICAgIGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsXG4gICAgICBkaWFsb2dDb250YWluZXIsXG4gICAgICBvdmVybGF5UmVmLFxuICAgICAgY29uZmlnXG4gICAgKTtcblxuICAgIGlmICghdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpO1xuICAgIH1cblxuICAgIHRoaXMub3BlbkRpYWxvZ3MucHVzaChkaWFsb2dSZWYpO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlbW92ZU9wZW5EaWFsb2coZGlhbG9nUmVmKSk7XG4gICAgdGhpcy5hZnRlck9wZW4ubmV4dChkaWFsb2dSZWYpO1xuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGFsbCBvZiB0aGUgY3VycmVudGx5LW9wZW4gZGlhbG9ncy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICBsZXQgaSA9IHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5vcGVuRGlhbG9nc1tpXS5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbiBvcGVuIGRpYWxvZyBieSBpdHMgaWQuXG4gICAqIEBwYXJhbSBpZCBJRCB0byB1c2Ugd2hlbiBsb29raW5nIHVwIHRoZSBkaWFsb2cuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlhbG9nQnlJZChpZDogc3RyaW5nKTogT3dsRGlhbG9nUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9wZW5EaWFsb2dzLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmlkID09PSBpZCk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaERpYWxvZ0NvbnRlbnQ8VD4oXG4gICAgY29tcG9uZW50T3JUZW1wbGF0ZVJlZjogQ29tcG9uZW50VHlwZTxUPiB8IFRlbXBsYXRlUmVmPFQ+LFxuICAgIGRpYWxvZ0NvbnRhaW5lcjogT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LFxuICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXG4gICAgY29uZmlnOiBPd2xEaWFsb2dDb25maWdcbiAgKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gbmV3IE93bERpYWxvZ1JlZjxUPihcbiAgICAgIG92ZXJsYXlSZWYsXG4gICAgICBkaWFsb2dDb250YWluZXIsXG4gICAgICBjb25maWcuaWQsXG4gICAgICB0aGlzLmxvY2F0aW9uXG4gICAgKTtcblxuICAgIGlmIChjb25maWcuaGFzQmFja2Ryb3ApIHtcbiAgICAgIG92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghZGlhbG9nUmVmLmRpc2FibGVDbG9zZSkge1xuICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50T3JUZW1wbGF0ZVJlZiBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gdGhpcy5jcmVhdGVJbmplY3RvcjxUPihcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkaWFsb2dSZWYsXG4gICAgICAgIGRpYWxvZ0NvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRSZWYgPSBkaWFsb2dDb250YWluZXIuYXR0YWNoQ29tcG9uZW50UG9ydGFsKFxuICAgICAgICBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIHVuZGVmaW5lZCwgaW5qZWN0b3IpXG4gICAgICApO1xuICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlID0gY29udGVudFJlZi5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBkaWFsb2dSZWZcbiAgICAgIC51cGRhdGVTaXplKGNvbmZpZy53aWR0aCwgY29uZmlnLmhlaWdodClcbiAgICAgIC51cGRhdGVQb3NpdGlvbihjb25maWcucG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5qZWN0b3I8VD4oXG4gICAgY29uZmlnOiBPd2xEaWFsb2dDb25maWcsXG4gICAgZGlhbG9nUmVmOiBPd2xEaWFsb2dSZWY8VD4sXG4gICAgZGlhbG9nQ29udGFpbmVyOiBPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnRcbiAgKSB7XG4gICAgY29uc3QgdXNlckluamVjdG9yID1cbiAgICAgIGNvbmZpZyAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZiAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZi5pbmplY3RvcjtcbiAgICBjb25zdCBpbmplY3Rpb25Ub2tlbnMgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgaW5qZWN0aW9uVG9rZW5zLnNldChPd2xEaWFsb2dSZWYsIGRpYWxvZ1JlZik7XG4gICAgaW5qZWN0aW9uVG9rZW5zLnNldChPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQsIGRpYWxvZ0NvbnRhaW5lcik7XG4gICAgaW5qZWN0aW9uVG9rZW5zLnNldChPV0xfRElBTE9HX0RBVEEsIGNvbmZpZy5kYXRhKTtcblxuICAgIHJldHVybiBuZXcgUG9ydGFsSW5qZWN0b3IodXNlckluamVjdG9yIHx8IHRoaXMuaW5qZWN0b3IsIGluamVjdGlvblRva2Vucyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoY29uZmlnOiBPd2xEaWFsb2dDb25maWcpOiBPdmVybGF5UmVmIHtcbiAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gdGhpcy5nZXRPdmVybGF5Q29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheS5jcmVhdGUob3ZlcmxheUNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaERpYWxvZ0NvbnRhaW5lcihcbiAgICBvdmVybGF5UmVmOiBPdmVybGF5UmVmLFxuICAgIGNvbmZpZzogT3dsRGlhbG9nQ29uZmlnXG4gICk6IE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCB7XG4gICAgY29uc3QgY29udGFpbmVyUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChcbiAgICAgIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgIGNvbmZpZy52aWV3Q29udGFpbmVyUmVmXG4gICAgKTtcbiAgICBjb25zdCBjb250YWluZXJSZWY6IENvbXBvbmVudFJlZjxPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQ+ID0gb3ZlcmxheVJlZi5hdHRhY2goXG4gICAgICBjb250YWluZXJQb3J0YWxcbiAgICApO1xuICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5zZXRDb25maWcoY29uZmlnKTtcblxuICAgIHJldHVybiBjb250YWluZXJSZWYuaW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIGdldE92ZXJsYXlDb25maWcoZGlhbG9nQ29uZmlnOiBPd2xEaWFsb2dDb25maWcpOiBPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBzdGF0ZSA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IGRpYWxvZ0NvbmZpZy5zY3JvbGxTdHJhdGVneSB8fCB0aGlzLnNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICBwYW5lbENsYXNzOiBkaWFsb2dDb25maWcucGFuZUNsYXNzLFxuICAgICAgaGFzQmFja2Ryb3A6IGRpYWxvZ0NvbmZpZy5oYXNCYWNrZHJvcCxcbiAgICAgIG1pbldpZHRoOiBkaWFsb2dDb25maWcubWluV2lkdGgsXG4gICAgICBtaW5IZWlnaHQ6IGRpYWxvZ0NvbmZpZy5taW5IZWlnaHQsXG4gICAgICBtYXhXaWR0aDogZGlhbG9nQ29uZmlnLm1heFdpZHRoLFxuICAgICAgbWF4SGVpZ2h0OiBkaWFsb2dDb25maWcubWF4SGVpZ2h0XG4gICAgfSk7XG5cbiAgICBpZiAoZGlhbG9nQ29uZmlnLmJhY2tkcm9wQ2xhc3MpIHtcbiAgICAgIHN0YXRlLmJhY2tkcm9wQ2xhc3MgPSBkaWFsb2dDb25maWcuYmFja2Ryb3BDbGFzcztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU9wZW5EaWFsb2coZGlhbG9nUmVmOiBPd2xEaWFsb2dSZWY8YW55Pik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbC5pbmRleE9mKGRpYWxvZ1JlZik7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgLy8gSWYgYWxsIHRoZSBkaWFsb2dzIHdlcmUgY2xvc2VkLCByZW1vdmUvcmVzdG9yZSB0aGUgYGFyaWEtaGlkZGVuYFxuICAgICAgLy8gdG8gYSB0aGUgc2libGluZ3MgYW5kIGVtaXQgdG8gdGhlIGBhZnRlckFsbENsb3NlZGAgc3RyZWFtLlxuICAgICAgaWYgKCF0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmFyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKChwcmV2aW91c1ZhbHVlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHByZXZpb3VzVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX2FmdGVyQWxsQ2xvc2VkLm5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgYWxsIG9mIHRoZSBjb250ZW50IHRoYXQgaXNuJ3QgYW4gb3ZlcmxheSBmcm9tIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LlxuICAgKi9cbiAgcHJpdmF0ZSBoaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCkge1xuICAgIGNvbnN0IG92ZXJsYXlDb250YWluZXIgPSB0aGlzLm92ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG92ZXJsYXkgY29udGFpbmVyIGlzIGF0dGFjaGVkIHRvIHRoZSBET00uXG4gICAgaWYgKG92ZXJsYXlDb250YWluZXIucGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3Qgc2libGluZ3MgPSBvdmVybGF5Q29udGFpbmVyLnBhcmVudEVsZW1lbnQuY2hpbGRyZW47XG5cbiAgICAgIGZvciAobGV0IGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNpYmxpbmcgIT09IG92ZXJsYXlDb250YWluZXIgJiZcbiAgICAgICAgICBzaWJsaW5nLm5vZGVOYW1lICE9PSAnU0NSSVBUJyAmJlxuICAgICAgICAgIHNpYmxpbmcubm9kZU5hbWUgIT09ICdTVFlMRScgJiZcbiAgICAgICAgICAhc2libGluZy5oYXNBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYXJpYUhpZGRlbkVsZW1lbnRzLnNldChcbiAgICAgICAgICAgIHNpYmxpbmcsXG4gICAgICAgICAgICBzaWJsaW5nLmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxuICAgICAgICAgICk7XG4gICAgICAgICAgc2libGluZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFwcGxpZXMgZGVmYXVsdCBvcHRpb25zIHRvIHRoZSBkaWFsb2cgY29uZmlnLlxuICogQHBhcmFtIGNvbmZpZyBDb25maWcgdG8gYmUgbW9kaWZpZWQuXG4gKiBAcGFyYW0gZGVmYXVsdE9wdGlvbnMgRGVmYXVsdCBjb25maWcgc2V0dGluZ1xuICogQHJldHVybnMgVGhlIG5ldyBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYXBwbHlDb25maWdEZWZhdWx0cyhcbiAgY29uZmlnPzogT3dsRGlhbG9nQ29uZmlnLFxuICBkZWZhdWx0T3B0aW9ucz86IE93bERpYWxvZ0NvbmZpZ1xuKTogT3dsRGlhbG9nQ29uZmlnIHtcbiAgcmV0dXJuIGV4dGVuZE9iamVjdChuZXcgT3dsRGlhbG9nQ29uZmlnKCksIGNvbmZpZywgZGVmYXVsdE9wdGlvbnMpO1xufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * index
3
- */
4
- export * from './object.utils';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGluZGV4XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9vYmplY3QudXRpbHMnO1xuIl19
@@ -1,26 +0,0 @@
1
- /**
2
- * object.utils
3
- */
4
- /**
5
- * Extends an object with the *enumerable* and *own* properties of one or more source objects,
6
- * similar to Object.assign.
7
- *
8
- * @param dest The object which will have properties copied to it.
9
- * @param sources The source objects from which properties will be copied.
10
- */
11
- export function extendObject(dest, ...sources) {
12
- if (dest == null) {
13
- throw TypeError('Cannot convert undefined or null to object');
14
- }
15
- for (const source of sources) {
16
- if (source != null) {
17
- for (const key in source) {
18
- if (source.hasOwnProperty(key)) {
19
- dest[key] = source[key];
20
- }
21
- }
22
- }
23
- }
24
- return dest;
25
- }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9uZ3gtcGljay1kYXRldGltZS9saWIvdXRpbHMvb2JqZWN0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFTLEVBQUUsR0FBRyxPQUFjO0lBQ3ZELElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2pCLE1BQU0sU0FBUyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG9iamVjdC51dGlsc1xuICovXG5cbi8qKlxuICogRXh0ZW5kcyBhbiBvYmplY3Qgd2l0aCB0aGUgKmVudW1lcmFibGUqIGFuZCAqb3duKiBwcm9wZXJ0aWVzIG9mIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzLFxuICogc2ltaWxhciB0byBPYmplY3QuYXNzaWduLlxuICpcbiAqIEBwYXJhbSBkZXN0IFRoZSBvYmplY3Qgd2hpY2ggd2lsbCBoYXZlIHByb3BlcnRpZXMgY29waWVkIHRvIGl0LlxuICogQHBhcmFtIHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzIGZyb20gd2hpY2ggcHJvcGVydGllcyB3aWxsIGJlIGNvcGllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZE9iamVjdChkZXN0OiBhbnksIC4uLnNvdXJjZXM6IGFueVtdKTogYW55IHtcbiAgaWYgKGRlc3QgPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgaWYgKHNvdXJjZSAhPSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgZGVzdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn1cbiJdfQ==
@@ -1,151 +0,0 @@
1
- import { Component, Input, forwardRef, Output, EventEmitter, Renderer2 } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { concat, of, Subject } from 'rxjs';
4
- import { catchError, distinctUntilChanged, finalize, switchMap, tap } from 'rxjs/operators';
5
- import { TranslateService } from '@ngx-translate/core';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@ngx-translate/core";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@ng-select/ng-select";
10
- import * as i4 from "@angular/forms";
11
- export class RemoteSelectComponent {
12
- get dataSource() {
13
- return this._dataSource;
14
- }
15
- set dataSource(v) {
16
- this._dataSource = v;
17
- if (this._dataSource && this._dataSource.dataFromSourceChanged) {
18
- this.subscribeToDataSourceDataChanges();
19
- }
20
- }
21
- constructor(renderer, translate) {
22
- this.renderer = renderer;
23
- this.translate = translate;
24
- this.remoteOptionsLoading = false;
25
- this.remoteOptionInput$ = new Subject();
26
- this.items = [];
27
- this.value = [];
28
- this.loading = false;
29
- this.searchText = '';
30
- this.notFoundMsg = this.translate.instant('matchNotFound');
31
- this.placeholder = this.translate.instant('search');
32
- this.disabled = false;
33
- this.theme = 'dark';
34
- this.invalid = 'false';
35
- this.done = new EventEmitter();
36
- this.compareItems = (item, selected) => {
37
- if (item.value && selected.value) {
38
- return item.value === selected.value;
39
- }
40
- return false;
41
- };
42
- // the method set in registerOnChange, it is just
43
- // a placeholder for a method that takes one parameter,
44
- // we use it to emit changes back to the form
45
- this.propagateChange = (change) => { };
46
- }
47
- ngOnInit() {
48
- this.loadOptions();
49
- }
50
- subscribeToDataSourceDataChanges() {
51
- this._dataSource.dataFromSourceChanged.subscribe((results) => {
52
- if (results.length > 0) {
53
- this.items = results;
54
- this.notFoundMsg = '';
55
- }
56
- else {
57
- this.notFoundMsg = 'Match not found';
58
- this.items = [];
59
- }
60
- });
61
- }
62
- // this is the initial value set to the component
63
- writeValue(value) {
64
- if (value && value !== '') {
65
- if (this.dataSource) {
66
- this.loading = true;
67
- this.dataSource.resolveSelectedValue(value).subscribe((result) => {
68
- this.items = [result];
69
- this.selectedRemoteOptions = result;
70
- this.loading = false;
71
- }, (error) => {
72
- this.loading = false;
73
- });
74
- }
75
- }
76
- }
77
- // registers 'fn' that will be fired when changes are made
78
- // this is how we emit the changes back to the form
79
- registerOnChange(fn) {
80
- this.propagateChange = fn;
81
- }
82
- // not used, used for touch input
83
- registerOnTouched() { }
84
- // change events from the textarea
85
- onChange(event) {
86
- this.propagateChange(event.id);
87
- // .....
88
- // update the form
89
- // this.propagateChange(this.data);
90
- }
91
- selected(event) {
92
- this.propagateChange(event);
93
- }
94
- trackByFn(item) {
95
- return item.value;
96
- }
97
- loadOptions() {
98
- this.remoteOptions$ = concat(this.dataSource
99
- .searchOptions('', this.dataSource?.dataSourceOptions ?? {})
100
- ?.pipe(catchError((error) => {
101
- console.error('Error loading initial options:', error);
102
- return of([]);
103
- })) ?? of([]), // default items
104
- this.remoteOptionInput$.pipe(distinctUntilChanged(), tap(() => {
105
- this.loading = true;
106
- }), switchMap((term) => this.dataSource
107
- .searchOptions(term, this.dataSource?.dataSourceOptions ?? {})
108
- .pipe(catchError((error) => {
109
- console.error('Error loading options:', error);
110
- return of([]);
111
- }), finalize(() => {
112
- this.loading = false;
113
- })))));
114
- }
115
- ngOnDestroy() {
116
- this.remoteOptionInput$.complete();
117
- }
118
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteSelectComponent, deps: [{ token: i0.Renderer2 }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
119
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RemoteSelectComponent, selector: "ofe-remote-select", inputs: { placeholder: "placeholder", componentID: "componentID", disabled: "disabled", theme: "theme", invalid: "invalid", dataSource: "dataSource" }, outputs: { done: "done" }, providers: [
120
- {
121
- provide: NG_VALUE_ACCESSOR,
122
- useExisting: forwardRef(() => RemoteSelectComponent),
123
- multi: true
124
- }
125
- ], ngImport: i0, template: "<ng-select\n [ngClass]=\"{\n 'afe-custom': theme === 'light',\n 'invalid': invalid ?? false\n }\"\n [disabled]=\"disabled\"\n [items]=\"remoteOptions$ | async\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [multiple]=\"false\"\n [hideSelected]=\"true\"\n [compareWith]=\"compareItems\"\n [trackByFn]=\"trackByFn\"\n [loading]=\"loading\"\n [typeToSearchText]=\"'enterMoreCharacters' | translate\"\n [typeahead]=\"remoteOptionInput$\"\n [ngModel]=\"selectedRemoteOptions\"\n (ngModelChange)=\"selectedRemoteOptions = $event; selected($event)\"\n [appendTo]=\"'form'\"\n>\n</ng-select>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "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", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
126
- }
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoteSelectComponent, decorators: [{
128
- type: Component,
129
- args: [{ selector: 'ofe-remote-select', providers: [
130
- {
131
- provide: NG_VALUE_ACCESSOR,
132
- useExisting: forwardRef(() => RemoteSelectComponent),
133
- multi: true
134
- }
135
- ], template: "<ng-select\n [ngClass]=\"{\n 'afe-custom': theme === 'light',\n 'invalid': invalid ?? false\n }\"\n [disabled]=\"disabled\"\n [items]=\"remoteOptions$ | async\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [multiple]=\"false\"\n [hideSelected]=\"true\"\n [compareWith]=\"compareItems\"\n [trackByFn]=\"trackByFn\"\n [loading]=\"loading\"\n [typeToSearchText]=\"'enterMoreCharacters' | translate\"\n [typeahead]=\"remoteOptionInput$\"\n [ngModel]=\"selectedRemoteOptions\"\n (ngModelChange)=\"selectedRemoteOptions = $event; selected($event)\"\n [appendTo]=\"'form'\"\n>\n</ng-select>\n" }]
136
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.TranslateService }], propDecorators: { placeholder: [{
137
- type: Input
138
- }], componentID: [{
139
- type: Input
140
- }], disabled: [{
141
- type: Input
142
- }], theme: [{
143
- type: Input
144
- }], invalid: [{
145
- type: Input
146
- }], done: [{
147
- type: Output
148
- }], dataSource: [{
149
- type: Input
150
- }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJlbW90ZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9uZ3gtcmVtb3RlLXNlbGVjdC9uZ3gtcmVtb3RlLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1yZW1vdGUtc2VsZWN0L3JlbW90ZS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEVBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUt4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBYXZELE1BQU0sT0FBTyxxQkFBcUI7SUFtQmhDLElBQ1csVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQVcsVUFBVSxDQUFDLENBQWE7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUMxQyxDQUFDO0lB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QU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0MsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUNILENBQ0osQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQyxDQUFDOytHQTFJVSxxQkFBcUI7bUdBQXJCLHFCQUFxQiwrTkFSckI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDO2dCQUNwRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDakNILGttQkFxQkE7OzRGRGNhLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDRSxtQkFBbUIsYUFFbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzZHQWFRLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksSUFBSTtzQkFBYixNQUFNO2dCQUlJLFVBQVU7c0JBRHBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIGZvcndhcmRSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBSZW5kZXJlcjIsIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvbmNhdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaW5hbGl6ZSxcbiAgc3dpdGNoTWFwLFxuICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybS1lbnRyeS9xdWVzdGlvbi1tb2RlbHMvaW50ZXJmYWNlcy9zZWxlY3Qtb3B0aW9uJztcblxuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2Zvcm0tZW50cnkvcXVlc3Rpb24tbW9kZWxzL2ludGVyZmFjZXMvZGF0YS1zb3VyY2UnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZmUtcmVtb3RlLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAncmVtb3RlLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmVtb3RlU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJlbW90ZVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XG4gIC8vIEBJbnB1dCgpIGRhdGFTb3VyY2U6IERhdGFTb3VyY2U7XG4gIHJlbW90ZU9wdGlvbnMkOiBPYnNlcnZhYmxlPFNlbGVjdE9wdGlvbltdPjtcbiAgcmVtb3RlT3B0aW9uc0xvYWRpbmcgPSBmYWxzZTtcbiAgcmVtb3RlT3B0aW9uSW5wdXQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBzZWxlY3RlZFJlbW90ZU9wdGlvbnM6IFNlbGVjdE9wdGlvbjtcbiAgaXRlbXMgPSBbXTtcbiAgdmFsdWUgPSBbXTtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBzZWFyY2hUZXh0ID0gJyc7XG4gIG5vdEZvdW5kTXNnID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbWF0Y2hOb3RGb3VuZCcpO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NlYXJjaCcpO1xuICBASW5wdXQoKSBjb21wb25lbnRJRDogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB0aGVtZSA9ICdkYXJrJztcbiAgQElucHV0KCkgaW52YWxpZCA9ICdmYWxzZSc7XG4gIEBPdXRwdXQoKSBkb25lOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IERhdGFTb3VyY2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBEYXRhU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgfVxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodjogRGF0YVNvdXJjZSkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2O1xuICAgIGlmICh0aGlzLl9kYXRhU291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UuZGF0YUZyb21Tb3VyY2VDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0YVNvdXJjZURhdGFDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRPcHRpb25zKCk7XG4gIH1cblxuICBzdWJzY3JpYmVUb0RhdGFTb3VyY2VEYXRhQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9kYXRhU291cmNlLmRhdGFGcm9tU291cmNlQ2hhbmdlZC5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHJlc3VsdHM7XG4gICAgICAgIHRoaXMubm90Rm91bmRNc2cgPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm90Rm91bmRNc2cgPSAnTWF0Y2ggbm90IGZvdW5kJztcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gdGhpcyBpcyB0aGUgaW5pdGlhbCB2YWx1ZSBzZXQgdG8gdGhlIGNvbXBvbmVudFxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZVNlbGVjdGVkVmFsdWUodmFsdWUpLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBbcmVzdWx0XTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZW1vdGVPcHRpb25zID0gcmVzdWx0O1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gcmVnaXN0ZXJzICdmbicgdGhhdCB3aWxsIGJlIGZpcmVkIHdoZW4gY2hhbmdlcyBhcmUgbWFkZVxuICAvLyB0aGlzIGlzIGhvdyB3ZSBlbWl0IHRoZSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGZvcm1cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBub3QgdXNlZCwgdXNlZCBmb3IgdG91Y2ggaW5wdXRcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKCkge31cbiAgLy8gY2hhbmdlIGV2ZW50cyBmcm9tIHRoZSB0ZXh0YXJlYVxuICBvbkNoYW5nZShldmVudCkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGV2ZW50LmlkKTtcbiAgICAvLyAuLi4uLlxuICAgIC8vIHVwZGF0ZSB0aGUgZm9ybVxuICAgIC8vIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuZGF0YSk7XG4gIH1cbiAgc2VsZWN0ZWQoZXZlbnQpIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShldmVudCk7XG4gIH1cblxuICBjb21wYXJlSXRlbXMgPSAoaXRlbSwgc2VsZWN0ZWQpID0+IHtcbiAgICBpZiAoaXRlbS52YWx1ZSAmJiBzZWxlY3RlZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWUgPT09IHNlbGVjdGVkLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gdGhlIG1ldGhvZCBzZXQgaW4gcmVnaXN0ZXJPbkNoYW5nZSwgaXQgaXMganVzdFxuICAvLyBhIHBsYWNlaG9sZGVyIGZvciBhIG1ldGhvZCB0aGF0IHRha2VzIG9uZSBwYXJhbWV0ZXIsXG4gIC8vIHdlIHVzZSBpdCB0byBlbWl0IGNoYW5nZXMgYmFjayB0byB0aGUgZm9ybVxuICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZSA9IChjaGFuZ2U6IGFueSkgPT4ge307XG5cbiAgdHJhY2tCeUZuKGl0ZW06IFNlbGVjdE9wdGlvbikge1xuICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3B0aW9ucygpIHtcbiAgICB0aGlzLnJlbW90ZU9wdGlvbnMkID0gY29uY2F0KFxuICAgICAgdGhpcy5kYXRhU291cmNlXG4gICAgICAgIC5zZWFyY2hPcHRpb25zKCcnLCB0aGlzLmRhdGFTb3VyY2U/LmRhdGFTb3VyY2VPcHRpb25zID8/IHt9KVxuICAgICAgICA/LnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgaW5pdGlhbCBvcHRpb25zOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKSA/PyBvZihbXSksIC8vIGRlZmF1bHQgaXRlbXNcbiAgICAgIHRoaXMucmVtb3RlT3B0aW9uSW5wdXQkLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgodGVybSkgPT5cbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5zZWFyY2hPcHRpb25zKHRlcm0sIHRoaXMuZGF0YVNvdXJjZT8uZGF0YVNvdXJjZU9wdGlvbnMgPz8ge30pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIG9wdGlvbnM6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdGVPcHRpb25JbnB1dCQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPG5nLXNlbGVjdFxuICBbbmdDbGFzc109XCJ7XG4gICAgJ2FmZS1jdXN0b20nOiB0aGVtZSA9PT0gJ2xpZ2h0JyxcbiAgICAnaW52YWxpZCc6IGludmFsaWQgPz8gZmFsc2VcbiAgfVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtpdGVtc109XCJyZW1vdGVPcHRpb25zJCB8IGFzeW5jXCJcbiAgYmluZExhYmVsPVwibGFiZWxcIlxuICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gIFtoaWRlU2VsZWN0ZWRdPVwidHJ1ZVwiXG4gIFtjb21wYXJlV2l0aF09XCJjb21wYXJlSXRlbXNcIlxuICBbdHJhY2tCeUZuXT1cInRyYWNrQnlGblwiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbdHlwZVRvU2VhcmNoVGV4dF09XCInZW50ZXJNb3JlQ2hhcmFjdGVycycgfCB0cmFuc2xhdGVcIlxuICBbdHlwZWFoZWFkXT1cInJlbW90ZU9wdGlvbklucHV0JFwiXG4gIFtuZ01vZGVsXT1cInNlbGVjdGVkUmVtb3RlT3B0aW9uc1wiXG4gIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkUmVtb3RlT3B0aW9ucyA9ICRldmVudDsgc2VsZWN0ZWQoJGV2ZW50KVwiXG4gIFthcHBlbmRUb109XCInZm9ybSdcIlxuPlxuPC9uZy1zZWxlY3Q+XG4iXX0=
@@ -1,22 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormsModule } from '@angular/forms';
4
- import { NgSelectModule } from '@ng-select/ng-select';
5
- import { TranslateModule } from '@ngx-translate/core';
6
- import { RemoteSelectComponent } from './ngx-remote-select.component';
7
- import * as i0 from "@angular/core";
8
- export class NgxRemoteSelectModule {
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxRemoteSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NgxRemoteSelectModule, declarations: [RemoteSelectComponent], imports: [CommonModule, NgSelectModule, FormsModule, TranslateModule], exports: [RemoteSelectComponent] }); }
11
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxRemoteSelectModule, imports: [CommonModule, NgSelectModule, FormsModule, TranslateModule] }); }
12
- }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxRemoteSelectModule, decorators: [{
14
- type: NgModule,
15
- args: [{
16
- imports: [CommonModule, NgSelectModule, FormsModule, TranslateModule],
17
- exports: [RemoteSelectComponent],
18
- declarations: [RemoteSelectComponent],
19
- providers: []
20
- }]
21
- }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJlbW90ZS1zZWxlY3QubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9uZ3gtcmVtb3RlLXNlbGVjdC9uZ3gtcmVtb3RlLXNlbGVjdC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBUXRFLE1BQU0sT0FBTyxxQkFBcUI7K0dBQXJCLHFCQUFxQjtnSEFBckIscUJBQXFCLGlCQUhqQixxQkFBcUIsYUFGMUIsWUFBWSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsZUFBZSxhQUMxRCxxQkFBcUI7Z0hBSXBCLHFCQUFxQixZQUx0QixZQUFZLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxlQUFlOzs0RkFLekQscUJBQXFCO2tCQU5qQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQztvQkFDckUsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxTQUFTLEVBQUUsRUFBRTtpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBSZW1vdGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL25neC1yZW1vdGUtc2VsZWN0LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5nU2VsZWN0TW9kdWxlLCBGb3Jtc01vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgZXhwb3J0czogW1JlbW90ZVNlbGVjdENvbXBvbmVudF0sXG4gIGRlY2xhcmF0aW9uczogW1JlbW90ZVNlbGVjdENvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW11cbn0pXG5leHBvcnQgY2xhc3MgTmd4UmVtb3RlU2VsZWN0TW9kdWxlIHt9XG4iXX0=
@@ -1,74 +0,0 @@
1
- import { Component, ContentChildren, Input, Output, EventEmitter } from '@angular/core';
2
- import { TabComponent } from './tab.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "../directives/hover-class.directive";
6
- export class TabSetComponent {
7
- constructor() {
8
- this.disableStyle = false;
9
- this.customNavClass = '';
10
- this.customTabsClass = '';
11
- this.selectedIndex = 0;
12
- this.tabSelect = new EventEmitter();
13
- }
14
- ngOnChanges(changes) {
15
- if (changes.selectedIndex && !changes.selectedIndex.firstChange) {
16
- this.selectTab(this.tabs.toArray()[changes.selectedIndex.currentValue]);
17
- }
18
- }
19
- // contentChildren are set
20
- ngAfterContentInit() {
21
- // get all active tabs
22
- const activeTabs = this.tabs.filter((tab) => tab.active);
23
- // if there is no active tab set, activate the first
24
- setTimeout(() => {
25
- if (activeTabs.length === 0) {
26
- this.selectTab(this.tabs.first);
27
- }
28
- });
29
- }
30
- onHover($event) { }
31
- selectTab(tabToSelect) {
32
- if (tabToSelect.disabled === true || tabToSelect.active === true) {
33
- return;
34
- }
35
- // deactivate all tabs
36
- this.tabs.toArray().forEach((tab) => (tab.active = false));
37
- // activate the tab the user has clicked on.
38
- tabToSelect.active = true;
39
- this.tabSelect.emit(this.tabs.toArray().indexOf(tabToSelect));
40
- }
41
- getStatusClasses(active, disabled) {
42
- if (active) {
43
- return 'active';
44
- }
45
- if (!disabled && !active) {
46
- return 'enabled';
47
- }
48
- if (disabled) {
49
- return 'disabled';
50
- }
51
- }
52
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabSetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
53
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TabSetComponent, selector: "ofe-tab-set", inputs: { disableStyle: "disableStyle", customNavClass: "customNavClass", customTabsClass: "customTabsClass", selectedIndex: "selectedIndex", formSubmissionTemplate: "formSubmissionTemplate" }, outputs: { tabSelect: "tabSelect" }, queries: [{ propertyName: "tabs", predicate: TabComponent }], usesOnChanges: true, ngImport: i0, template: "<div class=\"tab-container\">\n <section>\n <div class=\"tab\">\n <button\n ofeHoverClass=\"hover\"\n class=\"tablinks completed\"\n *ngFor=\"let tab of tabs\"\n (click)=\"selectTab(tab)\"\n [class]=\"getStatusClasses(tab.active, tab.disabled)\"\n >\n <span>{{ tab.tabTitle }}</span>\n </button>\n <ng-container *ngTemplateOutlet=\"formSubmissionTemplate\"></ng-container>\n </div>\n </section>\n <section id=\"tab\">\n <ng-content></ng-content>\n </section>\n</div>\n", styles: [".tab{width:10rem;position:fixed}.tab button{font-family:inherit;display:block;background-color:inherit;width:100%;border:none;outline:none;text-align:left;transition:.3s;min-height:2rem;white-space:normal;word-wrap:break-word;margin:0 0 .063rem}.tab button :hover{cursor:pointer}@media screen and (max-width: 768px){.tab button{height:3rem;border-bottom:.0125rem solid var(--open-mrs-background-gray);width:10rem}}.tab button.active.hover,.tab button.enabled.hover{background-color:var(--gray-gray-10)}.tab button.completed{border-left:.5rem solid var(--inverse-support-02);background-color:var(--color-green-10);font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.43;letter-spacing:.16px;color:#161616}.tab button.active{background-color:#ededed;border-left:.5rem solid #009d9a;font-size:.875rem;font-weight:600;font-stretch:normal;font-style:normal;line-height:1.43;letter-spacing:.16px;color:#161616}.tab button.enabled{background-color:#fff;border-left:.5rem solid #9ef0f0;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.43;letter-spacing:.16px;color:var(--color-gray-100)}.tab button.error{background-color:var(--color-red-10);border-left:.5rem solid var(--open-mrs-danger-red-60);font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:.16px;color:#da1e28}.tab button.disabled{background-color:#fff;border-left:.5rem solid #dae0e0;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.43;letter-spacing:.16px;color:var(--gray-gray-30)}.tab button.active.error{background-color:var(--color-red-20);border-left:.5rem solid var(--open-mrs-danger-red-60);font-size:.875rem;font-weight:600;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:.16px;color:#da1e28}.tab-container{display:grid;grid-template-columns:179px minmax(0,1fr)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.HoverClassDirective, selector: "[ofeHoverClass]", inputs: ["hoverClass"] }] }); }
54
- }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabSetComponent, decorators: [{
56
- type: Component,
57
- args: [{ selector: 'ofe-tab-set', template: "<div class=\"tab-container\">\n <section>\n <div class=\"tab\">\n <button\n ofeHoverClass=\"hover\"\n class=\"tablinks completed\"\n *ngFor=\"let tab of tabs\"\n (click)=\"selectTab(tab)\"\n [class]=\"getStatusClasses(tab.active, tab.disabled)\"\n >\n <span>{{ tab.tabTitle }}</span>\n </button>\n <ng-container *ngTemplateOutlet=\"formSubmissionTemplate\"></ng-container>\n </div>\n </section>\n <section id=\"tab\">\n <ng-content></ng-content>\n </section>\n</div>\n", styles: [".tab{width:10rem;position:fixed}.tab button{font-family:inherit;display:block;background-color:inherit;width:100%;border:none;outline:none;text-align:left;transition:.3s;min-height:2rem;white-space:normal;word-wrap:break-word;margin:0 0 .063rem}.tab button :hover{cursor:pointer}@media screen and (max-width: 768px){.tab button{height:3rem;border-bottom:.0125rem solid var(--open-mrs-background-gray);width:10rem}}.tab button.active.hover,.tab button.enabled.hover{background-color:var(--gray-gray-10)}.tab button.completed{border-left:.5rem solid var(--inverse-support-02);background-color:var(--color-green-10);font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.43;letter-spacing:.16px;color:#161616}.tab button.active{background-color:#ededed;border-left:.5rem solid #009d9a;font-size:.875rem;font-weight:600;font-stretch:normal;font-style:normal;line-height:1.43;letter-spacing:.16px;color:#161616}.tab button.enabled{background-color:#fff;border-left:.5rem solid #9ef0f0;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.43;letter-spacing:.16px;color:var(--color-gray-100)}.tab button.error{background-color:var(--color-red-10);border-left:.5rem solid var(--open-mrs-danger-red-60);font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:.16px;color:#da1e28}.tab button.disabled{background-color:#fff;border-left:.5rem solid #dae0e0;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.43;letter-spacing:.16px;color:var(--gray-gray-30)}.tab button.active.error{background-color:var(--color-red-20);border-left:.5rem solid var(--open-mrs-danger-red-60);font-size:.875rem;font-weight:600;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:.16px;color:#da1e28}.tab-container{display:grid;grid-template-columns:179px minmax(0,1fr)}\n"] }]
58
- }], propDecorators: { tabs: [{
59
- type: ContentChildren,
60
- args: [TabComponent]
61
- }], disableStyle: [{
62
- type: Input
63
- }], customNavClass: [{
64
- type: Input
65
- }], customTabsClass: [{
66
- type: Input
67
- }], selectedIndex: [{
68
- type: Input
69
- }], formSubmissionTemplate: [{
70
- type: Input
71
- }], tabSelect: [{
72
- type: Output
73
- }] } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRhYi1zZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9uZ3gtdGFic2V0L2NvbXBvbmVudHMvbmd4LXRhYi1zZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9uZ3gtdGFic2V0L2NvbXBvbmVudHMvbmd4LXRhYi1zZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBRWYsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR2IsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBTy9DLE1BQU0sT0FBTyxlQUFlO0lBTDVCO1FBUWtCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBR3pCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBOENqRDtJQTVDQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsYUFBYSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLGtCQUFrQjtRQUN2QixzQkFBc0I7UUFDdEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFpQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkUsb0RBQW9EO1FBQ3BELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sT0FBTyxDQUFDLE1BQU0sSUFBRyxDQUFDO0lBRWxCLFNBQVMsQ0FBQyxXQUF5QjtRQUN4QyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakUsT0FBTztRQUNULENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV6RSw0Q0FBNEM7UUFDNUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ00sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVE7UUFDdEMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQzsrR0F0RFUsZUFBZTttR0FBZixlQUFlLCtTQUNULFlBQVksa0RDcEIvQixpaUJBbUJBOzs0RkRBYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLGFBQWE7OEJBS2UsSUFBSTtzQkFBekMsZUFBZTt1QkFBQyxZQUFZO2dCQUViLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVXLFNBQVM7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVGFiQ29tcG9uZW50IH0gZnJvbSAnLi90YWIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2ZlLXRhYi1zZXQnLFxuICBzdHlsZVVybHM6IFsnbmd4LXRhYi1zZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICduZ3gtdGFiLXNldC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGFiU2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJDb21wb25lbnQpIHB1YmxpYyB0YWJzOiBRdWVyeUxpc3Q8VGFiQ29tcG9uZW50PjtcblxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZVN0eWxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21OYXZDbGFzczogU3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21UYWJzQ2xhc3M6IFN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWRJbmRleDogTnVtYmVyID0gMDtcbiAgQElucHV0KCkgZm9ybVN1Ym1pc3Npb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyB0YWJTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkSW5kZXggJiYgIWNoYW5nZXMuc2VsZWN0ZWRJbmRleC5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5zZWxlY3RUYWIodGhpcy50YWJzLnRvQXJyYXkoKVtjaGFuZ2VzLnNlbGVjdGVkSW5kZXguY3VycmVudFZhbHVlXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gY29udGVudENoaWxkcmVuIGFyZSBzZXRcbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAvLyBnZXQgYWxsIGFjdGl2ZSB0YWJzXG4gICAgY29uc3QgYWN0aXZlVGFicyA9IHRoaXMudGFicy5maWx0ZXIoKHRhYjogVGFiQ29tcG9uZW50KSA9PiB0YWIuYWN0aXZlKTtcblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIGFjdGl2ZSB0YWIgc2V0LCBhY3RpdmF0ZSB0aGUgZmlyc3RcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChhY3RpdmVUYWJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnMuZmlyc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uSG92ZXIoJGV2ZW50KSB7fVxuXG4gIHB1YmxpYyBzZWxlY3RUYWIodGFiVG9TZWxlY3Q6IFRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmICh0YWJUb1NlbGVjdC5kaXNhYmxlZCA9PT0gdHJ1ZSB8fCB0YWJUb1NlbGVjdC5hY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkZWFjdGl2YXRlIGFsbCB0YWJzXG4gICAgdGhpcy50YWJzLnRvQXJyYXkoKS5mb3JFYWNoKCh0YWI6IFRhYkNvbXBvbmVudCkgPT4gKHRhYi5hY3RpdmUgPSBmYWxzZSkpO1xuXG4gICAgLy8gYWN0aXZhdGUgdGhlIHRhYiB0aGUgdXNlciBoYXMgY2xpY2tlZCBvbi5cbiAgICB0YWJUb1NlbGVjdC5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMudGFiU2VsZWN0LmVtaXQodGhpcy50YWJzLnRvQXJyYXkoKS5pbmRleE9mKHRhYlRvU2VsZWN0KSk7XG4gIH1cbiAgcHVibGljIGdldFN0YXR1c0NsYXNzZXMoYWN0aXZlLCBkaXNhYmxlZCkge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIHJldHVybiAnYWN0aXZlJztcbiAgICB9XG4gICAgaWYgKCFkaXNhYmxlZCAmJiAhYWN0aXZlKSB7XG4gICAgICByZXR1cm4gJ2VuYWJsZWQnO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiAnZGlzYWJsZWQnO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYi1jb250YWluZXJcIj5cbiAgPHNlY3Rpb24+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBvZmVIb3ZlckNsYXNzPVwiaG92ZXJcIlxuICAgICAgICBjbGFzcz1cInRhYmxpbmtzIGNvbXBsZXRlZFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RUYWIodGFiKVwiXG4gICAgICAgIFtjbGFzc109XCJnZXRTdGF0dXNDbGFzc2VzKHRhYi5hY3RpdmUsIHRhYi5kaXNhYmxlZClcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj57eyB0YWIudGFiVGl0bGUgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb3JtU3VibWlzc2lvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gaWQ9XCJ0YWJcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19