@indice/ng-components 0.2.166 → 0.2.167

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 (183) hide show
  1. package/README.md +4 -4
  2. package/_styles.css +4270 -4270
  3. package/{esm2015/indice-ng-components.js → esm2020/indice-ng-components.mjs} +0 -0
  4. package/esm2020/lib/controls/advanced-search/advanced-search.component.mjs +112 -0
  5. package/esm2020/lib/controls/advanced-search/models.mjs +90 -0
  6. package/{esm2015/lib/controls/avatar-initials/avatar-initials.component.js → esm2020/lib/controls/avatar-initials/avatar-initials.component.mjs} +5 -8
  7. package/esm2020/lib/controls/collapsible-panel/collapsible-panel.component.mjs +20 -0
  8. package/esm2020/lib/controls/combobox/combobox.component.mjs +97 -0
  9. package/esm2020/lib/controls/date-picker/date-picker.component.mjs +292 -0
  10. package/esm2020/lib/controls/drop-down-menu/drop-down-menu.component.mjs +68 -0
  11. package/esm2020/lib/controls/kpi-tile/kpi-tile.component.mjs +39 -0
  12. package/esm2020/lib/controls/language-selection/language-selection.component.mjs +31 -0
  13. package/{esm2015/lib/controls/list-view/list-column.component.js → esm2020/lib/controls/list-view/list-column.component.mjs} +4 -4
  14. package/{esm2015/lib/controls/list-view/list-details-section.component.js → esm2020/lib/controls/list-view/list-details-section.component.mjs} +4 -4
  15. package/{esm2015/lib/controls/list-view/list-tile.component.js → esm2020/lib/controls/list-view/list-tile.component.mjs} +4 -4
  16. package/esm2020/lib/controls/list-view/list-view-empty-state.component.mjs +29 -0
  17. package/esm2020/lib/controls/list-view/list-view.component.mjs +206 -0
  18. package/esm2020/lib/controls/nav-links-list/nav-links-list.component.mjs +46 -0
  19. package/esm2020/lib/controls/notifications-indicator/notifications-indicator.component.mjs +79 -0
  20. package/esm2020/lib/controls/pager/pager.component.mjs +130 -0
  21. package/esm2020/lib/controls/side-pane/side-pane.component.mjs +72 -0
  22. package/esm2020/lib/controls/skeleton-loader/skeleton-loader.component.mjs +25 -0
  23. package/{esm2015/lib/controls/stepper/lib-step-info.directive.js → esm2020/lib/controls/stepper/lib-step-info.directive.mjs} +4 -4
  24. package/{esm2015/lib/controls/stepper/lib-step-label.directive.js → esm2020/lib/controls/stepper/lib-step-label.directive.mjs} +4 -4
  25. package/esm2020/lib/controls/stepper/lib-step.component.mjs +81 -0
  26. package/esm2020/lib/controls/stepper/lib-stepper.component.mjs +108 -0
  27. package/esm2020/lib/controls/stepper/types/step-selected-event.mjs +4 -0
  28. package/{esm2015/lib/controls/stepper/types/stepper-type.js → esm2020/lib/controls/stepper/types/stepper-type.mjs} +1 -1
  29. package/esm2020/lib/controls/tabs/lib-tab-group.component.mjs +60 -0
  30. package/esm2020/lib/controls/tabs/lib-tab.component.mjs +57 -0
  31. package/esm2020/lib/controls/toaster/toaster-container.component.mjs +28 -0
  32. package/esm2020/lib/controls/toaster/toaster.component.mjs +31 -0
  33. package/esm2020/lib/controls/toggle/toggle.component.mjs +64 -0
  34. package/esm2020/lib/controls/user-profile-menu/user-profile-menu.component.mjs +71 -0
  35. package/{esm2015/lib/directives/click-outside.directive.js → esm2020/lib/directives/click-outside.directive.mjs} +4 -4
  36. package/{esm2015/lib/directives/dynamic-component-host.directive.js → esm2020/lib/directives/dynamic-component-host.directive.mjs} +4 -4
  37. package/esm2020/lib/helpers/base-list.component.mjs +226 -0
  38. package/{esm2015/lib/icons.js → esm2020/lib/icons.mjs} +1 -1
  39. package/esm2020/lib/layouts/shell/shell-footer/shell-footer.component.mjs +19 -0
  40. package/esm2020/lib/layouts/shell/shell-header/shell-header.component.mjs +130 -0
  41. package/esm2020/lib/layouts/shell/shell-layout/shell-layout.component.mjs +101 -0
  42. package/esm2020/lib/layouts/shell/shell-sidebar/shell-sidebar.component.mjs +47 -0
  43. package/esm2020/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.mjs +45 -0
  44. package/esm2020/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.mjs +25 -0
  45. package/esm2020/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.mjs +21 -0
  46. package/esm2020/lib/layouts/views/form-layout/form-layout.component.mjs +80 -0
  47. package/esm2020/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +49 -0
  48. package/esm2020/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +98 -0
  49. package/esm2020/lib/layouts/views/view-layout/view-layout.component.mjs +104 -0
  50. package/{esm2015/lib/ng-components.module.js → esm2020/lib/ng-components.module.mjs} +8 -10
  51. package/esm2020/lib/pages/auth/auth-callback/auth-callback.component.mjs +30 -0
  52. package/{esm2015/lib/pages/auth/auth-renew/auth-renew.component.js → esm2020/lib/pages/auth/auth-renew/auth-renew.component.mjs} +4 -4
  53. package/esm2020/lib/pages/auth/logged-out/logged-out.component.mjs +28 -0
  54. package/esm2020/lib/pages/http-status/error/error.component.mjs +17 -0
  55. package/esm2020/lib/pages/http-status/page-not-found/page-not-found.component.mjs +15 -0
  56. package/esm2020/lib/pages/http-status/unauthorized/unauthorized.component.mjs +14 -0
  57. package/{esm2015/lib/pipes/address.pipe.js → esm2020/lib/pipes/address.pipe.mjs} +4 -4
  58. package/{esm2015/lib/pipes/duration-format.pipe.js → esm2020/lib/pipes/duration-format.pipe.mjs} +4 -4
  59. package/esm2020/lib/services/component-loader/component-loader-options.class.mjs +8 -0
  60. package/esm2020/lib/services/component-loader/component-loader.class.mjs +188 -0
  61. package/{esm2015/lib/services/component-loader/component-loader.factory.js → esm2020/lib/services/component-loader/component-loader.factory.mjs} +4 -4
  62. package/{esm2015/lib/services/component-loader/content-ref.class.js → esm2020/lib/services/component-loader/content-ref.class.mjs} +1 -1
  63. package/esm2020/lib/services/modal-service/modal-backdrop-component.mjs +44 -0
  64. package/esm2020/lib/services/modal-service/modal-container-component.mjs +126 -0
  65. package/esm2020/lib/services/modal-service/modal-options.class.mjs +35 -0
  66. package/esm2020/lib/services/modal-service/modal-service.mjs +219 -0
  67. package/{esm2015/lib/services/modal-service/modal-styles.class.js → esm2020/lib/services/modal-service/modal-styles.class.mjs} +1 -1
  68. package/esm2020/lib/services/modal-service/modal.class.mjs +27 -0
  69. package/{esm2015/lib/services/toaster.service.js → esm2020/lib/services/toaster.service.mjs} +4 -4
  70. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +1 -1
  71. package/{esm2015/lib/types.js → esm2020/lib/types.mjs} +1 -1
  72. package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
  73. package/fesm2015/indice-ng-components.mjs +4269 -0
  74. package/fesm2015/indice-ng-components.mjs.map +1 -0
  75. package/fesm2020/indice-ng-components.mjs +4196 -0
  76. package/fesm2020/indice-ng-components.mjs.map +1 -0
  77. package/{indice-ng-components.d.ts → index.d.ts} +0 -0
  78. package/lib/controls/advanced-search/advanced-search.component.d.ts +1 -1
  79. package/lib/controls/avatar-initials/avatar-initials.component.d.ts +1 -1
  80. package/lib/controls/collapsible-panel/collapsible-panel.component.d.ts +1 -1
  81. package/lib/controls/combobox/combobox.component.d.ts +1 -1
  82. package/lib/controls/date-picker/date-picker.component.d.ts +1 -1
  83. package/lib/controls/drop-down-menu/drop-down-menu.component.d.ts +1 -1
  84. package/lib/controls/kpi-tile/kpi-tile.component.d.ts +1 -1
  85. package/lib/controls/language-selection/language-selection.component.d.ts +1 -1
  86. package/lib/controls/list-view/list-column.component.d.ts +1 -1
  87. package/lib/controls/list-view/list-details-section.component.d.ts +1 -1
  88. package/lib/controls/list-view/list-tile.component.d.ts +1 -1
  89. package/lib/controls/list-view/list-view-empty-state.component.d.ts +1 -1
  90. package/lib/controls/list-view/list-view.component.d.ts +1 -1
  91. package/lib/controls/nav-links-list/nav-links-list.component.d.ts +1 -1
  92. package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +1 -1
  93. package/lib/controls/pager/pager.component.d.ts +1 -1
  94. package/lib/controls/side-pane/side-pane.component.d.ts +1 -1
  95. package/lib/controls/skeleton-loader/skeleton-loader.component.d.ts +1 -1
  96. package/lib/controls/stepper/lib-step-info.directive.d.ts +1 -1
  97. package/lib/controls/stepper/lib-step-label.directive.d.ts +1 -1
  98. package/lib/controls/stepper/lib-step.component.d.ts +1 -1
  99. package/lib/controls/stepper/lib-stepper.component.d.ts +1 -1
  100. package/lib/controls/tabs/lib-tab-group.component.d.ts +1 -1
  101. package/lib/controls/tabs/lib-tab.component.d.ts +1 -1
  102. package/lib/controls/toaster/toaster-container.component.d.ts +1 -1
  103. package/lib/controls/toaster/toaster.component.d.ts +1 -1
  104. package/lib/controls/toggle/toggle.component.d.ts +1 -1
  105. package/lib/controls/user-profile-menu/user-profile-menu.component.d.ts +1 -1
  106. package/lib/directives/click-outside.directive.d.ts +1 -1
  107. package/lib/directives/dynamic-component-host.directive.d.ts +1 -1
  108. package/lib/helpers/base-list.component.d.ts +1 -1
  109. package/lib/layouts/shell/shell-footer/shell-footer.component.d.ts +1 -1
  110. package/lib/layouts/shell/shell-header/shell-header.component.d.ts +1 -1
  111. package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +1 -1
  112. package/lib/layouts/shell/shell-sidebar/shell-sidebar.component.d.ts +1 -1
  113. package/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.d.ts +1 -1
  114. package/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.d.ts +1 -1
  115. package/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.d.ts +1 -1
  116. package/lib/layouts/views/form-layout/form-layout.component.d.ts +1 -1
  117. package/lib/layouts/views/model-view-layout/model-view-layout.component.d.ts +1 -1
  118. package/lib/layouts/views/side-view-layout/side-view-layout.component.d.ts +1 -1
  119. package/lib/layouts/views/view-layout/view-layout.component.d.ts +1 -1
  120. package/lib/pages/auth/auth-callback/auth-callback.component.d.ts +1 -1
  121. package/lib/pages/auth/auth-renew/auth-renew.component.d.ts +1 -1
  122. package/lib/pages/auth/logged-out/logged-out.component.d.ts +1 -1
  123. package/lib/pages/http-status/error/error.component.d.ts +1 -1
  124. package/lib/pages/http-status/page-not-found/page-not-found.component.d.ts +1 -1
  125. package/lib/pages/http-status/unauthorized/unauthorized.component.d.ts +1 -1
  126. package/lib/pipes/address.pipe.d.ts +1 -1
  127. package/lib/pipes/duration-format.pipe.d.ts +1 -1
  128. package/lib/services/modal-service/modal-backdrop-component.d.ts +1 -1
  129. package/lib/services/modal-service/modal-container-component.d.ts +1 -1
  130. package/modal.css +157 -157
  131. package/package.json +21 -8
  132. package/bundles/indice-ng-components.umd.js +0 -5003
  133. package/bundles/indice-ng-components.umd.js.map +0 -1
  134. package/esm2015/lib/controls/advanced-search/advanced-search.component.js +0 -116
  135. package/esm2015/lib/controls/advanced-search/models.js +0 -91
  136. package/esm2015/lib/controls/collapsible-panel/collapsible-panel.component.js +0 -23
  137. package/esm2015/lib/controls/combobox/combobox.component.js +0 -100
  138. package/esm2015/lib/controls/date-picker/date-picker.component.js +0 -301
  139. package/esm2015/lib/controls/drop-down-menu/drop-down-menu.component.js +0 -72
  140. package/esm2015/lib/controls/kpi-tile/kpi-tile.component.js +0 -42
  141. package/esm2015/lib/controls/language-selection/language-selection.component.js +0 -35
  142. package/esm2015/lib/controls/list-view/list-view-empty-state.component.js +0 -32
  143. package/esm2015/lib/controls/list-view/list-view.component.js +0 -209
  144. package/esm2015/lib/controls/nav-links-list/nav-links-list.component.js +0 -51
  145. package/esm2015/lib/controls/notifications-indicator/notifications-indicator.component.js +0 -82
  146. package/esm2015/lib/controls/pager/pager.component.js +0 -133
  147. package/esm2015/lib/controls/side-pane/side-pane.component.js +0 -76
  148. package/esm2015/lib/controls/skeleton-loader/skeleton-loader.component.js +0 -29
  149. package/esm2015/lib/controls/stepper/lib-step.component.js +0 -82
  150. package/esm2015/lib/controls/stepper/lib-stepper.component.js +0 -115
  151. package/esm2015/lib/controls/stepper/types/step-selected-event.js +0 -4
  152. package/esm2015/lib/controls/tabs/lib-tab-group.component.js +0 -67
  153. package/esm2015/lib/controls/tabs/lib-tab.component.js +0 -58
  154. package/esm2015/lib/controls/toaster/toaster-container.component.js +0 -31
  155. package/esm2015/lib/controls/toaster/toaster.component.js +0 -34
  156. package/esm2015/lib/controls/toggle/toggle.component.js +0 -68
  157. package/esm2015/lib/controls/user-profile-menu/user-profile-menu.component.js +0 -75
  158. package/esm2015/lib/helpers/base-list.component.js +0 -227
  159. package/esm2015/lib/layouts/shell/shell-footer/shell-footer.component.js +0 -22
  160. package/esm2015/lib/layouts/shell/shell-header/shell-header.component.js +0 -135
  161. package/esm2015/lib/layouts/shell/shell-layout/shell-layout.component.js +0 -106
  162. package/esm2015/lib/layouts/shell/shell-sidebar/shell-sidebar.component.js +0 -50
  163. package/esm2015/lib/layouts/shell/shell-sidebar-header/shell-sidebar-header.component.js +0 -48
  164. package/esm2015/lib/layouts/shell/shell-sidebar-layout/shell-sidebar-layout.component.js +0 -28
  165. package/esm2015/lib/layouts/shell/shell-stacked-layout/shell-stacked-layout.component.js +0 -24
  166. package/esm2015/lib/layouts/views/form-layout/form-layout.component.js +0 -85
  167. package/esm2015/lib/layouts/views/model-view-layout/model-view-layout.component.js +0 -53
  168. package/esm2015/lib/layouts/views/side-view-layout/side-view-layout.component.js +0 -101
  169. package/esm2015/lib/layouts/views/view-layout/view-layout.component.js +0 -110
  170. package/esm2015/lib/pages/auth/auth-callback/auth-callback.component.js +0 -34
  171. package/esm2015/lib/pages/auth/logged-out/logged-out.component.js +0 -32
  172. package/esm2015/lib/pages/http-status/error/error.component.js +0 -20
  173. package/esm2015/lib/pages/http-status/page-not-found/page-not-found.component.js +0 -18
  174. package/esm2015/lib/pages/http-status/unauthorized/unauthorized.component.js +0 -17
  175. package/esm2015/lib/services/component-loader/component-loader-options.class.js +0 -8
  176. package/esm2015/lib/services/component-loader/component-loader.class.js +0 -192
  177. package/esm2015/lib/services/modal-service/modal-backdrop-component.js +0 -44
  178. package/esm2015/lib/services/modal-service/modal-container-component.js +0 -128
  179. package/esm2015/lib/services/modal-service/modal-options.class.js +0 -35
  180. package/esm2015/lib/services/modal-service/modal-service.js +0 -220
  181. package/esm2015/lib/services/modal-service/modal.class.js +0 -27
  182. package/fesm2015/indice-ng-components.js +0 -4355
  183. package/fesm2015/indice-ng-components.js.map +0 -1
