ngx-ode-ui 4.6.0-dev.1 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/esm2020/lib/components/datepicker/datepicker.component.mjs +148 -0
  2. package/esm2020/lib/components/dropdown/dropdown.component.mjs +55 -0
  3. package/esm2020/lib/components/ellipsis/ellipsis.component.mjs +53 -0
  4. package/esm2020/lib/components/form-errors/form-errors.component.mjs +35 -0
  5. package/esm2020/lib/components/form-field/form-field.component.mjs +24 -0
  6. package/esm2020/lib/components/item-tree/item-tree.component.mjs +170 -0
  7. package/esm2020/lib/components/lightbox/lightbox.component.mjs +70 -0
  8. package/esm2020/lib/components/lightbox-confirm/lightbox-confirm.component.mjs +43 -0
  9. package/esm2020/lib/components/list/list.component.mjs +88 -0
  10. package/esm2020/lib/components/list-checkable/list-checkable.component.mjs +79 -0
  11. package/esm2020/lib/components/message-box/message-box.component.mjs +92 -0
  12. package/esm2020/lib/components/message-sticker/message-sticker.component.mjs +51 -0
  13. package/esm2020/lib/components/mono-select/mono-select.component.mjs +83 -0
  14. package/esm2020/lib/components/multi-combo/multi-combo.component.mjs +166 -0
  15. package/esm2020/lib/components/multi-select/multi-select.component.mjs +104 -0
  16. package/esm2020/lib/components/panel-section/panel-section.component.mjs +23 -0
  17. package/esm2020/lib/components/portal/portal.component.mjs +15 -0
  18. package/esm2020/lib/components/push-panel/push-panel.component.mjs +43 -0
  19. package/esm2020/lib/components/search-input/search-input.component.mjs +87 -0
  20. package/esm2020/lib/components/search-toolbar/search-toolbar.component.mjs +56 -0
  21. package/esm2020/lib/components/side-layout/side-layout.component.mjs +23 -0
  22. package/esm2020/lib/components/side-panel/side-panel.component.mjs +41 -0
  23. package/esm2020/lib/components/spinner-cube/spinner-cube.component.mjs +31 -0
  24. package/esm2020/lib/components/table/pager.component.mjs +48 -0
  25. package/esm2020/lib/components/tooltip/tooltip.component.mjs +104 -0
  26. package/esm2020/lib/components/upload-files/upload-files.component.mjs +59 -0
  27. package/esm2020/lib/components/value-editable/simple-select.component.mjs +29 -0
  28. package/esm2020/lib/components/wizard/wizard.component.mjs +152 -0
  29. package/esm2020/lib/directives/anchor.directive.mjs +27 -0
  30. package/esm2020/lib/directives/drag-and-drop-files.directive.mjs +82 -0
  31. package/esm2020/lib/directives/dynamic-component/component-descriptor.model.mjs +15 -0
  32. package/esm2020/lib/directives/dynamic-component/dynamic-component.directive.mjs +58 -0
  33. package/esm2020/lib/directives/dynamictemplate.directive.mjs +83 -0
  34. package/esm2020/lib/directives/object-url.directive.mjs +28 -0
  35. package/esm2020/lib/ngx-ode-ui.module.mjs +282 -0
  36. package/esm2020/lib/pipes/bytes.pipe.mjs +20 -0
  37. package/esm2020/lib/pipes/filter.pipe.mjs +97 -0
  38. package/esm2020/lib/pipes/flattenObjArray.pipe.mjs +35 -0
  39. package/esm2020/lib/pipes/keys.pipe.mjs +20 -0
  40. package/esm2020/lib/pipes/length.pipe.mjs +17 -0
  41. package/esm2020/lib/pipes/limit.pipe.mjs +17 -0
  42. package/esm2020/lib/pipes/localizedDate.pipe.mjs +23 -0
  43. package/esm2020/lib/pipes/orderBy.pipe.mjs +161 -0
  44. package/esm2020/lib/pipes/replace.pipe.mjs +20 -0
  45. package/esm2020/lib/pipes/store.pipe.mjs +17 -0
  46. package/esm2020/lib/services/dynamicModuleImports.service.mjs +13 -0
  47. package/esm2020/lib/services/inputFile.service.mjs +56 -0
  48. package/esm2020/lib/services/labels.service.mjs +32 -0
  49. package/esm2020/lib/services/spinner.service.mjs +76 -0
  50. package/esm2020/lib/utils/math.mjs +19 -0
  51. package/esm2020/lib/utils/string.mjs +11 -0
  52. package/esm2020/lib/utils/testing.mjs +7 -0
  53. package/esm2020/ngx-ode-ui.mjs +5 -0
  54. package/esm2020/public-api.mjs +57 -0
  55. package/fesm2015/ngx-ode-ui.mjs +2954 -0
  56. package/fesm2015/ngx-ode-ui.mjs.map +1 -0
  57. package/fesm2020/ngx-ode-ui.mjs +2952 -0
  58. package/fesm2020/ngx-ode-ui.mjs.map +1 -0
  59. package/index.d.ts +5 -0
  60. package/lib/components/datepicker/datepicker.component.d.ts +7 -2
  61. package/lib/components/dropdown/dropdown.component.d.ts +3 -0
  62. package/lib/components/ellipsis/ellipsis.component.d.ts +4 -1
  63. package/lib/components/form-errors/form-errors.component.d.ts +3 -0
  64. package/lib/components/form-field/form-field.component.d.ts +3 -0
  65. package/lib/components/item-tree/item-tree.component.d.ts +5 -1
  66. package/lib/components/lightbox/lightbox.component.d.ts +5 -1
  67. package/lib/components/lightbox-confirm/lightbox-confirm.component.d.ts +3 -0
  68. package/lib/components/list/list.component.d.ts +5 -1
  69. package/lib/components/list-checkable/list-checkable.component.d.ts +5 -1
  70. package/lib/components/message-box/message-box.component.d.ts +8 -4
  71. package/lib/components/message-sticker/message-sticker.component.d.ts +3 -0
  72. package/lib/components/mono-select/mono-select.component.d.ts +3 -0
  73. package/lib/components/multi-combo/multi-combo.component.d.ts +4 -1
  74. package/lib/components/multi-select/multi-select.component.d.ts +3 -0
  75. package/lib/components/panel-section/panel-section.component.d.ts +3 -0
  76. package/lib/components/portal/portal.component.d.ts +3 -0
  77. package/lib/components/push-panel/push-panel.component.d.ts +4 -1
  78. package/lib/components/search-input/search-input.component.d.ts +5 -1
  79. package/lib/components/search-toolbar/search-toolbar.component.d.ts +3 -0
  80. package/lib/components/side-layout/side-layout.component.d.ts +3 -0
  81. package/lib/components/side-panel/side-panel.component.d.ts +4 -1
  82. package/lib/components/spinner-cube/spinner-cube.component.d.ts +5 -1
  83. package/lib/components/table/pager.component.d.ts +3 -0
  84. package/lib/components/tooltip/tooltip.component.d.ts +3 -0
  85. package/lib/components/upload-files/upload-files.component.d.ts +3 -0
  86. package/lib/components/value-editable/simple-select.component.d.ts +3 -0
  87. package/lib/components/wizard/wizard.component.d.ts +5 -0
  88. package/lib/directives/anchor.directive.d.ts +3 -0
  89. package/lib/directives/drag-and-drop-files.directive.d.ts +3 -0
  90. package/lib/directives/dynamic-component/dynamic-component.directive.d.ts +3 -0
  91. package/lib/directives/dynamictemplate.directive.d.ts +4 -1
  92. package/lib/directives/object-url.directive.d.ts +3 -0
  93. package/lib/ngx-ode-ui.module.d.ts +53 -2
  94. package/lib/pipes/bytes.pipe.d.ts +3 -0
  95. package/lib/pipes/filter.pipe.d.ts +3 -0
  96. package/lib/pipes/flattenObjArray.pipe.d.ts +3 -0
  97. package/lib/pipes/keys.pipe.d.ts +3 -0
  98. package/lib/pipes/length.pipe.d.ts +3 -0
  99. package/lib/pipes/limit.pipe.d.ts +3 -0
  100. package/lib/pipes/localizedDate.pipe.d.ts +3 -0
  101. package/lib/pipes/orderBy.pipe.d.ts +3 -0
  102. package/lib/pipes/replace.pipe.d.ts +8 -0
  103. package/lib/pipes/store.pipe.d.ts +3 -0
  104. package/lib/services/dynamicModuleImports.service.d.ts +3 -0
  105. package/lib/services/inputFile.service.d.ts +3 -0
  106. package/lib/services/labels.service.d.ts +3 -0
  107. package/lib/services/spinner.service.d.ts +4 -1
  108. package/package.json +29 -17
  109. package/public-api.d.ts +3 -0
  110. package/CHANGELOG.md +0 -14
  111. package/bundles/ngx-ode-ui.umd.js +0 -5804
  112. package/bundles/ngx-ode-ui.umd.js.map +0 -1
  113. package/bundles/ngx-ode-ui.umd.min.js +0 -17
  114. package/bundles/ngx-ode-ui.umd.min.js.map +0 -1
  115. package/esm2015/lib/components/datepicker/datepicker.component.js +0 -261
  116. package/esm2015/lib/components/dropdown/dropdown.component.js +0 -76
  117. package/esm2015/lib/components/ellipsis/ellipsis.component.js +0 -98
  118. package/esm2015/lib/components/form-errors/form-errors.component.js +0 -65
  119. package/esm2015/lib/components/form-field/form-field.component.js +0 -40
  120. package/esm2015/lib/components/item-tree/item-tree.component.js +0 -289
  121. package/esm2015/lib/components/lightbox/lightbox.component.js +0 -129
  122. package/esm2015/lib/components/lightbox-confirm/lightbox-confirm.component.js +0 -65
  123. package/esm2015/lib/components/list/list.component.js +0 -140
  124. package/esm2015/lib/components/list-checkable/list-checkable.component.js +0 -137
  125. package/esm2015/lib/components/message-box/message-box.component.js +0 -153
  126. package/esm2015/lib/components/message-sticker/message-sticker.component.js +0 -81
  127. package/esm2015/lib/components/mono-select/mono-select.component.js +0 -164
  128. package/esm2015/lib/components/multi-combo/multi-combo.component.js +0 -255
  129. package/esm2015/lib/components/multi-select/multi-select.component.js +0 -214
  130. package/esm2015/lib/components/panel-section/panel-section.component.js +0 -38
  131. package/esm2015/lib/components/portal/portal.component.js +0 -27
  132. package/esm2015/lib/components/push-panel/push-panel.component.js +0 -81
  133. package/esm2015/lib/components/search-input/search-input.component.js +0 -176
  134. package/esm2015/lib/components/search-toolbar/search-toolbar.component.js +0 -84
  135. package/esm2015/lib/components/side-layout/side-layout.component.js +0 -39
  136. package/esm2015/lib/components/side-panel/side-panel.component.js +0 -76
  137. package/esm2015/lib/components/spinner-cube/spinner-cube.component.js +0 -67
  138. package/esm2015/lib/components/table/pager.component.js +0 -95
  139. package/esm2015/lib/components/tooltip/tooltip.component.js +0 -172
  140. package/esm2015/lib/components/upload-files/upload-files.component.js +0 -112
  141. package/esm2015/lib/components/value-editable/simple-select.component.js +0 -57
  142. package/esm2015/lib/components/wizard/wizard.component.js +0 -225
  143. package/esm2015/lib/directives/anchor.directive.js +0 -34
  144. package/esm2015/lib/directives/drag-and-drop-files.directive.js +0 -126
  145. package/esm2015/lib/directives/dynamic-component/component-descriptor.model.js +0 -34
  146. package/esm2015/lib/directives/dynamic-component/dynamic-component.directive.js +0 -100
  147. package/esm2015/lib/directives/dynamictemplate.directive.js +0 -159
  148. package/esm2015/lib/directives/object-url.directive.js +0 -53
  149. package/esm2015/lib/ngx-ode-ui.module.js +0 -188
  150. package/esm2015/lib/pipes/bytes.pipe.js +0 -27
  151. package/esm2015/lib/pipes/filter.pipe.js +0 -141
  152. package/esm2015/lib/pipes/flattenObjArray.pipe.js +0 -52
  153. package/esm2015/lib/pipes/keys.pipe.js +0 -27
  154. package/esm2015/lib/pipes/length.pipe.js +0 -22
  155. package/esm2015/lib/pipes/limit.pipe.js +0 -24
  156. package/esm2015/lib/pipes/localizedDate.pipe.js +0 -44
  157. package/esm2015/lib/pipes/orderBy.pipe.js +0 -269
  158. package/esm2015/lib/pipes/store.pipe.js +0 -24
  159. package/esm2015/lib/services/dynamicModuleImports.service.js +0 -19
  160. package/esm2015/lib/services/inputFile.service.js +0 -80
  161. package/esm2015/lib/services/labels.service.js +0 -54
  162. package/esm2015/lib/services/spinner.service.js +0 -163
  163. package/esm2015/lib/utils/math.js +0 -49
  164. package/esm2015/lib/utils/string.js +0 -29
  165. package/esm2015/lib/utils/testing.js +0 -20
  166. package/esm2015/ngx-ode-ui.js +0 -12
  167. package/esm2015/public-api.js +0 -59
  168. package/esm5/lib/components/datepicker/datepicker.component.js +0 -292
  169. package/esm5/lib/components/dropdown/dropdown.component.js +0 -81
  170. package/esm5/lib/components/ellipsis/ellipsis.component.js +0 -106
  171. package/esm5/lib/components/form-errors/form-errors.component.js +0 -73
  172. package/esm5/lib/components/form-field/form-field.component.js +0 -41
  173. package/esm5/lib/components/item-tree/item-tree.component.js +0 -345
  174. package/esm5/lib/components/lightbox/lightbox.component.js +0 -141
  175. package/esm5/lib/components/lightbox-confirm/lightbox-confirm.component.js +0 -67
  176. package/esm5/lib/components/list/list.component.js +0 -146
  177. package/esm5/lib/components/list-checkable/list-checkable.component.js +0 -148
  178. package/esm5/lib/components/message-box/message-box.component.js +0 -190
  179. package/esm5/lib/components/message-sticker/message-sticker.component.js +0 -92
  180. package/esm5/lib/components/mono-select/mono-select.component.js +0 -192
  181. package/esm5/lib/components/multi-combo/multi-combo.component.js +0 -294
  182. package/esm5/lib/components/multi-select/multi-select.component.js +0 -258
  183. package/esm5/lib/components/panel-section/panel-section.component.js +0 -40
  184. package/esm5/lib/components/portal/portal.component.js +0 -28
  185. package/esm5/lib/components/push-panel/push-panel.component.js +0 -91
  186. package/esm5/lib/components/search-input/search-input.component.js +0 -199
  187. package/esm5/lib/components/search-toolbar/search-toolbar.component.js +0 -93
  188. package/esm5/lib/components/side-layout/side-layout.component.js +0 -41
  189. package/esm5/lib/components/side-panel/side-panel.component.js +0 -85
  190. package/esm5/lib/components/spinner-cube/spinner-cube.component.js +0 -76
  191. package/esm5/lib/components/table/pager.component.js +0 -113
  192. package/esm5/lib/components/tooltip/tooltip.component.js +0 -188
  193. package/esm5/lib/components/upload-files/upload-files.component.js +0 -133
  194. package/esm5/lib/components/value-editable/simple-select.component.js +0 -59
  195. package/esm5/lib/components/wizard/wizard.component.js +0 -161
  196. package/esm5/lib/directives/anchor.directive.js +0 -39
  197. package/esm5/lib/directives/drag-and-drop-files.directive.js +0 -146
  198. package/esm5/lib/directives/dynamic-component/component-descriptor.model.js +0 -44
  199. package/esm5/lib/directives/dynamic-component/dynamic-component.directive.js +0 -109
  200. package/esm5/lib/directives/dynamictemplate.directive.js +0 -175
  201. package/esm5/lib/directives/object-url.directive.js +0 -62
  202. package/esm5/lib/ngx-ode-ui.module.js +0 -199
  203. package/esm5/lib/pipes/bytes.pipe.js +0 -37
  204. package/esm5/lib/pipes/filter.pipe.js +0 -179
  205. package/esm5/lib/pipes/flattenObjArray.pipe.js +0 -62
  206. package/esm5/lib/pipes/keys.pipe.js +0 -36
  207. package/esm5/lib/pipes/length.pipe.js +0 -30
  208. package/esm5/lib/pipes/limit.pipe.js +0 -35
  209. package/esm5/lib/pipes/localizedDate.pipe.js +0 -49
  210. package/esm5/lib/pipes/orderBy.pipe.js +0 -280
  211. package/esm5/lib/pipes/store.pipe.js +0 -35
  212. package/esm5/lib/services/dynamicModuleImports.service.js +0 -21
  213. package/esm5/lib/services/inputFile.service.js +0 -98
  214. package/esm5/lib/services/labels.service.js +0 -68
  215. package/esm5/lib/services/spinner.service.js +0 -195
  216. package/esm5/lib/utils/math.js +0 -49
  217. package/esm5/lib/utils/string.js +0 -29
  218. package/esm5/lib/utils/testing.js +0 -20
  219. package/esm5/ngx-ode-ui.js +0 -12
  220. package/esm5/public-api.js +0 -59
  221. package/fesm2015/ngx-ode-ui.js +0 -5027
  222. package/fesm2015/ngx-ode-ui.js.map +0 -1
  223. package/fesm5/ngx-ode-ui.js +0 -5560
  224. package/fesm5/ngx-ode-ui.js.map +0 -1
  225. package/ngx-ode-ui.d.ts +0 -6
  226. package/ngx-ode-ui.metadata.json +0 -1
