@ecodev/natural 62.1.2 → 63.0.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 (183) hide show
  1. package/fesm2022/ecodev-natural-vanilla.mjs +1193 -0
  2. package/fesm2022/ecodev-natural-vanilla.mjs.map +1 -0
  3. package/fesm2022/ecodev-natural.mjs +436 -425
  4. package/fesm2022/ecodev-natural.mjs.map +1 -1
  5. package/lib/classes/network-activity.service.d.ts +54 -0
  6. package/lib/classes/validators.d.ts +1 -1
  7. package/lib/modules/columns-picker/columns-picker.component.d.ts +2 -2
  8. package/lib/modules/common/services/seo.provider.d.ts +2 -2
  9. package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +1 -1
  10. package/lib/modules/file/abstract-file.d.ts +6 -3
  11. package/lib/modules/file/component/file.component.d.ts +2 -2
  12. package/lib/modules/file/file-drop.directive.d.ts +2 -3
  13. package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +2 -3
  14. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -3
  15. package/lib/modules/icon/icon.module.d.ts +2 -2
  16. package/lib/modules/panels/panels.service.d.ts +1 -2
  17. package/lib/modules/relations/relations.component.d.ts +3 -3
  18. package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +2 -3
  19. package/lib/modules/search/group/group.component.d.ts +2 -3
  20. package/lib/modules/search/input/input.component.d.ts +5 -5
  21. package/lib/modules/search/search/search.component.d.ts +2 -2
  22. package/lib/modules/select/abstract-select.component.d.ts +3 -3
  23. package/lib/modules/select/select/select.component.d.ts +1 -1
  24. package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +1 -1
  25. package/lib/modules/table-button/table-button.component.d.ts +4 -2
  26. package/package.json +16 -14
  27. package/public-api.d.ts +1 -0
  28. package/src/lib/_natural.theme.scss +1 -2
  29. package/vanilla/index.d.ts +5 -0
  30. package/vanilla/package.json +3 -0
  31. package/vanilla/public-api.d.ts +11 -0
  32. package/vanilla/src/lib/classes/crypto.d.ts +8 -0
  33. package/vanilla/src/lib/classes/data-source.d.ts +32 -0
  34. package/vanilla/src/lib/classes/query-variable-manager-utils.d.ts +2 -0
  35. package/vanilla/src/lib/classes/query-variable-manager.d.ts +91 -0
  36. package/vanilla/src/lib/classes/signing.d.ts +7 -0
  37. package/vanilla/src/lib/classes/utility.d.ts +77 -0
  38. package/vanilla/src/lib/modules/search/classes/graphql-doctrine.types.d.ts +83 -0
  39. package/vanilla/src/lib/modules/search/classes/utils.d.ts +17 -0
  40. package/vanilla/src/lib/modules/search/types/dropdown-component.d.ts +20 -0
  41. package/vanilla/src/lib/modules/search/types/facet.d.ts +75 -0
  42. package/vanilla/src/lib/modules/search/types/values.d.ts +32 -0
  43. package/vanilla/src/lib/services/abstract-model.service.d.ts +244 -0
  44. package/vanilla/src/lib/services/debounce.service.d.ts +52 -0
  45. package/vanilla/src/lib/types/types.d.ts +100 -0
  46. package/esm2022/ecodev-natural.mjs +0 -5
  47. package/esm2022/lib/classes/abstract-detail.mjs +0 -229
  48. package/esm2022/lib/classes/abstract-editable-list.mjs +0 -99
  49. package/esm2022/lib/classes/abstract-list.mjs +0 -461
  50. package/esm2022/lib/classes/abstract-navigable-list.mjs +0 -133
  51. package/esm2022/lib/classes/apollo-utils.mjs +0 -59
  52. package/esm2022/lib/classes/crypto.mjs +0 -23
  53. package/esm2022/lib/classes/cumulative-changes.mjs +0 -50
  54. package/esm2022/lib/classes/data-source.mjs +0 -71
  55. package/esm2022/lib/classes/providers.mjs +0 -13
  56. package/esm2022/lib/classes/query-variable-manager-utils.mjs +0 -14
  57. package/esm2022/lib/classes/query-variable-manager.mjs +0 -172
  58. package/esm2022/lib/classes/rxjs.mjs +0 -54
  59. package/esm2022/lib/classes/signing.mjs +0 -38
  60. package/esm2022/lib/classes/tld.mjs +0 -1476
  61. package/esm2022/lib/classes/utility.mjs +0 -234
  62. package/esm2022/lib/classes/validators.mjs +0 -179
  63. package/esm2022/lib/directives/http-prefix.directive.mjs +0 -47
  64. package/esm2022/lib/modules/alert/alert.service.mjs +0 -53
  65. package/esm2022/lib/modules/alert/confirm.component.mjs +0 -16
  66. package/esm2022/lib/modules/alert/public-api.mjs +0 -6
  67. package/esm2022/lib/modules/avatar/component/avatar.component.mjs +0 -203
  68. package/esm2022/lib/modules/avatar/public-api.mjs +0 -6
  69. package/esm2022/lib/modules/avatar/service/avatar.service.mjs +0 -63
  70. package/esm2022/lib/modules/avatar/sources/gravatar.mjs +0 -29
  71. package/esm2022/lib/modules/avatar/sources/image.mjs +0 -13
  72. package/esm2022/lib/modules/avatar/sources/initials.mjs +0 -39
  73. package/esm2022/lib/modules/avatar/sources/source.mjs +0 -16
  74. package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +0 -145
  75. package/esm2022/lib/modules/columns-picker/public-api.mjs +0 -5
  76. package/esm2022/lib/modules/columns-picker/types.mjs +0 -2
  77. package/esm2022/lib/modules/common/directives/background-density.directive.mjs +0 -63
  78. package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +0 -93
  79. package/esm2022/lib/modules/common/directives/src-density.directive.mjs +0 -72
  80. package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +0 -24
  81. package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +0 -17
  82. package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +0 -24
  83. package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +0 -140
  84. package/esm2022/lib/modules/common/public-api.mjs +0 -14
  85. package/esm2022/lib/modules/common/services/memory-storage.mjs +0 -110
  86. package/esm2022/lib/modules/common/services/seo.provider.mjs +0 -23
  87. package/esm2022/lib/modules/common/services/seo.service.mjs +0 -235
  88. package/esm2022/lib/modules/detail-header/detail-header.component.mjs +0 -84
  89. package/esm2022/lib/modules/detail-header/public-api.mjs +0 -5
  90. package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +0 -72
  91. package/esm2022/lib/modules/dialog-trigger/public-api.mjs +0 -5
  92. package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +0 -100
  93. package/esm2022/lib/modules/dropdown-components/public-api.mjs +0 -14
  94. package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +0 -39
  95. package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +0 -173
  96. package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +0 -134
  97. package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +0 -80
  98. package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +0 -48
  99. package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +0 -110
  100. package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +0 -64
  101. package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +0 -175
  102. package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +0 -62
  103. package/esm2022/lib/modules/dropdown-components/types.mjs +0 -41
  104. package/esm2022/lib/modules/dropdown-components/utils.mjs +0 -35
  105. package/esm2022/lib/modules/file/abstract-file.mjs +0 -230
  106. package/esm2022/lib/modules/file/component/file.component.mjs +0 -172
  107. package/esm2022/lib/modules/file/file-drop.directive.mjs +0 -111
  108. package/esm2022/lib/modules/file/file-select.directive.mjs +0 -26
  109. package/esm2022/lib/modules/file/file.service.mjs +0 -43
  110. package/esm2022/lib/modules/file/public-api.mjs +0 -9
  111. package/esm2022/lib/modules/file/types.mjs +0 -2
  112. package/esm2022/lib/modules/file/utils.mjs +0 -129
  113. package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +0 -30
  114. package/esm2022/lib/modules/fixed-button/public-api.mjs +0 -5
  115. package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +0 -56
  116. package/esm2022/lib/modules/fixed-button-detail/public-api.mjs +0 -5
  117. package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +0 -18
  118. package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs +0 -2
  119. package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs +0 -2
  120. package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +0 -14
  121. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +0 -398
  122. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +0 -243
  123. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +0 -38
  124. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +0 -22
  125. package/esm2022/lib/modules/hierarchic-selector/public-api.mjs +0 -10
  126. package/esm2022/lib/modules/icon/icon.directive.mjs +0 -96
  127. package/esm2022/lib/modules/icon/icon.module.mjs +0 -33
  128. package/esm2022/lib/modules/icon/public-api.mjs +0 -6
  129. package/esm2022/lib/modules/logger/error-handler.mjs +0 -87
  130. package/esm2022/lib/modules/logger/error.module.mjs +0 -22
  131. package/esm2022/lib/modules/logger/public-api.mjs +0 -6
  132. package/esm2022/lib/modules/matomo/matomo.service.mjs +0 -96
  133. package/esm2022/lib/modules/matomo/public-api.mjs +0 -5
  134. package/esm2022/lib/modules/panels/abstract-panel.mjs +0 -76
  135. package/esm2022/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs +0 -12
  136. package/esm2022/lib/modules/panels/panels.component.mjs +0 -27
  137. package/esm2022/lib/modules/panels/panels.module.mjs +0 -10
  138. package/esm2022/lib/modules/panels/panels.service.mjs +0 -329
  139. package/esm2022/lib/modules/panels/panels.urlmatcher.mjs +0 -75
  140. package/esm2022/lib/modules/panels/public-api.mjs +0 -11
  141. package/esm2022/lib/modules/panels/types.mjs +0 -3
  142. package/esm2022/lib/modules/relations/public-api.mjs +0 -5
  143. package/esm2022/lib/modules/relations/relations.component.mjs +0 -254
  144. package/esm2022/lib/modules/search/classes/graphql-doctrine.mjs +0 -111
  145. package/esm2022/lib/modules/search/classes/graphql-doctrine.types.mjs +0 -14
  146. package/esm2022/lib/modules/search/classes/transformers.mjs +0 -142
  147. package/esm2022/lib/modules/search/classes/url.mjs +0 -53
  148. package/esm2022/lib/modules/search/classes/utils.mjs +0 -25
  149. package/esm2022/lib/modules/search/dropdown-container/dropdown-container-animations.mjs +0 -44
  150. package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +0 -87
  151. package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +0 -24
  152. package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +0 -90
  153. package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +0 -45
  154. package/esm2022/lib/modules/search/group/group.component.mjs +0 -53
  155. package/esm2022/lib/modules/search/input/input.component.mjs +0 -365
  156. package/esm2022/lib/modules/search/public-api.mjs +0 -7
  157. package/esm2022/lib/modules/search/search/search.component.mjs +0 -102
  158. package/esm2022/lib/modules/search/types/dropdown-component.mjs +0 -2
  159. package/esm2022/lib/modules/search/types/facet.mjs +0 -2
  160. package/esm2022/lib/modules/search/types/values.mjs +0 -2
  161. package/esm2022/lib/modules/select/abstract-select.component.mjs +0 -232
  162. package/esm2022/lib/modules/select/public-api.mjs +0 -7
  163. package/esm2022/lib/modules/select/select/select.component.mjs +0 -310
  164. package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +0 -57
  165. package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +0 -155
  166. package/esm2022/lib/modules/sidenav/public-api.mjs +0 -9
  167. package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +0 -15
  168. package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +0 -90
  169. package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +0 -11
  170. package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +0 -50
  171. package/esm2022/lib/modules/sidenav/sidenav.service.mjs +0 -196
  172. package/esm2022/lib/modules/stamp/public-api.mjs +0 -5
  173. package/esm2022/lib/modules/stamp/stamp.component.mjs +0 -23
  174. package/esm2022/lib/modules/table-button/public-api.mjs +0 -5
  175. package/esm2022/lib/modules/table-button/table-button.component.mjs +0 -78
  176. package/esm2022/lib/services/abstract-model.service.mjs +0 -526
  177. package/esm2022/lib/services/debounce.service.mjs +0 -149
  178. package/esm2022/lib/services/enum.service.mjs +0 -64
  179. package/esm2022/lib/services/link-mutation.service.mjs +0 -154
  180. package/esm2022/lib/services/persistence.service.mjs +0 -115
  181. package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +0 -63
  182. package/esm2022/lib/types/types.mjs +0 -2
  183. package/esm2022/public-api.mjs +0 -46