@@ -1,116 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { FilterClause, QueryParameters, Operators } from './models';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../drop-down-menu/drop-down-menu.component";
5
- import * as i2 from "../date-picker/date-picker.component";
6
- import * as i3 from "@angular/common";
7
- import * as i4 from "@angular/forms";
8
- export class AdvancedSearchComponent {
9
- constructor() {
10
- this.advancedSearchChanged = new EventEmitter();
11
- this.searchOptions = [];
12
- this.filters = [];
13
- this.menuOptions = [];
14
- this.menuOptionsDictionary = {};
15
- }
16
- ngOnInit() {
17
- this.searchOptions.forEach((searchOption) => {
18
- var _a;
19
- this.menuOptions.push({
20
- text: searchOption.name,
21
- value: searchOption.field,
22
- data: searchOption.dataType,
23
- description: searchOption.placeholder,
24
- icon: undefined
25
- });
26
- if (searchOption.dataType === 'array') {
27
- let menuOpts = [];
28
- (_a = searchOption.options) === null || _a === void 0 ? void 0 : _a.forEach((selectInputOption) => {
29
- menuOpts.push({
30
- text: selectInputOption.label,
31
- value: selectInputOption.value,
32
- data: undefined,
33
- description: selectInputOption.description,
34
- icon: undefined
35
- });
36
- });
37
- this.menuOptionsDictionary[searchOption.field] = menuOpts;
38
- }
39
- });
40
- }
41
- selectedFieldChanged(field) {
42
- this.selectedField = this.searchOptions.find((searchOption) => searchOption.field === field);
43
- this.fieldValue = undefined;
44
- }
45
- selectedFieldValueChanged(fieldValue) {
46
- this.fieldValue = fieldValue;
47
- }
48
- search() {
49
- if (!this.selectedField || !this.selectedField.dataType) {
50
- return;
51
- }
52
- // the filter is of type 'daterange'
53
- if (this.selectedField.dataType === 'daterange') {
54
- if (!this.selectedField.multiTerm) {
55
- this.filters = this.filters.filter((f) => {
56
- return f.member !== QueryParameters.FILTER_FROM && f.member !== QueryParameters.FILTER_TO;
57
- });
58
- }
59
- if (this.fieldValueDateFrom) {
60
- const filterClauseFrom = new FilterClause(QueryParameters.FILTER_FROM, this.fieldValueDateFrom, Operators.GREATER_THAN_EQUAL.value, 'datetime', this.searchOptions);
61
- this.filters.push(filterClauseFrom);
62
- }
63
- if (this.fieldValueDateTo) {
64
- const filterClauseTo = new FilterClause(QueryParameters.FILTER_TO, this.fieldValueDateTo, Operators.LESS_THAN_EQUAL.value, 'datetime', this.searchOptions);
65
- this.filters.push(filterClauseTo);
66
- }
67
- }
68
- // the filter isn't of type 'daterange' (everything else)
69
- else {
70
- if (this.fieldValue === undefined) { // handle empty field value
71
- return;
72
- }
73
- // create the filterClause
74
- const filterClause = new FilterClause(this.selectedField.field, this.fieldValue, Operators.EQUALS.value, this.selectedField.dataType, this.searchOptions); // operator is always 'equals'...
75
- if (!this.selectedField.multiTerm) { // multiTerm means that we can have multiple filter values of the SAME filter clause (eg "filter case types that are Phone OR Address")
76
- this.filters = this.filters.filter((f) => {
77
- return f.member !== this.selectedField.field;
78
- });
79
- }
80
- this.filters.push(filterClause);
81
- this.fieldValue = undefined;
82
- }
83
- this.advancedSearchChanged.emit(this.filters);
84
- }
85
- removeFilter(index) {
86
- if (this.filters && this.filters.length >= index) {
87
- this.filters.splice(index, 1);
88
- this.advancedSearchChanged.emit(this.filters);
89
- }
90
- }
91
- clear() {
92
- this.fieldValueDateFrom = undefined;
93
- this.fieldValueDateTo = undefined;
94
- this.selectedField = undefined;
95
- this.fieldValue = undefined;
96
- this.filters = [];
97
- this.advancedSearchChanged.emit(this.filters);
98
- }
99
- }
100
- AdvancedSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AdvancedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
101
- AdvancedSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AdvancedSearchComponent, selector: "lib-advanced-search", inputs: { searchOptions: ["search-options", "searchOptions"], filters: "filters" }, outputs: { advancedSearchChanged: "advancedSearchChanged" }, ngImport: i0, template: "<div class=\"advanced-search-container\">\r\n <div class=\"advanced-search-filter\">\r\n <!--SEARCH FIELDS-->\r\n <div class=\"advanced-search-filter-field-container\">\r\n <label class=\"advanced-search-filter-field-label\"\r\n for=\"selectedField\">\r\n \u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03B1\u03BD\u03AC:\r\n </label>\r\n <lib-drop-down-menu [options]=\"menuOptions\"\r\n (selectedChanged)=\"selectedFieldChanged($event)\"></lib-drop-down-menu>\r\n </div>\r\n <!--SEARCH FIELDS INPUT-->\r\n <div *ngIf=\"selectedField\"\r\n class=\"advanced-search-filter-value-container\">\r\n <div *ngIf=\"selectedField.dataType === 'array'\">\r\n <label class=\"advanced-search-filter-value-label\"\r\n for=\"fieldValue\">\r\n &nbsp;\r\n </label>\r\n <lib-drop-down-menu [options]=\"menuOptionsDictionary[selectedField.field]\"\r\n [selected]=\"fieldValue\"\r\n (selectedChanged)=\"selectedFieldValueChanged($event)\"></lib-drop-down-menu>\r\n </div>\r\n <div *ngIf=\"selectedField.dataType === 'string'\">\r\n <label class=\"advanced-search-filter-value-label\"\r\n for=\"fieldValue\">\r\n &nbsp;\r\n </label>\r\n <input (keyup.enter)=\"search()\"\r\n [(ngModel)]=\"fieldValue\"\r\n name=\"fieldValue\"\r\n type=\"text\"\r\n placeholder=\"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\"\r\n maxlength=\"300\"\r\n class=\"advanced-search-filter-value-input\">\r\n </div>\r\n <ng-container *ngIf=\"selectedField.dataType === 'daterange'\">\r\n <div>\r\n <span class=\"advanced-search-filter-value-input-daterange-from\">\r\n \u0391\u03C0\u03CC:\r\n </span>\r\n <lib-date-picker [maxDate]=\"fieldValueDateTo\"\r\n [(ngModel)]=\"fieldValueDateFrom\"\r\n [placeholder]=\"'01/01/2022'\"></lib-date-picker>\r\n </div>\r\n <div *ngIf=\"selectedField.dataType === 'daterange'\">\r\n <span class=\"advanced-search-filter-value-input-daterange-to\">\r\n \u0388\u03C9\u03C2:\r\n </span>\r\n <lib-date-picker [minDate]=\"fieldValueDateFrom\"\r\n [(ngModel)]=\"fieldValueDateTo\"\r\n [placeholder]=\"'01/01/2022'\"></lib-date-picker>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedField\">\r\n <!--DO SEARCH-->\r\n <button type=\"button\"\r\n [ngClass]=\"{'opacity-50 cursor-not-allowed': fieldValue === undefined && fieldValueDateFrom === undefined && fieldValueDateTo === undefined}\"\r\n [disabled]=\"fieldValue === undefined && fieldValueDateFrom === undefined && fieldValueDateTo === undefined\"\r\n (click)=\"search()\">\r\n <i [class]=\"'ms-Icon ms-Icon--Search'\"></i>\r\n </button>\r\n <!--CLEAR-->\r\n <button type=\"button\"\r\n (click)=\"clear()\">\r\n <i [class]=\"'ms-Icon ms-Icon--Cancel'\"></i>\r\n </button>\r\n </ng-container>\r\n </div>\r\n <!--FILTER CHIPS-->\r\n <!-- This example requires Tailwind CSS v2.0+ -->\r\n <ng-container *ngFor=\"let filter of filters; let i = index\">\r\n <span *ngIf=\"filter && filter.member\"\r\n class=\"advanced-search-chips\">\r\n {{ filter.uiName }} {{ filter.uiOperator }} '{{ filter.uiValue }}'\r\n <button (click)=\"removeFilter(i)\"\r\n type=\"button\"\r\n class=\"advanced-search-chips-remove-filter\">\r\n <span class=\"sr-only\">Remove large option</span>\r\n <svg class=\"h-2 w-2\"\r\n stroke=\"currentColor\"\r\n fill=\"none\"\r\n viewBox=\"0 0 8 8\">\r\n <path stroke-linecap=\"round\"\r\n stroke-width=\"1.5\"\r\n d=\"M1 1l6 6m0-6L1 7\" />\r\n </svg>\r\n </button>\r\n </span>\r\n </ng-container>\r\n</div>", components: [{ type: i1.DropDownMenuComponent, selector: "lib-drop-down-menu", inputs: ["options", "selected", "multiple", "placeholder"], outputs: ["selectedChange", "selectedChanged"] }, { type: i2.DatepickerComponent, selector: "lib-date-picker", inputs: ["readonly", "disabled", "inline", "display-format", "placeholder", "value", "minDate", "maxDate"], outputs: ["valueChange"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AdvancedSearchComponent, decorators: [{
103
- type: Component,
104
- args: [{
105
- selector: 'lib-advanced-search',
106
- templateUrl: './advanced-search.component.html'
107
- }]
108
- }], ctorParameters: function () { return []; }, propDecorators: { advancedSearchChanged: [{
109
- type: Output
110
- }], searchOptions: [{
111
- type: Input,
112
- args: ['search-options']
113
- }], filters: [{
114
- type: Input
115
- }] } });
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9hZHZhbmNlZC1zZWFyY2gvYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9hZHZhbmNlZC1zZWFyY2gvYWR2YW5jZWQtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFnQixZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7O0FBTWxGLE1BQU0sT0FBTyx1QkFBdUI7SUFXbEM7UUFWVSwwQkFBcUIsR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDMUUsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25ELFlBQU8sR0FBbUIsRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUsvQiwwQkFBcUIsR0FBb0MsRUFBRSxDQUFDO0lBRW5ELENBQUM7SUFFVixRQUFRO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTs7WUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSTtnQkFDdkIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO2dCQUN6QixJQUFJLEVBQUUsWUFBWSxDQUFDLFFBQVE7Z0JBQzNCLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsSUFBSSxFQUFFLFNBQVM7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxZQUFZLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRTtnQkFDckMsSUFBSSxRQUFRLEdBQWlCLEVBQUUsQ0FBQztnQkFDaEMsTUFBQSxZQUFZLENBQUMsT0FBTywwQ0FBRSxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO29CQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxLQUFLO3dCQUM3QixLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSzt3QkFDOUIsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsV0FBVyxFQUFFLGlCQUFpQixDQUFDLFdBQVc7d0JBQzFDLElBQUksRUFBRSxTQUFTO3FCQUNoQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDM0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVNLHlCQUF5QixDQUFDLFVBQWtCO1FBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtZQUN2RCxPQUFPO1NBQ1I7UUFDRCxvQ0FBb0M7UUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFDNUYsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUMzQixNQUFNLGdCQUFnQixHQUFHLElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUF3QixFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3ZMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDckM7WUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUF3QixFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlLLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ25DO1NBQ0Y7UUFDRCx5REFBeUQ7YUFDcEQ7WUFDSCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLEVBQUUsMkJBQTJCO2dCQUM5RCxPQUFPO2FBQ1I7WUFDRCwwQkFBMEI7WUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQXdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsaUNBQWlDO1lBRS9NLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxFQUFFLHVJQUF1STtnQkFDMUssSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUN2QyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGFBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxZQUFZLENBQUMsS0FBYTtRQUMvQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7O3FIQXRHVSx1QkFBdUI7eUdBQXZCLHVCQUF1Qiw0TUNScEMsMnVKQTJGTTs0RkRuRk8sdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSxrQ0FBa0M7aUJBQ2hEOzBFQUVXLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDa0IsYUFBYTtzQkFBckMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ2QsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51T3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBTZWFyY2hPcHRpb24sIEZpbHRlckNsYXVzZSwgUXVlcnlQYXJhbWV0ZXJzLCBPcGVyYXRvcnMgfSBmcm9tICcuL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hZHZhbmNlZC1zZWFyY2gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1zZWFyY2guY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQE91dHB1dCgpIGFkdmFuY2VkU2VhcmNoQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEZpbHRlckNsYXVzZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQ2xhdXNlW10+KCk7XHJcbiAgQElucHV0KCdzZWFyY2gtb3B0aW9ucycpIHNlYXJjaE9wdGlvbnM6IFNlYXJjaE9wdGlvbltdID0gW107XHJcbiAgQElucHV0KCkgZmlsdGVyczogRmlsdGVyQ2xhdXNlW10gPSBbXTtcclxuICBwdWJsaWMgbWVudU9wdGlvbnM6IE1lbnVPcHRpb25bXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEZpZWxkPzogU2VhcmNoT3B0aW9uO1xyXG4gIHB1YmxpYyBmaWVsZFZhbHVlPzogc3RyaW5nO1xyXG4gIHB1YmxpYyBmaWVsZFZhbHVlRGF0ZUZyb206IGFueTtcclxuICBwdWJsaWMgZmllbGRWYWx1ZURhdGVUbzogYW55O1xyXG4gIHB1YmxpYyBtZW51T3B0aW9uc0RpY3Rpb25hcnk6IHsgW2tleTogc3RyaW5nXTogTWVudU9wdGlvbltdIH0gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hPcHRpb25zLmZvckVhY2goKHNlYXJjaE9wdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLm1lbnVPcHRpb25zLnB1c2goe1xyXG4gICAgICAgIHRleHQ6IHNlYXJjaE9wdGlvbi5uYW1lLFxyXG4gICAgICAgIHZhbHVlOiBzZWFyY2hPcHRpb24uZmllbGQsXHJcbiAgICAgICAgZGF0YTogc2VhcmNoT3B0aW9uLmRhdGFUeXBlLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzZWFyY2hPcHRpb24ucGxhY2Vob2xkZXIsXHJcbiAgICAgICAgaWNvbjogdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoc2VhcmNoT3B0aW9uLmRhdGFUeXBlID09PSAnYXJyYXknKSB7XHJcbiAgICAgICAgbGV0IG1lbnVPcHRzOiBNZW51T3B0aW9uW10gPSBbXTtcclxuICAgICAgICBzZWFyY2hPcHRpb24ub3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0SW5wdXRPcHRpb24pID0+IHtcclxuICAgICAgICAgIG1lbnVPcHRzLnB1c2goe1xyXG4gICAgICAgICAgICB0ZXh0OiBzZWxlY3RJbnB1dE9wdGlvbi5sYWJlbCxcclxuICAgICAgICAgICAgdmFsdWU6IHNlbGVjdElucHV0T3B0aW9uLnZhbHVlLFxyXG4gICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RJbnB1dE9wdGlvbi5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgaWNvbjogdW5kZWZpbmVkXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMubWVudU9wdGlvbnNEaWN0aW9uYXJ5W3NlYXJjaE9wdGlvbi5maWVsZF0gPSBtZW51T3B0cztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRGaWVsZENoYW5nZWQoZmllbGQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkID0gdGhpcy5zZWFyY2hPcHRpb25zLmZpbmQoKHNlYXJjaE9wdGlvbikgPT4gc2VhcmNoT3B0aW9uLmZpZWxkID09PSBmaWVsZCk7XHJcbiAgICB0aGlzLmZpZWxkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRGaWVsZFZhbHVlQ2hhbmdlZChmaWVsZFZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoKCkge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRmllbGQgfHwgIXRoaXMuc2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyB0aGUgZmlsdGVyIGlzIG9mIHR5cGUgJ2RhdGVyYW5nZSdcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlcmFuZ2UnKSB7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpZWxkLm11bHRpVGVybSkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuZmlsdGVycy5maWx0ZXIoKGYpID0+IHtcclxuICAgICAgICAgIHJldHVybiBmLm1lbWJlciAhPT0gUXVlcnlQYXJhbWV0ZXJzLkZJTFRFUl9GUk9NICYmIGYubWVtYmVyICE9PSBRdWVyeVBhcmFtZXRlcnMuRklMVEVSX1RPO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkVmFsdWVEYXRlRnJvbSkge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlckNsYXVzZUZyb20gPSBuZXcgRmlsdGVyQ2xhdXNlKFF1ZXJ5UGFyYW1ldGVycy5GSUxURVJfRlJPTSwgdGhpcy5maWVsZFZhbHVlRGF0ZUZyb20sIE9wZXJhdG9ycy5HUkVBVEVSX1RIQU5fRVFVQUwudmFsdWUgYXMgRmlsdGVyQ2xhdXNlLk9wLCAnZGF0ZXRpbWUnLCB0aGlzLnNlYXJjaE9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlckNsYXVzZUZyb20pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZFZhbHVlRGF0ZVRvKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyQ2xhdXNlVG8gPSBuZXcgRmlsdGVyQ2xhdXNlKFF1ZXJ5UGFyYW1ldGVycy5GSUxURVJfVE8sIHRoaXMuZmllbGRWYWx1ZURhdGVUbywgT3BlcmF0b3JzLkxFU1NfVEhBTl9FUVVBTC52YWx1ZSBhcyBGaWx0ZXJDbGF1c2UuT3AsICdkYXRldGltZScsIHRoaXMuc2VhcmNoT3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyQ2xhdXNlVG8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB0aGUgZmlsdGVyIGlzbid0IG9mIHR5cGUgJ2RhdGVyYW5nZScgKGV2ZXJ5dGhpbmcgZWxzZSlcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5maWVsZFZhbHVlID09PSB1bmRlZmluZWQpIHsgLy8gaGFuZGxlIGVtcHR5IGZpZWxkIHZhbHVlXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGNyZWF0ZSB0aGUgZmlsdGVyQ2xhdXNlXHJcbiAgICAgIGNvbnN0IGZpbHRlckNsYXVzZSA9IG5ldyBGaWx0ZXJDbGF1c2UodGhpcy5zZWxlY3RlZEZpZWxkLmZpZWxkLCB0aGlzLmZpZWxkVmFsdWUsIE9wZXJhdG9ycy5FUVVBTFMudmFsdWUgYXMgRmlsdGVyQ2xhdXNlLk9wLCB0aGlzLnNlbGVjdGVkRmllbGQuZGF0YVR5cGUsIHRoaXMuc2VhcmNoT3B0aW9ucyk7IC8vIG9wZXJhdG9yIGlzIGFsd2F5cyAnZXF1YWxzJy4uLlxyXG5cclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmllbGQubXVsdGlUZXJtKSB7IC8vIG11bHRpVGVybSBtZWFucyB0aGF0IHdlIGNhbiBoYXZlIG11bHRpcGxlIGZpbHRlciB2YWx1ZXMgb2YgdGhlIFNBTUUgZmlsdGVyIGNsYXVzZSAoZWcgXCJmaWx0ZXIgY2FzZSB0eXBlcyB0aGF0IGFyZSBQaG9uZSBPUiBBZGRyZXNzXCIpXHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gdGhpcy5maWx0ZXJzLmZpbHRlcigoZikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGYubWVtYmVyICE9PSB0aGlzLnNlbGVjdGVkRmllbGQhLmZpZWxkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXJDbGF1c2UpO1xyXG4gICAgICB0aGlzLmZpZWxkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoQ2hhbmdlZC5lbWl0KHRoaXMuZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlcnMgJiYgdGhpcy5maWx0ZXJzLmxlbmd0aCA+PSBpbmRleCkge1xyXG4gICAgICB0aGlzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaENoYW5nZWQuZW1pdCh0aGlzLmZpbHRlcnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgdGhpcy5maWVsZFZhbHVlRGF0ZUZyb20gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZpZWxkVmFsdWVEYXRlVG8gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmllbGQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZpZWxkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmZpbHRlcnMgPSBbXTtcclxuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hDaGFuZ2VkLmVtaXQodGhpcy5maWx0ZXJzKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoLWZpbHRlclwiPlxyXG4gICAgICAgIDwhLS1TRUFSQ0ggRklFTERTLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItZmllbGQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItZmllbGQtbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgZm9yPVwic2VsZWN0ZWRGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgzpHOvc6xzrbOrs+EzrfPg863IM6xzr3OrDpcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxpYi1kcm9wLWRvd24tbWVudSBbb3B0aW9uc109XCJtZW51T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlZCk9XCJzZWxlY3RlZEZpZWxkQ2hhbmdlZCgkZXZlbnQpXCI+PC9saWItZHJvcC1kb3duLW1lbnU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVNFQVJDSCBGSUVMRFMgSU5QVVQtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRGaWVsZFwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItdmFsdWUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEZpZWxkLmRhdGFUeXBlID09PSAnYXJyYXknXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtZmlsdGVyLXZhbHVlLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJmaWVsZFZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1kcm9wLWRvd24tbWVudSBbb3B0aW9uc109XCJtZW51T3B0aW9uc0RpY3Rpb25hcnlbc2VsZWN0ZWRGaWVsZC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiZmllbGRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZWQpPVwic2VsZWN0ZWRGaWVsZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCI+PC9saWItZHJvcC1kb3duLW1lbnU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSA9PT0gJ3N0cmluZydcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1maWx0ZXItdmFsdWUtbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImZpZWxkVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpZWxkVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWVsZFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLOkc69zrHOts6uz4TOt8+DzrdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjMwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtZmlsdGVyLXZhbHVlLWlucHV0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGVyYW5nZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtZmlsdGVyLXZhbHVlLWlucHV0LWRhdGVyYW5nZS1mcm9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIM6Rz4DPjDpcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1kYXRlLXBpY2tlciBbbWF4RGF0ZV09XCJmaWVsZFZhbHVlRGF0ZVRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGRWYWx1ZURhdGVGcm9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInMDEvMDEvMjAyMidcIj48L2xpYi1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlcmFuZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtZmlsdGVyLXZhbHVlLWlucHV0LWRhdGVyYW5nZS10b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDOiM+Jz4I6XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItZGF0ZS1waWNrZXIgW21pbkRhdGVdPVwiZmllbGRWYWx1ZURhdGVGcm9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmllbGRWYWx1ZURhdGVUb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJzAxLzAxLzIwMjInXCI+PC9saWItZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRmllbGRcIj5cclxuICAgICAgICAgICAgPCEtLURPIFNFQVJDSC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnOiBmaWVsZFZhbHVlID09PSB1bmRlZmluZWQgJiYgZmllbGRWYWx1ZURhdGVGcm9tID09PSB1bmRlZmluZWQgJiYgZmllbGRWYWx1ZURhdGVUbyA9PT0gdW5kZWZpbmVkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBmaWVsZFZhbHVlRGF0ZUZyb20gPT09IHVuZGVmaW5lZCAmJiBmaWVsZFZhbHVlRGF0ZVRvID09PSB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIidtcy1JY29uIG1zLUljb24tLVNlYXJjaCdcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tQ0xFQVItLT5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIidtcy1JY29uIG1zLUljb24tLUNhbmNlbCdcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tRklMVEVSIENISVBTLS0+XHJcbiAgICA8IS0tIFRoaXMgZXhhbXBsZSByZXF1aXJlcyBUYWlsd2luZCBDU1MgdjIuMCsgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyICYmIGZpbHRlci5tZW1iZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoLWNoaXBzXCI+XHJcbiAgICAgICAgICAgIHt7IGZpbHRlci51aU5hbWUgfX0ge3sgZmlsdGVyLnVpT3BlcmF0b3IgfX0gJ3t7IGZpbHRlci51aVZhbHVlIH19J1xyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoLWNoaXBzLXJlbW92ZS1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlJlbW92ZSBsYXJnZSBvcHRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC0yIHctMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA4IDhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMSAxbDYgNm0wLTZMMSA3XCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
@@ -1,91 +0,0 @@
1
- import { formatDate } from "@angular/common";
2
- export var Operators;
3
- (function (Operators) {
4
- Operators.EQUALS = { label: '=', value: 'eq', description: 'Ίσο με' };
5
- Operators.NOT_EQUALS = { label: '≠', value: 'neq', description: 'Διάφορο του' };
6
- Operators.GREATER_THAN = { label: '>', value: 'gt', description: 'Μεγαλύτερο από' };
7
- Operators.LESS_THAN = { label: '<', value: 'lt', description: 'Μικρότερο από' };
8
- Operators.GREATER_THAN_EQUAL = { label: '≥', value: 'gte', description: 'Μεγαλύτερο ή ίσο με' };
9
- Operators.LESS_THAN_EQUAL = { label: '≤', value: 'lte', description: 'Μικρότερο ή ίσο με' };
10
- Operators.CONTAINS = { label: '∋', value: 'contains', description: 'Περιέχει' };
11
- Operators.IN = { label: '1..n', value: 'in', description: 'Μέσα σε' };
12
- })(Operators || (Operators = {}));
13
- export var QueryParameters;
14
- (function (QueryParameters) {
15
- QueryParameters["VIEW"] = "view";
16
- QueryParameters["PAGE_SIZE"] = "pagesize";
17
- QueryParameters["PAGE"] = "page";
18
- QueryParameters["SEARCH"] = "search";
19
- QueryParameters["SORT_FIELD"] = "sort";
20
- QueryParameters["SORT_DIRECTION"] = "dir";
21
- QueryParameters["FILTER"] = "filter";
22
- QueryParameters["FILTER_FROM"] = "from";
23
- QueryParameters["FILTER_TO"] = "to";
24
- })(QueryParameters || (QueryParameters = {}));
25
- export class FilterClause {
26
- constructor(member, value, operator, dataType, searchOptions) {
27
- var _a;
28
- this.member = member;
29
- this.value = value;
30
- this.operator = operator || Operators.EQUALS.value;
31
- this.dataType = dataType === undefined ? 'string' : dataType;
32
- // uiName
33
- if (this.dataType === 'datetime') { // special treatment for dates
34
- this.uiName = this.member === QueryParameters.FILTER_FROM ? 'Από' : 'Έως';
35
- }
36
- else {
37
- this.uiName = this.member;
38
- let fo = {};
39
- if (searchOptions && searchOptions.length > 0) {
40
- fo = searchOptions.find((f) => {
41
- return f.field === this.member;
42
- });
43
- }
44
- if (fo) {
45
- this.uiName = fo.name;
46
- }
47
- }
48
- // uiOperator
49
- this.uiOperator = this.dataType === 'datetime' ? '' : Operators.EQUALS.label; // that's fine (for now)...
50
- // uiValue
51
- this.uiValue = this.value;
52
- if ((this.dataType === 'datetime')) {
53
- this.uiValue = formatDate(new Date(this.value), 'dd/MM/yyyy', 'en-US');
54
- }
55
- let fo;
56
- if (searchOptions && searchOptions.length > 0) {
57
- fo = searchOptions.find((f) => {
58
- return f.field === this.member;
59
- });
60
- }
61
- if (fo && fo.options) { // special treatment for arrays, if there is an options property then it is an array
62
- this.dataType = 'array';
63
- this.uiValue = (_a = fo.options.find((option) => {
64
- return option.value === this.value;
65
- })) === null || _a === void 0 ? void 0 : _a.label;
66
- }
67
- }
68
- static parse(text) {
69
- const pattern = /^\s*([A-Za-z_][A-Za-z0-9_\.]+)::(eq|neq|gt|lt|gte|lte|contains|in)::(\((string|integer|number|boolean|datetime)\))?(.+)\s*$/gi;
70
- if (text != null) {
71
- const matches = pattern.exec(text);
72
- if (matches != null) {
73
- const path = matches[1];
74
- const op = matches[2];
75
- const dt = matches[4];
76
- const v = matches[5];
77
- return new FilterClause(path, v, op, dt);
78
- }
79
- }
80
- return undefined;
81
- }
82
- toString() {
83
- if (this.dataType !== 'string' && this.dataType !== 'array') {
84
- return `${this.member}::${this.operator}::(${this.dataType})${this.value}`;
85
- }
86
- else {
87
- return `${this.member}::${this.operator}::${this.value}`;
88
- }
89
- }
90
- }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2FkdmFuY2VkLXNlYXJjaC9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE1BQU0sS0FBVyxTQUFTLENBU3pCO0FBVEQsV0FBaUIsU0FBUztJQUNYLGdCQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzVELG9CQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3RFLHNCQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUM7SUFDMUUsbUJBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDdEUsNEJBQWtCLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLENBQUM7SUFDdEYseUJBQWUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNsRixrQkFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN0RSxZQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUs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QyxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzFEO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgT3BlcmF0b3JzIHtcclxuICBleHBvcnQgY29uc3QgRVFVQUxTID0geyBsYWJlbDogJz0nLCB2YWx1ZTogJ2VxJywgZGVzY3JpcHRpb246ICfOis+Dzr8gzrzOtScgfTtcclxuICBleHBvcnQgY29uc3QgTk9UX0VRVUFMUyA9IHsgbGFiZWw6ICfiiaAnLCB2YWx1ZTogJ25lcScsIGRlc2NyaXB0aW9uOiAnzpTOuc6sz4bOv8+Bzr8gz4TOv8+FJyB9O1xyXG4gIGV4cG9ydCBjb25zdCBHUkVBVEVSX1RIQU4gPSB7IGxhYmVsOiAnPicsIHZhbHVlOiAnZ3QnLCBkZXNjcmlwdGlvbjogJ86czrXOs86xzrvPjc+EzrXPgc6/IM6xz4DPjCcgfTtcclxuICBleHBvcnQgY29uc3QgTEVTU19USEFOID0geyBsYWJlbDogJzwnLCB2YWx1ZTogJ2x0JywgZGVzY3JpcHRpb246ICfOnM65zrrPgc+Mz4TOtc+Bzr8gzrHPgM+MJyB9O1xyXG4gIGV4cG9ydCBjb25zdCBHUkVBVEVSX1RIQU5fRVFVQUwgPSB7IGxhYmVsOiAn4omlJywgdmFsdWU6ICdndGUnLCBkZXNjcmlwdGlvbjogJ86czrXOs86xzrvPjc+EzrXPgc6/IM6uIM6vz4POvyDOvM61JyB9O1xyXG4gIGV4cG9ydCBjb25zdCBMRVNTX1RIQU5fRVFVQUwgPSB7IGxhYmVsOiAn4omkJywgdmFsdWU6ICdsdGUnLCBkZXNjcmlwdGlvbjogJ86czrnOus+Bz4zPhM61z4HOvyDOriDOr8+Dzr8gzrzOtScgfTtcclxuICBleHBvcnQgY29uc3QgQ09OVEFJTlMgPSB7IGxhYmVsOiAn4oiLJywgdmFsdWU6ICdjb250YWlucycsIGRlc2NyaXB0aW9uOiAnzqDOtc+BzrnOrc+HzrXOuScgfTtcclxuICBleHBvcnQgY29uc3QgSU4gPSB7IGxhYmVsOiAnMS4ubicsIHZhbHVlOiAnaW4nLCBkZXNjcmlwdGlvbjogJ86czq3Pg86xIM+DzrUnIH07XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFF1ZXJ5UGFyYW1ldGVycyB7XHJcbiAgVklFVyA9ICd2aWV3JyxcclxuICBQQUdFX1NJWkUgPSAncGFnZXNpemUnLFxyXG4gIFBBR0UgPSAncGFnZScsXHJcbiAgU0VBUkNIID0gJ3NlYXJjaCcsXHJcbiAgU09SVF9GSUVMRCA9ICdzb3J0JyxcclxuICBTT1JUX0RJUkVDVElPTiA9ICdkaXInLFxyXG4gIEZJTFRFUiA9ICdmaWx0ZXInLFxyXG4gIEZJTFRFUl9GUk9NID0gJ2Zyb20nLFxyXG4gIEZJTFRFUl9UTyA9ICd0bydcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hPcHRpb24ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIGRhdGFUeXBlOiBGaWx0ZXJDbGF1c2UuRHQ7XHJcbiAgYXJyYXk/OiBib29sZWFuO1xyXG4gIG11bHRpVGVybT86IGJvb2xlYW47XHJcbiAgb3B0aW9ucz86IFNlbGVjdElucHV0T3B0aW9uW107XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0SW5wdXRPcHRpb24ge1xyXG4gIHZhbHVlOiBhbnk7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBGaWx0ZXJDbGF1c2Uge1xyXG4gIGV4cG9ydCB0eXBlIE9wID0gJ2VxJyB8ICduZXEnIHwgJ2d0JyB8ICdsdCcgfCAnZ3RlJyB8ICdsdGUnIHwgJ2NvbnRhaW5zJyB8ICdpbic7XHJcbiAgZXhwb3J0IHR5cGUgRHQgPSAnc3RyaW5nJyB8ICdpbnRlZ2VyJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2RhdGV0aW1lJyB8ICdhcnJheScgfCAnZGF0ZXJhbmdlJyB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZpbHRlckNsYXVzZSB7XHJcbiAgLy8gTWVtYmVyIHBhdGggdG8gY29tcGFyZVxyXG4gIHB1YmxpYyBtZW1iZXI6IHN0cmluZztcclxuICAvLyBWYWx1ZSB0byBjb21wYXJlIGFnYWluc3RcclxuICBwdWJsaWMgdmFsdWU6IGFueTtcclxuICAvLyBUaGUgb3BlcmF0b3IgdG8gYXBwbHkgYmV0d2VlbiB0aGUgSW5kaWNlLlR5cGVzLkZpbHRlckNsYXVzZS5NZW1iZXIgYW5kIEluZGljZS5UeXBlcy5GaWx0ZXJDbGF1c2UuVmFsdWVcclxuICBwdWJsaWMgb3BlcmF0b3I6IEZpbHRlckNsYXVzZS5PcDtcclxuICAvLyBUaGUgSW5kaWNlLlR5cGVzLkpzb25EYXRhVHlwZSBvZiB0aGUgZGF0YSBJbmRpY2UuVHlwZXMuRmlsdGVyQ2xhdXNlLk1lbWJlclxyXG4gIHB1YmxpYyBkYXRhVHlwZTogRmlsdGVyQ2xhdXNlLkR0O1xyXG5cclxuICBwdWJsaWMgdWlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHVpT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgdWlWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IobWVtYmVyOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wZXJhdG9yPzogRmlsdGVyQ2xhdXNlLk9wLCBkYXRhVHlwZT86IEZpbHRlckNsYXVzZS5EdCwgc2VhcmNoT3B0aW9ucz86IFNlYXJjaE9wdGlvbltdKSB7IC8vIHllYXAsIHdlIGRvIG5lZWQgc2VhcmNoT3B0aW9ucyBmb3IgdGhlIHVpIHZpZXcgbW9kZWxcclxuICAgIHRoaXMubWVtYmVyID0gbWVtYmVyO1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yIHx8IE9wZXJhdG9ycy5FUVVBTFMudmFsdWUgYXMgRmlsdGVyQ2xhdXNlLk9wO1xyXG4gICAgdGhpcy5kYXRhVHlwZSA9IGRhdGFUeXBlID09PSB1bmRlZmluZWQgPyAnc3RyaW5nJyA6IGRhdGFUeXBlO1xyXG4gICAgLy8gdWlOYW1lXHJcbiAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJykgeyAvLyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgZGF0ZXNcclxuICAgICAgdGhpcy51aU5hbWUgPSB0aGlzLm1lbWJlciA9PT0gUXVlcnlQYXJhbWV0ZXJzLkZJTFRFUl9GUk9NID8gJ86Rz4DPjCcgOiAnzojPic+CJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudWlOYW1lID0gdGhpcy5tZW1iZXI7XHJcbiAgICAgIGxldCBmbyA9IDxhbnk+e307XHJcbiAgICAgIGlmIChzZWFyY2hPcHRpb25zICYmIHNlYXJjaE9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvID0gc2VhcmNoT3B0aW9ucy5maW5kKChmKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZi5maWVsZCA9PT0gdGhpcy5tZW1iZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmbykge1xyXG4gICAgICAgIHRoaXMudWlOYW1lID0gZm8ubmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdWlPcGVyYXRvclxyXG4gICAgdGhpcy51aU9wZXJhdG9yID0gdGhpcy5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJyA/ICcnIDogT3BlcmF0b3JzLkVRVUFMUy5sYWJlbDsgLy8gdGhhdCdzIGZpbmUgKGZvciBub3cpLi4uXHJcbiAgICAvLyB1aVZhbHVlXHJcbiAgICB0aGlzLnVpVmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKCh0aGlzLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnKSkge1xyXG4gICAgICB0aGlzLnVpVmFsdWUgPSBmb3JtYXREYXRlKG5ldyBEYXRlKHRoaXMudmFsdWUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvOiBTZWFyY2hPcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAoc2VhcmNoT3B0aW9ucyAmJiBzZWFyY2hPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm8gPSBzZWFyY2hPcHRpb25zLmZpbmQoKGYpID0+IHtcclxuICAgICAgICByZXR1cm4gZi5maWVsZCA9PT0gdGhpcy5tZW1iZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGZvICYmIGZvLm9wdGlvbnMpIHsgLy8gc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGFycmF5cywgaWYgdGhlcmUgaXMgYW4gb3B0aW9ucyBwcm9wZXJ0eSB0aGVuIGl0IGlzIGFuIGFycmF5XHJcbiAgICAgIHRoaXMuZGF0YVR5cGUgPSAnYXJyYXknO1xyXG4gICAgICB0aGlzLnVpVmFsdWUgPSBmbyEub3B0aW9ucyEuZmluZCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcclxuICAgICAgfSk/LmxhYmVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBwYXJzZSh0ZXh0OiBzdHJpbmcpOiBGaWx0ZXJDbGF1c2UgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC9eXFxzKihbQS1aYS16X11bQS1aYS16MC05X1xcLl0rKTo6KGVxfG5lcXxndHxsdHxndGV8bHRlfGNvbnRhaW5zfGluKTo6KFxcKChzdHJpbmd8aW50ZWdlcnxudW1iZXJ8Ym9vbGVhbnxkYXRldGltZSlcXCkpPyguKylcXHMqJC9naTtcclxuICAgIGlmICh0ZXh0ICE9IG51bGwpIHtcclxuICAgICAgY29uc3QgbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcclxuICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBtYXRjaGVzWzFdO1xyXG4gICAgICAgIGNvbnN0IG9wID0gPEZpbHRlckNsYXVzZS5PcD5tYXRjaGVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGR0ID0gPEZpbHRlckNsYXVzZS5EdD5tYXRjaGVzWzRdO1xyXG4gICAgICAgIGNvbnN0IHYgPSBtYXRjaGVzWzVdO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlckNsYXVzZShwYXRoLCB2LCBvcCwgZHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5kYXRhVHlwZSAhPT0gJ3N0cmluZycgJiYgdGhpcy5kYXRhVHlwZSAhPT0gJ2FycmF5Jykge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy5tZW1iZXJ9Ojoke3RoaXMub3BlcmF0b3J9OjooJHt0aGlzLmRhdGFUeXBlfSkke3RoaXMudmFsdWV9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLm1lbWJlcn06OiR7dGhpcy5vcGVyYXRvcn06OiR7dGhpcy52YWx1ZX1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -1,23 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- export class CollapsiblePanelComponent {
5
- constructor() {
6
- this.title = null;
7
- this.visible = false;
8
- }
9
- ngOnInit() {
10
- }
11
- }
12
- CollapsiblePanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CollapsiblePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
- CollapsiblePanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CollapsiblePanelComponent, selector: "lib-collapsible-panel", inputs: { title: "title" }, ngImport: i0, template: "<div class=\"collapsible-panel-container\">\r\n <div class=\"collapsible-panel-container-shadow\">\r\n <div class=\"collapsible-panel-container-inner\">\r\n <button type=\"button\" class=\"collapsible-panel-button\" (click)=\"visible = !visible\">\r\n <div class=\"collapsible-panel-button-content-container\">\r\n <span>{{ title }} </span>\r\n <span class=\"ico-plus\"></span>\r\n </div>\r\n </button>\r\n <div class=\"collapsible-panel-content-container\" *ngIf=\"visible\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CollapsiblePanelComponent, decorators: [{
15
- type: Component,
16
- args: [{
17
- selector: 'lib-collapsible-panel',
18
- templateUrl: './collapsible-panel.component.html'
19
- }]
20
- }], ctorParameters: function () { return []; }, propDecorators: { title: [{
21
- type: Input
22
- }] } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2libGUtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NvbGxhcHNpYmxlLXBhbmVsL2NvbGxhcHNpYmxlLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jb2xsYXBzaWJsZS1wYW5lbC9jb2xsYXBzaWJsZS1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBTXpELE1BQU0sT0FBTyx5QkFBeUI7SUFJcEM7UUFIUyxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM5QixZQUFPLEdBQUcsS0FBSyxDQUFDO0lBRVAsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzs7dUhBUFUseUJBQXlCOzJHQUF6Qix5QkFBeUIseUZDTnRDLDhtQkFlQTs0RkRUYSx5QkFBeUI7a0JBSnJDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsV0FBVyxFQUFFLG9DQUFvQztpQkFDbEQ7MEVBRVUsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jb2xsYXBzaWJsZS1wYW5lbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbGxhcHNpYmxlLXBhbmVsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGFwc2libGVQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyB2aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbGxhcHNpYmxlLXBhbmVsLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2xsYXBzaWJsZS1wYW5lbC1jb250YWluZXItc2hhZG93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtY29udGFpbmVyLWlubmVyXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtYnV0dG9uXCIgKGNsaWNrKT1cInZpc2libGUgPSAhdmlzaWJsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzaWJsZS1wYW5lbC1idXR0b24tY29udGVudC1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxzcGFuPnt7IHRpdGxlIH19IDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvLXBsdXNcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2libGUtcGFuZWwtY29udGVudC1jb250YWluZXJcIiAqbmdJZj1cInZpc2libGVcIj5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,100 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/forms";
6
- import * as i2 from "../../directives/click-outside.directive";
7
- import * as i3 from "@angular/common";
8
- export class ComboboxComponent {
9
- constructor() {
10
- this._debouncer = new Subject();
11
- this._items = [];
12
- this._defaultItemsFilter = (item) => {
13
- const selectedItem = this.selectedItems.find(x => x == item);
14
- return selectedItem == null || selectedItem == undefined;
15
- };
16
- this.id = 'combobox';
17
- this.itemTemplate = null;
18
- this.selectedItemsFilter = () => true;
19
- this.selectedItemTemplate = null;
20
- this.busy = false;
21
- this.debounceMs = 1000;
22
- this.onSearch = new EventEmitter();
23
- this.onItemSelected = new EventEmitter();
24
- this.showOptions = false;
25
- this.selectedItems = [];
26
- }
27
- set items(items) {
28
- if (!this.itemTemplate) {
29
- this._items = items.filter(this._defaultItemsFilter);
30
- }
31
- else {
32
- this._items = items.filter(this.selectedItemsFilter);
33
- }
34
- }
35
- get items() {
36
- if (!this.itemTemplate) {
37
- return this._items.filter(this._defaultItemsFilter);
38
- }
39
- else {
40
- return this._items.filter(this.selectedItemsFilter);
41
- }
42
- }
43
- ngOnInit() {
44
- this.emitSearchEvent();
45
- this._debouncer
46
- .pipe(debounceTime(this.debounceMs), distinctUntilChanged())
47
- .subscribe((value) => this.emitSearchEvent(value));
48
- }
49
- onInputClick() {
50
- this.showOptions = true;
51
- }
52
- onInputClickOutside() {
53
- this.showOptions = false;
54
- }
55
- onInputKeyUp(event) {
56
- this._debouncer.next(event.currentTarget.value);
57
- }
58
- onListItemSelected(item) {
59
- this.onItemSelected.emit(item);
60
- this.selectedItems.push(item);
61
- }
62
- removeSelectedItem(item) {
63
- const index = this.selectedItems.indexOf(item);
64
- if (index > -1) {
65
- this.selectedItems.splice(index, 1);
66
- }
67
- }
68
- emitSearchEvent(searchTerm = undefined) {
69
- this.onSearch.emit(searchTerm);
70
- }
71
- }
72
- ComboboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
73
- ComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ComboboxComponent, selector: "lib-combobox", inputs: { id: "id", items: "items", itemTemplate: "itemTemplate", selectedItemsFilter: "selectedItemsFilter", selectedItemTemplate: "selectedItemTemplate", busy: "busy", debounceMs: "debounceMs" }, outputs: { onSearch: "onSearch", onItemSelected: "onItemSelected" }, ngImport: i0, template: "<div class=\"relative mt-1\">\r\n <form autocomplete=\"off\" [id]=\"id + '-form'\">\r\n <input [id]=\"id + '-input'\" type=\"text\" (click)=\"onInputClick()\" (clickOutside)=\"onInputClickOutside()\" (keyup)=\"onInputKeyUp($event)\"\r\n class=\"w-full rounded-md border border-gray-300 bg-white py-2 pl-3 pr-12 shadow-sm focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500 sm:text-sm\" role=\"combobox\" aria-controls=\"options\"\r\n aria-expanded=\"false\" autocomplete=\"off\" list=\"autocomplete\">\r\n </form>\r\n <div class=\"absolute inset-y-0 right-0 flex items-center rounded-r-md px-2 focus:outline-none\">\r\n <svg *ngIf=\"!busy\" xmlns=\"http://www.w3.org/2000/svg\" class=\"h-6 w-6 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\r\n </svg>\r\n <svg *ngIf=\"busy\" class=\"animate-spin h-6 w-6 text-gray-400\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\r\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\r\n </svg>\r\n </div>\r\n <ul [id]=\"id + '-options'\" *ngIf=\"showOptions\" class=\"absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm\" role=\"listbox\">\r\n <li *ngFor=\"let item of items; let i = index;\" [id]=\"'option-'+ i\" (click)=\"onListItemSelected(item)\" role=\"option\" tabindex=\"-1\">\r\n <ng-container [ngTemplateOutlet]=\"itemTemplate || defaultItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n </li>\r\n </ul>\r\n</div>\r\n<ul *ngIf=\"selectedItems.length > 0\" role=\"list\" class=\"grid grid-cols-1\">\r\n <li *ngFor=\"let item of selectedItems; let i = index;\" class=\"mt-3\">\r\n <ng-container [ngTemplateOutlet]=\"selectedItemTemplate || defaultSelectedItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n </li>\r\n</ul>\r\n<ng-template #defaultItemTemplate let-item>\r\n <span class=\"hover:bg-gray-100 relative cursor-pointer select-none py-2 pl-3 pr-3 block truncate\">{{ item }}</span>\r\n</ng-template>\r\n<ng-template #defaultSelectedItemTemplate let-item>\r\n <div class=\"grid grid-cols-1\">\r\n <div class=\"relative rounded-lg border border-gray-300 bg-white px-6 py-5 shadow-sm flex items-center space-x-3 hover:border-gray-400\">\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"focus:outline-none\">\r\n <span class=\"absolute\" aria-hidden=\"true\"></span>\r\n <p class=\"text-sm font-medium text-gray-900\">{{ item }}</p>\r\n </div>\r\n </div>\r\n <div class=\"ml-4 flex-shrink-0 flex\">\r\n <button type=\"button\" (click)=\"removeSelectedItem(item)\" class=\"cursor-pointer bg-white rounded-md inline-flex text-gray-400 hover:text-gray-500\">\r\n <span class=\"sr-only\">Close</span>\r\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\r\n clip-rule=\"evenodd\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ComboboxComponent, decorators: [{
75
- type: Component,
76
- args: [{
77
- selector: 'lib-combobox',
78
- templateUrl: './combobox.component.html'
79
- }]
80
- }], ctorParameters: function () { return []; }, propDecorators: { id: [{
81
- type: Input
82
- }], items: [{
83
- type: Input,
84
- args: ['items']
85
- }], itemTemplate: [{
86
- type: Input
87
- }], selectedItemsFilter: [{
88
- type: Input
89
- }], selectedItemTemplate: [{
90
- type: Input
91
- }], busy: [{
92
- type: Input
93
- }], debounceMs: [{
94
- type: Input
95
- }], onSearch: [{
96
- type: Output
97
- }], onItemSelected: [{
98
- type: Output
99
- }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBRTVGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU9wRSxNQUFNLE9BQU8saUJBQWlCO0lBUzFCO1FBUlEsZUFBVSxHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3BELFdBQU0sR0FBVSxFQUFFLENBQUM7UUFFbkIsd0JBQW1CLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3RCxPQUFPLFlBQVksSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLFNBQVMsQ0FBQztRQUM3RCxDQUFDLENBQUM7UUFJYyxPQUFFLEdBQVcsVUFBVSxDQUFDO1FBa0J4QixpQkFBWSxHQUFvQyxJQUFJLENBQUM7UUFDckQsd0JBQW1CLEdBQWtDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNoRSx5QkFBb0IsR0FBb0MsSUFBSSxDQUFDO1FBQzdELFNBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIs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QkFDVSxjQUFjO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWNvbWJvYm94JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbWJvYm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHByaXZhdGUgX2RlYm91bmNlcjogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgcHJpdmF0ZSBfaXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEl0ZW1zRmlsdGVyID0gKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maW5kKHggPT4geCA9PSBpdGVtKTtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtID09IG51bGwgfHwgc2VsZWN0ZWRJdGVtID09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaWQ6IHN0cmluZyA9ICdjb21ib2JveCc7XHJcblxyXG4gICAgQElucHV0KCdpdGVtcycpIHB1YmxpYyBzZXQgaXRlbXMoaXRlbXM6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtcyA9IGl0ZW1zLmZpbHRlcih0aGlzLl9kZWZhdWx0SXRlbXNGaWx0ZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gaXRlbXMuZmlsdGVyKHRoaXMuc2VsZWN0ZWRJdGVtc0ZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXRlbXMoKTogYW55W10ge1xyXG4gICAgICAgIGlmICghdGhpcy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmZpbHRlcih0aGlzLl9kZWZhdWx0SXRlbXNGaWx0ZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pdGVtcy5maWx0ZXIodGhpcy5zZWxlY3RlZEl0ZW1zRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWRJdGVtc0ZpbHRlcjogKGl0ZW06IGFueSkgPT4gYm9vbGVhbiB8IG51bGwgPSAoKSA9PiB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkSXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4gfCBudWxsID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBidXN5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZGVib3VuY2VNczogbnVtYmVyID0gMTAwMDtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25TZWFyY2g6IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBwdWJsaWMgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVtaXRTZWFyY2hFdmVudCgpO1xyXG4gICAgICAgIHRoaXMuX2RlYm91bmNlclxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlTXMpLFxyXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMuZW1pdFNlYXJjaEV2ZW50KHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uSW5wdXRDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25JbnB1dENsaWNrT3V0c2lkZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uSW5wdXRLZXlVcChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGVib3VuY2VyLm5leHQoZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uTGlzdEl0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQoaXRlbSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVNlbGVjdGVkSXRlbShpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVtaXRTZWFyY2hFdmVudChzZWFyY2hUZXJtOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQoc2VhcmNoVGVybSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJlbGF0aXZlIG10LTFcIj5cclxuICAgIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtpZF09XCJpZCArICctZm9ybSdcIj5cclxuICAgICAgICA8aW5wdXQgW2lkXT1cImlkICsgJy1pbnB1dCdcIiB0eXBlPVwidGV4dFwiIChjbGljayk9XCJvbklucHV0Q2xpY2soKVwiIChjbGlja091dHNpZGUpPVwib25JbnB1dENsaWNrT3V0c2lkZSgpXCIgKGtleXVwKT1cIm9uSW5wdXRLZXlVcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGJnLXdoaXRlIHB5LTIgcGwtMyBwci0xMiBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWluZGlnby01MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWluZGlnby01MDAgc206dGV4dC1zbVwiIHJvbGU9XCJjb21ib2JveFwiIGFyaWEtY29udHJvbHM9XCJvcHRpb25zXCJcclxuICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbGlzdD1cImF1dG9jb21wbGV0ZVwiPlxyXG4gICAgPC9mb3JtPlxyXG4gICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGluc2V0LXktMCByaWdodC0wIGZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtci1tZCBweC0yIGZvY3VzOm91dGxpbmUtbm9uZVwiPlxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCIhYnVzeVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImgtNiB3LTYgdGV4dC1ncmF5LTQwMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIj5cclxuICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk0yMSAyMWwtNi02bTItNWE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHpcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJidXN5XCIgY2xhc3M9XCJhbmltYXRlLXNwaW4gaC02IHctNiB0ZXh0LWdyYXktNDAwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwib3BhY2l0eS0yNVwiIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiNFwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICA8cGF0aCBjbGFzcz1cIm9wYWNpdHktNzVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00IDEyYTggOCAwIDAxOC04VjBDNS4zNzMgMCAwIDUuMzczIDAgMTJoNHptMiA1LjI5MUE3Ljk2MiA3Ljk2MiAwIDAxNCAxMkgwYzAgMy4wNDIgMS4xMzUgNS44MjQgMyA3LjkzOGwzLTIuNjQ3elwiPjwvcGF0aD5cclxuICAgICAgICA8L3N2Zz5cclxuICAgIDwvZGl2PlxyXG4gICAgPHVsIFtpZF09XCJpZCArICctb3B0aW9ucydcIiAqbmdJZj1cInNob3dPcHRpb25zXCIgY2xhc3M9XCJhYnNvbHV0ZSB6LTEwIG10LTEgbWF4LWgtNjAgdy1mdWxsIG92ZXJmbG93LWF1dG8gcm91bmRlZC1tZCBiZy13aGl0ZSBweS0xIHRleHQtYmFzZSBzaGFkb3ctbGcgcmluZy0xIHJpbmctYmxhY2sgcmluZy1vcGFjaXR5LTUgZm9jdXM6b3V0bGluZS1ub25lIHNtOnRleHQtc21cIiByb2xlPVwibGlzdGJveFwiPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGkgPSBpbmRleDtcIiBbaWRdPVwiJ29wdGlvbi0nKyBpXCIgKGNsaWNrKT1cIm9uTGlzdEl0ZW1TZWxlY3RlZChpdGVtKVwiIHJvbGU9XCJvcHRpb25cIiB0YWJpbmRleD1cIi0xXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlIHx8IGRlZmF1bHRJdGVtVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG48L2Rpdj5cclxuPHVsICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwXCIgcm9sZT1cImxpc3RcIiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTFcIj5cclxuICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zOyBsZXQgaSA9IGluZGV4O1wiIGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0ZWRJdGVtVGVtcGxhdGUgfHwgZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbGk+XHJcbjwvdWw+XHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEl0ZW1UZW1wbGF0ZSBsZXQtaXRlbT5cclxuICAgIDxzcGFuIGNsYXNzPVwiaG92ZXI6YmctZ3JheS0xMDAgcmVsYXRpdmUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgcHktMiBwbC0zIHByLTMgYmxvY2sgdHJ1bmNhdGVcIj57eyBpdGVtIH19PC9zcGFuPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RlZEl0ZW1UZW1wbGF0ZSBsZXQtaXRlbT5cclxuICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBiZy13aGl0ZSBweC02IHB5LTUgc2hhZG93LXNtIGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyBob3Zlcjpib3JkZXItZ3JheS00MDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBtaW4tdy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9jdXM6b3V0bGluZS1ub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMFwiPnt7IGl0ZW0gfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00IGZsZXgtc2hyaW5rLTAgZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlbW92ZVNlbGVjdGVkSXRlbShpdGVtKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYmctd2hpdGUgcm91bmRlZC1tZCBpbmxpbmUtZmxleCB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC01IHctNVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC4yOTMgNC4yOTNhMSAxIDAgMDExLjQxNCAwTDEwIDguNTg2bDQuMjkzLTQuMjkzYTEgMSAwIDExMS40MTQgMS40MTRMMTEuNDE0IDEwbDQuMjkzIDQuMjkzYTEgMSAwIDAxLTEuNDE0IDEuNDE0TDEwIDExLjQxNGwtNC4yOTMgNC4yOTNhMSAxIDAgMDEtMS40MTQtMS40MTRMOC41ODYgMTAgNC4yOTMgNS43MDdhMSAxIDAgMDEwLTEuNDE0elwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==