@@ -0,0 +1,148 @@
1
+ import { OdeComponent } from 'ngx-ode-core';
2
+ import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR, NgModel } from '@angular/forms';
4
+ import Flatpickr from 'flatpickr';
5
+ import French from 'flatpickr/dist/l10n/fr.js';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../services/labels.service";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "@angular/forms";
10
+ // access ngmodel
11
+ const NOOP = () => {
12
+ };
13
+ export const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
14
+ provide: NG_VALUE_ACCESSOR,
15
+ useExisting: forwardRef(() => DatepickerComponent),
16
+ multi: true
17
+ };
18
+ export class DatepickerComponent extends OdeComponent {
19
+ constructor(renderer, labelsService, injector) {
20
+ super(injector);
21
+ this.renderer = renderer;
22
+ this.labelsService = labelsService;
23
+ this.innerValue = '';
24
+ this.disabled = false;
25
+ this._readonly = false;
26
+ this.enableTime = false;
27
+ this.placeholder = '';
28
+ this.changeDate = new EventEmitter();
29
+ this.onChangeCallback = NOOP;
30
+ this.onTouchedCallback = NOOP;
31
+ }
32
+ get value() {
33
+ return this.innerValue;
34
+ }
35
+ set value(v) {
36
+ let init = false;
37
+ if (this.innerValue === undefined) {
38
+ init = true;
39
+ }
40
+ if (v !== this.innerValue) {
41
+ this.innerValue = v;
42
+ this.onChangeCallback(v);
43
+ if (!init) {
44
+ this.changeDate.emit(v);
45
+ }
46
+ }
47
+ }
48
+ set readonly(val) {
49
+ this._readonly = val;
50
+ if (this.datePickerInst && this.datePickerInst.altInput) {
51
+ // Apply the readonly attribute addition/removal to the visible input (wrapped)
52
+ if (val)
53
+ this.datePickerInst.altInput.setAttribute('readonly', "");
54
+ else
55
+ this.datePickerInst.altInput.removeAttribute('readonly');
56
+ }
57
+ }
58
+ get readonly() {
59
+ return this._readonly;
60
+ }
61
+ ngAfterViewInit() {
62
+ super.ngAfterViewInit();
63
+ // add attr data-input, mandatory for the picker to work in wrap mode
64
+ this.renderer.setAttribute(this.inputElement.nativeElement, 'data-input', '');
65
+ // disabled case
66
+ if (this.disabled === true) {
67
+ this.model.control.disable();
68
+ }
69
+ const navigatorLanguage = navigator.language.split('-')[0];
70
+ let datePickerLocale = {};
71
+ if (navigatorLanguage === 'fr') {
72
+ datePickerLocale = French.fr;
73
+ }
74
+ // options for the flatpickr instance
75
+ const options = {
76
+ altInput: !this.disabled,
77
+ altFormat: 'd/m/Y',
78
+ dateFormat: 'Y-m-d',
79
+ allowInput: false,
80
+ enableTime: this.enableTime,
81
+ minDate: this.minDate,
82
+ maxDate: this.maxDate,
83
+ clickOpens: false,
84
+ wrap: true,
85
+ locale: datePickerLocale
86
+ };
87
+ this.datePickerInst = new Flatpickr(this.datePickerElement.nativeElement, options);
88
+ if (!this.disabled) {
89
+ this.datePickerInst.altInput.addEventListener('click', e => {
90
+ if (!this.readonly) {
91
+ this.datePickerInst.toggle();
92
+ }
93
+ });
94
+ }
95
+ // Force updating the date input readonly attribute :
96
+ this.readonly = this._readonly;
97
+ }
98
+ ngOnDestroy() {
99
+ super.ngOnDestroy();
100
+ this.datePickerInst.destroy();
101
+ }
102
+ writeValue(value) {
103
+ if (value !== this.innerValue && this.datePickerInst) {
104
+ this.innerValue = value;
105
+ this.datePickerInst.setDate(value);
106
+ this.onChangeCallback(value);
107
+ }
108
+ }
109
+ registerOnChange(fn) {
110
+ this.onChangeCallback = fn;
111
+ }
112
+ registerOnTouched(fn) {
113
+ this.onTouchedCallback = fn;
114
+ }
115
+ labels(label) {
116
+ return this.labelsService.getLabel(label);
117
+ }
118
+ }
119
+ DatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DatepickerComponent, deps: [{ token: i0.Renderer2 }, { token: i1.LabelsService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
120
+ DatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: DatepickerComponent, selector: "ode-date-picker", inputs: { disabled: "disabled", readonly: "readonly", enableTime: "enableTime", placeholder: "placeholder", minDate: "minDate", maxDate: "maxDate" }, outputs: { changeDate: "changeDate" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "datePickerElement", first: true, predicate: ["datePickerElement"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "model", first: true, predicate: NgModel, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flatpickr\" #datePickerElement>\n <input type=\"date\" [(ngModel)]=\"value\" [disabled]=\"disabled\" [ngClass]=\"{ 'cursor-default': disabled }\" placeholder=\"{{ placeholder }}\" #inputRef>\n <a *ngIf=\"!disabled\" [class.hidden]=\"readonly\" data-toggle [title]=\"labels('datepicker.open')\"><i class=\"fa fa-calendar open\" aria-hidden=\"true\"></i></a>\n <a *ngIf=\"!disabled\" [class.hidden]=\"readonly\" data-clear [title]=\"labels('datepicker.delete')\"><i class=\"fa fa-times delete\" aria-hidden=\"true\"></i></a>\n</div>\n", styles: [".hidden{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DatepickerComponent, decorators: [{
122
+ type: Component,
123
+ args: [{ selector: 'ode-date-picker', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], template: "<div class=\"flatpickr\" #datePickerElement>\n <input type=\"date\" [(ngModel)]=\"value\" [disabled]=\"disabled\" [ngClass]=\"{ 'cursor-default': disabled }\" placeholder=\"{{ placeholder }}\" #inputRef>\n <a *ngIf=\"!disabled\" [class.hidden]=\"readonly\" data-toggle [title]=\"labels('datepicker.open')\"><i class=\"fa fa-calendar open\" aria-hidden=\"true\"></i></a>\n <a *ngIf=\"!disabled\" [class.hidden]=\"readonly\" data-clear [title]=\"labels('datepicker.delete')\"><i class=\"fa fa-times delete\" aria-hidden=\"true\"></i></a>\n</div>\n", styles: [".hidden{visibility:hidden}\n"] }]
124
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.LabelsService }, { type: i0.Injector }]; }, propDecorators: { datePickerElement: [{
125
+ type: ViewChild,
126
+ args: ['datePickerElement']
127
+ }], inputElement: [{
128
+ type: ViewChild,
129
+ args: ['inputRef']
130
+ }], model: [{
131
+ type: ViewChild,
132
+ args: [NgModel]
133
+ }], disabled: [{
134
+ type: Input
135
+ }], readonly: [{
136
+ type: Input
137
+ }], enableTime: [{
138
+ type: Input
139
+ }], placeholder: [{
140
+ type: Input
141
+ }], minDate: [{
142
+ type: Input
143
+ }], maxDate: [{
144
+ type: Input
145
+ }], changeDate: [{
146
+ type: Output
147
+ }] } });
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2RlLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLFVBQVUsRUFDckUsS0FBSyxFQUFhLE1BQU0sRUFBYSxTQUFTLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRixPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxNQUFNLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBRS9DLGlCQUFpQjtBQUNqQixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDbEIsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQVE7SUFDcEQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xELEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQVFGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxZQUFZO0lBRWpELFlBQW9CLFFBQW1CLEVBQ25CLGFBQTRCLEVBQ3BDLFFBQWtCO1FBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFosYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtR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LENBQUUsbUNBQW1DLENBQUUscVFBd0N2QyxPQUFPLHVFQy9EdEIsc2lCQUtBOzJGRG9CYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksaUJBQWlCLGFBR2hCLENBQUUsbUNBQW1DLENBQUU7bUpBZ0NsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUk5QixZQUFZO3NCQURYLFNBQVM7dUJBQUMsVUFBVTtnQkFPckIsS0FBSztzQkFESixTQUFTO3VCQUFDLE9BQU87Z0JBSWxCLFFBQVE7c0JBRFAsS0FBSztnQkFJRixRQUFRO3NCQURYLEtBQUs7Z0JBZU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9kZUNvbXBvbmVudCB9IGZyb20gJ25neC1vZGUtY29yZSc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZixcbiAgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0xhYmVsc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xhYmVscy5zZXJ2aWNlJztcbmltcG9ydCBGbGF0cGlja3IgZnJvbSAnZmxhdHBpY2tyJztcbmltcG9ydCBGcmVuY2ggZnJvbSAnZmxhdHBpY2tyL2Rpc3QvbDEwbi9mci5qcyc7XG5cbi8vIGFjY2VzcyBuZ21vZGVsXG5jb25zdCBOT09QID0gKCkgPT4ge1xufTtcbmV4cG9ydCBjb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVwaWNrZXJDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ29kZS1kYXRlLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFsgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1IgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgT2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsYWJlbHNTZXJ2aWNlOiBMYWJlbHNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyVmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgICAgICBsZXQgaW5pdCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pbm5lclZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGluaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2ICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHY7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgICAgICAgICBpZiAoIWluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURhdGUuZW1pdCh2KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbm5lclZhbHVlOiBhbnkgPSAnJztcblxuICAgIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXJFbGVtZW50JylcbiAgICBkYXRlUGlja2VyRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0UmVmJylcbiAgICBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvLyBpbnN0YW5jZSBmbGF0cGlja3JcbiAgICBwcml2YXRlIGRhdGVQaWNrZXJJbnN0OiBGbGF0cGlja3I7XG5cbiAgICBAVmlld0NoaWxkKE5nTW9kZWwpXG4gICAgbW9kZWw6IE5nTW9kZWw7XG5cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCByZWFkb25seSggdmFsOmJvb2xlYW4gKSB7XG4gICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsO1xuICAgICAgICBpZiggdGhpcy5kYXRlUGlja2VySW5zdCAmJiB0aGlzLmRhdGVQaWNrZXJJbnN0LmFsdElucHV0ICkge1xuICAgICAgICAgICAgLy8gQXBwbHkgdGhlIHJlYWRvbmx5IGF0dHJpYnV0ZSBhZGRpdGlvbi9yZW1vdmFsIHRvIHRoZSB2aXNpYmxlIGlucHV0ICh3cmFwcGVkKVxuICAgICAgICAgICAgaWYoIHZhbCApIHRoaXMuZGF0ZVBpY2tlckluc3QuYWx0SW5wdXQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsIFwiXCIpO1xuICAgICAgICAgICAgZWxzZSAgICAgIHRoaXMuZGF0ZVBpY2tlckluc3QuYWx0SW5wdXQucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCByZWFkb25seSgpOmJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gICAgfVxuICAgIF9yZWFkb25seSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBlbmFibGVUaW1lID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIG1pbkRhdGU7XG5cbiAgICBASW5wdXQoKVxuICAgIG1heERhdGU7XG5cbiAgICBAT3V0cHV0KClcbiAgICBjaGFuZ2VEYXRlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gTk9PUDtcbiAgICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gTk9PUDtcblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIC8vIGFkZCBhdHRyIGRhdGEtaW5wdXQsIG1hbmRhdG9yeSBmb3IgdGhlIHBpY2tlciB0byB3b3JrIGluIHdyYXAgbW9kZVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnZGF0YS1pbnB1dCcsICcnKTtcblxuICAgICAgICAvLyBkaXNhYmxlZCBjYXNlXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmF2aWdhdG9yTGFuZ3VhZ2UgPSBuYXZpZ2F0b3IubGFuZ3VhZ2Uuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgbGV0IGRhdGVQaWNrZXJMb2NhbGUgPSB7fTtcbiAgICAgICAgaWYgKG5hdmlnYXRvckxhbmd1YWdlID09PSAnZnInKSB7XG4gICAgICAgICAgICBkYXRlUGlja2VyTG9jYWxlID0gRnJlbmNoLmZyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb3B0aW9ucyBmb3IgdGhlIGZsYXRwaWNrciBpbnN0YW5jZVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWx0SW5wdXQ6ICF0aGlzLmRpc2FibGVkLFxuICAgICAgICAgICAgYWx0Rm9ybWF0OiAnZC9tL1knLCAvLyBkYXRlIGZvcm1hdCBkaXNwbGF5ZWQgdG8gdXNlclxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ1ktbS1kJywgLy8gZGF0ZSBmb3JtYXQgc2VudCB0byBzZXJ2ZXJcbiAgICAgICAgICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgZW5hYmxlVGltZTogdGhpcy5lbmFibGVUaW1lLFxuICAgICAgICAgICAgbWluRGF0ZTogdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgbWF4RGF0ZTogdGhpcy5tYXhEYXRlLFxuICAgICAgICAgICAgY2xpY2tPcGVuczogZmFsc2UsXG4gICAgICAgICAgICB3cmFwOiB0cnVlLCAvLyB0byBhZGQgaW5wdXQgZGVjb3JhdGlvbiAoY2FsZW5kYXIgaWNvbiBhbmQgZGVsZXRlIGljb24pXG4gICAgICAgICAgICBsb2NhbGU6IGRhdGVQaWNrZXJMb2NhbGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0ID0gbmV3IEZsYXRwaWNrcih0aGlzLmRhdGVQaWNrZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICBpZiggIXRoaXMuZGlzYWJsZWQgKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0LmFsdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLnJlYWRvbmx5ICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0LnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yY2UgdXBkYXRpbmcgdGhlIGRhdGUgaW5wdXQgcmVhZG9ubHkgYXR0cmlidXRlIDpcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMuX3JlYWRvbmx5O1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUgJiYgdGhpcy5kYXRlUGlja2VySW5zdCkge1xuICAgICAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0LnNldERhdGUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICBsYWJlbHMobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzU2VydmljZS5nZXRMYWJlbChsYWJlbCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsYXRwaWNrclwiICNkYXRlUGlja2VyRWxlbWVudD5cbiAgPGlucHV0IHR5cGU9XCJkYXRlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInsgJ2N1cnNvci1kZWZhdWx0JzogZGlzYWJsZWQgfVwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIiAjaW5wdXRSZWY+XG4gIDxhICpuZ0lmPVwiIWRpc2FibGVkXCIgW2NsYXNzLmhpZGRlbl09XCJyZWFkb25seVwiIGRhdGEtdG9nZ2xlIFt0aXRsZV09XCJsYWJlbHMoJ2RhdGVwaWNrZXIub3BlbicpXCI+PGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciBvcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgPGEgKm5nSWY9XCIhZGlzYWJsZWRcIiBbY2xhc3MuaGlkZGVuXT1cInJlYWRvbmx5XCIgZGF0YS1jbGVhciBbdGl0bGVdPVwibGFiZWxzKCdkYXRlcGlja2VyLmRlbGV0ZScpXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcyBkZWxldGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,55 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { OdeComponent } from 'ngx-ode-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ /**
6
+ * DropdownComponent is an alternative to the MonoSelectComponent.
7
+ * Accept everything inside <ng-content> but should work with <ode-list> component
8
+ *
9
+ * Simple Dropdown Component without search:
10
+ * [isSearchActive] can be set to false to disable search input in <ode-list>
11
+ ```
12
+ <ode-dropdown
13
+ [name]="option_name"
14
+ [isDropdownOpened]="a_boolean"
15
+ (onDropdown)="toggle_func"
16
+ >
17
+ <ode-list
18
+ [model]="model"
19
+ [filters]="filters"
20
+ (onSelect)="func_to_select_elem($event)"
21
+ (inputChange)="a_string_for_input_value = $event"
22
+ noResultsLabel="text_to_display"
23
+ searchPlaceholder="default_placeholder_text"
24
+ >
25
+ <ng-template let-item>
26
+ <div>{{ item.name }}</div>
27
+ </ng-template>
28
+ </ode-list>
29
+ </ode-dropdown>
30
+ `̀``
31
+ */
32
+ export class DropdownComponent extends OdeComponent {
33
+ constructor(injector) {
34
+ super(injector);
35
+ this.name = '';
36
+ this.isDropdownOpened = false;
37
+ this.onDropdown = new EventEmitter();
38
+ }
39
+ ngOnInit() {
40
+ super.ngOnInit();
41
+ }
42
+ }
43
+ DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
44
+ DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: DropdownComponent, selector: "ode-dropdown", inputs: { name: "name", isDropdownOpened: "isDropdownOpened" }, outputs: { onDropdown: "onDropdown" }, usesInheritance: true, ngImport: i0, template: "<div class=\"dropdown\" [ngClass]=\"isDropdownOpened ? 'open' : ''\">\n <button (click)=\"onDropdown.emit()\" class=\"dropdown-trigger\">\n <span class=\"cell-ellipsis\">{{ name }}</span> <i class=\"fonticon arrow-select\"></i>\n </button>\n <div class=\"dropdown-list\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".dropdown{position:relative;width:230px;box-sizing:border-box}.dropdown *{box-sizing:border-box}.dropdown-trigger{cursor:pointer;display:inline-flex;align-items:center;justify-content:space-between;padding:12px 16px;font-size:14px;color:#4a4a4a;text-transform:uppercase;text-align:left;width:100%;border-radius:8px;border:1px solid #7a7a7a;background-color:#fff}.dropdown-trigger>span{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dropdown-trigger i.arrow-select{display:inline-block;float:none!important;padding-left:0;transform:rotate(180deg);transform-origin:center center}.dropdown-trigger:hover{color:#4a4a4a;border-color:#7a7a7a;background-color:#fff}.dropdown-trigger:hover i.arrow-select{color:#4a4a4a!important}.dropdown-list{display:none;position:absolute;overflow:hidden;z-index:2;top:100%;left:0;right:0;width:316px;box-shadow:0 4px 12px #00000026;border-radius:8px;background-color:#fff}.dropdown::ng-deep ode-list li{justify-content:flex-start}.dropdown::ng-deep ode-list input[type=search]{padding:12px 16px}.dropdown.open .dropdown-list{display:block}.dropdown.open i.arrow-select{transform:rotate(0)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DropdownComponent, decorators: [{
46
+ type: Component,
47
+ args: [{ selector: 'ode-dropdown', template: "<div class=\"dropdown\" [ngClass]=\"isDropdownOpened ? 'open' : ''\">\n <button (click)=\"onDropdown.emit()\" class=\"dropdown-trigger\">\n <span class=\"cell-ellipsis\">{{ name }}</span> <i class=\"fonticon arrow-select\"></i>\n </button>\n <div class=\"dropdown-list\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".dropdown{position:relative;width:230px;box-sizing:border-box}.dropdown *{box-sizing:border-box}.dropdown-trigger{cursor:pointer;display:inline-flex;align-items:center;justify-content:space-between;padding:12px 16px;font-size:14px;color:#4a4a4a;text-transform:uppercase;text-align:left;width:100%;border-radius:8px;border:1px solid #7a7a7a;background-color:#fff}.dropdown-trigger>span{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dropdown-trigger i.arrow-select{display:inline-block;float:none!important;padding-left:0;transform:rotate(180deg);transform-origin:center center}.dropdown-trigger:hover{color:#4a4a4a;border-color:#7a7a7a;background-color:#fff}.dropdown-trigger:hover i.arrow-select{color:#4a4a4a!important}.dropdown-list{display:none;position:absolute;overflow:hidden;z-index:2;top:100%;left:0;right:0;width:316px;box-shadow:0 4px 12px #00000026;border-radius:8px;background-color:#fff}.dropdown::ng-deep ode-list li{justify-content:flex-start}.dropdown::ng-deep ode-list input[type=search]{padding:12px 16px}.dropdown.open .dropdown-list{display:block}.dropdown.open i.arrow-select{transform:rotate(0)}\n"] }]
48
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { name: [{
49
+ type: Input
50
+ }], isDropdownOpened: [{
51
+ type: Input
52
+ }], onDropdown: [{
53
+ type: Output
54
+ }] } });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFFNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBT0gsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFlBQVk7SUFFakQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFHVCxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVqQyxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFRLENBQUM7SUFMckUsQ0FBQztJQU9ELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQzs7OEdBYlUsaUJBQWlCO2tHQUFqQixpQkFBaUIsa0xDcEM5QiwwVUFRQTsyRkQ0QmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGNBQWM7K0ZBVWYsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9kZUNvbXBvbmVudCB9IGZyb20gJ25neC1vZGUtY29yZSc7XG5cbi8qKlxuICogRHJvcGRvd25Db21wb25lbnQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIE1vbm9TZWxlY3RDb21wb25lbnQuXG4gKiBBY2NlcHQgZXZlcnl0aGluZyBpbnNpZGUgPG5nLWNvbnRlbnQ+IGJ1dCBzaG91bGQgd29yayB3aXRoIDxvZGUtbGlzdD4gY29tcG9uZW50XG4gKiBcbiAqIFNpbXBsZSBEcm9wZG93biBDb21wb25lbnQgd2l0aG91dCBzZWFyY2g6XG4gKiBbaXNTZWFyY2hBY3RpdmVdIGNhbiBiZSBzZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBzZWFyY2ggaW5wdXQgaW4gPG9kZS1saXN0PlxuYGBgXG48b2RlLWRyb3Bkb3duXG4gICAgW25hbWVdPVwib3B0aW9uX25hbWVcIlxuICAgIFtpc0Ryb3Bkb3duT3BlbmVkXT1cImFfYm9vbGVhblwiXG4gICAgKG9uRHJvcGRvd24pPVwidG9nZ2xlX2Z1bmNcIlxuICA+XG4gIDxvZGUtbGlzdFxuICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgKG9uU2VsZWN0KT1cImZ1bmNfdG9fc2VsZWN0X2VsZW0oJGV2ZW50KVwiXG4gICAgKGlucHV0Q2hhbmdlKT1cImFfc3RyaW5nX2Zvcl9pbnB1dF92YWx1ZSA9ICRldmVudFwiXG4gICAgbm9SZXN1bHRzTGFiZWw9XCJ0ZXh0X3RvX2Rpc3BsYXlcIlxuICAgIHNlYXJjaFBsYWNlaG9sZGVyPVwiZGVmYXVsdF9wbGFjZWhvbGRlcl90ZXh0XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0+XG4gICAgICAgIDxkaXY+e3sgaXRlbS5uYW1lIH19PC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvb2RlLWxpc3Q+XG4gIDwvb2RlLWRyb3Bkb3duPlxuYMyAYGBcbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZGUtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgT2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gIH1cblxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaXNEcm9wZG93bk9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvbkRyb3Bkb3duOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSAgbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgW25nQ2xhc3NdPVwiaXNEcm9wZG93bk9wZW5lZCA/ICdvcGVuJyA6ICcnXCI+XG4gIDxidXR0b24gKGNsaWNrKT1cIm9uRHJvcGRvd24uZW1pdCgpXCIgY2xhc3M9XCJkcm9wZG93bi10cmlnZ2VyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjZWxsLWVsbGlwc2lzXCI+e3sgbmFtZSB9fTwvc3Bhbj4gPGkgY2xhc3M9XCJmb250aWNvbiBhcnJvdy1zZWxlY3RcIj48L2k+XG4gIDwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbGlzdFwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,53 @@
1
+ import { OdeComponent } from 'ngx-ode-core';
2
+ import { Component, Input } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * A simple ellipsis component that switches text-overflow on click.
6
+ * Add an ellipsis={'hide'| 'expand'} attirubute on your element.
7
+ * Default behavior is 'hide', so that it's the same than the raw CSS
8
+ */
9
+ export class EllipsisComponent extends OdeComponent {
10
+ constructor(eltRef, injector) {
11
+ super(injector);
12
+ this.eltRef = eltRef;
13
+ this._ellipsis = 'hide';
14
+ this.isExpanded = false;
15
+ this.initialStyle = Object.assign({}, this.eltRef.nativeElement.style);
16
+ }
17
+ set ellipsis(value) {
18
+ if (!!value) {
19
+ this._ellipsis = value;
20
+ if (this._ellipsis == 'expand') {
21
+ this.eltRef.nativeElement.className = 'expand';
22
+ }
23
+ }
24
+ }
25
+ onClick() {
26
+ if (this._ellipsis == 'hide') {
27
+ return;
28
+ }
29
+ if (!this.isExpanded) {
30
+ this.isExpanded = true;
31
+ Object.assign(this.eltRef.nativeElement.style, {
32
+ textOverflow: 'clip',
33
+ overflow: 'auto',
34
+ whiteSpace: 'normal',
35
+ });
36
+ }
37
+ else {
38
+ this.isExpanded = false;
39
+ this.eltRef.nativeElement.style = this.initialStyle;
40
+ }
41
+ }
42
+ }
43
+ EllipsisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: EllipsisComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
44
+ EllipsisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: EllipsisComponent, selector: "[ellipsis]", inputs: { ellipsis: "ellipsis" }, host: { listeners: { "click": "onClick()" } }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block;width:8em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host.expand{cursor:pointer}\n"] });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: EllipsisComponent, decorators: [{
46
+ type: Component,
47
+ args: [{ selector: '[ellipsis]', template: `<ng-content></ng-content>`, host: {
48
+ '(click)': 'onClick()',
49
+ }, styles: [":host{display:block;width:8em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host.expand{cursor:pointer}\n"] }]
50
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { ellipsis: [{
51
+ type: Input
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxsaXBzaXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZWxsaXBzaXMvZWxsaXBzaXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQVksTUFBTSxlQUFlLENBQUM7O0FBSXZFOzs7O0dBSUc7QUFTSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBWTtJQUMvQyxZQUFvQixNQUFrQixFQUFFLFFBQWtCO1FBQ3RELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURBLFdBQU0sR0FBTixNQUFNLENBQVk7UUFJOUIsY0FBUyxHQUFzQixNQUFNLENBQUM7UUFXdEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBZjFFLENBQUM7SUFHRCxJQUNJLFFBQVEsQ0FBQyxLQUF1QjtRQUNoQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxFQUFFO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO2FBQ2xEO1NBQ0o7SUFDTCxDQUFDO0lBS0QsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxNQUFNLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNDLFlBQVksRUFBRSxNQUFNO2dCQUNwQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsVUFBVSxFQUFFLFFBQVE7YUFDdkIsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ3ZEO0lBRUwsQ0FBQzs7OEdBbkNRLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBKQU5oQiwyQkFBMkI7MkZBTTVCLGlCQUFpQjtrQkFSN0IsU0FBUzsrQkFDSSxZQUFZLFlBQ1osMkJBQTJCLFFBRS9CO3dCQUNGLFNBQVMsRUFBRSxXQUFXO3FCQUN6Qjt3SEFTRyxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPZGVDb21wb25lbnQgfSBmcm9tICduZ3gtb2RlLWNvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBFbGxpcHNpc0JlaGF2aW9yID0gJ2V4cGFuZCcgfCAnaGlkZSc7XG5cbi8qKlxuICogQSBzaW1wbGUgZWxsaXBzaXMgY29tcG9uZW50IHRoYXQgc3dpdGNoZXMgdGV4dC1vdmVyZmxvdyBvbiBjbGljay5cbiAqIEFkZCBhbiBlbGxpcHNpcz17J2hpZGUnfCAnZXhwYW5kJ30gYXR0aXJ1YnV0ZSBvbiB5b3VyIGVsZW1lbnQuXG4gKiBEZWZhdWx0IGJlaGF2aW9yIGlzICdoaWRlJywgc28gdGhhdCBpdCdzIHRoZSBzYW1lIHRoYW4gdGhlIHJhdyBDU1NcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbZWxsaXBzaXNdJyxcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICAgIHN0eWxlVXJsczogWycuL2VsbGlwc2lzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGNsaWNrKSc6ICdvbkNsaWNrKCknLFxuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgRWxsaXBzaXNDb21wb25lbnQgZXh0ZW5kcyBPZGVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWx0UmVmOiBFbGVtZW50UmVmLCBpbmplY3RvcjogSW5qZWN0b3IgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbGxpcHNpczogRWxsaXBzaXNCZWhhdmlvciAgPSAnaGlkZSc7XG4gICAgQElucHV0KClcbiAgICBzZXQgZWxsaXBzaXModmFsdWU6IEVsbGlwc2lzQmVoYXZpb3IpIHtcbiAgICAgICAgaWYgKCEhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VsbGlwc2lzID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5fZWxsaXBzaXMgPT0gJ2V4cGFuZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsdFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZSA9ICdleHBhbmQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGluaXRpYWxTdHlsZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZWx0UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUpO1xuICAgIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9lbGxpcHNpcyA9PSAnaGlkZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5lbHRSZWYubmF0aXZlRWxlbWVudC5zdHlsZSwge1xuICAgICAgICAgICAgICAgIHRleHRPdmVyZmxvdzogJ2NsaXAnLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbHRSZWYubmF0aXZlRWxlbWVudC5zdHlsZSA9IHRoaXMuaW5pdGlhbFN0eWxlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import { OdeComponent } from 'ngx-ode-core';
2
+ import { Component, Input } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/labels.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "ngx-ode-sijil";
7
+ export class FormErrorsComponent extends OdeComponent {
8
+ constructor(labelsService, injector) {
9
+ super(injector);
10
+ this.labelsService = labelsService;
11
+ }
12
+ getErrorsArray() {
13
+ const errorsArray = [];
14
+ for (const prop in this.ref.errors) {
15
+ errorsArray.push({ name: prop, value: this.ref.errors[prop] });
16
+ }
17
+ return errorsArray;
18
+ }
19
+ labels(label) {
20
+ return this.labelsService.getLabel(label);
21
+ }
22
+ }
23
+ FormErrorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormErrorsComponent, deps: [{ token: i1.LabelsService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
24
+ FormErrorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: FormErrorsComponent, selector: "ode-form-errors", inputs: { ref: ["control", "ref"], expectedPatternMsg: "expectedPatternMsg" }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"ref && ref.errors && (ref.dirty || ref.touched)\" class=\"form-errors\">\n <div *ngFor=\"let error of getErrorsArray()\">\n <span>{{ 'form.error.' + error.name | translate: error.value }}</span>\n <span *ngIf=\"error.name == 'pattern'\">{{expectedPatternMsg}}</span>\n </div>\n</div>\n", styles: [".form-errors{font-size:.8em;color:#dc143c;font-style:italic}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormErrorsComponent, decorators: [{
26
+ type: Component,
27
+ args: [{ selector: 'ode-form-errors', template: "<div *ngIf=\"ref && ref.errors && (ref.dirty || ref.touched)\" class=\"form-errors\">\n <div *ngFor=\"let error of getErrorsArray()\">\n <span>{{ 'form.error.' + error.name | translate: error.value }}</span>\n <span *ngIf=\"error.name == 'pattern'\">{{expectedPatternMsg}}</span>\n </div>\n</div>\n", styles: [".form-errors{font-size:.8em;color:#dc143c;font-style:italic}\n"] }]
28
+ }], ctorParameters: function () { return [{ type: i1.LabelsService }, { type: i0.Injector }]; }, propDecorators: { ref: [{
29
+ type: Input,
30
+ args: ['control']
31
+ }], expectedPatternMsg: [{
32
+ type: Input,
33
+ args: ['expectedPatternMsg']
34
+ }] } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1lcnJvcnMvZm9ybS1lcnJvcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1lcnJvcnMvZm9ybS1lcnJvcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBWSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFVM0QsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFlBQVk7SUFDakQsWUFBb0IsYUFBNEIsRUFBRSxRQUFrQjtRQUNoRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEQSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUVoRCxDQUFDO0lBU0QsY0FBYztRQUNWLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2hDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUM7U0FDakU7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7O2dIQXRCUSxtQkFBbUI7b0dBQW5CLG1CQUFtQiw2SkNYaEMsb1RBTUE7MkZES2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLGlCQUFpQjsySEFVM0IsR0FBRztzQkFERixLQUFLO3VCQUFDLFNBQVM7Z0JBSWhCLGtCQUFrQjtzQkFEakIsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPZGVDb21wb25lbnQgfSBmcm9tICduZ3gtb2RlLWNvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7TGFiZWxzU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGFiZWxzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ29kZS1mb3JtLWVycm9ycycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZXJyb3JzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLWVycm9ycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FcnJvcnNDb21wb25lbnQgZXh0ZW5kcyBPZGVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFiZWxzU2VydmljZTogTGFiZWxzU2VydmljZSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2NvbnRyb2wnKVxuICAgIHJlZjogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgQElucHV0KCdleHBlY3RlZFBhdHRlcm5Nc2cnKVxuICAgIGV4cGVjdGVkUGF0dGVybk1zZzogc3RyaW5nO1xuXG5cbiAgICBnZXRFcnJvcnNBcnJheSgpIHtcbiAgICAgICAgY29uc3QgZXJyb3JzQXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHRoaXMucmVmLmVycm9ycykge1xuICAgICAgICAgICAgZXJyb3JzQXJyYXkucHVzaCh7IG5hbWU6IHByb3AsIHZhbHVlOiB0aGlzLnJlZi5lcnJvcnNbcHJvcF19KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JzQXJyYXk7XG4gICAgfVxuXG4gICAgbGFiZWxzKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsc1NlcnZpY2UuZ2V0TGFiZWwobGFiZWwpO1xuICAgIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJyZWYgJiYgcmVmLmVycm9ycyAmJiAocmVmLmRpcnR5IHx8IHJlZi50b3VjaGVkKVwiIGNsYXNzPVwiZm9ybS1lcnJvcnNcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZ2V0RXJyb3JzQXJyYXkoKVwiPlxuICAgIDxzcGFuPnt7ICdmb3JtLmVycm9yLicgKyBlcnJvci5uYW1lIHwgdHJhbnNsYXRlOiBlcnJvci52YWx1ZSB9fTwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImVycm9yLm5hbWUgPT0gJ3BhdHRlcm4nXCI+e3tleHBlY3RlZFBhdHRlcm5Nc2d9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { OdeComponent } from 'ngx-ode-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../message-sticker/message-sticker.component";
6
+ import * as i3 from "ngx-ode-sijil";
7
+ export class FormFieldComponent extends OdeComponent {
8
+ constructor(injector) {
9
+ super(injector);
10
+ }
11
+ }
12
+ FormFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
13
+ FormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: FormFieldComponent, selector: "ode-form-field", inputs: { label: "label", help: "help", required: "required" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-field\">\n <label>\n {{ label | translate }}\n <span *ngIf=\"required\" class=\"asterisque\">*</span>\n <ode-message-sticker *ngIf=\"help\"\n [type]=\"'info'\"\n [messages]=\"[help]\">\n </ode-message-sticker>\n </label>\n <ng-content></ng-content>\n</div>\n", styles: ["div.form-field{display:flex;align-items:center}div.form-field > > > > *{flex:1;margin-left:5px}div.form-field>*:first-child{flex:0 0 200px;margin-left:0}div.form-field message-sticker{font-size:1.3em}div.form-field .asterisque{color:#dc143c}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MessageStickerComponent, selector: "ode-message-sticker", inputs: ["type", "header", "messages", "gravity"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormFieldComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'ode-form-field', template: "<div class=\"form-field\">\n <label>\n {{ label | translate }}\n <span *ngIf=\"required\" class=\"asterisque\">*</span>\n <ode-message-sticker *ngIf=\"help\"\n [type]=\"'info'\"\n [messages]=\"[help]\">\n </ode-message-sticker>\n </label>\n <ng-content></ng-content>\n</div>\n", styles: ["div.form-field{display:flex;align-items:center}div.form-field > > > > *{flex:1;margin-left:5px}div.form-field>*:first-child{flex:0 0 200px;margin-left:0}div.form-field message-sticker{font-size:1.3em}div.form-field .asterisque{color:#dc143c}\n"] }]
17
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { label: [{
18
+ type: Input
19
+ }], help: [{
20
+ type: Input
21
+ }], required: [{
22
+ type: Input
23
+ }] } });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2RlLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBTzVDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxZQUFZO0lBS2xELFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7OytHQVBVLGtCQUFrQjttR0FBbEIsa0JBQWtCLDZJQ1IvQiw2VUFXQTsyRkRIYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCOytGQUtqQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2RlQ29tcG9uZW50IH0gZnJvbSAnbmd4LW9kZS1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2RlLWZvcm0tZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZmllbGQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGRDb21wb25lbnQgZXh0ZW5kcyBPZGVDb21wb25lbnQge1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBoZWxwOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgPGxhYmVsPlxuICAgIHt7IGxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwiYXN0ZXJpc3F1ZVwiPio8L3NwYW4+XG4gICAgPG9kZS1tZXNzYWdlLXN0aWNrZXIgKm5nSWY9XCJoZWxwXCJcbiAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidpbmZvJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiW2hlbHBdXCI+XG4gICAgPC9vZGUtbWVzc2FnZS1zdGlja2VyPlxuICA8L2xhYmVsPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,170 @@
1
+ import { OdeComponent } from 'ngx-ode-core';
2
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "../../pipes/filter.pipe";
7
+ import * as i4 from "../../pipes/flattenObjArray.pipe";
8
+ import * as i5 from "../../pipes/orderBy.pipe";
9
+ export class ItemTreeComponent extends OdeComponent {
10
+ constructor(injector) {
11
+ super(injector);
12
+ /**** Inputs ****/
13
+ // Items
14
+ this.items = [];
15
+ // Property containing the list of child objects.
16
+ this.childrenProperty = 'children';
17
+ // Property to display in the list
18
+ this.displayProperty = 'label';
19
+ // Filter pipe argument
20
+ this.filter = '';
21
+ // OrderBy pipe argument
22
+ this.order = [];
23
+ // Reverse the order pipe
24
+ this.reverse = false;
25
+ this._flattenProps = [];
26
+ // Disable the opener icon
27
+ this.disableOpener = false;
28
+ // Use checkboxes instead of selecting items
29
+ this.checkboxMode = false;
30
+ /**** Outputs ****/
31
+ this.onSelect = new EventEmitter();
32
+ this.onCheck = new EventEmitter();
33
+ this._depth = 0;
34
+ this.unfolded = [];
35
+ }
36
+ // Flatten the tree on the specified properties
37
+ set flatten(flattenProps) {
38
+ if (!this.isFlattened() && flattenProps.length > 0) {
39
+ this._selectedItem = this._lastSelectedItem;
40
+ }
41
+ else if (this.isFlattened && flattenProps.length < 1) {
42
+ this.flagIfParent();
43
+ }
44
+ this._flattenProps = flattenProps;
45
+ }
46
+ get flatten() {
47
+ return this._flattenProps;
48
+ }
49
+ ngOnInit() {
50
+ super.ngOnInit();
51
+ this.flagIfParent();
52
+ }
53
+ selectItem(item) {
54
+ this._selectedItem = item;
55
+ if (this.childItemTree) {
56
+ delete this.childItemTree._selectedItem;
57
+ }
58
+ const idx = this.unfolded.indexOf(item);
59
+ if (!this.disableOpener && idx < 0) {
60
+ this.unfolded.push(item);
61
+ }
62
+ else {
63
+ this.unfolded.splice(idx, 1);
64
+ }
65
+ this.bubbleSelect(item);
66
+ }
67
+ checkItem(item) {
68
+ this.onCheck.emit(item);
69
+ }
70
+ bubbleSelect(item) {
71
+ this._lastSelectedItem = item;
72
+ this.onSelect.emit(item);
73
+ }
74
+ isSelected(item) {
75
+ return (this.disableOpener ? this._selectedItem : this._lastSelectedItem) === item;
76
+ }
77
+ toggleFold(event, item) {
78
+ event.stopPropagation();
79
+ const idx = this.unfolded.indexOf(item);
80
+ if (idx < 0) {
81
+ this.unfolded.push(item);
82
+ }
83
+ else {
84
+ this.unfolded.splice(idx, 1);
85
+ }
86
+ }
87
+ isFolded(item) {
88
+ return this.disableOpener ? !this.isSelected(item) : this.unfolded.indexOf(item) < 0;
89
+ }
90
+ display(item) {
91
+ return this.displayProperty && item[this.displayProperty];
92
+ }
93
+ getChildren(item) {
94
+ return item[this.childrenProperty] || [];
95
+ }
96
+ hasChildren(item) {
97
+ return this.getChildren(item).length > 0;
98
+ }
99
+ isFlattened() {
100
+ return this._flattenProps.length;
101
+ }
102
+ flagIfParent() {
103
+ if (!this._lastSelectedItem) {
104
+ return;
105
+ }
106
+ const findSubItem = (item, target) => {
107
+ if (item === target) {
108
+ return true;
109
+ }
110
+ if (this.hasChildren(item)) {
111
+ return this.getChildren(item).find(subItem => {
112
+ return findSubItem(subItem, target);
113
+ });
114
+ }
115
+ return false;
116
+ };
117
+ for (const i in this.items) {
118
+ const item = this.items[i];
119
+ if (item === this._lastSelectedItem ||
120
+ findSubItem(item, this._lastSelectedItem)) {
121
+ this._selectedItem = item;
122
+ this.unfolded = [item];
123
+ break;
124
+ }
125
+ }
126
+ this.changeDetector.markForCheck();
127
+ }
128
+ }
129
+ ItemTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ItemTreeComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
130
+ ItemTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: ItemTreeComponent, selector: "ode-item-tree", inputs: { items: "items", childrenProperty: ["children", "childrenProperty"], displayProperty: ["display", "displayProperty"], displayTemplate: "displayTemplate", filter: "filter", order: "order", reverse: "reverse", flatten: "flatten", disableOpener: "disableOpener", checkboxMode: "checkboxMode", _lastSelectedItem: ["lastSelected", "_lastSelectedItem"], _depth: ["depth", "_depth"] }, outputs: { onSelect: "onSelect", onCheck: "onCheck" }, viewQueries: [{ propertyName: "childItemTree", first: true, predicate: ItemTreeComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ul [ngClass]=\"{ flattened: isFlattened() }\">\n <li *ngFor=\"let item of (items | flattenObjArray: flatten | filter: filter | orderBy: order:reverse)\"\n [ngClass]=\"{ selected: isSelected(item), unfolded: !isFolded(item), parent: hasChildren(item), root: _depth === 0 }\">\n <a href=\"javascript:void(0)\" (click)=\"selectItem(item)\" *ngIf=\"!checkboxMode\">\n <i class=\"opener\" (click)=\"toggleFold($event, item)\"\n *ngIf=\"!isFlattened() && hasChildren(item) && !disableOpener\"></i>\n <span *ngIf=\"displayProperty\">{{ display(item) }}</span>\n <span *ngIf=\"displayTemplate\">\n <ng-template [ngTemplateOutlet]=\"displayTemplate\" [ngTemplateOutletContext]=\"{$implicit: item}\"></ng-template>\n </span>\n </a>\n <div class=\"checkbox__item\" *ngIf=\"checkboxMode\">\n <input id=\"all\" type=\"checkbox\" [(ngModel)]=\"item.check\" ngDefaultControl>\n <label *ngIf=\"displayProperty\" for=\"all\" (click)=\"checkItem(item)\">{{display(item)}}</label>\n <span *ngIf=\"displayTemplate\">\n <ng-template [ngTemplateOutlet]=\"displayTemplate\" [ngTemplateOutletContext]=\"{$implicit: item}\"></ng-template>\n </span>\n </div>\n <ode-item-tree\n [items]=\"getChildren(item)\"\n [children]=\"childrenProperty\"\n [display]=\"displayProperty\"\n [displayTemplate]=\"displayTemplate\"\n [filter]=\"filter\"\n [order]=\"order\"\n [reverse]=\"reverse\"\n [lastSelected]=\"_lastSelectedItem\"\n [depth]=\"_depth + 1\"\n [disableOpener]=\"disableOpener\"\n [checkboxMode]=\"checkboxMode\"\n (onSelect)=\"bubbleSelect($event)\"\n (onCheck)=\"checkItem($event)\"\n *ngIf=\"(checkboxMode && hasChildren(item)) || (!isFlattened() && hasChildren(item) && !isFolded(item))\">\n </ode-item-tree>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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: ItemTreeComponent, selector: "ode-item-tree", inputs: ["items", "children", "display", "displayTemplate", "filter", "order", "reverse", "flatten", "disableOpener", "checkboxMode", "lastSelected", "depth"], outputs: ["onSelect", "onCheck"] }, { kind: "pipe", type: i3.FilterPipe, name: "filter" }, { kind: "pipe", type: i4.FlattenObjectArrayPipe, name: "flattenObjArray" }, { kind: "pipe", type: i5.OrderPipe, name: "orderBy" }] });
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ItemTreeComponent, decorators: [{
132
+ type: Component,
133
+ args: [{ selector: 'ode-item-tree', template: "<ul [ngClass]=\"{ flattened: isFlattened() }\">\n <li *ngFor=\"let item of (items | flattenObjArray: flatten | filter: filter | orderBy: order:reverse)\"\n [ngClass]=\"{ selected: isSelected(item), unfolded: !isFolded(item), parent: hasChildren(item), root: _depth === 0 }\">\n <a href=\"javascript:void(0)\" (click)=\"selectItem(item)\" *ngIf=\"!checkboxMode\">\n <i class=\"opener\" (click)=\"toggleFold($event, item)\"\n *ngIf=\"!isFlattened() && hasChildren(item) && !disableOpener\"></i>\n <span *ngIf=\"displayProperty\">{{ display(item) }}</span>\n <span *ngIf=\"displayTemplate\">\n <ng-template [ngTemplateOutlet]=\"displayTemplate\" [ngTemplateOutletContext]=\"{$implicit: item}\"></ng-template>\n </span>\n </a>\n <div class=\"checkbox__item\" *ngIf=\"checkboxMode\">\n <input id=\"all\" type=\"checkbox\" [(ngModel)]=\"item.check\" ngDefaultControl>\n <label *ngIf=\"displayProperty\" for=\"all\" (click)=\"checkItem(item)\">{{display(item)}}</label>\n <span *ngIf=\"displayTemplate\">\n <ng-template [ngTemplateOutlet]=\"displayTemplate\" [ngTemplateOutletContext]=\"{$implicit: item}\"></ng-template>\n </span>\n </div>\n <ode-item-tree\n [items]=\"getChildren(item)\"\n [children]=\"childrenProperty\"\n [display]=\"displayProperty\"\n [displayTemplate]=\"displayTemplate\"\n [filter]=\"filter\"\n [order]=\"order\"\n [reverse]=\"reverse\"\n [lastSelected]=\"_lastSelectedItem\"\n [depth]=\"_depth + 1\"\n [disableOpener]=\"disableOpener\"\n [checkboxMode]=\"checkboxMode\"\n (onSelect)=\"bubbleSelect($event)\"\n (onCheck)=\"checkItem($event)\"\n *ngIf=\"(checkboxMode && hasChildren(item)) || (!isFlattened() && hasChildren(item) && !isFolded(item))\">\n </ode-item-tree>\n </li>\n</ul>\n" }]
134
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { items: [{
135
+ type: Input
136
+ }], childrenProperty: [{
137
+ type: Input,
138
+ args: ['children']
139
+ }], displayProperty: [{
140
+ type: Input,
141
+ args: ['display']
142
+ }], displayTemplate: [{
143
+ type: Input
144
+ }], filter: [{
145
+ type: Input
146
+ }], order: [{
147
+ type: Input
148
+ }], reverse: [{
149
+ type: Input
150
+ }], flatten: [{
151
+ type: Input
152
+ }], disableOpener: [{
153
+ type: Input
154
+ }], checkboxMode: [{
155
+ type: Input
156
+ }], onSelect: [{
157
+ type: Output
158
+ }], onCheck: [{
159
+ type: Output
160
+ }], childItemTree: [{
161
+ type: ViewChild,
162
+ args: [ItemTreeComponent]
163
+ }], _lastSelectedItem: [{
164
+ type: Input,
165
+ args: ['lastSelected']
166
+ }], _depth: [{
167
+ type: Input,
168
+ args: ['depth']
169
+ }] } });
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vZGUtdWkvc3JjL2xpYi9jb21wb25lbnRzL2l0ZW0tdHJlZS9pdGVtLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvaXRlbS10cmVlL2l0ZW0tdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUF1QyxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQU0vSCxNQUFNLE9BQU8saUJBQXFCLFNBQVEsWUFBWTtJQUVsRCxZQUFZLFFBQWtCO1FBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUdwQixrQkFBa0I7UUFFbEIsUUFBUTtRQUNDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFFaEMsaURBQWlEO1FBQzlCLHFCQUFnQixHQUFHLFVBQVUsQ0FBQztRQUNqRCxrQ0FBa0M7UUFDaEIsb0JBQWUsR0FBRyxPQUFPLENBQUM7UUFFNUMsdUJBQXVCO1FBQ2QsV0FBTSxHQUFpQyxFQUFFLENBQUM7UUFDbkQsd0JBQXdCO1FBQ2YsVUFBSyxHQUFxQyxFQUFFLENBQUM7UUFDdEQseUJBQXlCO1FBQ2hCLFlBQU8sR0FBUSxLQUFLLENBQUM7UUFjdEIsa0JBQWEsR0FBa0IsRUFBRSxDQUFDO1FBRTFDLDBCQUEwQjtRQUNqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUUvQiw0Q0FBNEM7UUFDbkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFOUIsbUJBQW1CO1FBRVQsYUFBUSxHQUFvQixJQUFJLFlBQVksRUFBSyxDQUFDO1FBRWxE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QUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixNQUFNO2FBQ1Q7U0FDSjtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQzs7OEdBdkpRLGlCQUFpQjtrR0FBakIsaUJBQWlCLCtoQkFtRGYsaUJBQWlCLHVFQzFEaEMsdzBEQW9DQSxteENEN0JhLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUo3QixTQUFTOytCQUNJLGVBQWU7K0ZBWWhCLEtBQUs7c0JBQWIsS0FBSztnQkFHYSxnQkFBZ0I7c0JBQWxDLEtBQUs7dUJBQUMsVUFBVTtnQkFFQyxlQUFlO3NCQUFoQyxLQUFLO3VCQUFDLFNBQVM7Z0JBQ1AsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFHRixPQUFPO3NCQURWLEtBQUs7Z0JBZUcsYUFBYTtzQkFBckIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUcsT0FBTztzQkFBaEIsTUFBTTtnQkFJdUIsYUFBYTtzQkFBMUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSUwsaUJBQWlCO3NCQUF2QyxLQUFLO3VCQUFDLGNBQWM7Z0JBRUwsTUFBTTtzQkFBckIsS0FBSzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2RlQ29tcG9uZW50IH0gZnJvbSAnbmd4LW9kZS1jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgQ29udGVudENoaWxkLCBUZW1wbGF0ZVJlZiwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdvZGUtaXRlbS10cmVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaXRlbS10cmVlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJdGVtVHJlZUNvbXBvbmVudDxUPiBleHRlbmRzIE9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKioqIElucHV0cyAqKioqL1xuXG4gICAgLy8gSXRlbXNcbiAgICBASW5wdXQoKSBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuXG4gICAgLy8gUHJvcGVydHkgY29udGFpbmluZyB0aGUgbGlzdCBvZiBjaGlsZCBvYmplY3RzLlxuICAgIEBJbnB1dCgnY2hpbGRyZW4nKSBjaGlsZHJlblByb3BlcnR5ID0gJ2NoaWxkcmVuJztcbiAgICAvLyBQcm9wZXJ0eSB0byBkaXNwbGF5IGluIHRoZSBsaXN0XG4gICAgQElucHV0KCdkaXNwbGF5JykgZGlzcGxheVByb3BlcnR5ID0gJ2xhYmVsJztcbiAgICBASW5wdXQoKSBkaXNwbGF5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLy8gRmlsdGVyIHBpcGUgYXJndW1lbnRcbiAgICBASW5wdXQoKSBmaWx0ZXI6IChPYmplY3QgfCBzdHJpbmcgfCBGdW5jdGlvbikgPSAnJztcbiAgICAvLyBPcmRlckJ5IHBpcGUgYXJndW1lbnRcbiAgICBASW5wdXQoKSBvcmRlcjogKEFycmF5PGFueT4gfCBzdHJpbmcgfCBGdW5jdGlvbikgPSBbXTtcbiAgICAvLyBSZXZlcnNlIHRoZSBvcmRlciBwaXBlXG4gICAgQElucHV0KCkgcmV2ZXJzZTogYW55ID0gZmFsc2U7XG4gICAgLy8gRmxhdHRlbiB0aGUgdHJlZSBvbiB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKVxuICAgIHNldCBmbGF0dGVuKGZsYXR0ZW5Qcm9wczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBpZiAoIXRoaXMuaXNGbGF0dGVuZWQoKSAmJiBmbGF0dGVuUHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gdGhpcy5fbGFzdFNlbGVjdGVkSXRlbTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRmxhdHRlbmVkICYmIGZsYXR0ZW5Qcm9wcy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aGlzLmZsYWdJZlBhcmVudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZsYXR0ZW5Qcm9wcyA9IGZsYXR0ZW5Qcm9wcztcbiAgICB9XG4gICAgZ2V0IGZsYXR0ZW4oKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mbGF0dGVuUHJvcHM7XG4gICAgfVxuICAgIHByaXZhdGUgX2ZsYXR0ZW5Qcm9wczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgLy8gRGlzYWJsZSB0aGUgb3BlbmVyIGljb25cbiAgICBASW5wdXQoKSBkaXNhYmxlT3BlbmVyID0gZmFsc2U7XG5cbiAgICAvLyBVc2UgY2hlY2tib3hlcyBpbnN0ZWFkIG9mIHNlbGVjdGluZyBpdGVtc1xuICAgIEBJbnB1dCgpIGNoZWNrYm94TW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqKiogT3V0cHV0cyAqKioqL1xuXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgb25DaGVjazogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgLyoqKiogVmlldyAqKioqL1xuXG4gICAgQFZpZXdDaGlsZChJdGVtVHJlZUNvbXBvbmVudCkgY2hpbGRJdGVtVHJlZTogSXRlbVRyZWVDb21wb25lbnQ8VD47XG5cbiAgICAvKioqKiBJbnRlcm5hbCBMb2dpYyAqKioqL1xuXG4gICAgQElucHV0KCdsYXN0U2VsZWN0ZWQnKSBfbGFzdFNlbGVjdGVkSXRlbTogVDtcbiAgICBwcml2YXRlIF9zZWxlY3RlZEl0ZW06IFQ7XG4gICAgQElucHV0KCdkZXB0aCcpIF9kZXB0aCA9IDA7XG4gICAgcHJpdmF0ZSB1bmZvbGRlZDogVFtdID0gW107XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5mbGFnSWZQYXJlbnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtOiBUKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgICAgIGlmICh0aGlzLmNoaWxkSXRlbVRyZWUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNoaWxkSXRlbVRyZWUuX3NlbGVjdGVkSXRlbTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHggPSB0aGlzLnVuZm9sZGVkLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlT3BlbmVyICYmIGlkeCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudW5mb2xkZWQucHVzaChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVuZm9sZGVkLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnViYmxlU2VsZWN0KGl0ZW0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0l0ZW0oaXRlbTogVCkge1xuICAgICAgICB0aGlzLm9uQ2hlY2suZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnViYmxlU2VsZWN0KGl0ZW06IFQpIHtcbiAgICAgICAgdGhpcy5fbGFzdFNlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTZWxlY3RlZChpdGVtKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kaXNhYmxlT3BlbmVyID8gdGhpcy5fc2VsZWN0ZWRJdGVtIDogdGhpcy5fbGFzdFNlbGVjdGVkSXRlbSkgPT09IGl0ZW07XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUZvbGQoZXZlbnQ6IEV2ZW50LCBpdGVtOiBUKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLnVuZm9sZGVkLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuZm9sZGVkLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuZm9sZGVkLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzRm9sZGVkKGl0ZW06IFQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZU9wZW5lciA/ICF0aGlzLmlzU2VsZWN0ZWQoaXRlbSkgOiB0aGlzLnVuZm9sZGVkLmluZGV4T2YoaXRlbSkgPCAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwbGF5KGl0ZW06IFQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVByb3BlcnR5ICYmIGl0ZW1bdGhpcy5kaXNwbGF5UHJvcGVydHldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMuY2hpbGRyZW5Qcm9wZXJ0eV0gfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0NoaWxkcmVuKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oaXRlbSkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBpc0ZsYXR0ZW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXR0ZW5Qcm9wcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGFnSWZQYXJlbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbGFzdFNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmluZFN1Ykl0ZW0gPSAoaXRlbSwgdGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlsZHJlbihpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoaWxkcmVuKGl0ZW0pLmZpbmQoc3ViSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5kU3ViSXRlbShzdWJJdGVtLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpXTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IHRoaXMuX2xhc3RTZWxlY3RlZEl0ZW0gfHxcbiAgICAgICAgICAgICAgICAgICAgZmluZFN1Ykl0ZW0oaXRlbSwgdGhpcy5fbGFzdFNlbGVjdGVkSXRlbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICAgICAgICAgICAgICAgIHRoaXMudW5mb2xkZWQgPSBbaXRlbV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxufVxuIiwiPHVsIFtuZ0NsYXNzXT1cInsgZmxhdHRlbmVkOiBpc0ZsYXR0ZW5lZCgpIH1cIj5cbiAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIChpdGVtcyB8IGZsYXR0ZW5PYmpBcnJheTogZmxhdHRlbiB8IGZpbHRlcjogZmlsdGVyIHwgb3JkZXJCeTogb3JkZXI6cmV2ZXJzZSlcIlxuICAgICAgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogaXNTZWxlY3RlZChpdGVtKSwgdW5mb2xkZWQ6ICFpc0ZvbGRlZChpdGVtKSwgcGFyZW50OiBoYXNDaGlsZHJlbihpdGVtKSwgcm9vdDogX2RlcHRoID09PSAwIH1cIj5cbiAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbSlcIiAqbmdJZj1cIiFjaGVja2JveE1vZGVcIj5cbiAgICAgIDxpIGNsYXNzPVwib3BlbmVyXCIgKGNsaWNrKT1cInRvZ2dsZUZvbGQoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAqbmdJZj1cIiFpc0ZsYXR0ZW5lZCgpICYmIGhhc0NoaWxkcmVuKGl0ZW0pICYmICFkaXNhYmxlT3BlbmVyXCI+PC9pPlxuICAgICAgPHNwYW4gKm5nSWY9XCJkaXNwbGF5UHJvcGVydHlcIj57eyBkaXNwbGF5KGl0ZW0pIH19PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJkaXNwbGF5VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpc3BsYXlUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBpdGVtfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L3NwYW4+XG4gICAgPC9hPlxuICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveF9faXRlbVwiICpuZ0lmPVwiY2hlY2tib3hNb2RlXCI+XG4gICAgICA8aW5wdXQgaWQ9XCJhbGxcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIml0ZW0uY2hlY2tcIiBuZ0RlZmF1bHRDb250cm9sPlxuICAgICAgPGxhYmVsICpuZ0lmPVwiZGlzcGxheVByb3BlcnR5XCIgZm9yPVwiYWxsXCIgKGNsaWNrKT1cImNoZWNrSXRlbShpdGVtKVwiPnt7ZGlzcGxheShpdGVtKX19PC9sYWJlbD5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZGlzcGxheVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkaXNwbGF5VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogaXRlbX1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxvZGUtaXRlbS10cmVlXG4gICAgICBbaXRlbXNdPVwiZ2V0Q2hpbGRyZW4oaXRlbSlcIlxuICAgICAgW2NoaWxkcmVuXT1cImNoaWxkcmVuUHJvcGVydHlcIlxuICAgICAgW2Rpc3BsYXldPVwiZGlzcGxheVByb3BlcnR5XCJcbiAgICAgIFtkaXNwbGF5VGVtcGxhdGVdPVwiZGlzcGxheVRlbXBsYXRlXCJcbiAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgIFtvcmRlcl09XCJvcmRlclwiXG4gICAgICBbcmV2ZXJzZV09XCJyZXZlcnNlXCJcbiAgICAgIFtsYXN0U2VsZWN0ZWRdPVwiX2xhc3RTZWxlY3RlZEl0ZW1cIlxuICAgICAgW2RlcHRoXT1cIl9kZXB0aCArIDFcIlxuICAgICAgW2Rpc2FibGVPcGVuZXJdPVwiZGlzYWJsZU9wZW5lclwiXG4gICAgICBbY2hlY2tib3hNb2RlXT1cImNoZWNrYm94TW9kZVwiXG4gICAgICAob25TZWxlY3QpPVwiYnViYmxlU2VsZWN0KCRldmVudClcIlxuICAgICAgKG9uQ2hlY2spPVwiY2hlY2tJdGVtKCRldmVudClcIlxuICAgICAgKm5nSWY9XCIoY2hlY2tib3hNb2RlICYmIGhhc0NoaWxkcmVuKGl0ZW0pKSB8fCAoIWlzRmxhdHRlbmVkKCkgJiYgaGFzQ2hpbGRyZW4oaXRlbSkgJiYgIWlzRm9sZGVkKGl0ZW0pKVwiPlxuICAgIDwvb2RlLWl0ZW0tdHJlZT5cbiAgPC9saT5cbjwvdWw+XG4iXX0=