@@ -1,234 +0,0 @@
1
- import { pickBy } from 'lodash-es';
2
- import { SortingOrder } from './query-variable-manager';
3
- export function formatIsoDate(date) {
4
- if (!date) {
5
- return null;
6
- }
7
- const y = date.getFullYear();
8
- const m = date.getMonth() + 1;
9
- const d = date.getDate();
10
- return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;
11
- }
12
- /**
13
- * Format a date and time in a way that will preserve the local time zone.
14
- * This allows the server side to know the day (without time) that was selected on client side.
15
- *
16
- * So something like: "2021-09-23T17:57:16+09:00"
17
- */
18
- export function formatIsoDateTime(date) {
19
- const timezoneOffsetInMinutes = date.getTimezoneOffset();
20
- const timezoneOffsetInHours = -Math.trunc(timezoneOffsetInMinutes / 60); // UTC minus local time
21
- const sign = timezoneOffsetInHours >= 0 ? '+' : '-';
22
- const hoursLeadingZero = Math.abs(timezoneOffsetInHours) < 10 ? '0' : '';
23
- const remainderMinutes = -(timezoneOffsetInMinutes % 60);
24
- const minutesLeadingZero = Math.abs(remainderMinutes) < 10 ? '0' : '';
25
- // It's a bit unfortunate that we need to construct a new Date instance,
26
- // but we don't want the original Date instance to be modified
27
- const correctedDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
28
- correctedDate.setHours(date.getHours() + timezoneOffsetInHours);
29
- const iso = correctedDate
30
- .toISOString()
31
- .replace(/\.\d{3}Z/, '')
32
- .replace('Z', '');
33
- return (iso +
34
- sign +
35
- hoursLeadingZero +
36
- Math.abs(timezoneOffsetInHours).toString() +
37
- ':' +
38
- minutesLeadingZero +
39
- remainderMinutes);
40
- }
41
- /**
42
- * Relations to full objects are converted to their IDs only.
43
- *
44
- * So {user: {id: 123}} becomes {user: 123}
45
- */
46
- export function relationsToIds(object) {
47
- const newObj = {};
48
- Object.keys(object).forEach(key => {
49
- let value = object[key];
50
- if (value === null || value === undefined) {
51
- // noop
52
- }
53
- else if (hasId(value)) {
54
- value = value.id;
55
- }
56
- else if (Array.isArray(value)) {
57
- value = value.map((i) => (hasId(i) ? i.id : i));
58
- }
59
- else if (typeof value === 'object' && !(value instanceof File) && !(value instanceof Date)) {
60
- value = pickBy(value, (v, k) => k !== '__typename'); // omit(value, ['__typename']) ?
61
- }
62
- newObj[key] = value;
63
- });
64
- return newObj;
65
- }
66
- function hasId(value) {
67
- return !!value && typeof value === 'object' && 'id' in value && !!value.id;
68
- }
69
- /**
70
- * Returns the plural form of the given name
71
- *
72
- * This is **not** necessarily valid english grammar. Its only purpose is for internal usage, not for humans.
73
- *
74
- * This **MUST** be kept in sync with `\Ecodev\Felix\Api\Plural:make()`.
75
- *
76
- * This is a bit performance-sensitive, so we should keep it fast and only cover cases that we actually need.
77
- */
78
- export function makePlural(name) {
79
- // Words ending in a y preceded by a vowel form their plurals by adding -s:
80
- if (/[aeiou]y$/.exec(name)) {
81
- return name + 's';
82
- }
83
- const plural = name + 's';
84
- return plural.replace(/ys$/, 'ies').replace(/ss$/, 'ses').replace(/xs$/, 'xes');
85
- }
86
- /**
87
- * Returns the string with the first letter as capital
88
- */
89
- export function upperCaseFirstLetter(term) {
90
- return term.charAt(0).toUpperCase() + term.slice(1);
91
- }
92
- /**
93
- * Replace all attributes of first object with the ones provided by the second, but keeps the reference
94
- */
95
- export function replaceObjectKeepingReference(obj, newObj) {
96
- if (!obj || !newObj) {
97
- return;
98
- }
99
- Object.keys(obj).forEach(key => {
100
- delete obj[key];
101
- });
102
- Object.keys(newObj).forEach(key => {
103
- obj[key] = newObj[key];
104
- });
105
- }
106
- /**
107
- * Get contrasted color for text in the slider thumb
108
- * @param hexBgColor string in hexadecimals representing the background color
109
- */
110
- export function getForegroundColor(hexBgColor) {
111
- const rgb = hexToRgb(hexBgColor.slice(0, 7)); // splice remove alpha and consider only "visible" color at 100% alpha
112
- const o = Math.round((rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000);
113
- return o > 125 ? 'black' : 'white';
114
- }
115
- function hexToRgb(hex) {
116
- // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
117
- const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
118
- hex = hex.replace(shorthandRegex, (m, r, g, b) => {
119
- return r + r + g + g + b + b;
120
- });
121
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
122
- return result
123
- ? {
124
- r: parseInt(result[1], 16),
125
- g: parseInt(result[2], 16),
126
- b: parseInt(result[3], 16),
127
- }
128
- : {
129
- r: 0,
130
- g: 0,
131
- b: 0,
132
- };
133
- }
134
- /**
135
- * Convert RGB color to hexadecimal color
136
- *
137
- * ```ts
138
- * rgbToHex('rgb(255, 00, 255)'); // '#FF00FF'
139
- * ```
140
- */
141
- export function rgbToHex(rgb) {
142
- const m = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/.exec(rgb);
143
- if (!m) {
144
- return rgb;
145
- }
146
- return '#' + [m[1], m[2], m[3]].map(x => parseInt(x).toString(16).toUpperCase().padStart(2, '0')).join('');
147
- }
148
- /**
149
- * During lodash.mergeWith, overrides arrays
150
- */
151
- export function mergeOverrideArray(destValue, source) {
152
- if (Array.isArray(source)) {
153
- return source;
154
- }
155
- }
156
- /**
157
- * Copy text to clipboard.
158
- * Accepts line breaks `\n` as textarea do.
159
- */
160
- export function copyToClipboard(document, text) {
161
- const input = document.createElement('textarea');
162
- document.body.append(input);
163
- input.value = text;
164
- input.select();
165
- document.execCommand('copy');
166
- document.body.removeChild(input);
167
- }
168
- export function deepFreeze(o) {
169
- Object.values(o).forEach(v => Object.isFrozen(v) || deepFreeze(v));
170
- return Object.freeze(o);
171
- }
172
- /**
173
- * Return a valid PaginationInput from whatever is available from data. Invalid properties/types will be dropped.
174
- */
175
- export function validatePagination(data) {
176
- if (!data || typeof data !== 'object' || Array.isArray(data)) {
177
- return null;
178
- }
179
- const pagination = {};
180
- if ('offset' in data && (data.offset === null || typeof data.offset === 'number')) {
181
- pagination.offset = data.offset;
182
- }
183
- if ('pageIndex' in data && (data.pageIndex === null || typeof data.pageIndex === 'number')) {
184
- pagination.pageIndex = data.pageIndex;
185
- }
186
- if ('pageSize' in data && (data.pageSize === null || typeof data.pageSize === 'number')) {
187
- pagination.pageSize = data.pageSize;
188
- }
189
- return pagination;
190
- }
191
- /**
192
- * Return a valid Sortings from whatever is available from data. Invalid properties/types will be dropped.
193
- */
194
- export function validateSorting(data) {
195
- if (!Array.isArray(data)) {
196
- return null;
197
- }
198
- const result = [];
199
- data.forEach(s => {
200
- const r = validateOneSorting(s);
201
- if (r) {
202
- result.push(r);
203
- }
204
- });
205
- return result;
206
- }
207
- function validateOneSorting(data) {
208
- if (!data || typeof data !== 'object' || !('field' in data)) {
209
- return null;
210
- }
211
- const sorting = { field: data.field };
212
- if ('order' in data &&
213
- (data.order === SortingOrder.ASC || data.order === SortingOrder.DESC || data.order === null)) {
214
- sorting.order = data.order;
215
- }
216
- if ('nullAsHighest' in data && (data.nullAsHighest === null || typeof data.nullAsHighest === 'boolean')) {
217
- sorting.nullAsHighest = data.nullAsHighest;
218
- }
219
- if ('emptyStringAsHighest' in data &&
220
- (data.emptyStringAsHighest === null || typeof data.emptyStringAsHighest === 'boolean')) {
221
- sorting.emptyStringAsHighest = data.emptyStringAsHighest;
222
- }
223
- return sorting;
224
- }
225
- /**
226
- * Return valid columns from whatever is available from data. Invalid properties/types will be dropped.
227
- */
228
- export function validateColumns(data) {
229
- if (typeof data !== 'string') {
230
- return null;
231
- }
232
- return data.split(',').filter(string => string);
233
- }
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3V0aWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUdqQyxPQUFPLEVBQTJCLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBVWhGLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBaUI7SUFDM0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUV6QixPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBVTtJQUN4QyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3pELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsdUJBQXVCO0lBQ2hHLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixJQUFJLENB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STtRQUNmLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxFQUM5RixDQUFDO1FBQ0MsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN0RyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQ0ksc0JBQXNCLElBQUksSUFBSTtRQUM5QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsb0JBQW9CLEtBQUssU0FBUyxDQUFDLEVBQ3hGLENBQUM7UUFDQyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQzdELENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWE7SUFDekMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BpY2tCeX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge1JlYWRvbmx5RGVlcH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB7UGFnaW5hdGlvbklucHV0LCBTb3J0aW5nLCBTb3J0aW5nT3JkZXJ9IGZyb20gJy4vcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5cbi8qKlxuICogVmVyeSBiYXNpYyBmb3JtYXR0aW5nIHRvIGdldCBvbmx5IGRhdGUsIHdpdGhvdXQgdGltZSBhbmQgaWdub3JpbmcgZW50aXJlbHkgdGhlIHRpbWV6b25lXG4gKlxuICogU28gc29tZXRoaW5nIGxpa2U6IFwiMjAyMS0wOS0yM1wiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IG51bGwpOiBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdElzb0RhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IERhdGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJc29EYXRlKGRhdGU6IERhdGUgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbSA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgY29uc3QgZCA9IGRhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgcmV0dXJuIHkgKyAnLScgKyAobSA8IDEwID8gJzAnIDogJycpICsgbSArICctJyArIChkIDwgMTAgPyAnMCcgOiAnJykgKyBkO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIGRhdGUgYW5kIHRpbWUgaW4gYSB3YXkgdGhhdCB3aWxsIHByZXNlcnZlIHRoZSBsb2NhbCB0aW1lIHpvbmUuXG4gKiBUaGlzIGFsbG93cyB0aGUgc2VydmVyIHNpZGUgdG8ga25vdyB0aGUgZGF5ICh3aXRob3V0IHRpbWUpIHRoYXQgd2FzIHNlbGVjdGVkIG9uIGNsaWVudCBzaWRlLlxuICpcbiAqIFNvIHNvbWV0aGluZyBsaWtlOiBcIjIwMjEtMDktMjNUMTc6NTc6MTYrMDk6MDBcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SXNvRGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbkhvdXJzID0gLU1hdGgudHJ1bmModGltZXpvbmVPZmZzZXRJbk1pbnV0ZXMgLyA2MCk7IC8vIFVUQyBtaW51cyBsb2NhbCB0aW1lXG4gICAgY29uc3Qgc2lnbiA9IHRpbWV6b25lT2Zmc2V0SW5Ib3VycyA+PSAwID8gJysnIDogJy0nO1xuICAgIGNvbnN0IGhvdXJzTGVhZGluZ1plcm8gPSBNYXRoLmFicyh0aW1lem9uZU9mZnNldEluSG91cnMpIDwgMTAgPyAnMCcgOiAnJztcbiAgICBjb25zdCByZW1haW5kZXJNaW51dGVzID0gLSh0aW1lem9uZU9mZnNldEluTWludXRlcyAlIDYwKTtcbiAgICBjb25zdCBtaW51dGVzTGVhZGluZ1plcm8gPSBNYXRoLmFicyhyZW1haW5kZXJNaW51dGVzKSA8IDEwID8gJzAnIDogJyc7XG5cbiAgICAvLyBJdCdzIGEgYml0IHVuZm9ydHVuYXRlIHRoYXQgd2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBuZXcgRGF0ZSBpbnN0YW5jZSxcbiAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0aGUgb3JpZ2luYWwgRGF0ZSBpbnN0YW5jZSB0byBiZSBtb2RpZmllZFxuICAgIGNvbnN0IGNvcnJlY3RlZERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSxcbiAgICApO1xuICAgIGNvcnJlY3RlZERhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgdGltZXpvbmVPZmZzZXRJbkhvdXJzKTtcblxuICAgIGNvbnN0IGlzbyA9IGNvcnJlY3RlZERhdGVcbiAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoL1xcLlxcZHszfVovLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ1onLCAnJyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICBpc28gK1xuICAgICAgICBzaWduICtcbiAgICAgICAgaG91cnNMZWFkaW5nWmVybyArXG4gICAgICAgIE1hdGguYWJzKHRpbWV6b25lT2Zmc2V0SW5Ib3VycykudG9TdHJpbmcoKSArXG4gICAgICAgICc6JyArXG4gICAgICAgIG1pbnV0ZXNMZWFkaW5nWmVybyArXG4gICAgICAgIHJlbWFpbmRlck1pbnV0ZXNcbiAgICApO1xufVxuXG4vKipcbiAqIFJlbGF0aW9ucyB0byBmdWxsIG9iamVjdHMgYXJlIGNvbnZlcnRlZCB0byB0aGVpciBJRHMgb25seS5cbiAqXG4gKiBTbyB7dXNlcjoge2lkOiAxMjN9fSBiZWNvbWVzIHt1c2VyOiAxMjN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbnNUb0lkcyhvYmplY3Q6IExpdGVyYWwpOiBMaXRlcmFsIHtcbiAgICBjb25zdCBuZXdPYmo6IExpdGVyYWwgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSBlbHNlIGlmIChoYXNJZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuaWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKChpOiB1bmtub3duKSA9PiAoaGFzSWQoaSkgPyBpLmlkIDogaSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBwaWNrQnkodmFsdWUsICh2LCBrKSA9PiBrICE9PSAnX190eXBlbmFtZScpOyAvLyBvbWl0KHZhbHVlLCBbJ19fdHlwZW5hbWUnXSkgP1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdPYmo7XG59XG5cbmZ1bmN0aW9uIGhhc0lkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMge2lkOiB1bmtub3dufSB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHZhbHVlICYmICEhdmFsdWUuaWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGx1cmFsIGZvcm0gb2YgdGhlIGdpdmVuIG5hbWVcbiAqXG4gKiBUaGlzIGlzICoqbm90KiogbmVjZXNzYXJpbHkgdmFsaWQgZW5nbGlzaCBncmFtbWFyLiBJdHMgb25seSBwdXJwb3NlIGlzIGZvciBpbnRlcm5hbCB1c2FnZSwgbm90IGZvciBodW1hbnMuXG4gKlxuICogVGhpcyAqKk1VU1QqKiBiZSBrZXB0IGluIHN5bmMgd2l0aCBgXFxFY29kZXZcXEZlbGl4XFxBcGlcXFBsdXJhbDptYWtlKClgLlxuICpcbiAqIFRoaXMgaXMgYSBiaXQgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlLCBzbyB3ZSBzaG91bGQga2VlcCBpdCBmYXN0IGFuZCBvbmx5IGNvdmVyIGNhc2VzIHRoYXQgd2UgYWN0dWFsbHkgbmVlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQbHVyYWwobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBXb3JkcyBlbmRpbmcgaW4gYSB5IHByZWNlZGVkIGJ5IGEgdm93ZWwgZm9ybSB0aGVpciBwbHVyYWxzIGJ5IGFkZGluZyAtczpcbiAgICBpZiAoL1thZWlvdV15JC8uZXhlYyhuYW1lKSkge1xuICAgICAgICByZXR1cm4gbmFtZSArICdzJztcbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWwgPSBuYW1lICsgJ3MnO1xuXG4gICAgcmV0dXJuIHBsdXJhbC5yZXBsYWNlKC95cyQvLCAnaWVzJykucmVwbGFjZSgvc3MkLywgJ3NlcycpLnJlcGxhY2UoL3hzJC8sICd4ZXMnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCB0aGUgZmlyc3QgbGV0dGVyIGFzIGNhcGl0YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlcm0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXJtLnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgYWxsIGF0dHJpYnV0ZXMgb2YgZmlyc3Qgb2JqZWN0IHdpdGggdGhlIG9uZXMgcHJvdmlkZWQgYnkgdGhlIHNlY29uZCwgYnV0IGtlZXBzIHRoZSByZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlKG9iajogTGl0ZXJhbCB8IG51bGwsIG5ld09iajogTGl0ZXJhbCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCAhbmV3T2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXMobmV3T2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIG9ialtrZXldID0gbmV3T2JqW2tleV07XG4gICAgfSk7XG59XG5cbi8qKlxuICogR2V0IGNvbnRyYXN0ZWQgY29sb3IgZm9yIHRleHQgaW4gdGhlIHNsaWRlciB0aHVtYlxuICogQHBhcmFtIGhleEJnQ29sb3Igc3RyaW5nIGluIGhleGFkZWNpbWFscyByZXByZXNlbnRpbmcgdGhlIGJhY2tncm91bmQgY29sb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcmVncm91bmRDb2xvcihoZXhCZ0NvbG9yOiBzdHJpbmcpOiAnYmxhY2snIHwgJ3doaXRlJyB7XG4gICAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4QmdDb2xvci5zbGljZSgwLCA3KSk7IC8vIHNwbGljZSByZW1vdmUgYWxwaGEgYW5kIGNvbnNpZGVyIG9ubHkgXCJ2aXNpYmxlXCIgY29sb3IgYXQgMTAwJSBhbHBoYVxuICAgIGNvbnN0IG8gPSBNYXRoLnJvdW5kKChyZ2IuciAqIDI5OSArIHJnYi5nICogNTg3ICsgcmdiLmIgKiAxMTQpIC8gMTAwMCk7XG5cbiAgICByZXR1cm4gbyA+IDEyNSA/ICdibGFjaycgOiAnd2hpdGUnO1xufVxuXG5mdW5jdGlvbiBoZXhUb1JnYihoZXg6IHN0cmluZyk6IHtyOiBudW1iZXI7IGc6IG51bWJlcjsgYjogbnVtYmVyfSB7XG4gICAgLy8gRXhwYW5kIHNob3J0aGFuZCBmb3JtIChlLmcuIFwiMDNGXCIpIHRvIGZ1bGwgZm9ybSAoZS5nLiBcIjAwMzNGRlwiKVxuICAgIGNvbnN0IHNob3J0aGFuZFJlZ2V4ID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcbiAgICBoZXggPSBoZXgucmVwbGFjZShzaG9ydGhhbmRSZWdleCwgKG0sIHIsIGcsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIHIgKyByICsgZyArIGcgKyBiICsgYjtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpO1xuICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHI6IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpLFxuICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcbiAgICAgICAgICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNiksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgcjogMCxcbiAgICAgICAgICAgICAgZzogMCxcbiAgICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgUkdCIGNvbG9yIHRvIGhleGFkZWNpbWFsIGNvbG9yXG4gKlxuICogYGBgdHNcbiAqIHJnYlRvSGV4KCdyZ2IoMjU1LCAwMCwgMjU1KScpOyAvLyAnI0ZGMDBGRidcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmdiVG9IZXgocmdiOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG0gPSAvXnJnYlxcKChcXGQrKSxcXHMqKFxcZCspLFxccyooXFxkKylcXCkkLy5leGVjKHJnYik7XG4gICAgaWYgKCFtKSB7XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgcmV0dXJuICcjJyArIFttWzFdLCBtWzJdLCBtWzNdXS5tYXAoeCA9PiBwYXJzZUludCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbn1cblxuLyoqXG4gKiBEdXJpbmcgbG9kYXNoLm1lcmdlV2l0aCwgb3ZlcnJpZGVzIGFycmF5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPdmVycmlkZUFycmF5KGRlc3RWYWx1ZTogdW5rbm93biwgc291cmNlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDb3B5IHRleHQgdG8gY2xpcGJvYXJkLlxuICogQWNjZXB0cyBsaW5lIGJyZWFrcyBgXFxuYCBhcyB0ZXh0YXJlYSBkby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZChkb2N1bWVudDogRG9jdW1lbnQsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChpbnB1dCk7XG4gICAgaW5wdXQudmFsdWUgPSB0ZXh0O1xuICAgIGlucHV0LnNlbGVjdCgpO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwRnJlZXplPFQgZXh0ZW5kcyBMaXRlcmFsPihvOiBUKTogUmVhZG9ubHlEZWVwPFQ+IHtcbiAgICBPYmplY3QudmFsdWVzKG8pLmZvckVhY2godiA9PiBPYmplY3QuaXNGcm96ZW4odikgfHwgZGVlcEZyZWV6ZSh2KSk7XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvKSBhcyBSZWFkb25seURlZXA8VD47XG59XG5cbi8qKlxuICogUmV0dXJuIGEgdmFsaWQgUGFnaW5hdGlvbklucHV0IGZyb20gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGZyb20gZGF0YS4gSW52YWxpZCBwcm9wZXJ0aWVzL3R5cGVzIHdpbGwgYmUgZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGFnaW5hdGlvbihkYXRhOiB1bmtub3duKTogUGFnaW5hdGlvbklucHV0IHwgbnVsbCB7XG4gICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2luYXRpb246IFBhZ2luYXRpb25JbnB1dCA9IHt9O1xuXG4gICAgaWYgKCdvZmZzZXQnIGluIGRhdGEgJiYgKGRhdGEub2Zmc2V0ID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLm9mZnNldCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIHBhZ2luYXRpb24ub2Zmc2V0ID0gZGF0YS5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKCdwYWdlSW5kZXgnIGluIGRhdGEgJiYgKGRhdGEucGFnZUluZGV4ID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLnBhZ2VJbmRleCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIHBhZ2luYXRpb24ucGFnZUluZGV4ID0gZGF0YS5wYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKCdwYWdlU2l6ZScgaW4gZGF0YSAmJiAoZGF0YS5wYWdlU2l6ZSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YS5wYWdlU2l6ZSA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgIHBhZ2luYXRpb24ucGFnZVNpemUgPSBkYXRhLnBhZ2VTaXplO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdpbmF0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybiBhIHZhbGlkIFNvcnRpbmdzIGZyb20gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGZyb20gZGF0YS4gSW52YWxpZCBwcm9wZXJ0aWVzL3R5cGVzIHdpbGwgYmUgZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU29ydGluZyhkYXRhOiB1bmtub3duKTogU29ydGluZ1tdIHwgbnVsbCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFNvcnRpbmdbXSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaChzID0+IHtcbiAgICAgICAgY29uc3QgciA9IHZhbGlkYXRlT25lU29ydGluZyhzKTtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHIpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9uZVNvcnRpbmcoZGF0YTogdW5rbm93bik6IFNvcnRpbmcgfCBudWxsIHtcbiAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8ICEoJ2ZpZWxkJyBpbiBkYXRhKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0aW5nOiBTb3J0aW5nID0ge2ZpZWxkOiBkYXRhLmZpZWxkfTtcblxuICAgIGlmIChcbiAgICAgICAgJ29yZGVyJyBpbiBkYXRhICYmXG4gICAgICAgIChkYXRhLm9yZGVyID09PSBTb3J0aW5nT3JkZXIuQVNDIHx8IGRhdGEub3JkZXIgPT09IFNvcnRpbmdPcmRlci5ERVNDIHx8IGRhdGEub3JkZXIgPT09IG51bGwpXG4gICAgKSB7XG4gICAgICAgIHNvcnRpbmcub3JkZXIgPSBkYXRhLm9yZGVyO1xuICAgIH1cblxuICAgIGlmICgnbnVsbEFzSGlnaGVzdCcgaW4gZGF0YSAmJiAoZGF0YS5udWxsQXNIaWdoZXN0ID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLm51bGxBc0hpZ2hlc3QgPT09ICdib29sZWFuJykpIHtcbiAgICAgICAgc29ydGluZy5udWxsQXNIaWdoZXN0ID0gZGF0YS5udWxsQXNIaWdoZXN0O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgJ2VtcHR5U3RyaW5nQXNIaWdoZXN0JyBpbiBkYXRhICYmXG4gICAgICAgIChkYXRhLmVtcHR5U3RyaW5nQXNIaWdoZXN0ID09PSBudWxsIHx8IHR5cGVvZiBkYXRhLmVtcHR5U3RyaW5nQXNIaWdoZXN0ID09PSAnYm9vbGVhbicpXG4gICAgKSB7XG4gICAgICAgIHNvcnRpbmcuZW1wdHlTdHJpbmdBc0hpZ2hlc3QgPSBkYXRhLmVtcHR5U3RyaW5nQXNIaWdoZXN0O1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0aW5nO1xufVxuXG4vKipcbiAqIFJldHVybiB2YWxpZCBjb2x1bW5zIGZyb20gd2hhdGV2ZXIgaXMgYXZhaWxhYmxlIGZyb20gZGF0YS4gSW52YWxpZCBwcm9wZXJ0aWVzL3R5cGVzIHdpbGwgYmUgZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1ucyhkYXRhOiB1bmtub3duKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLnNwbGl0KCcsJykuZmlsdGVyKHN0cmluZyA9PiBzdHJpbmcpO1xufVxuIl19
@@ -1,179 +0,0 @@
1
- import { FormArray, FormGroup, Validators, } from '@angular/forms';
2
- import { of, timer } from 'rxjs';
3
- import { filter, first, map, switchMap } from 'rxjs/operators';
4
- import { NaturalQueryVariablesManager } from './query-variable-manager';
5
- import { validTlds } from './tld';
6
- /**
7
- * Returns an async validator function that checks that the form control value is unique
8
- */
9
- export function unique(fieldName, excludedId, modelService) {
10
- return (control) => {
11
- if (!control.value || !control.dirty) {
12
- return of(null);
13
- }
14
- const condition = {};
15
- condition[fieldName] = { equal: { value: control.value } };
16
- if (excludedId) {
17
- condition.id = { equal: { value: excludedId, not: true } };
18
- }
19
- const variables = {
20
- pagination: { pageIndex: 0, pageSize: 0 },
21
- filter: { groups: [{ conditions: [condition] }] },
22
- };
23
- const qvm = new NaturalQueryVariablesManager();
24
- qvm.set('variables', variables);
25
- return timer(500).pipe(switchMap(() => modelService.count(qvm).pipe(first(), map(count => (count > 0 ? { duplicateValue: count } : null)))));
26
- };
27
- }
28
- /**
29
- * Returns an async validator function that checks that the form control value is available
30
- *
31
- * Similar to `unique` validator, but allows to use a custom query for when the client does
32
- * not have permissions for `modelService.count()`.
33
- */
34
- export function available(getAvailableQuery, excludedId = null) {
35
- return (control) => {
36
- if (!control.value || !control.dirty) {
37
- return of(null);
38
- }
39
- return timer(500).pipe(switchMap(() => getAvailableQuery(control.value, excludedId).pipe(map(isAvailable => (isAvailable ? null : { available: true })))));
40
- };
41
- }
42
- /**
43
- * Return all errors recursively for the given Form or control
44
- */
45
- export function collectErrors(control) {
46
- let errors = null;
47
- if (control instanceof FormGroup || control instanceof FormArray) {
48
- errors = Object.entries(control.controls).reduce((acc, [key, childControl]) => {
49
- const childErrors = collectErrors(childControl);
50
- if (childErrors) {
51
- acc = { ...acc, [key]: childErrors };
52
- }
53
- return acc;
54
- }, null);
55
- }
56
- if (!errors) {
57
- errors = control.errors;
58
- }
59
- return errors;
60
- }
61
- /**
62
- * Force validation of all form controls recursively.
63
- *
64
- * Recursively mark descending form tree as dirty and touched in order to show all invalid fields on demand.
65
- * Typically used when creating a new object and user clicked on create button but several fields were not
66
- * touched and are invalid.
67
- */
68
- export function validateAllFormControls(control) {
69
- control.markAsDirty({ onlySelf: true });
70
- control.markAsTouched({ onlySelf: true });
71
- if (control instanceof FormGroup || control instanceof FormArray) {
72
- for (const [, child] of Object.entries(control.controls)) {
73
- validateAllFormControls(child);
74
- }
75
- }
76
- }
77
- function isValid(status) {
78
- return status === 'VALID';
79
- }
80
- /**
81
- * Emits exactly 0 or 1 time:
82
- *
83
- * - if the form is VALID, emits immediately
84
- * - if the form is PENDING emits if it changes from PENDING to VALID
85
- * - any other cases will **never** emit
86
- */
87
- export function ifValid(control) {
88
- const observable = control.pending ? control.statusChanges.pipe(first()) : of(control.status);
89
- return observable.pipe(filter(isValid));
90
- }
91
- // This is is an approximation of RFC_5322 where the hostname:
92
- //
93
- // - is too strict because it rejects IP address
94
- // - is too lax because it accepts pretty much anything else
95
- //
96
- // but the TLD will be validated against a whitelist so that should make the whole thing acceptable
97
- const RFC_5322 = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[^@ ]+\.[^@]+$/u;
98
- /**
99
- * Validate an email address according to RFC, and also that it is publicly deliverable (not "root@localhost" or "root@127.0.0.1")
100
- *
101
- * This is meant to replace **all** usages of Angular too permissive `Validators.email`
102
- */
103
- export function deliverableEmail(control) {
104
- // don't validate empty values to allow optional controls
105
- const value = control.value;
106
- if (!value) {
107
- return null;
108
- }
109
- const error = { email: true };
110
- if (value.length > 254) {
111
- return error;
112
- }
113
- if (!RFC_5322.test(value)) {
114
- return error;
115
- }
116
- const tld = value.split('.').pop();
117
- if (!validTlds.includes(tld)) {
118
- return error;
119
- }
120
- return null;
121
- }
122
- /**
123
- * Naive URL validator for "normal" web links, that is a bit too permissive
124
- *
125
- * It enforces:
126
- *
127
- * - http/https protocol
128
- * - one domain
129
- * - one tld
130
- *
131
- * It allows:
132
- *
133
- * - any number of subdomains
134
- * - any parameters
135
- * - any fragments
136
- * - any characters for any parts (does not conform to rfc1738)
137
- */
138
- export const urlValidator = Validators.pattern(/^https?:\/\/(?:[^.\s]+\.)+[^.\s]+$/);
139
- /**
140
- * Validates that the value is an integer (non-float)
141
- */
142
- export function integer(control) {
143
- // Don't validate empty values to allow optional controls
144
- if (control.value === null || control.value === undefined || control.value === '') {
145
- return null;
146
- }
147
- return Number.isInteger(parseFloat(control.value)) ? null : { integer: true };
148
- }
149
- /**
150
- * Validate that the value is a decimal number with up to `scale` digits
151
- *
152
- * The error contains the expected scale, so that the error message can explain
153
- * it to the end-user.
154
- */
155
- export function decimal(scale) {
156
- const regExp = new RegExp(`^-?\\d+(\\.\\d{0,${scale}})?$`);
157
- return control => {
158
- // Don't validate empty values to allow optional controls
159
- if (control.value === null || control.value === undefined || control.value === '') {
160
- return null;
161
- }
162
- const value = '' + control.value;
163
- if (value.match(regExp)) {
164
- return null;
165
- }
166
- return { decimal: scale };
167
- };
168
- }
169
- /**
170
- * For internal use to avoid re-creating regexp on each call of `money`
171
- */
172
- const twoDecimals = decimal(2);
173
- /**
174
- * Validate that the value is an amount of money, meaning a number with at most 2 decimals
175
- */
176
- export function money(control) {
177
- return twoDecimals(control) ? { money: true } : null;
178
- }
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFFVCxTQUFTLEVBR1QsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBSWhDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsU0FBaUIsRUFDakIsVUFBcUMsRUFDckMsWUFBc0I7SUFFdEIsT0FBTyxDQUFDLE9BQXdCLEVBQXVDLEVBQUU7UUFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUF5QixFQUFFLENBQUM7UUFDM0MsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUMsRUFBQyxDQUFDO1FBRXZELElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUMsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFDLEVBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsTUFB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QyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDaEYsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUvQjs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBd0I7SUFDMUMsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIEFzeW5jVmFsaWRhdG9yRm4sXG4gICAgRm9ybUFycmF5LFxuICAgIEZvcm1Db250cm9sU3RhdHVzLFxuICAgIEZvcm1Hcm91cCxcbiAgICBWYWxpZGF0aW9uRXJyb3JzLFxuICAgIFZhbGlkYXRvckZuLFxuICAgIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBmaXJzdCwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4vcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge3ZhbGlkVGxkc30gZnJvbSAnLi90bGQnO1xuaW1wb3J0IHtGaWx0ZXJHcm91cENvbmRpdGlvbn0gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvY2xhc3Nlcy9ncmFwaHFsLWRvY3RyaW5lLnR5cGVzJztcbmltcG9ydCB7VW50eXBlZE1vZGVsU2VydmljZX0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHRoYXQgdGhlIGZvcm0gY29udHJvbCB2YWx1ZSBpcyB1bmlxdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZTxUU2VydmljZSBleHRlbmRzIFVudHlwZWRNb2RlbFNlcnZpY2U+KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGV4Y2x1ZGVkSWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbW9kZWxTZXJ2aWNlOiBUU2VydmljZSxcbik6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgIWNvbnRyb2wuZGlydHkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjogRmlsdGVyR3JvdXBDb25kaXRpb24gPSB7fTtcbiAgICAgICAgY29uZGl0aW9uW2ZpZWxkTmFtZV0gPSB7ZXF1YWw6IHt2YWx1ZTogY29udHJvbC52YWx1ZX19O1xuXG4gICAgICAgIGlmIChleGNsdWRlZElkKSB7XG4gICAgICAgICAgICBjb25kaXRpb24uaWQgPSB7ZXF1YWw6IHt2YWx1ZTogZXhjbHVkZWRJZCwgbm90OiB0cnVlfX07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjoge3BhZ2VJbmRleDogMCwgcGFnZVNpemU6IDB9LFxuICAgICAgICAgICAgZmlsdGVyOiB7Z3JvdXBzOiBbe2NvbmRpdGlvbnM6IFtjb25kaXRpb25dfV19LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHF2bSA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyKCk7XG4gICAgICAgIHF2bS5zZXQoJ3ZhcmlhYmxlcycsIHZhcmlhYmxlcyk7XG5cbiAgICAgICAgcmV0dXJuIHRpbWVyKDUwMCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgIG1vZGVsU2VydmljZS5jb3VudChxdm0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgICAgICAgIG1hcChjb3VudCA9PiAoY291bnQgPiAwID8ge2R1cGxpY2F0ZVZhbHVlOiBjb3VudH0gOiBudWxsKSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFzeW5jIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyB0aGF0IHRoZSBmb3JtIGNvbnRyb2wgdmFsdWUgaXMgYXZhaWxhYmxlXG4gKlxuICogU2ltaWxhciB0byBgdW5pcXVlYCB2YWxpZGF0b3IsIGJ1dCBhbGxvd3MgdG8gdXNlIGEgY3VzdG9tIHF1ZXJ5IGZvciB3aGVuIHRoZSBjbGllbnQgZG9lc1xuICogbm90IGhhdmUgcGVybWlzc2lvbnMgZm9yIGBtb2RlbFNlcnZpY2UuY291bnQoKWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdmFpbGFibGUoXG4gICAgZ2V0QXZhaWxhYmxlUXVlcnk6ICh2YWx1ZTogc3RyaW5nLCBleGNsdWRlZElkOiBzdHJpbmcgfCBudWxsKSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+LFxuICAgIGV4Y2x1ZGVkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PiB7XG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCAhY29udHJvbC5kaXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRpbWVyKDUwMCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgIGdldEF2YWlsYWJsZVF1ZXJ5KGNvbnRyb2wudmFsdWUsIGV4Y2x1ZGVkSWQpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcChpc0F2YWlsYWJsZSA9PiAoaXNBdmFpbGFibGUgPyBudWxsIDoge2F2YWlsYWJsZTogdHJ1ZX0pKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIFJldHVybiBhbGwgZXJyb3JzIHJlY3Vyc2l2ZWx5IGZvciB0aGUgZ2l2ZW4gRm9ybSBvciBjb250cm9sXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDx1bmtub3duPik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICBlcnJvcnMgPSBPYmplY3QuZW50cmllcyhjb250cm9sLmNvbnRyb2xzKS5yZWR1Y2UoKGFjYzogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwsIFtrZXksIGNoaWxkQ29udHJvbF0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkRXJyb3JzID0gY29sbGVjdEVycm9ycyhjaGlsZENvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKGNoaWxkRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgYWNjID0gey4uLmFjYywgW2tleV06IGNoaWxkRXJyb3JzfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIG51bGwpO1xuICAgIH1cblxuICAgIGlmICghZXJyb3JzKSB7XG4gICAgICAgIGVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogRm9yY2UgdmFsaWRhdGlvbiBvZiBhbGwgZm9ybSBjb250cm9scyByZWN1cnNpdmVseS5cbiAqXG4gKiBSZWN1cnNpdmVseSBtYXJrIGRlc2NlbmRpbmcgZm9ybSB0cmVlIGFzIGRpcnR5IGFuZCB0b3VjaGVkIGluIG9yZGVyIHRvIHNob3cgYWxsIGludmFsaWQgZmllbGRzIG9uIGRlbWFuZC5cbiAqIFR5cGljYWxseSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCB1c2VyIGNsaWNrZWQgb24gY3JlYXRlIGJ1dHRvbiBidXQgc2V2ZXJhbCBmaWVsZHMgd2VyZSBub3RcbiAqIHRvdWNoZWQgYW5kIGFyZSBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBbGxGb3JtQ29udHJvbHMoY29udHJvbDogQWJzdHJhY3RDb250cm9sPHVua25vd24+KTogdm9pZCB7XG4gICAgY29udHJvbC5tYXJrQXNEaXJ0eSh7b25seVNlbGY6IHRydWV9KTtcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgIGZvciAoY29uc3QgWywgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbnRyb2wuY29udHJvbHMpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUFsbEZvcm1Db250cm9scyhjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWQoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cyk6IHN0YXR1cyBpcyAnVkFMSUQnIHtcbiAgICByZXR1cm4gc3RhdHVzID09PSAnVkFMSUQnO1xufVxuXG4vKipcbiAqIEVtaXRzIGV4YWN0bHkgMCBvciAxIHRpbWU6XG4gKlxuICogLSBpZiB0aGUgZm9ybSBpcyBWQUxJRCwgZW1pdHMgaW1tZWRpYXRlbHlcbiAqIC0gaWYgdGhlIGZvcm0gaXMgUEVORElORyBlbWl0cyBpZiBpdCBjaGFuZ2VzIGZyb20gUEVORElORyB0byBWQUxJRFxuICogLSBhbnkgb3RoZXIgY2FzZXMgd2lsbCAqKm5ldmVyKiogZW1pdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaWZWYWxpZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPCdWQUxJRCc+IHtcbiAgICBjb25zdCBvYnNlcnZhYmxlID0gY29udHJvbC5wZW5kaW5nID8gY29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUoZmlyc3QoKSkgOiBvZihjb250cm9sLnN0YXR1cyk7XG5cbiAgICByZXR1cm4gb2JzZXJ2YWJsZS5waXBlKGZpbHRlcihpc1ZhbGlkKSk7XG59XG5cbi8vIFRoaXMgaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBvZiBSRkNfNTMyMiB3aGVyZSB0aGUgaG9zdG5hbWU6XG4vL1xuLy8gLSBpcyB0b28gc3RyaWN0IGJlY2F1c2UgaXQgcmVqZWN0cyBJUCBhZGRyZXNzXG4vLyAtIGlzIHRvbyBsYXggYmVjYXVzZSBpdCBhY2NlcHRzIHByZXR0eSBtdWNoIGFueXRoaW5nIGVsc2Vcbi8vXG4vLyBidXQgdGhlIFRMRCB3aWxsIGJlIHZhbGlkYXRlZCBhZ2FpbnN0IGEgd2hpdGVsaXN0IHNvIHRoYXQgc2hvdWxkIG1ha2UgdGhlIHdob2xlIHRoaW5nIGFjY2VwdGFibGVcbmNvbnN0IFJGQ181MzIyID0gL15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbXkAgXStcXC5bXkBdKyQvdTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBlbWFpbCBhZGRyZXNzIGFjY29yZGluZyB0byBSRkMsIGFuZCBhbHNvIHRoYXQgaXQgaXMgcHVibGljbHkgZGVsaXZlcmFibGUgKG5vdCBcInJvb3RAbG9jYWxob3N0XCIgb3IgXCJyb290QDEyNy4wLjAuMVwiKVxuICpcbiAqIFRoaXMgaXMgbWVhbnQgdG8gcmVwbGFjZSAqKmFsbCoqIHVzYWdlcyBvZiBBbmd1bGFyIHRvbyBwZXJtaXNzaXZlIGBWYWxpZGF0b3JzLmVtYWlsYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaXZlcmFibGVFbWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgLy8gZG9uJ3QgdmFsaWRhdGUgZW1wdHkgdmFsdWVzIHRvIGFsbG93IG9wdGlvbmFsIGNvbnRyb2xzXG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB7ZW1haWw6IHRydWV9O1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyNTQpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGlmICghUkZDXzUzMjIudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IHRsZCA9IHZhbHVlLnNwbGl0KCcuJykucG9wKCk7XG4gICAgaWYgKCF2YWxpZFRsZHMuaW5jbHVkZXModGxkKSkge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTmFpdmUgVVJMIHZhbGlkYXRvciBmb3IgXCJub3JtYWxcIiB3ZWIgbGlua3MsIHRoYXQgaXMgYSBiaXQgdG9vIHBlcm1pc3NpdmVcbiAqXG4gKiBJdCBlbmZvcmNlczpcbiAqXG4gKiAgICAgLSBodHRwL2h0dHBzIHByb3RvY29sXG4gKiAgICAgLSBvbmUgZG9tYWluXG4gKiAgICAgLSBvbmUgdGxkXG4gKlxuICogSXQgYWxsb3dzOlxuICpcbiAqICAgICAtIGFueSBudW1iZXIgb2Ygc3ViZG9tYWluc1xuICogICAgIC0gYW55IHBhcmFtZXRlcnNcbiAqICAgICAtIGFueSBmcmFnbWVudHNcbiAqICAgICAtIGFueSBjaGFyYWN0ZXJzIGZvciBhbnkgcGFydHMgKGRvZXMgbm90IGNvbmZvcm0gdG8gcmZjMTczOClcbiAqL1xuZXhwb3J0IGNvbnN0IHVybFZhbGlkYXRvciA9IFZhbGlkYXRvcnMucGF0dGVybigvXmh0dHBzPzpcXC9cXC8oPzpbXi5cXHNdK1xcLikrW14uXFxzXSskLyk7XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIgKG5vbi1mbG9hdClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVnZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIC8vIERvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBvcHRpb25hbCBjb250cm9sc1xuICAgIGlmIChjb250cm9sLnZhbHVlID09PSBudWxsIHx8IGNvbnRyb2wudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBjb250cm9sLnZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpKSA/IG51bGwgOiB7aW50ZWdlcjogdHJ1ZX07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCB0aGUgdmFsdWUgaXMgYSBkZWNpbWFsIG51bWJlciB3aXRoIHVwIHRvIGBzY2FsZWAgZGlnaXRzXG4gKlxuICogVGhlIGVycm9yIGNvbnRhaW5zIHRoZSBleHBlY3RlZCBzY2FsZSwgc28gdGhhdCB0aGUgZXJyb3IgbWVzc2FnZSBjYW4gZXhwbGFpblxuICogaXQgdG8gdGhlIGVuZC11c2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaW1hbChzY2FsZTogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4tP1xcXFxkKyhcXFxcLlxcXFxkezAsJHtzY2FsZX19KT8kYCk7XG4gICAgcmV0dXJuIGNvbnRyb2wgPT4ge1xuICAgICAgICAvLyBEb24ndCB2YWxpZGF0ZSBlbXB0eSB2YWx1ZXMgdG8gYWxsb3cgb3B0aW9uYWwgY29udHJvbHNcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2wudmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gJycgKyBjb250cm9sLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUubWF0Y2gocmVnRXhwKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge2RlY2ltYWw6IHNjYWxlfTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEZvciBpbnRlcm5hbCB1c2UgdG8gYXZvaWQgcmUtY3JlYXRpbmcgcmVnZXhwIG9uIGVhY2ggY2FsbCBvZiBgbW9uZXlgXG4gKi9cbmNvbnN0IHR3b0RlY2ltYWxzID0gZGVjaW1hbCgyKTtcblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBhbW91bnQgb2YgbW9uZXksIG1lYW5pbmcgYSBudW1iZXIgd2l0aCBhdCBtb3N0IDIgZGVjaW1hbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbmV5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdHdvRGVjaW1hbHMoY29udHJvbCkgPyB7bW9uZXk6IHRydWV9IDogbnVsbDtcbn1cbiJdfQ==
@@ -1,47 +0,0 @@
1
- import { Directive, HostListener, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * Need to add http:// prefix if we don't have prefix already AND we don't have part of it
5
- */
6
- export function ensureHttpPrefix(value) {
7
- if (!value) {
8
- return value;
9
- }
10
- const completePrefix = /^(https?):\/\//i.test(value);
11
- const startingPrefix = 'https://'.startsWith(value) || 'http://'.startsWith(value);
12
- if (!completePrefix && !startingPrefix) {
13
- return 'http://' + value;
14
- }
15
- else {
16
- return value;
17
- }
18
- }
19
- /**
20
- * This directive only supports ReactiveForms due to ngModel/ngControl encapsulation and changes emissions.
21
- */
22
- export class NaturalHttpPrefixDirective {
23
- naturalHttpPrefix = null;
24
- httpize($event) {
25
- if (this.naturalHttpPrefix) {
26
- const newValue = ensureHttpPrefix($event) || $event;
27
- if ($event !== newValue) {
28
- this.naturalHttpPrefix.setValue(newValue);
29
- }
30
- }
31
- }
32
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalHttpPrefixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
33
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalHttpPrefixDirective, isStandalone: true, selector: "[naturalHttpPrefix]", inputs: { naturalHttpPrefix: "naturalHttpPrefix" }, host: { listeners: { "ngModelChange": "httpize($event)" } }, ngImport: i0 });
34
- }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalHttpPrefixDirective, decorators: [{
36
- type: Directive,
37
- args: [{
38
- selector: '[naturalHttpPrefix]',
39
- standalone: true,
40
- }]
41
- }], propDecorators: { naturalHttpPrefix: [{
42
- type: Input
43
- }], httpize: [{
44
- type: HostListener,
45
- args: ['ngModelChange', ['$event']]
46
- }] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1wcmVmaXguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2RpcmVjdGl2ZXMvaHR0cC1wcmVmaXguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFHN0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBb0I7SUFDakQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbkYsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sMEJBQTBCO0lBQ25CLGlCQUFpQixHQUEyQixJQUFJLENBQUM7SUFHMUQsT0FBTyxDQUFDLE1BQWM7UUFDekIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUM7WUFDcEQsSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO3VHQVhRLDBCQUEwQjsyRkFBMUIsMEJBQTBCOzsyRkFBMUIsMEJBQTBCO2tCQUp0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFFbUIsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUdDLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIE5lZWQgdG8gYWRkIGh0dHA6Ly8gcHJlZml4IGlmIHdlIGRvbid0IGhhdmUgcHJlZml4IGFscmVhZHkgQU5EIHdlIGRvbid0IGhhdmUgcGFydCBvZiBpdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlSHR0cFByZWZpeCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlUHJlZml4ID0gL14oaHR0cHM/KTpcXC9cXC8vaS50ZXN0KHZhbHVlKTtcbiAgICBjb25zdCBzdGFydGluZ1ByZWZpeCA9ICdodHRwczovLycuc3RhcnRzV2l0aCh2YWx1ZSkgfHwgJ2h0dHA6Ly8nLnN0YXJ0c1dpdGgodmFsdWUpO1xuXG4gICAgaWYgKCFjb21wbGV0ZVByZWZpeCAmJiAhc3RhcnRpbmdQcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuICdodHRwOi8vJyArIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgb25seSBzdXBwb3J0cyBSZWFjdGl2ZUZvcm1zIGR1ZSB0byBuZ01vZGVsL25nQ29udHJvbCBlbmNhcHN1bGF0aW9uIGFuZCBjaGFuZ2VzIGVtaXNzaW9ucy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbmF0dXJhbEh0dHBQcmVmaXhdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsSHR0cFByZWZpeERpcmVjdGl2ZSB7XG4gICAgQElucHV0KCkgcHVibGljIG5hdHVyYWxIdHRwUHJlZml4OiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gbnVsbDtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ25nTW9kZWxDaGFuZ2UnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBodHRwaXplKCRldmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdHVyYWxIdHRwUHJlZml4KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGVuc3VyZUh0dHBQcmVmaXgoJGV2ZW50KSB8fCAkZXZlbnQ7XG4gICAgICAgICAgICBpZiAoJGV2ZW50ICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbEh0dHBQcmVmaXguc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,53 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { MatDialog } from '@angular/material/dialog';
3
- import { MatSnackBar } from '@angular/material/snack-bar';
4
- import { NaturalConfirmComponent } from './confirm.component';
5
- import * as i0 from "@angular/core";
6
- export class NaturalAlertService {
7
- dialog = inject(MatDialog);
8
- snackBar = inject(MatSnackBar);
9
- /**
10
- * Show an informative message in a snack bar
11
- */
12
- info(message, duration = 2500) {
13
- return this.snackBar.open(message, undefined, {
14
- duration: duration === null ? undefined : duration,
15
- verticalPosition: 'top',
16
- horizontalPosition: 'end',
17
- });
18
- }
19
- /**
20
- * Show an error in a snack bar
21
- */
22
- error(message, duration = 2500, action) {
23
- return this.snackBar.open(message, action, {
24
- duration: duration === null ? undefined : duration,
25
- panelClass: ['snackbar-error'],
26
- verticalPosition: 'top',
27
- horizontalPosition: 'end',
28
- });
29
- }
30
- /**
31
- * Show a simple confirmation dialog and returns true if user confirmed it
32
- */
33
- confirm(title, message, confirmText, cancelText = $localize `Annuler`) {
34
- const dialog = this.dialog.open(NaturalConfirmComponent, {
35
- data: {
36
- title: title,
37
- message: message,
38
- confirmText: confirmText,
39
- cancelText: cancelText,
40
- },
41
- });
42
- return dialog.afterClosed();
43
- }
44
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAlertService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
45
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAlertService, providedIn: 'root' });
46
- }
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAlertService, decorators: [{
48
- type: Injectable,
49
- args: [{
50
- providedIn: 'root',
51
- }]
52
- }] });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2FsZXJ0L2FsZXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxXQUFXLEVBQWlDLE1BQU0sNkJBQTZCLENBQUM7QUFFeEYsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixNQUFNLHFCQUFxQixDQUFDOztBQUtoRixNQUFNLE9BQU8sbUJBQW1CO0lBQ1gsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQixRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWhEOztPQUVHO0lBQ0ksSUFBSSxDQUFDLE9BQWUsRUFBRSxXQUEwQixJQUFJO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtZQUMxQyxRQUFRLEVBQUUsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQ2xELGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsa0JBQWtCLEVBQUUsS0FBSztTQUM1QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBZSxFQUFFLFdBQTBCLElBQUksRUFBRSxNQUFlO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUN2QyxRQUFRLEVBQUUsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQ2xELFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1lBQzlCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsa0JBQWtCLEVBQUUsS0FBSztTQUM1QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQ1YsS0FBYSxFQUNiLE9BQWUsRUFDZixXQUFtQixFQUNuQixhQUFxQixTQUFTLENBQUEsU0FBUztRQUV2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBdUQsdUJBQXVCLEVBQUU7WUFDM0csSUFBSSxFQUFFO2dCQUNGLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixXQUFXLEVBQUUsV0FBVztnQkFDeEIsVUFBVSxFQUFFLFVBQVU7YUFDekI7U0FDSixDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxDQUFDO3VHQTlDUSxtQkFBbUI7MkdBQW5CLG1CQUFtQixjQUZoQixNQUFNOzsyRkFFVCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge01hdFNuYWNrQmFyLCBNYXRTbmFja0JhclJlZiwgU2ltcGxlU25hY2tCYXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOYXR1cmFsQ29uZmlybUNvbXBvbmVudCwgTmF0dXJhbENvbmZpcm1EYXRhfSBmcm9tICcuL2NvbmZpcm0uY29tcG9uZW50JztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEFsZXJ0U2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNuYWNrQmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcblxuICAgIC8qKlxuICAgICAqIFNob3cgYW4gaW5mb3JtYXRpdmUgbWVzc2FnZSBpbiBhIHNuYWNrIGJhclxuICAgICAqL1xuICAgIHB1YmxpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZHVyYXRpb246IG51bWJlciB8IG51bGwgPSAyNTAwKTogTWF0U25hY2tCYXJSZWY8U2ltcGxlU25hY2tCYXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGR1cmF0aW9uLFxuICAgICAgICAgICAgdmVydGljYWxQb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgICAgICBob3Jpem9udGFsUG9zaXRpb246ICdlbmQnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IGFuIGVycm9yIGluIGEgc25hY2sgYmFyXG4gICAgICovXG4gICAgcHVibGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgZHVyYXRpb246IG51bWJlciB8IG51bGwgPSAyNTAwLCBhY3Rpb24/OiBzdHJpbmcpOiBNYXRTbmFja0JhclJlZjxTaW1wbGVTbmFja0Jhcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsIGFjdGlvbiwge1xuICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uID09PSBudWxsID8gdW5kZWZpbmVkIDogZHVyYXRpb24sXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ10sXG4gICAgICAgICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ2VuZCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgYSBzaW1wbGUgY29uZmlybWF0aW9uIGRpYWxvZyBhbmQgcmV0dXJucyB0cnVlIGlmIHVzZXIgY29uZmlybWVkIGl0XG4gICAgICovXG4gICAgcHVibGljIGNvbmZpcm0oXG4gICAgICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgY29uZmlybVRleHQ6IHN0cmluZyxcbiAgICAgICAgY2FuY2VsVGV4dDogc3RyaW5nID0gJGxvY2FsaXplYEFubnVsZXJgLFxuICAgICk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuPE5hdHVyYWxDb25maXJtQ29tcG9uZW50LCBOYXR1cmFsQ29uZmlybURhdGEsIGJvb2xlYW4+KE5hdHVyYWxDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IGNvbmZpcm1UZXh0LFxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZGlhbG9nLmFmdGVyQ2xvc2VkKCk7XG4gICAgfVxufVxuIl19
@@ -1,16 +0,0 @@
1
- import { Component, inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
3
- import { MatButtonModule } from '@angular/material/button';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/material/dialog";
6
- import * as i2 from "@angular/material/button";
7
- export class NaturalConfirmComponent {
8
- data = inject(MAT_DIALOG_DATA);
9
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: NaturalConfirmComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button [mat-dialog-close]=\"false\" mat-button>{{ data.cancelText }}</button>\n <button [mat-dialog-close]=\"true\" mat-stroked-button cdkFocusInitial>{{ data.confirmText }}</button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{max-width:40em}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] });
11
- }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalConfirmComponent, decorators: [{
13
- type: Component,
14
- args: [{ standalone: true, imports: [MatDialogModule, MatButtonModule], template: "<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button [mat-dialog-close]=\"false\" mat-button>{{ data.cancelText }}</button>\n <button [mat-dialog-close]=\"true\" mat-stroked-button cdkFocusInitial>{{ data.confirmText }}</button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{max-width:40em}\n"] }]
15
- }] });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9hbGVydC9jb25maXJtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2FsZXJ0L2NvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFlekQsTUFBTSxPQUFPLHVCQUF1QjtJQUNoQixJQUFJLEdBQUcsTUFBTSxDQUFxQixlQUFlLENBQUMsQ0FBQzt1R0FEMUQsdUJBQXVCOzJGQUF2Qix1QkFBdUIsd0VDakJwQyx3WUFRQSw2RkRPYyxlQUFlLCtuQkFBRSxlQUFlOzsyRkFFakMsdUJBQXVCO2tCQU5uQyxTQUFTO2lDQUdNLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcblxuZXhwb3J0IHR5cGUgTmF0dXJhbENvbmZpcm1EYXRhID0ge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGNvbmZpcm1UZXh0OiBzdHJpbmc7XG4gICAgY2FuY2VsVGV4dDogc3RyaW5nO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jb25maXJtLmNvbXBvbmVudC5zY3NzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtNYXREaWFsb2dNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxDb25maXJtQ29tcG9uZW50IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YSA9IGluamVjdDxOYXR1cmFsQ29uZmlybURhdGE+KE1BVF9ESUFMT0dfREFUQSk7XG59XG4iLCI8aDIgbWF0LWRpYWxvZy10aXRsZT57eyBkYXRhLnRpdGxlIH19PC9oMj5cbjxtYXQtZGlhbG9nLWNvbnRlbnRcbiAgICA+PHAgY2xhc3M9XCJtYXQtYm9keVwiPnt7IGRhdGEubWVzc2FnZSB9fTwvcD48L21hdC1kaWFsb2ctY29udGVudFxuPlxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxidXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwiZmFsc2VcIiBtYXQtYnV0dG9uPnt7IGRhdGEuY2FuY2VsVGV4dCB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjZGtGb2N1c0luaXRpYWw+e3sgZGF0YS5jb25maXJtVGV4dCB9fTwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4iXX0=
@@ -1,6 +0,0 @@
1
- /*
2
- * Public API Surface of natural
3
- */
4
- export * from './alert.service';
5
- export * from './confirm.component';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2FsZXJ0L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5hdHVyYWxcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2FsZXJ0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maXJtLmNvbXBvbmVudCc7XG4iXX0=