coer-elements 1.0.18 → 1.1.1

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 (203) hide show
  1. package/README.md +63 -1
  2. package/components/index.d.ts +5 -0
  3. package/components/lib/coer-accordion/coer-accordion.component.d.ts +32 -0
  4. package/components/lib/coer-button/coer-button.component.d.ts +46 -0
  5. package/components/lib/coer-checkbox/coer-checkbox.component.d.ts +29 -0
  6. package/components/lib/coer-datebox/coer-datebox.component.d.ts +58 -0
  7. package/components/lib/coer-dropdown/coer-dropdown.component.d.ts +69 -0
  8. package/components/lib/coer-filebox/coer-filebox.component.d.ts +36 -0
  9. package/components/lib/coer-form/coer-form.component.d.ts +36 -0
  10. package/components/lib/coer-grid/coer-grid.component.d.ts +53 -0
  11. package/components/lib/coer-grid/coer-grid.extension.d.ts +111 -0
  12. package/components/lib/coer-list/coer-list.component.d.ts +57 -0
  13. package/components/lib/coer-modal/coer-modal.component.d.ts +38 -0
  14. package/components/lib/coer-numberbox/coer-numberbox.component.d.ts +56 -0
  15. package/components/lib/coer-page-title/coer-page-title.component.d.ts +14 -0
  16. package/components/lib/coer-selectbox/coer-selectbox.component.d.ts +79 -0
  17. package/components/lib/coer-sidenav/coer-menu-option/coer-menu-option.component.d.ts +22 -0
  18. package/components/lib/coer-sidenav/coer-sidenav.component.d.ts +49 -0
  19. package/components/lib/coer-sidenav/coer-toolbar/coer-toolbar.component.d.ts +32 -0
  20. package/components/lib/coer-sidenav/coer-tree-accordion/coer-tree-accordion.component.d.ts +43 -0
  21. package/components/lib/coer-switch/coer-switch.component.d.ts +32 -0
  22. package/components/lib/coer-tab/coer-tab.component.d.ts +36 -0
  23. package/components/lib/coer-textarea/coer-textarea.component.d.ts +52 -0
  24. package/components/lib/coer-textbox/coer-textbox.component.d.ts +66 -0
  25. package/components/lib/components.module.d.ts +46 -0
  26. package/components/public-api.d.ts +21 -0
  27. package/directives/index.d.ts +5 -0
  28. package/directives/lib/coer-ref.directive.d.ts +14 -0
  29. package/directives/lib/directives.module.d.ts +8 -0
  30. package/directives/lib/life-cycle.directive.d.ts +16 -0
  31. package/directives/public-api.d.ts +3 -0
  32. package/extensions/index.d.ts +5 -0
  33. package/extensions/lib/object.extension.d.ts +1 -0
  34. package/extensions/lib/string.extension.d.ts +19 -0
  35. package/extensions/public-api.d.ts +2 -0
  36. package/fesm2022/coer-elements-components.mjs +4040 -0
  37. package/fesm2022/coer-elements-components.mjs.map +1 -0
  38. package/fesm2022/coer-elements-directives.mjs +84 -0
  39. package/fesm2022/coer-elements-directives.mjs.map +1 -0
  40. package/fesm2022/coer-elements-extensions.mjs +68 -0
  41. package/fesm2022/coer-elements-extensions.mjs.map +1 -0
  42. package/fesm2022/coer-elements-guards.mjs +28 -0
  43. package/fesm2022/coer-elements-guards.mjs.map +1 -0
  44. package/fesm2022/coer-elements-interceptors.mjs +64 -0
  45. package/fesm2022/coer-elements-interceptors.mjs.map +1 -0
  46. package/fesm2022/coer-elements-interfaces.mjs +6 -0
  47. package/fesm2022/coer-elements-interfaces.mjs.map +1 -0
  48. package/fesm2022/coer-elements-pages.mjs +441 -0
  49. package/fesm2022/coer-elements-pages.mjs.map +1 -0
  50. package/fesm2022/coer-elements-pipes.mjs +87 -0
  51. package/fesm2022/coer-elements-pipes.mjs.map +1 -0
  52. package/fesm2022/coer-elements-signals.mjs +35 -0
  53. package/fesm2022/coer-elements-signals.mjs.map +1 -0
  54. package/fesm2022/coer-elements-tools.mjs +1899 -0
  55. package/fesm2022/coer-elements-tools.mjs.map +1 -0
  56. package/fesm2022/coer-elements.mjs +68 -0
  57. package/fesm2022/coer-elements.mjs.map +1 -0
  58. package/guards/index.d.ts +5 -0
  59. package/guards/lib/login.guard.d.ts +2 -0
  60. package/guards/lib/page.guard.d.ts +2 -0
  61. package/guards/public-api.d.ts +2 -0
  62. package/images/loading.gif +0 -0
  63. package/images/no-image.png +0 -0
  64. package/images/no-user.png +0 -0
  65. package/index.d.ts +12 -0
  66. package/interceptors/index.d.ts +5 -0
  67. package/interceptors/lib/user.interceptor.d.ts +8 -0
  68. package/interceptors/lib/utc-offset.interceptor.d.ts +8 -0
  69. package/interceptors/public-api.d.ts +1 -0
  70. package/interfaces/index.d.ts +5 -0
  71. package/interfaces/lib/app-source.interface.d.ts +4 -0
  72. package/interfaces/lib/box-button.interface.d.ts +6 -0
  73. package/interfaces/lib/bulk-load.interface.d.ts +5 -0
  74. package/interfaces/lib/coer-filebox/file-image.interface.d.ts +14 -0
  75. package/interfaces/lib/coer-filebox/file.interface.d.ts +5 -0
  76. package/interfaces/lib/coer-grid/grid-button-by-row.interface.d.ts +6 -0
  77. package/interfaces/lib/coer-grid/grid-checkbox.interface.d.ts +5 -0
  78. package/interfaces/lib/coer-grid/grid-coer-numberbox.interface.d.ts +12 -0
  79. package/interfaces/lib/coer-grid/grid-coer-selectbox.interface.d.ts +9 -0
  80. package/interfaces/lib/coer-grid/grid-coer-switch.interface.d.ts +6 -0
  81. package/interfaces/lib/coer-grid/grid-coer-textbox.interface.d.ts +11 -0
  82. package/interfaces/lib/coer-grid/grid-column.interface.d.ts +24 -0
  83. package/interfaces/lib/coer-grid/grid-data-source.interface.d.ts +6 -0
  84. package/interfaces/lib/coer-grid/grid-header-button.interface.d.ts +8 -0
  85. package/interfaces/lib/coer-grid/grid-header-export-button.interface.d.ts +10 -0
  86. package/interfaces/lib/coer-grid/grid-header.interface.d.ts +5 -0
  87. package/interfaces/lib/coer-grid/grid-import.interface.d.ts +4 -0
  88. package/interfaces/lib/coer-grid/grid-input-checkbox.interface.d.ts +5 -0
  89. package/interfaces/lib/coer-grid/grid-input-switch-change.interface.d.ts +5 -0
  90. package/interfaces/lib/coer-grid/grid-input-textbox.interface.d.ts +5 -0
  91. package/interfaces/lib/coer-grid/grid-item.interface.d.ts +5 -0
  92. package/interfaces/lib/coer-grid/grid-keyup-enter.interface.d.ts +6 -0
  93. package/interfaces/lib/coer-grid/grid-length.interface.d.ts +5 -0
  94. package/interfaces/lib/coer-grid/grid-search.interface.d.ts +5 -0
  95. package/interfaces/lib/coer-grid/grid-sort.interface.d.ts +5 -0
  96. package/interfaces/lib/coer-menu/menu-access.interface.d.ts +7 -0
  97. package/interfaces/lib/coer-menu/menu-option-selected.interface.d.ts +9 -0
  98. package/interfaces/lib/coer-menu/menu-selected.interface.d.ts +10 -0
  99. package/interfaces/lib/coer-menu/menu.interface.d.ts +10 -0
  100. package/interfaces/lib/coer-ref.interface.d.ts +10 -0
  101. package/interfaces/lib/image.interface.d.ts +11 -0
  102. package/interfaces/lib/login-response.interface.d.ts +10 -0
  103. package/interfaces/lib/login.interface.d.ts +4 -0
  104. package/interfaces/lib/page-title/breadcrumb.interface.d.ts +6 -0
  105. package/interfaces/lib/page-title/go-back.interface.d.ts +6 -0
  106. package/interfaces/lib/page-title/information.interface.d.ts +4 -0
  107. package/interfaces/lib/screen-size.interface.d.ts +5 -0
  108. package/interfaces/lib/service/http-request.interface.d.ts +10 -0
  109. package/interfaces/lib/service/http-response.interface.d.ts +6 -0
  110. package/interfaces/lib/service/patch.interface.d.ts +5 -0
  111. package/interfaces/lib/toolbar-menu.interface.d.ts +5 -0
  112. package/interfaces/public-api.d.ts +41 -0
  113. package/package.json +67 -38
  114. package/pages/index.d.ts +5 -0
  115. package/pages/lib/coer-loading/loading.component.d.ts +5 -0
  116. package/pages/lib/coer-menu/coer-menu.component.d.ts +12 -0
  117. package/pages/lib/coer-system/coer-system.component.d.ts +64 -0
  118. package/pages/lib/coer-system/login/login.component.d.ts +31 -0
  119. package/pages/lib/home/home.component.d.ts +7 -0
  120. package/pages/lib/pages.module.d.ts +18 -0
  121. package/pages/public-api.d.ts +5 -0
  122. package/pipes/index.d.ts +5 -0
  123. package/pipes/lib/html.pipe.d.ts +10 -0
  124. package/pipes/lib/no-image.pipe.d.ts +7 -0
  125. package/pipes/lib/numeric-format.pipe.d.ts +7 -0
  126. package/pipes/lib/pipes.module.d.ts +9 -0
  127. package/pipes/public-api.d.ts +4 -0
  128. package/signals/index.d.ts +5 -0
  129. package/signals/lib/breakpoint.signal.d.ts +1 -0
  130. package/signals/lib/is-loading.signal.d.ts +1 -0
  131. package/signals/lib/is-menu-open.signal.d.ts +1 -0
  132. package/signals/lib/is-modal-open.signal.d.ts +1 -0
  133. package/signals/lib/menu-selected.signal.d.ts +2 -0
  134. package/signals/lib/navigation.signal.d.ts +2 -0
  135. package/signals/public-api.d.ts +6 -0
  136. package/styles/angular-material.scss +20 -0
  137. package/styles/animations.scss +11 -0
  138. package/styles/bootstrap.scss +1 -14
  139. package/styles/coer-elements.css +2054 -0
  140. package/styles/colors.scss +90 -49
  141. package/styles/containers.scss +44 -0
  142. package/styles/cursores.scss +19 -0
  143. package/styles/index.scss +58 -0
  144. package/styles/layout.scss +49 -0
  145. package/styles/position.scss +7 -0
  146. package/styles/scroll-bar.scss +20 -0
  147. package/tools/index.d.ts +5 -0
  148. package/tools/lib/breadcrumbs.class.d.ts +18 -0
  149. package/tools/lib/coer-alert/coer-alert.component.d.ts +23 -0
  150. package/tools/lib/coer-grid.templates.d.ts +11 -0
  151. package/tools/lib/colors.class.d.ts +21 -0
  152. package/tools/lib/control-value.class.d.ts +25 -0
  153. package/tools/lib/date-time.class.d.ts +21 -0
  154. package/tools/lib/elements-html.class.d.ts +8 -0
  155. package/tools/lib/files.class.d.ts +16 -0
  156. package/tools/lib/filters.class.d.ts +11 -0
  157. package/tools/lib/menu.class.d.ts +9 -0
  158. package/tools/lib/page.class.d.ts +83 -0
  159. package/tools/lib/screen.class.d.ts +13 -0
  160. package/tools/lib/section.class.d.ts +33 -0
  161. package/tools/lib/service.class.d.ts +40 -0
  162. package/tools/lib/source.class.d.ts +20 -0
  163. package/tools/lib/tools.d.ts +42 -0
  164. package/tools/lib/user.class.d.ts +11 -0
  165. package/tools/public-api.d.ts +17 -0
  166. package/Signals/index.ts +0 -7
  167. package/Tools/Breadcrumbs.class.ts +0 -84
  168. package/Tools/ControlValue.ts +0 -63
  169. package/Tools/DateTime.class.ts +0 -27
  170. package/Tools/Files.class.ts +0 -119
  171. package/Tools/Page.class.ts +0 -197
  172. package/Tools/Screen.class.ts +0 -50
  173. package/Tools/Source.class.ts +0 -107
  174. package/Tools/Tools.ts +0 -212
  175. package/components/coer-alert/coer-alert.component.html +0 -56
  176. package/components/coer-alert/coer-alert.component.scss +0 -100
  177. package/components/coer-alert/coer-alert.component.ts +0 -249
  178. package/components/index.ts +0 -96
  179. package/dist_browser/Tools/Breadcrumbs.class.js +0 -66
  180. package/dist_browser/Tools/ControlValue.js +0 -49
  181. package/dist_browser/Tools/DateTime.class.js +0 -25
  182. package/dist_browser/Tools/Files.class.js +0 -99
  183. package/dist_browser/Tools/Page.class.js +0 -213
  184. package/dist_browser/Tools/Screen.class.js +0 -68
  185. package/dist_browser/Tools/Source.class.js +0 -83
  186. package/dist_browser/Tools/Tools.js +0 -227
  187. package/dist_browser/components/coer-alert/coer-alert.component.js +0 -314
  188. package/dist_browser/index.js +0 -8
  189. package/dist_node/Tools/Breadcrumbs.class.js +0 -69
  190. package/dist_node/Tools/ControlValue.js +0 -53
  191. package/dist_node/Tools/DateTime.class.js +0 -28
  192. package/dist_node/Tools/Files.class.js +0 -102
  193. package/dist_node/Tools/Page.class.js +0 -216
  194. package/dist_node/Tools/Screen.class.js +0 -71
  195. package/dist_node/Tools/Source.class.js +0 -86
  196. package/dist_node/Tools/Tools.js +0 -230
  197. package/dist_node/components/coer-alert/coer-alert.component.js +0 -317
  198. package/dist_node/index.js +0 -24
  199. package/dist_node/interfaces/index.js +0 -2
  200. package/index.ts +0 -8
  201. package/interfaces/index.ts +0 -47
  202. package/styles/coer.scss +0 -95
  203. package/tsconfig.json +0 -29
@@ -0,0 +1,1899 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, Component, forwardRef, inject, Inject, input, output } from '@angular/core';
3
+ import * as bootstrap from 'bootstrap';
4
+ import Swal from 'sweetalert2';
5
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
+ import moment from 'moment';
7
+ import * as XLSX from 'xlsx';
8
+ import { navigationSIGNAL } from 'coer-elements/signals';
9
+ import { Router, ActivatedRoute } from '@angular/router';
10
+ import { Observable } from 'rxjs';
11
+ import { HttpClient, HttpRequest } from '@angular/common/http';
12
+
13
+ const reference_signal = signal({});
14
+ const Tools = {
15
+ /** Generate a Guid */
16
+ GetGuid: (seed = 'coer-system') => {
17
+ let time = new Date().getTime();
18
+ seed = seed.toString().trim();
19
+ return seed + `-xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g, (c) => {
20
+ const random = (time + Math.random() * 16) % 16 | 0;
21
+ time = Math.floor(time / 16);
22
+ return (c == 'x' ? random : (random & 0x3 | 0x8)).toString(16);
23
+ });
24
+ },
25
+ /** Returns true if the value is null or undefined, false otherwise */
26
+ IsNull: (value) => {
27
+ return (value === undefined || value === null);
28
+ },
29
+ /** Returns true if the value is not null or undefined, false otherwise */
30
+ IsNotNull: (value) => {
31
+ return !Tools.IsNull(value);
32
+ },
33
+ /** Returns true if the value is null or undefined or contains only whitespace, false otherwise */
34
+ IsOnlyWhiteSpace: (value) => {
35
+ return Tools.IsNull(value) || (typeof value === 'string' && value.trim() === '');
36
+ },
37
+ /** Returns true if has string value and is not only whitespace, false otherwise */
38
+ IsNotOnlyWhiteSpace: (value) => {
39
+ return Tools.IsNotNull(value) && !Tools.IsOnlyWhiteSpace(value);
40
+ },
41
+ /** Avoid Null value */
42
+ AvoidNull: (value, type = null) => {
43
+ if (typeof value === 'string') {
44
+ if (type === null || type === 'string') {
45
+ return (Tools.IsNotNull(value) ? value : '');
46
+ }
47
+ else if (type === 'number') {
48
+ return (Tools.IsNotNull(value) ? Number(value) : 0);
49
+ }
50
+ else if (type === 'boolean') {
51
+ return (Tools.IsNotNull(value) ? (value.toUpperCase().trim() === 'TRUE') : false);
52
+ }
53
+ }
54
+ if (typeof value === 'number') {
55
+ if (type === null || type === 'number') {
56
+ return (Tools.IsNotNull(value) ? value : 0);
57
+ }
58
+ else if (type === 'string') {
59
+ return (Tools.IsNotNull(value) ? String(value) : '0');
60
+ }
61
+ else if (type === 'boolean') {
62
+ return (Tools.IsNotNull(value) ? (value >= 1) : false);
63
+ }
64
+ }
65
+ if (typeof value === "boolean") {
66
+ if (type === null || type === 'boolean') {
67
+ return (Tools.IsNotNull(value) ? value : false);
68
+ }
69
+ else if (type === 'string') {
70
+ return (Tools.IsNotNull(value) ? (value ? 'true' : 'false') : 'false');
71
+ }
72
+ else if (type === 'number') {
73
+ return (Tools.IsNotNull(value) ? (value ? 1 : 0) : 0);
74
+ }
75
+ }
76
+ switch (type) {
77
+ case 'string': return '';
78
+ case 'number': return 0;
79
+ case 'boolean': return false;
80
+ default: return '';
81
+ }
82
+ },
83
+ /** */
84
+ RemoveAccents: (value) => {
85
+ if (Tools.IsOnlyWhiteSpace(value))
86
+ return '';
87
+ return value.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
88
+ },
89
+ /** Break reference of a object or array */
90
+ BreakReference: (object) => {
91
+ if (object === null)
92
+ return object;
93
+ if (typeof object === 'undefined')
94
+ return object;
95
+ if (typeof object === 'string')
96
+ return object;
97
+ if (typeof object === 'number')
98
+ return object;
99
+ if (typeof object === 'boolean')
100
+ return object;
101
+ const OBJECT = JSON.parse(JSON.stringify(object));
102
+ return (Array.isArray(OBJECT)) ? [...OBJECT] : { ...OBJECT };
103
+ },
104
+ /** Clean extra whitespaces */
105
+ CleanUpBlanks: (text) => {
106
+ if (Tools.IsOnlyWhiteSpace(text))
107
+ return '';
108
+ let words = String(text).split(' ');
109
+ words = words.filter(x => x.length > 0);
110
+ return words.join(' ');
111
+ },
112
+ /** Get properties of an object */
113
+ GetPropertyList: (object) => {
114
+ const properties = [];
115
+ if (object === null)
116
+ return properties;
117
+ if (typeof object === 'undefined')
118
+ return properties;
119
+ if (typeof object === 'string')
120
+ return properties;
121
+ if (typeof object === 'number')
122
+ return properties;
123
+ if (typeof object === 'boolean')
124
+ return properties;
125
+ for (const property in object)
126
+ properties.push(String(property));
127
+ return properties;
128
+ },
129
+ /**
130
+ * Set an index and merge more arrays of the same type
131
+ * */
132
+ SetIndex: (array, ...args) => {
133
+ let index = 0;
134
+ for (const arg of args) {
135
+ array = Tools.BreakReference(array).concat(Tools.BreakReference(arg));
136
+ }
137
+ return Tools.BreakReference(array).map(item => Object.assign({ index: index++ }, item));
138
+ },
139
+ /** Set First Char To Lower */
140
+ FirstCharToLower: (text) => {
141
+ if (Tools.IsOnlyWhiteSpace(text))
142
+ return '';
143
+ const textArray = [];
144
+ for (let i = 0; i < text.length; i++) {
145
+ if (i === 0)
146
+ textArray.push(text[i].toLowerCase());
147
+ else
148
+ textArray.push(text[i]);
149
+ }
150
+ return textArray.join('');
151
+ },
152
+ /** Set First Char To Upper */
153
+ FirstCharToUpper: (text) => {
154
+ if (Tools.IsOnlyWhiteSpace(text))
155
+ return '';
156
+ const textArray = [];
157
+ for (let i = 0; i < text.length; i++) {
158
+ if (i === 0)
159
+ textArray.push(text[i].toUpperCase());
160
+ else
161
+ textArray.push(text[i]);
162
+ }
163
+ return textArray.join('');
164
+ },
165
+ /** Sort an array in ascending order by property */
166
+ SortBy: (array, property, propertyType = 'string') => {
167
+ switch (propertyType) {
168
+ case 'string': {
169
+ return array.sort((x, y) => {
170
+ if (String(x[property]).toUpperCase().trim() < String(y[property]).toUpperCase().trim())
171
+ return -1;
172
+ else if (String(x[property]).toUpperCase().trim() > String(y[property]).toUpperCase().trim())
173
+ return 1;
174
+ else
175
+ return 0;
176
+ });
177
+ }
178
+ case 'number': {
179
+ return array.sort((x, y) => Number(x[property] - Number(y[property])));
180
+ }
181
+ }
182
+ },
183
+ /** Sort an array in descending order by property */
184
+ SortByDesc: (array, property, propertyType = 'string') => {
185
+ switch (propertyType) {
186
+ case 'string': {
187
+ return array.sort((x, y) => {
188
+ if (String(x[property]).toUpperCase().trim() < String(y[property]).toUpperCase().trim())
189
+ return 1;
190
+ else if (String(x[property]).toUpperCase().trim() > String(y[property]).toUpperCase().trim())
191
+ return -1;
192
+ else
193
+ return 0;
194
+ });
195
+ }
196
+ case 'number': {
197
+ return array.sort((x, y) => Number(Number(y[property])) - x[property]);
198
+ }
199
+ }
200
+ },
201
+ /** Return a string with forman numeric */
202
+ GetNumericFormat: (value, decimals = 0) => {
203
+ if (Tools.IsOnlyWhiteSpace(value) || isNaN(Number(value))) {
204
+ return '0';
205
+ }
206
+ let valueInteger = '';
207
+ let valueDecimal = '';
208
+ value = value.toString().replaceAll(' ', '');
209
+ if (value.includes('.') || (decimals > 0)) {
210
+ valueInteger = value.includes('.') ? value.split('.')[0] : value;
211
+ if (decimals > 0) {
212
+ const PADDING = decimals - valueDecimal.length;
213
+ valueDecimal = value.includes('.') ? value.split('.')[1] : '';
214
+ for (let i = 0; i < PADDING; i++)
215
+ valueDecimal += '0';
216
+ valueDecimal = valueDecimal.substring(0, decimals);
217
+ valueDecimal = `.${valueDecimal}`;
218
+ }
219
+ }
220
+ else {
221
+ valueInteger = value;
222
+ }
223
+ let counter = 0;
224
+ const VALUE_INTEGER_ARRAY = [];
225
+ for (const char of valueInteger.split('').reverse()) {
226
+ if (counter == 3) {
227
+ VALUE_INTEGER_ARRAY.push(',');
228
+ counter = 0;
229
+ }
230
+ VALUE_INTEGER_ARRAY.push(char);
231
+ ++counter;
232
+ }
233
+ valueInteger = VALUE_INTEGER_ARRAY.reverse().join('');
234
+ return `${valueInteger}${valueDecimal}`;
235
+ },
236
+ /** Wait the time indicated */
237
+ Sleep: (milliseconds = 0, reference = null) => {
238
+ if (Tools.IsNull(reference)) {
239
+ return new Promise(Resolve => setTimeout(Resolve, milliseconds));
240
+ }
241
+ else
242
+ return new Promise(Resolve => {
243
+ reference = reference.replaceAll(' ', '_').toLowerCase();
244
+ if (reference_signal().hasOwnProperty(reference)) {
245
+ clearInterval(reference_signal()[reference]);
246
+ }
247
+ reference_signal.set(Object.assign(reference_signal(), {
248
+ [reference]: setTimeout(() => {
249
+ Resolve();
250
+ clearInterval(reference_signal()[reference]);
251
+ const _reference = { ...reference_signal() };
252
+ delete _reference[reference];
253
+ reference_signal.set({ ..._reference });
254
+ }, milliseconds)
255
+ }));
256
+ });
257
+ },
258
+ /** */
259
+ Distinct: (array, ...args) => {
260
+ for (const arg of args) {
261
+ array = Tools.BreakReference(array).concat(Tools.BreakReference(arg));
262
+ }
263
+ return Array.from(new Set(array));
264
+ },
265
+ /** */
266
+ Except: (array, filter, ...properties) => {
267
+ const result = [];
268
+ for (const item of array) {
269
+ if (typeof item === 'object' && Tools.IsNotNull(properties) && properties.length > 0) {
270
+ if (!filter.some(x => x[properties[0]] === item[properties[0]])) {
271
+ result.push(item);
272
+ }
273
+ }
274
+ }
275
+ return [...result];
276
+ }
277
+ };
278
+
279
+ class Colors {
280
+ static { this.blue = '#0d6efd'; }
281
+ static { this.gray = '#6c757d'; }
282
+ static { this.green = '#198754'; }
283
+ static { this.yellow = '#ffc107'; }
284
+ static { this.red = '#dc3545'; }
285
+ static { this.white = '#f5f5f5'; }
286
+ static { this.black = '#252525'; }
287
+ static { this.orange = '#fd6031'; }
288
+ static { this.purple = '#a615bc'; }
289
+ /** Returns the color palette in hexadecimal */
290
+ static { this.colorsHex = new Map([
291
+ ['blue', '#0d6efd'],
292
+ ['gray', '#6c757d'],
293
+ ['green', '#198754'],
294
+ ['yellow', '#ffc107'],
295
+ ['red', '#dc3545'],
296
+ ['white', '#f5f5f5'],
297
+ ['black', '#252525'],
298
+ ['orange', '#fd6031'],
299
+ ['purple', '#a615bc'],
300
+ ]); }
301
+ /** Returns the color palette in RGB */
302
+ static { this.ColorsRGB = new Map([
303
+ ['blue', [13, 110, 253]],
304
+ ['gray', [108, 117, 125]],
305
+ ['green', [25, 135, 84]],
306
+ ['yellow', [225, 193, 7]],
307
+ ['red', [220, 53, 69]],
308
+ ['white', [245, 245, 245]],
309
+ ['black', [37, 37, 37]],
310
+ ['orange', [253, 96, 49]],
311
+ ['purple', [166, 21, 188]],
312
+ ]); }
313
+ /** Returns a random color in hexadecimal */
314
+ static { this.GetRandomColorHex = () => "#xxxxxx".replace(/x/g, () => (Math.random() * 16 | 0).toString(16)); }
315
+ /** Returns the number of colors requested */
316
+ static GetColorHexList(quantity) {
317
+ const colors = [];
318
+ let counter = 0;
319
+ while (counter < quantity) {
320
+ for (const color of this.colorsHex.values()) {
321
+ colors.push(color);
322
+ if (++counter === quantity)
323
+ break;
324
+ }
325
+ }
326
+ return colors;
327
+ }
328
+ /** Returns the number of colors requested with opacity */
329
+ static GetColorRGBList(quantity) {
330
+ const colors = [];
331
+ let alpha = 1.0;
332
+ let counter = 0;
333
+ let lastColor = [...Array.from(this.ColorsRGB.keys())].pop();
334
+ while (counter < quantity) {
335
+ for (const [color, value] of this.ColorsRGB.entries()) {
336
+ colors.push(`rgba(${value[0]}, ${value[1]}, ${value[2]}, ${alpha})`);
337
+ if (color === lastColor)
338
+ alpha -= 0.2;
339
+ if (++counter === quantity)
340
+ break;
341
+ }
342
+ }
343
+ return colors;
344
+ }
345
+ }
346
+
347
+ class CoerAlert {
348
+ /** */
349
+ Success(message = null, title = null, icon = null, autohide = 3000) {
350
+ //Title
351
+ if (Tools.IsOnlyWhiteSpace(title))
352
+ title = 'Success';
353
+ const alertSuccessTitle = document.getElementById('alert-success-title');
354
+ alertSuccessTitle.textContent = title;
355
+ //Icon
356
+ icon = this.GetIcon(title, icon, 'bi-check-circle fa-beat');
357
+ const alertSuccessIcon = document.getElementById('alert-success-icon');
358
+ this.SetIcon(alertSuccessIcon, icon);
359
+ //Message
360
+ if (Tools.IsNull(message))
361
+ message = '';
362
+ const alertSuccessMessage = document.getElementById('alert-success-message');
363
+ alertSuccessMessage.innerHTML = message;
364
+ //Toast
365
+ const alertSuccess = document.getElementById('alert-success');
366
+ this.SetAutoHide(alertSuccess, autohide);
367
+ const toast = bootstrap.Toast.getOrCreateInstance(alertSuccess);
368
+ toast.show();
369
+ }
370
+ /** */
371
+ Error(message = null, title = null, icon = null, autohide = 3000) {
372
+ //Title
373
+ if (Tools.IsOnlyWhiteSpace(title))
374
+ title = 'Error';
375
+ const alertErrorTitle = document.getElementById('alert-error-title');
376
+ alertErrorTitle.textContent = title;
377
+ //Icon
378
+ icon = this.GetIcon(title, icon, 'bi-exclamation-octagon fa-beat');
379
+ const alertErrorIcon = document.getElementById('alert-error-icon');
380
+ this.SetIcon(alertErrorIcon, icon);
381
+ //Message
382
+ if (Tools.IsNull(message))
383
+ message = '';
384
+ const alertErrorBody = document.getElementById('alert-error-message');
385
+ alertErrorBody.innerHTML = message;
386
+ //Toast
387
+ const alertError = document.getElementById('alert-error');
388
+ this.SetAutoHide(alertError, autohide);
389
+ const toast = bootstrap.Toast.getOrCreateInstance(alertError);
390
+ toast.show();
391
+ }
392
+ /** */
393
+ Info(message = null, title = null, icon = null, autohide = 3000) {
394
+ //Title
395
+ if (Tools.IsOnlyWhiteSpace(title))
396
+ title = 'Info';
397
+ const alertInfoTitle = document.getElementById('alert-info-title');
398
+ alertInfoTitle.textContent = title;
399
+ //Icon
400
+ icon = this.GetIcon(title, icon, 'bi-info-circle fa-beat');
401
+ const alertInfoIcon = document.getElementById('alert-info-icon');
402
+ this.SetIcon(alertInfoIcon, icon);
403
+ //Message
404
+ if (Tools.IsNull(message))
405
+ message = '';
406
+ const alertInfoBody = document.getElementById('alert-info-message');
407
+ alertInfoBody.innerHTML = message;
408
+ //Toast
409
+ const alertInfo = document.getElementById('alert-info');
410
+ this.SetAutoHide(alertInfo, autohide);
411
+ const toast = bootstrap.Toast.getOrCreateInstance(alertInfo);
412
+ toast.show();
413
+ }
414
+ /** */
415
+ Warning(message = null, title = null, icon = null, autohide = 3000) {
416
+ //Title
417
+ if (Tools.IsOnlyWhiteSpace(title))
418
+ title = 'Warning';
419
+ const alertWarningTitle = document.getElementById('alert-warning-title');
420
+ alertWarningTitle.textContent = title;
421
+ //Icon
422
+ icon = this.GetIcon(title, icon, 'bi-exclamation-triangle-fill fa-beat');
423
+ const alertWarningIcon = document.getElementById('alert-warning-icon');
424
+ this.SetIcon(alertWarningIcon, icon);
425
+ //Message
426
+ if (Tools.IsNull(message))
427
+ message = '';
428
+ const alertWarningBody = document.getElementById('alert-warning-message');
429
+ alertWarningBody.innerHTML = message;
430
+ //Toast
431
+ const alertWarning = document.getElementById('alert-warning');
432
+ this.SetAutoHide(alertWarning, autohide);
433
+ const toast = bootstrap.Toast.getOrCreateInstance(alertWarning);
434
+ toast.show();
435
+ }
436
+ /** */
437
+ Close(alert) {
438
+ return new Promise(Resolve => {
439
+ const element = document.getElementById(alert);
440
+ const toast = bootstrap.Toast.getOrCreateInstance(element);
441
+ toast.hide();
442
+ setTimeout(() => { Resolve(); }, 200);
443
+ });
444
+ }
445
+ /** */
446
+ Confirm(message = 'Proceed?', alertType = 'warning', icon = null) {
447
+ return new Promise(Resolve => {
448
+ let color;
449
+ let iconType;
450
+ switch (alertType) {
451
+ case 'danger':
452
+ {
453
+ if (Tools.IsNull(icon))
454
+ icon = 'bi-exclamation-octagon';
455
+ iconType = 'error';
456
+ color = Colors.red;
457
+ break;
458
+ }
459
+ ;
460
+ case 'success':
461
+ {
462
+ if (Tools.IsNull(icon))
463
+ icon = 'bi-check-circle';
464
+ iconType = 'info';
465
+ color = Colors.green;
466
+ break;
467
+ }
468
+ ;
469
+ case 'info':
470
+ {
471
+ if (Tools.IsNull(icon))
472
+ icon = 'bi-info-circle';
473
+ iconType = 'error';
474
+ color = Colors.black;
475
+ break;
476
+ }
477
+ ;
478
+ default: {
479
+ if (Tools.IsNull(icon))
480
+ icon = 'bi-exclamation-triangle-fill';
481
+ iconType = 'warning';
482
+ color = Colors.yellow;
483
+ break;
484
+ }
485
+ }
486
+ switch (icon) {
487
+ case 'delete':
488
+ icon = 'fa-regular fa-trash-can';
489
+ break;
490
+ }
491
+ Swal.fire({
492
+ icon: iconType,
493
+ iconColor: 'transparent',
494
+ iconHtml: `<i class="${icon}" style="color: ${color};"></i>`,
495
+ html: message,
496
+ showConfirmButton: true,
497
+ confirmButtonText: 'Yes',
498
+ confirmButtonColor: color,
499
+ focusConfirm: true,
500
+ showDenyButton: true,
501
+ denyButtonColor: color,
502
+ focusDeny: false,
503
+ reverseButtons: true,
504
+ allowOutsideClick: false,
505
+ allowEscapeKey: false,
506
+ allowEnterKey: true,
507
+ customClass: {
508
+ denyButton: 'sweet-alert-button',
509
+ confirmButton: 'sweet-alert-button'
510
+ }
511
+ }).then(({ value }) => setTimeout(() => Resolve(value)));
512
+ });
513
+ }
514
+ /** */
515
+ SetIcon(element, icon) {
516
+ if (icon.toUpperCase() != 'NONE') {
517
+ for (const item of [...element.classList.value.split(' ')]) {
518
+ if (item.length > 0) {
519
+ element.classList.remove(item);
520
+ element.classList.remove('q');
521
+ }
522
+ }
523
+ icon = icon.trim();
524
+ const hasWhiteSpaces = / /;
525
+ if (hasWhiteSpaces.test(icon)) {
526
+ const classes = icon.split(' ');
527
+ for (const icon of classes)
528
+ element.classList.add(icon);
529
+ }
530
+ else
531
+ element.classList.add(icon);
532
+ }
533
+ }
534
+ /** */
535
+ SetAutoHide(element, autohide) {
536
+ element.removeAttribute('data-bs-autohide');
537
+ element.removeAttribute('data-bs-delay');
538
+ if (autohide && autohide > 0) {
539
+ if (autohide < 1000)
540
+ autohide = 1000;
541
+ element.setAttribute('data-bs-autohide', 'true');
542
+ element.setAttribute('data-bs-delay', String(autohide));
543
+ }
544
+ else
545
+ element.setAttribute('data-bs-autohide', 'false');
546
+ }
547
+ /** */
548
+ GetIcon(title, icon, iconDefault) {
549
+ if (icon == null || icon == '') {
550
+ title = title.replaceAll(' ', '').toUpperCase();
551
+ switch (title) {
552
+ case 'ENABLED': return 'fa-solid fa-thumbs-up fa-flip-horizontal';
553
+ case 'ACTIVE': return 'fa-solid fa-thumbs-up fa-flip-horizontal';
554
+ case 'ACTIVED': return 'fa-solid fa-thumbs-up fa-flip-horizontal';
555
+ case 'DISABLE': return 'fa-solid fa-thumbs-down fa-flip-horizontal';
556
+ case 'DISABLED': return 'fa-solid fa-thumbs-down fa-flip-horizontal';
557
+ case 'DELETE': return 'fa-regular fa-trash-can';
558
+ case 'DELETED': return 'fa-regular fa-trash-can';
559
+ default: return iconDefault;
560
+ }
561
+ }
562
+ return icon;
563
+ }
564
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CoerAlert, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
565
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.1", type: CoerAlert, isStandalone: true, selector: "coer-alert", ngImport: i0, template: "<aside class=\"toast-container coer-alert\">\r\n <!-- Success -->\r\n <div id=\"alert-success\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"toast\">\r\n <div class=\"toast-header\">\r\n <i id=\"alert-success-icon\"></i>\r\n <strong id=\"alert-success-title\"></strong>\r\n <button type=\"button\" (click)=\"Close('alert-success')\" class=\"btn-close btn-close-white\"></button>\r\n </div>\r\n\r\n <div class=\"toast-body\">\r\n <pre id=\"alert-success-message\"></pre>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Error -->\r\n <div id=\"alert-error\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"toast\">\r\n <div class=\"toast-header\">\r\n <i id=\"alert-error-icon\"></i>\r\n <strong id=\"alert-error-title\"></strong>\r\n <button type=\"button\" (click)=\"Close('alert-error')\" class=\"btn-close btn-close-white\"></button>\r\n </div>\r\n\r\n <div class=\"toast-body\">\r\n <pre id=\"alert-error-message\"></pre>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Info -->\r\n <div id=\"alert-info\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"toast\">\r\n <div class=\"toast-header\">\r\n <i id=\"alert-info-icon\"></i>\r\n <strong id=\"alert-info-title\"></strong>\r\n <button type=\"button\" (click)=\"Close('alert-info')\" class=\"btn-close btn-close-white\"></button>\r\n </div>\r\n\r\n <div class=\"toast-body\">\r\n <pre id=\"alert-info-message\"></pre>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Warning -->\r\n <div id=\"alert-warning\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"toast\">\r\n <div class=\"toast-header\">\r\n <i id=\"alert-warning-icon\"></i>\r\n <strong id=\"alert-warning-title\"></strong>\r\n <button type=\"button\" (click)=\"Close('alert-warning')\" class=\"btn-close\"></button>\r\n </div>\r\n\r\n <div class=\"toast-body\">\r\n <pre id=\"alert-warning-message\"></pre>\r\n </div>\r\n </div>\r\n</aside>", styles: [":root{--blue: #0d6efd;--gray: #6c757d;--green: #198754;--yellow: #ffc107;--red: #dc3545;--white: #f5f5f5;--black: #252525;--orange: #fd6031;--purple: #a615bc}.text-blue{color:var(--blue)!important}.text-blue-bold{color:var(--blue)!important;font-weight:700!important}.background-blue{background-color:var(--blue)!important}.background-border-blue{background-color:var(--blue)!important;border-color:var(--blue)!important}.border-blue{border-color:var(--blue)!important}.text-gray{color:var(--gray)!important}.text-gray-bold{color:var(--gray)!important;font-weight:700!important}.background-gray{background-color:var(--gray)!important}.background-border-gray{background-color:var(--gray)!important;border-color:var(--gray)!important}.border-gray{border-color:var(--gray)!important}.text-green{color:var(--green)!important}.text-green-bold{color:var(--green)!important;font-weight:700!important}.background-green{background-color:var(--green)!important}.background-border-green{background-color:var(--green)!important;border-color:var(--green)!important}.border-green{border-color:var(--green)!important}.text-yellow{color:var(--yellow)!important}.text-yellow-bold{color:var(--yellow)!important;font-weight:700!important}.background-yellow{background-color:var(--yellow)!important}.background-border-yellow{background-color:var(--yellow)!important;border-color:var(--yellow)!important}.border-yellow{border-color:var(--yellow)!important}.text-red{color:var(--red)!important}.text-red-bold{color:var(--red)!important;font-weight:700!important}.background-red{background-color:var(--red)!important}.background-border-red{background-color:var(--red)!important;border-color:var(--red)!important}.border-red{border-color:var(--red)!important}.text-white{color:var(--white)!important}.text-white-bold{color:var(--white)!important;font-weight:700!important}.background-white{background-color:var(--white)!important}.background-border-white{background-color:var(--white)!important;border-color:var(--white)!important}.border-white{border-color:var(--white)!important}.text-black{color:var(--black)!important}.text-black-bold{color:var(--black)!important;font-weight:700!important}.background-black{background-color:var(--black)!important}.background-border-black{background-color:var(--black)!important;border-color:var(--black)!important}.border-black{border-color:var(--black)!important}.text-orange{color:var(--orange)!important}.text-orange-bold{color:var(--orange)!important;font-weight:700!important}.background-orange{background-color:var(--orange)!important}.background-border-orange{background-color:var(--orange)!important;border-color:var(--orange)!important}.border-orange{border-color:var(--orange)!important}.text-transparent{color:transparent!important}.background-transparent{background-color:transparent!important}.border-transparent{border-color:transparent!important}aside.toast-container{position:fixed;bottom:0;right:0;padding:15px!important;z-index:2000!important}aside.toast-container i,aside.toast-container svg{display:flex;align-items:center}aside.toast-container strong{margin:0 auto 0 5px}aside.toast-container div.toast,aside.toast-container div.toast-header{border-top-left-radius:10px;border-top-right-radius:10px;color:var(--white)}aside.toast-container div.toast,aside.toast-container div.toast-body{border-bottom-left-radius:10px;border-bottom-right-radius:10px;width:auto!important;min-width:350px!important;max-width:470px!important;color:var(--white)}aside.toast-container div.toast-body{min-height:36px}aside.toast-container pre{font-family:Roboto,RobotoFallback,Noto Kufi Arabic,Helvetica,Arial,sans-serif;white-space:pre-wrap;font-size:medium}aside.toast-container button{margin:0 2px!important;width:10px!important;height:10px!important;box-shadow:none!important;outline:none!important;border:none!important}aside.toast-container div#alert-success div.toast-header,aside.toast-container div#alert-success div.toast-body{background-color:var(--green)}aside.toast-container div#alert-info div.toast-header,aside.toast-container div#alert-info div.toast-body{background-color:var(--blue)}aside.toast-container div#alert-error div.toast-header,aside.toast-container div#alert-error div.toast-body{background-color:var(--red)}aside.toast-container div#alert-warning div.toast-header,aside.toast-container div#alert-warning div.toast-body{background-color:var(--yellow);border-color:var(--black);color:var(--black)}aside.toast-container div#alert-success:hover,aside.toast-container div#alert-info:hover,aside.toast-container div#alert-error:hover,aside.toast-container div#alert-warning:hover{transform:scale(1.01);box-shadow:2px 2px 10px #789;cursor:default}button.sweet-alert-button{width:100px!important;height:40px!important;display:flex!important;align-items:center!important;justify-content:center!important;margin:0 5px!important;outline:none!important;border:none!important;box-shadow:none!important}aside.toast-container>*{border:none!important;z-index:2000!important;margin:15px 0 0!important}\n"] }); }
566
+ }
567
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CoerAlert, decorators: [{
568
+ type: Component,
569
+ args: [{ selector: 'coer-alert', standalone: true, template: "<aside class=\"toast-container coer-alert\">\r\n <!-- Success -->\r\n <div id=\"alert-success\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"toast\">\r\n <div class=\"toast-header\">\r\n <i id=\"alert-success-icon\"></i>\r\n <strong id=\"alert-success-title\"></strong>\r\n <button type=\"button\" (click)=\"Close('alert-success')\" class=\"btn-close btn-close-white\"></button>\r\n </div>\r\n\r\n <div class=\"toast-body\">\r\n <pre id=\"alert-success-message\"></pre>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Error -->\r\n <div id=\"alert-error\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"toast\">\r\n <div class=\"toast-header\">\r\n <i id=\"alert-error-icon\"></i>\r\n <strong id=\"alert-error-title\"></strong>\r\n <button type=\"button\" (click)=\"Close('alert-error')\" class=\"btn-close btn-close-white\"></button>\r\n </div>\r\n\r\n <div class=\"toast-body\">\r\n <pre id=\"alert-error-message\"></pre>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Info -->\r\n <div id=\"alert-info\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"toast\">\r\n <div class=\"toast-header\">\r\n <i id=\"alert-info-icon\"></i>\r\n <strong id=\"alert-info-title\"></strong>\r\n <button type=\"button\" (click)=\"Close('alert-info')\" class=\"btn-close btn-close-white\"></button>\r\n </div>\r\n\r\n <div class=\"toast-body\">\r\n <pre id=\"alert-info-message\"></pre>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Warning -->\r\n <div id=\"alert-warning\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"toast\">\r\n <div class=\"toast-header\">\r\n <i id=\"alert-warning-icon\"></i>\r\n <strong id=\"alert-warning-title\"></strong>\r\n <button type=\"button\" (click)=\"Close('alert-warning')\" class=\"btn-close\"></button>\r\n </div>\r\n\r\n <div class=\"toast-body\">\r\n <pre id=\"alert-warning-message\"></pre>\r\n </div>\r\n </div>\r\n</aside>", styles: [":root{--blue: #0d6efd;--gray: #6c757d;--green: #198754;--yellow: #ffc107;--red: #dc3545;--white: #f5f5f5;--black: #252525;--orange: #fd6031;--purple: #a615bc}.text-blue{color:var(--blue)!important}.text-blue-bold{color:var(--blue)!important;font-weight:700!important}.background-blue{background-color:var(--blue)!important}.background-border-blue{background-color:var(--blue)!important;border-color:var(--blue)!important}.border-blue{border-color:var(--blue)!important}.text-gray{color:var(--gray)!important}.text-gray-bold{color:var(--gray)!important;font-weight:700!important}.background-gray{background-color:var(--gray)!important}.background-border-gray{background-color:var(--gray)!important;border-color:var(--gray)!important}.border-gray{border-color:var(--gray)!important}.text-green{color:var(--green)!important}.text-green-bold{color:var(--green)!important;font-weight:700!important}.background-green{background-color:var(--green)!important}.background-border-green{background-color:var(--green)!important;border-color:var(--green)!important}.border-green{border-color:var(--green)!important}.text-yellow{color:var(--yellow)!important}.text-yellow-bold{color:var(--yellow)!important;font-weight:700!important}.background-yellow{background-color:var(--yellow)!important}.background-border-yellow{background-color:var(--yellow)!important;border-color:var(--yellow)!important}.border-yellow{border-color:var(--yellow)!important}.text-red{color:var(--red)!important}.text-red-bold{color:var(--red)!important;font-weight:700!important}.background-red{background-color:var(--red)!important}.background-border-red{background-color:var(--red)!important;border-color:var(--red)!important}.border-red{border-color:var(--red)!important}.text-white{color:var(--white)!important}.text-white-bold{color:var(--white)!important;font-weight:700!important}.background-white{background-color:var(--white)!important}.background-border-white{background-color:var(--white)!important;border-color:var(--white)!important}.border-white{border-color:var(--white)!important}.text-black{color:var(--black)!important}.text-black-bold{color:var(--black)!important;font-weight:700!important}.background-black{background-color:var(--black)!important}.background-border-black{background-color:var(--black)!important;border-color:var(--black)!important}.border-black{border-color:var(--black)!important}.text-orange{color:var(--orange)!important}.text-orange-bold{color:var(--orange)!important;font-weight:700!important}.background-orange{background-color:var(--orange)!important}.background-border-orange{background-color:var(--orange)!important;border-color:var(--orange)!important}.border-orange{border-color:var(--orange)!important}.text-transparent{color:transparent!important}.background-transparent{background-color:transparent!important}.border-transparent{border-color:transparent!important}aside.toast-container{position:fixed;bottom:0;right:0;padding:15px!important;z-index:2000!important}aside.toast-container i,aside.toast-container svg{display:flex;align-items:center}aside.toast-container strong{margin:0 auto 0 5px}aside.toast-container div.toast,aside.toast-container div.toast-header{border-top-left-radius:10px;border-top-right-radius:10px;color:var(--white)}aside.toast-container div.toast,aside.toast-container div.toast-body{border-bottom-left-radius:10px;border-bottom-right-radius:10px;width:auto!important;min-width:350px!important;max-width:470px!important;color:var(--white)}aside.toast-container div.toast-body{min-height:36px}aside.toast-container pre{font-family:Roboto,RobotoFallback,Noto Kufi Arabic,Helvetica,Arial,sans-serif;white-space:pre-wrap;font-size:medium}aside.toast-container button{margin:0 2px!important;width:10px!important;height:10px!important;box-shadow:none!important;outline:none!important;border:none!important}aside.toast-container div#alert-success div.toast-header,aside.toast-container div#alert-success div.toast-body{background-color:var(--green)}aside.toast-container div#alert-info div.toast-header,aside.toast-container div#alert-info div.toast-body{background-color:var(--blue)}aside.toast-container div#alert-error div.toast-header,aside.toast-container div#alert-error div.toast-body{background-color:var(--red)}aside.toast-container div#alert-warning div.toast-header,aside.toast-container div#alert-warning div.toast-body{background-color:var(--yellow);border-color:var(--black);color:var(--black)}aside.toast-container div#alert-success:hover,aside.toast-container div#alert-info:hover,aside.toast-container div#alert-error:hover,aside.toast-container div#alert-warning:hover{transform:scale(1.01);box-shadow:2px 2px 10px #789;cursor:default}button.sweet-alert-button{width:100px!important;height:40px!important;display:flex!important;align-items:center!important;justify-content:center!important;margin:0 5px!important;outline:none!important;border:none!important;box-shadow:none!important}aside.toast-container>*{border:none!important;z-index:2000!important;margin:15px 0 0!important}\n"] }]
570
+ }] });
571
+
572
+ class Breadcrumbs {
573
+ static { this.storage = 'COER-System'; }
574
+ /** */
575
+ static Add(page, path) {
576
+ const breadcrumbs = this.Get();
577
+ const paths = breadcrumbs.map(item => item.path);
578
+ if (!paths.includes(path)) {
579
+ breadcrumbs.push({ page, path });
580
+ this.Save(breadcrumbs);
581
+ }
582
+ }
583
+ /** */
584
+ static Get() {
585
+ let storage = sessionStorage.getItem(this.storage);
586
+ if (storage) {
587
+ storage = JSON.parse(storage);
588
+ if (storage.hasOwnProperty('breadcrumbs')) {
589
+ return Tools.BreakReference(storage.breadcrumbs);
590
+ }
591
+ }
592
+ return [];
593
+ }
594
+ /** */
595
+ static GetFirst() {
596
+ const breadcrumbs = this.Get();
597
+ return (breadcrumbs.length > 0) ? breadcrumbs.shift() : null;
598
+ }
599
+ /** */
600
+ static Save(breadcrumbs) {
601
+ let storage = sessionStorage.getItem(this.storage);
602
+ if (storage)
603
+ storage = JSON.parse(storage);
604
+ storage = Object.assign({}, storage, { breadcrumbs });
605
+ sessionStorage.setItem(this.storage, JSON.stringify(storage));
606
+ }
607
+ /** */
608
+ static Remove(path) {
609
+ let breadcrumbs = this.Get();
610
+ const index = breadcrumbs.findIndex(x => x.path.toLowerCase().trim() === path.toLowerCase().trim());
611
+ if (index >= 0) {
612
+ breadcrumbs = Tools.BreakReference(breadcrumbs).splice(0, index + 1);
613
+ this.Save(breadcrumbs);
614
+ }
615
+ }
616
+ /** */
617
+ static SetLast(page, path) {
618
+ const breadcrumbs = this.Get();
619
+ if (breadcrumbs.length > 0) {
620
+ breadcrumbs[breadcrumbs.length - 1] = { page, path };
621
+ this.Save(breadcrumbs);
622
+ }
623
+ }
624
+ /** */
625
+ static RemoveLast() {
626
+ const breadcrumbs = this.Get();
627
+ if (breadcrumbs.length > 0) {
628
+ breadcrumbs.pop();
629
+ this.Save(breadcrumbs);
630
+ }
631
+ }
632
+ }
633
+
634
+ const GridTemplates = {
635
+ /** Template for boolean property */
636
+ isActiveTemplate: (item) => {
637
+ if (item.value) {
638
+ return `
639
+ <span class='text-green-bold'>
640
+ <i class="fa-solid fa-circle-check"></i> Active
641
+ </span>
642
+ `;
643
+ }
644
+ else {
645
+ return `
646
+ <span class='text-gray-bold'>
647
+ <i class="fa-solid fa-circle-minus"></i> Disabled
648
+ </span>
649
+ `;
650
+ }
651
+ },
652
+ /** Template for boolean property */
653
+ coerSwitchTemplate: (item) => ({
654
+ isInput: true,
655
+ tooltip: `${item.value ? 'Active' : 'Disabled'}`
656
+ }),
657
+ /** Template for text property */
658
+ coerTextboxTemplate: (item) => ({
659
+ isInput: true,
660
+ isInvalid: item.value.length <= 0
661
+ }),
662
+ /** Template for text property */
663
+ coerIconTemplate: (icon, color = 'black') => {
664
+ return `<i class='${icon} d-block w-100 text-center' style='color: ${color};'></i>`;
665
+ }
666
+ };
667
+
668
+ const CONTROL_VALUE = (component) => {
669
+ return {
670
+ provide: NG_VALUE_ACCESSOR,
671
+ useExisting: forwardRef(() => component),
672
+ multi: true
673
+ };
674
+ };
675
+ class ControlValue {
676
+ constructor() {
677
+ this._isTouched = false;
678
+ }
679
+ get isTouched() {
680
+ return this._isTouched;
681
+ }
682
+ /** */
683
+ SetValue(value) {
684
+ if (typeof this._UpdateValue === 'function') {
685
+ this._UpdateValue(value);
686
+ }
687
+ this._value = value;
688
+ }
689
+ /** */
690
+ SetTouched(isTouched) {
691
+ if (typeof this._IsTouched === 'function') {
692
+ this._IsTouched(isTouched);
693
+ }
694
+ this._isTouched = isTouched;
695
+ }
696
+ /** */
697
+ writeValue(value) {
698
+ this._value = value;
699
+ }
700
+ /** */
701
+ registerOnChange(callback) {
702
+ this._UpdateValue = callback;
703
+ }
704
+ /** */
705
+ registerOnTouched(callback) {
706
+ this._IsTouched = callback;
707
+ }
708
+ /** */
709
+ setDisabledState(isDisabled) { }
710
+ }
711
+
712
+ class DateTime {
713
+ /** Get UTC Offset */
714
+ static GetOffset() {
715
+ return moment().utcOffset();
716
+ }
717
+ /** YYYY-MM-DD HH:mm:ss */
718
+ static GetFormatDB(date) {
719
+ date = new Date(date.toString());
720
+ return moment(date).format('YYYY-MM-DD HH:mm:ss');
721
+ }
722
+ /** Convert UTC Date to Local Zone */
723
+ static ToLocalZone(date) {
724
+ date = DateTime.GetFormatDB(date);
725
+ return moment(date).add(DateTime.GetOffset(), 'minutes').format('YYYY-MM-DD HH:mm:ss');
726
+ }
727
+ /** Convert Local Zone Date to UTC */
728
+ static ToUTC(date) {
729
+ date = DateTime.GetFormatDB(date);
730
+ return moment(date).subtract(DateTime.GetOffset(), 'minutes').format('YYYY-MM-DD HH:mm:ss');
731
+ }
732
+ /** MMM, DD YYYY */
733
+ static GetDateFormat(date) {
734
+ date = DateTime.GetFormatDB(date);
735
+ return moment(date).parseZone().local(true).format('MMM, DD YYYY');
736
+ }
737
+ /** MMM, DD YYYY at hh:mm a */
738
+ static GetDateTimeFormat(date) {
739
+ date = DateTime.GetFormatDB(date);
740
+ return moment(date).parseZone().local(true).format('MMM, DD YYYY - hh:mm a').replace('-', 'at');
741
+ }
742
+ /** */
743
+ static IsValidDate(date) {
744
+ if (Tools.IsOnlyWhiteSpace(date))
745
+ return false;
746
+ date = DateTime.GetFormatDB(date);
747
+ return moment(date).isValid();
748
+ }
749
+ /** */
750
+ static SetFirstHour(date = '', format = 'database') {
751
+ if (Tools.IsOnlyWhiteSpace(date))
752
+ date = moment();
753
+ else {
754
+ date = DateTime.GetFormatDB(date);
755
+ date = moment(date);
756
+ }
757
+ date = date.set('hour', 0).set('minute', 0).set('second', 0).set('millisecond', 0);
758
+ return (format === 'database')
759
+ ? DateTime.GetFormatDB(date)
760
+ : DateTime.GetDateFormat(date);
761
+ }
762
+ /** */
763
+ static SetLastHour(date = '', format = 'database') {
764
+ if (Tools.IsOnlyWhiteSpace(date))
765
+ date = moment();
766
+ else {
767
+ date = DateTime.GetFormatDB(date);
768
+ date = moment(date);
769
+ }
770
+ date = date.set('hour', 23).set('minute', 59).set('second', 59).set('millisecond', 59);
771
+ return (format === 'database')
772
+ ? DateTime.GetFormatDB(date)
773
+ : DateTime.GetDateFormat(date);
774
+ }
775
+ }
776
+
777
+ const ElementsHTML = {
778
+ /** Get width in px */
779
+ GetElementWidth: (element, ...args) => {
780
+ let width = 0;
781
+ if (Tools.IsNotNull(element) && Tools.IsNotOnlyWhiteSpace(element?.offsetWidth)) {
782
+ width += element.offsetWidth;
783
+ for (const arg of args) {
784
+ if (typeof arg == 'number')
785
+ width += arg;
786
+ else if (Tools.IsNotNull(arg) && Tools.IsNotOnlyWhiteSpace(arg?.offsetWidth)) {
787
+ width += arg.offsetWidth;
788
+ }
789
+ }
790
+ }
791
+ return `${width}px`;
792
+ },
793
+ /** Get height in px */
794
+ GetElementHeight: (element, ...args) => {
795
+ let height = 0;
796
+ if (Tools.IsNotNull(element) && Tools.IsNotOnlyWhiteSpace(element?.offsetHeight)) {
797
+ height += element.offsetHeight;
798
+ for (const arg of args) {
799
+ if (typeof arg == 'number')
800
+ height += arg;
801
+ else if (Tools.IsNotNull(arg) && Tools.IsNotOnlyWhiteSpace(arg?.offsetHeight)) {
802
+ height += arg.offsetHeight;
803
+ }
804
+ }
805
+ }
806
+ return `${height}px`;
807
+ },
808
+ /** */
809
+ IsInvalidElement: (element) => {
810
+ let isInvalid = true;
811
+ if (Tools.IsNotNull(element)) {
812
+ if (typeof element == 'object') {
813
+ const properties = Tools.GetPropertyList(element);
814
+ if (properties.includes('_isTouched') && properties.includes('_value')) {
815
+ isInvalid = element.isTouched && Tools.IsOnlyWhiteSpace(element.value);
816
+ }
817
+ }
818
+ }
819
+ return isInvalid;
820
+ },
821
+ };
822
+
823
+ class Files {
824
+ static { this.EXCEL_EXTENSIONS = ['xls', 'xlsx', 'csv']; }
825
+ /** Get Extension File */
826
+ static GetExtension(file) {
827
+ const fileName = file.name;
828
+ if (fileName.includes('.')) {
829
+ let worlds = fileName.split('.');
830
+ if (worlds.length > 0) {
831
+ let extension = worlds.pop();
832
+ extension = extension.trim().toLowerCase();
833
+ if (extension.length > 0)
834
+ return extension;
835
+ }
836
+ }
837
+ return null;
838
+ }
839
+ /** Is Excel File */
840
+ static IsExcel(file) {
841
+ const EXTENSION = Files.GetExtension(file);
842
+ return Tools.IsNotNull(EXTENSION)
843
+ ? this.EXCEL_EXTENSIONS.includes(EXTENSION)
844
+ : false;
845
+ }
846
+ /** Read excel file */
847
+ static ReadExcel(file) {
848
+ return new Promise(Resolve => {
849
+ let columns = [];
850
+ let rows = [];
851
+ const reader = new FileReader();
852
+ reader.readAsArrayBuffer(file);
853
+ reader.onload = () => {
854
+ const dataBytes = new Uint8Array(reader.result);
855
+ if (dataBytes) {
856
+ const workbook = XLSX.read(dataBytes, {});
857
+ const sheet = workbook.Sheets[workbook.SheetNames[0]];
858
+ let dataSheet = XLSX.utils.sheet_to_json(sheet, {
859
+ header: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
860
+ });
861
+ //Get Headers
862
+ for (const column in dataSheet[0]) {
863
+ columns.push(Tools.FirstCharToLower(String(dataSheet[0][column]).replaceAll(' ', '')));
864
+ }
865
+ //Get Rows
866
+ rows = XLSX.utils.sheet_to_json(sheet, { header: columns });
867
+ rows.shift();
868
+ rows = rows.map(row => {
869
+ const item = Tools.BreakReference(row);
870
+ delete item['__rowNum__'];
871
+ return item;
872
+ });
873
+ }
874
+ Resolve({ columns, rows });
875
+ };
876
+ reader.onerror = () => { Resolve({ columns, rows }); };
877
+ });
878
+ }
879
+ /** Export to excel file */
880
+ static ExportExcel(data, fileName = 'coer_report', sheetName = 'Sheet1') {
881
+ sheetName = Tools.CleanUpBlanks(sheetName);
882
+ fileName = Tools.CleanUpBlanks(fileName);
883
+ if (fileName.endsWith('.xls') || fileName.endsWith('.xlsx') || fileName.endsWith('.csv')) {
884
+ if (fileName.endsWith('.xls')) {
885
+ fileName = fileName.replaceAll('.xls', '.xlsx');
886
+ }
887
+ if (fileName.endsWith('.csv')) {
888
+ fileName = fileName.replaceAll('.csv', '.xlsx');
889
+ }
890
+ }
891
+ else {
892
+ fileName += '.xlsx';
893
+ }
894
+ const WORK_SHEET = XLSX.utils.json_to_sheet(data);
895
+ const WORK_BOOK = XLSX.utils.book_new();
896
+ XLSX.utils.book_append_sheet(WORK_BOOK, WORK_SHEET, sheetName);
897
+ XLSX.writeFile(WORK_BOOK, fileName);
898
+ }
899
+ /** Convert file to string base64 */
900
+ static ConvertToBase64(file) {
901
+ return new Promise(Resolve => {
902
+ const reader = new FileReader();
903
+ reader.readAsDataURL(file);
904
+ reader.onload = () => {
905
+ Resolve(reader.result?.toString() || '');
906
+ };
907
+ reader.onerror = () => Resolve('');
908
+ });
909
+ }
910
+ }
911
+
912
+ class User {
913
+ static { this.storage = 'COER-System'; }
914
+ /** */
915
+ static Set(user) {
916
+ let storage = localStorage.getItem(this.storage);
917
+ if (storage) {
918
+ storage = JSON.parse(storage);
919
+ storage = Object.assign({}, storage, { user });
920
+ }
921
+ else {
922
+ storage = Object.assign({}, storage, { user });
923
+ }
924
+ localStorage.setItem(this.storage, JSON.stringify(storage));
925
+ }
926
+ /** */
927
+ static Get() {
928
+ let storage = localStorage.getItem(this.storage);
929
+ if (storage) {
930
+ storage = JSON.parse(storage);
931
+ if (storage.hasOwnProperty('user')) {
932
+ return storage.user;
933
+ }
934
+ }
935
+ return null;
936
+ }
937
+ /** */
938
+ static LogIn() {
939
+ let storage = localStorage.getItem(this.storage);
940
+ storage = JSON.parse(storage);
941
+ return Tools.IsNotOnlyWhiteSpace(storage)
942
+ && Tools.IsNotNull(storage?.user)
943
+ && Tools.IsNotOnlyWhiteSpace(storage?.user?.jwt);
944
+ }
945
+ /** */
946
+ static LogOut() {
947
+ sessionStorage.removeItem(this.storage);
948
+ localStorage.removeItem(this.storage);
949
+ document.location.href = '/';
950
+ }
951
+ }
952
+
953
+ class Filters {
954
+ static { this.storage = 'COER-System'; }
955
+ /** */
956
+ static Add(filters, path) {
957
+ let storage = sessionStorage.getItem(this.storage);
958
+ storage = JSON.parse(storage);
959
+ let dictionary = [[path, filters]];
960
+ if (Tools.IsNotNull(storage?.filters)) {
961
+ const index = storage.filters.findIndex((x) => x.some(y => y === path));
962
+ if (index > -1) {
963
+ storage.filters[index][1] = filters;
964
+ dictionary = storage.filters;
965
+ }
966
+ else {
967
+ dictionary = storage.filters.concat(dictionary);
968
+ }
969
+ }
970
+ storage = Object.assign({}, storage, {
971
+ filters: dictionary
972
+ });
973
+ sessionStorage.setItem(this.storage, JSON.stringify(storage));
974
+ }
975
+ /** */
976
+ static Get(path) {
977
+ let storage = sessionStorage.getItem(this.storage);
978
+ storage = JSON.parse(storage);
979
+ if (Tools.IsNotNull(storage?.filters)) {
980
+ for (const filterList of storage.filters) {
981
+ if (filterList.some((x) => x === path)) {
982
+ return filterList[1];
983
+ }
984
+ }
985
+ }
986
+ return null;
987
+ }
988
+ /** */
989
+ static Remove(path) {
990
+ let storage = sessionStorage.getItem(this.storage);
991
+ storage = JSON.parse(storage);
992
+ if (Tools.IsNotNull(storage?.filters)) {
993
+ let index = 0;
994
+ for (index; index < storage.filters.length; index++) {
995
+ if (storage.filters[index].some((x) => x === path)) {
996
+ break;
997
+ }
998
+ }
999
+ storage.filters.splice(index, 1);
1000
+ }
1001
+ sessionStorage.setItem(this.storage, JSON.stringify(storage));
1002
+ }
1003
+ /** */
1004
+ static RemoveAll() {
1005
+ let storage = sessionStorage.getItem(this.storage);
1006
+ storage = JSON.parse(storage);
1007
+ if (Tools.IsNotNull(storage?.filters)) {
1008
+ delete storage.filters;
1009
+ }
1010
+ sessionStorage.setItem(this.storage, JSON.stringify(storage));
1011
+ }
1012
+ }
1013
+
1014
+ class Menu {
1015
+ static { this.storage = 'COER-System'; }
1016
+ /** */
1017
+ static SetSelectedOption(menu) {
1018
+ let storage = sessionStorage.getItem(this.storage);
1019
+ if (storage)
1020
+ storage = JSON.parse(storage);
1021
+ storage = Object.assign({}, storage, { menu });
1022
+ sessionStorage.setItem(this.storage, JSON.stringify(storage));
1023
+ }
1024
+ /** */
1025
+ static GetSelectedOption() {
1026
+ let storage = sessionStorage.getItem(this.storage);
1027
+ if (storage) {
1028
+ storage = JSON.parse(storage);
1029
+ if (storage.hasOwnProperty('menu')) {
1030
+ return storage.menu;
1031
+ }
1032
+ }
1033
+ return null;
1034
+ }
1035
+ static { this.GetMenuAccess = () => {
1036
+ const menuAccess = [];
1037
+ //LV1
1038
+ for (const lv1 of navigationSIGNAL()) {
1039
+ //LV1 - Page
1040
+ if (Tools.IsNotOnlyWhiteSpace(lv1.path) && Tools.IsNull(lv1.items)) {
1041
+ menuAccess.push({
1042
+ module: null,
1043
+ submodule: null,
1044
+ page: lv1.label,
1045
+ path: lv1.path,
1046
+ readonly: Tools.IsNotNull(lv1?.readonly) ? lv1.readonly : true
1047
+ });
1048
+ }
1049
+ //LV1 - Module
1050
+ else if (Tools.IsOnlyWhiteSpace(lv1.path) && Tools.IsNotNull(lv1.items)) {
1051
+ //LV2
1052
+ for (const lv2 of lv1.items) {
1053
+ //LV2 - Page
1054
+ if (Tools.IsNotOnlyWhiteSpace(lv2.path) && Tools.IsNull(lv2.items)) {
1055
+ menuAccess.push({
1056
+ module: lv1.label,
1057
+ submodule: null,
1058
+ page: lv2.label,
1059
+ path: lv2.path,
1060
+ readonly: Tools.IsNotNull(lv2?.readonly) ? lv2.readonly : true
1061
+ });
1062
+ }
1063
+ //LV2 - Submodule
1064
+ else if (Tools.IsOnlyWhiteSpace(lv2.path) && Tools.IsNotNull(lv2.items)) {
1065
+ //LV3
1066
+ for (const lv3 of lv2.items) {
1067
+ //LV3 Page
1068
+ if (Tools.IsNotOnlyWhiteSpace(lv3.path) && Tools.IsNull(lv3.items)) {
1069
+ menuAccess.push({
1070
+ module: lv1.label,
1071
+ submodule: lv2.label,
1072
+ page: lv3.label,
1073
+ path: lv3.path,
1074
+ readonly: Tools.IsNotNull(lv3?.readonly) ? lv3.readonly : true
1075
+ });
1076
+ }
1077
+ }
1078
+ }
1079
+ }
1080
+ }
1081
+ }
1082
+ return menuAccess;
1083
+ }; }
1084
+ }
1085
+
1086
+ class Source {
1087
+ static { this.storage = 'COER-System'; }
1088
+ /** */
1089
+ static Set(page) {
1090
+ const ROUTER = inject(Router);
1091
+ let path = ROUTER.url;
1092
+ if (path.includes('?'))
1093
+ path = path.split('?')[0];
1094
+ Breadcrumbs.Add(page, path);
1095
+ const breadcrumbs = Breadcrumbs.Get();
1096
+ if (breadcrumbs.length >= 2) {
1097
+ breadcrumbs.pop();
1098
+ const breadcrumb = breadcrumbs.pop();
1099
+ this.Save({ page: breadcrumb.page, path: breadcrumb.path });
1100
+ }
1101
+ else
1102
+ this.Save(null);
1103
+ }
1104
+ /** */
1105
+ static Save(source) {
1106
+ let storage = sessionStorage.getItem(this.storage);
1107
+ if (storage)
1108
+ storage = JSON.parse(storage);
1109
+ storage = Object.assign({}, storage, { source });
1110
+ sessionStorage.setItem(this.storage, JSON.stringify(storage));
1111
+ }
1112
+ /** */
1113
+ static Get() {
1114
+ let storage = sessionStorage.getItem(this.storage);
1115
+ if (storage) {
1116
+ storage = JSON.parse(storage);
1117
+ if (storage.hasOwnProperty('source')) {
1118
+ return storage.source;
1119
+ }
1120
+ }
1121
+ return null;
1122
+ }
1123
+ /** */
1124
+ static GetRoot() {
1125
+ const breadcrumbs = Breadcrumbs.Get();
1126
+ return (breadcrumbs.length > 0) ? breadcrumbs.shift() : null;
1127
+ }
1128
+ /** */
1129
+ static SetPageResponse(pageResponse) {
1130
+ let storage = sessionStorage.getItem(this.storage);
1131
+ storage = JSON.parse(storage);
1132
+ storage = Object.assign({}, storage, { pageResponse });
1133
+ sessionStorage.setItem(this.storage, JSON.stringify(storage));
1134
+ }
1135
+ /** */
1136
+ static GetPageResponse() {
1137
+ let storage = sessionStorage.getItem(this.storage);
1138
+ if (storage) {
1139
+ storage = JSON.parse(storage);
1140
+ if (storage.hasOwnProperty('pageResponse')) {
1141
+ return Tools.BreakReference(storage.pageResponse);
1142
+ }
1143
+ }
1144
+ return null;
1145
+ }
1146
+ /** */
1147
+ static ClearPageResponse() {
1148
+ let storage = sessionStorage.getItem(this.storage);
1149
+ storage = JSON.parse(storage);
1150
+ if (Tools.IsNotNull(storage)) {
1151
+ if (storage.hasOwnProperty('pageResponse')) {
1152
+ delete storage.pageResponse;
1153
+ }
1154
+ storage = Object.assign({}, storage);
1155
+ sessionStorage.setItem(this.storage, JSON.stringify(storage));
1156
+ }
1157
+ }
1158
+ /** */
1159
+ static Reset() {
1160
+ let storage = localStorage.getItem(this.storage);
1161
+ storage = JSON.parse(storage);
1162
+ const user = storage?.user || null;
1163
+ localStorage.removeItem(this.storage);
1164
+ sessionStorage.removeItem(this.storage);
1165
+ if (Tools.IsNotNull(user)) {
1166
+ storage = Object.assign({ user });
1167
+ localStorage.setItem(this.storage, JSON.stringify(storage));
1168
+ }
1169
+ }
1170
+ }
1171
+
1172
+ class Page {
1173
+ constructor(page) {
1174
+ //Injection
1175
+ this.alert = inject(CoerAlert);
1176
+ this.router = inject(Router);
1177
+ this.activatedRoute = inject(ActivatedRoute);
1178
+ /** */
1179
+ this.isUpdate = false;
1180
+ /** */
1181
+ this.isLoading = false;
1182
+ /** */
1183
+ this.isReadonlyPage = true;
1184
+ /** */
1185
+ this.isReadyPage = false;
1186
+ /** */
1187
+ this.enableAnimations = false;
1188
+ /** */
1189
+ this.breadcrumbs = [];
1190
+ /** */
1191
+ this.pageResponse = null;
1192
+ /** */
1193
+ this.pageFilters = {};
1194
+ /** */
1195
+ this.goBack = { show: false };
1196
+ //Private Variables
1197
+ this._path = '';
1198
+ this._page = '';
1199
+ this._source = null;
1200
+ this._preventDestroy = false;
1201
+ /** */
1202
+ this.GoBack = (path) => (() => {
1203
+ if (path)
1204
+ Breadcrumbs.Remove(path);
1205
+ else
1206
+ Breadcrumbs.RemoveLast();
1207
+ });
1208
+ //Grid Templates
1209
+ this.isActiveTemplate = GridTemplates.isActiveTemplate;
1210
+ this.coerSwitchTemplate = GridTemplates.coerSwitchTemplate;
1211
+ this.coerTextboxTemplate = GridTemplates.coerTextboxTemplate;
1212
+ this.coerIconTemplate = GridTemplates.coerIconTemplate;
1213
+ //Tools
1214
+ this.IsNull = Tools.IsNull;
1215
+ this.IsNotNull = Tools.IsNotNull;
1216
+ this.IsOnlyWhiteSpace = Tools.IsOnlyWhiteSpace;
1217
+ this.IsNotOnlyWhiteSpace = Tools.IsNotOnlyWhiteSpace;
1218
+ this.Sleep = Tools.Sleep;
1219
+ //ElementsHTML
1220
+ this.IsInvalidElement = ElementsHTML.IsInvalidElement;
1221
+ if (page.toUpperCase().toUpperCase() === 'HOME')
1222
+ Source.Reset();
1223
+ this.SetPageName(page);
1224
+ this.__SetSource();
1225
+ this.__GetSource();
1226
+ this.__GetNavigation();
1227
+ this.__SetGoBack();
1228
+ this.__GetPageMode();
1229
+ this.__GetPageFilter();
1230
+ this.__GetPageResponse();
1231
+ }
1232
+ async ngAfterViewInit() {
1233
+ this.routeParams = this.activatedRoute.snapshot.params;
1234
+ this.queryParams = this.activatedRoute.snapshot.queryParams;
1235
+ await Tools.Sleep();
1236
+ this.isReadyPage = true;
1237
+ this.RunPage();
1238
+ await Tools.Sleep(1000);
1239
+ this.enableAnimations = true;
1240
+ }
1241
+ ngOnDestroy() {
1242
+ if (!this._preventDestroy)
1243
+ Source.ClearPageResponse();
1244
+ }
1245
+ /** Main method. Starts after ngAfterViewInit() */
1246
+ RunPage() { }
1247
+ ;
1248
+ /** Rename the last breadcrumb and update the url id */
1249
+ SetPageName(name, id = null) {
1250
+ this._page = name;
1251
+ this._path = this.router.url;
1252
+ if (this._path.includes('?'))
1253
+ this._path = this._path.split('?')[0];
1254
+ if (id) {
1255
+ const PATH_ARRAY = this._path.split('/');
1256
+ const PATH_ID = Tools.BreakReference(PATH_ARRAY).pop();
1257
+ if (PATH_ID) {
1258
+ PATH_ARRAY[PATH_ARRAY.length - 1] = String(id);
1259
+ this._path = PATH_ARRAY.join('/');
1260
+ }
1261
+ }
1262
+ if (this.breadcrumbs.length > 0) {
1263
+ this.breadcrumbs[this.breadcrumbs.length - 1].page = name;
1264
+ this.breadcrumbs[this.breadcrumbs.length - 1].path = this._path;
1265
+ Breadcrumbs.SetLast(name, this._path);
1266
+ }
1267
+ this.router.navigateByUrl(this._path);
1268
+ }
1269
+ /** */
1270
+ __SetSource() {
1271
+ Source.Set(this._page);
1272
+ }
1273
+ /** */
1274
+ __GetSource() {
1275
+ this._source = Source.Get();
1276
+ }
1277
+ /** */
1278
+ __GetPageResponse() {
1279
+ this.pageResponse = Source.GetPageResponse();
1280
+ }
1281
+ /** */
1282
+ __GetNavigation() {
1283
+ if (this._source) {
1284
+ this.breadcrumbs = Breadcrumbs.Get().map(item => Object.assign({
1285
+ page: item.page,
1286
+ path: item.path,
1287
+ click: this.GoBack(item.path)
1288
+ }));
1289
+ }
1290
+ else
1291
+ this.breadcrumbs = [{ page: this._page }];
1292
+ }
1293
+ /** */
1294
+ __SetGoBack() {
1295
+ if (this._source) {
1296
+ this.goBack = {
1297
+ show: true,
1298
+ path: this._source.path,
1299
+ click: this.GoBack()
1300
+ };
1301
+ }
1302
+ }
1303
+ /** */
1304
+ __GetPageMode() {
1305
+ const subscribe$ = this.activatedRoute.data.subscribe({
1306
+ next: ({ module, submodule, page }) => {
1307
+ const menuAccess = Menu.GetMenuAccess().find(x => x.module === module
1308
+ && x.submodule === submodule
1309
+ && x.page === page);
1310
+ this.isReadonlyPage = Tools.IsNotNull(menuAccess) ? menuAccess.readonly : true;
1311
+ },
1312
+ error: (message) => { console.error(message); },
1313
+ complete: () => { subscribe$.unsubscribe(); }
1314
+ });
1315
+ }
1316
+ /** Navigate to previous page */
1317
+ GoToSource(pageResponse = null) {
1318
+ if (this._source) {
1319
+ Breadcrumbs.RemoveLast();
1320
+ this.SetPageResponse(pageResponse);
1321
+ this.RemovePageFilter();
1322
+ Tools.Sleep().then(_ => this.router.navigateByUrl(this._source.path));
1323
+ }
1324
+ }
1325
+ ;
1326
+ /** */
1327
+ SetPageResponse(pageResponse = null) {
1328
+ if (Tools.IsNotNull(pageResponse)) {
1329
+ this._preventDestroy = true;
1330
+ Source.SetPageResponse(pageResponse);
1331
+ }
1332
+ }
1333
+ ;
1334
+ /** */
1335
+ ReloadPage() {
1336
+ Breadcrumbs.RemoveLast();
1337
+ setTimeout(() => window.location.reload());
1338
+ }
1339
+ /** */
1340
+ SetPageFilters(filters) {
1341
+ this.pageFilters = Tools.BreakReference(filters);
1342
+ Filters.Add(this.pageFilters, this._path);
1343
+ }
1344
+ /** */
1345
+ __GetPageFilter() {
1346
+ this.pageFilters = Filters.Get(this._path);
1347
+ }
1348
+ /** */
1349
+ RemovePageFilter() {
1350
+ this.pageFilters = {};
1351
+ Filters.Remove(this._path);
1352
+ }
1353
+ /** */
1354
+ Log(value, log = null) {
1355
+ if (Tools.IsNotNull(log))
1356
+ console.log({ log, value });
1357
+ else
1358
+ console.log(value);
1359
+ }
1360
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: Page, deps: [{ token: String }], target: i0.ɵɵFactoryTarget.Component }); }
1361
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.1", type: Page, isStandalone: true, selector: "ng-component", ngImport: i0, template: '', isInline: true }); }
1362
+ }
1363
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: Page, decorators: [{
1364
+ type: Component,
1365
+ args: [{ template: '' }]
1366
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
1367
+ type: Inject,
1368
+ args: [String]
1369
+ }] }] });
1370
+
1371
+ class Screen {
1372
+ static get WINDOW_WIDTH() {
1373
+ return window.innerWidth;
1374
+ }
1375
+ static get WINDOW_HEIGHT() {
1376
+ return window.innerHeight;
1377
+ }
1378
+ static get DEVICE_WIDTH() {
1379
+ return window.screen.width;
1380
+ }
1381
+ static get DEVICE_HEIGHT() {
1382
+ return window.screen.height;
1383
+ }
1384
+ static get BREAKPOINT() {
1385
+ if (window.innerWidth < 576)
1386
+ return 'xs';
1387
+ else if (window.innerWidth >= 576 && window.innerWidth < 768)
1388
+ return 'sm';
1389
+ else if (window.innerWidth >= 768 && window.innerWidth < 992)
1390
+ return 'md';
1391
+ else if (window.innerWidth >= 992 && window.innerWidth < 1200)
1392
+ return 'lg';
1393
+ else if (window.innerWidth >= 1200 && window.innerWidth < 1400)
1394
+ return 'xl';
1395
+ else
1396
+ return 'xxl';
1397
+ }
1398
+ /** */
1399
+ static { this.Resize = new Observable(subscriber => {
1400
+ const handleResize = () => {
1401
+ subscriber.next({
1402
+ width: window.innerWidth,
1403
+ height: window.innerHeight,
1404
+ breakpoint: this.BREAKPOINT
1405
+ });
1406
+ };
1407
+ window.addEventListener("resize", handleResize);
1408
+ window.addEventListener("load", handleResize);
1409
+ return () => {
1410
+ window.removeEventListener("resize", handleResize);
1411
+ window.removeEventListener("load", handleResize);
1412
+ };
1413
+ }); }
1414
+ /** */
1415
+ static { this.BackButtonBrowser = new Observable(subscriber => {
1416
+ const handlePopState = (popStateEvent) => {
1417
+ if (popStateEvent.state && popStateEvent.target) {
1418
+ subscriber.next(popStateEvent.target.location.href);
1419
+ }
1420
+ };
1421
+ window.addEventListener('popstate', handlePopState);
1422
+ return () => {
1423
+ window.removeEventListener('popstate', handlePopState);
1424
+ };
1425
+ }); }
1426
+ }
1427
+
1428
+ class Section {
1429
+ constructor() {
1430
+ //Injection
1431
+ this.alert = inject(CoerAlert);
1432
+ this.router = inject(Router);
1433
+ //Inputs
1434
+ this.isLoading = input(false);
1435
+ this.isUpdate = input(false);
1436
+ //Outputs
1437
+ this.onReady = output();
1438
+ this.onDestroy = output();
1439
+ this.onIsLoading = output();
1440
+ this.onUpdated = output();
1441
+ //Variables
1442
+ this.enableAnimations = false;
1443
+ //Grid Templates
1444
+ this.isActiveTemplate = GridTemplates.isActiveTemplate;
1445
+ this.coerSwitchTemplate = GridTemplates.coerSwitchTemplate;
1446
+ this.coerTextboxTemplate = GridTemplates.coerTextboxTemplate;
1447
+ this.coerIconTemplate = GridTemplates.coerIconTemplate;
1448
+ //Tools
1449
+ this.IsNull = Tools.IsNull;
1450
+ this.IsNotNull = Tools.IsNotNull;
1451
+ this.IsOnlyWhiteSpace = Tools.IsOnlyWhiteSpace;
1452
+ this.IsNotOnlyWhiteSpace = Tools.IsNotOnlyWhiteSpace;
1453
+ this.Sleep = Tools.Sleep;
1454
+ //ElementsHTML
1455
+ this.IsInvalidElement = ElementsHTML.IsInvalidElement;
1456
+ }
1457
+ ngAfterViewInit() {
1458
+ Tools.Sleep().then(_ => {
1459
+ this.RunSection();
1460
+ this.onReady.emit();
1461
+ });
1462
+ Tools.Sleep(1000).then(_ => this.enableAnimations = true);
1463
+ }
1464
+ ngOnDestroy() {
1465
+ this.onDestroy.emit(null);
1466
+ }
1467
+ /** Main method. Starts after ngAfterViewInit() */
1468
+ RunSection() { }
1469
+ ;
1470
+ /** */
1471
+ Log(value, log = null) {
1472
+ if (Tools.IsNotNull(log))
1473
+ console.log({ log, value });
1474
+ else
1475
+ console.log(value);
1476
+ }
1477
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: Section, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1478
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.1", type: Section, isStandalone: true, selector: "ng-component", inputs: { isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isUpdate: { classPropertyName: "isUpdate", publicName: "isUpdate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onReady: "onReady", onDestroy: "onDestroy", onIsLoading: "onIsLoading", onUpdated: "onUpdated" }, ngImport: i0, template: '', isInline: true }); }
1479
+ }
1480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: Section, decorators: [{
1481
+ type: Component,
1482
+ args: [{ template: '' }]
1483
+ }] });
1484
+
1485
+ class Service {
1486
+ constructor() {
1487
+ //Injections
1488
+ this.alert = inject(CoerAlert);
1489
+ this.http = inject(HttpClient);
1490
+ this.httpCode = {
1491
+ Ok: 200,
1492
+ Created: 201,
1493
+ NoContent: 204,
1494
+ BadRequest: 400,
1495
+ Unauthorize: 401,
1496
+ Forbidden: 403,
1497
+ NotFound: 404,
1498
+ NotAllowed: 405,
1499
+ NotAcceptable: 406,
1500
+ Conflict: 409,
1501
+ PayloadTooLarge: 413,
1502
+ InnerError: 500
1503
+ };
1504
+ }
1505
+ /** */
1506
+ ReleaseSubscription(subscription) {
1507
+ if (subscription && !subscription.closed)
1508
+ subscription.unsubscribe();
1509
+ }
1510
+ /** HTTP GET */
1511
+ HTTP_GET(request, cancelPrevious = true) {
1512
+ return new Promise(Resolve => {
1513
+ if (cancelPrevious) {
1514
+ this.ReleaseSubscription(this._GET$);
1515
+ this._GET$ = this.http.request(new HttpRequest("GET", request.url, { params: request.queryParams, headers: request.headers })).subscribe({
1516
+ next: (response) => {
1517
+ if (response.type > 0) {
1518
+ Resolve({
1519
+ body: Tools.BreakReference(response.body),
1520
+ status: response.status,
1521
+ message: response.statusText,
1522
+ ok: true
1523
+ });
1524
+ }
1525
+ },
1526
+ error: (httpError) => {
1527
+ this.ReleaseSubscription(this._GET$);
1528
+ this.AlertError(httpError, request.alertError);
1529
+ Resolve({
1530
+ body: {},
1531
+ status: httpError.status,
1532
+ message: httpError.error?.message || httpError.error,
1533
+ ok: false
1534
+ });
1535
+ },
1536
+ complete: () => {
1537
+ this.ReleaseSubscription(this._GET$);
1538
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1539
+ this.alert.Success(request.alertSuccess);
1540
+ }
1541
+ }
1542
+ });
1543
+ }
1544
+ else {
1545
+ const subscription = this.http.request(new HttpRequest("GET", request.url, { params: request.queryParams, headers: request.headers })).subscribe({
1546
+ next: (response) => {
1547
+ if (response.type > 0) {
1548
+ Resolve({
1549
+ body: Tools.BreakReference(response.body),
1550
+ status: response.status,
1551
+ message: response.statusText,
1552
+ ok: true
1553
+ });
1554
+ }
1555
+ },
1556
+ error: (httpError) => {
1557
+ this.ReleaseSubscription(subscription);
1558
+ this.AlertError(httpError, request.alertError);
1559
+ Resolve({
1560
+ body: {},
1561
+ status: httpError.status,
1562
+ message: httpError.error?.message || httpError.error,
1563
+ ok: false
1564
+ });
1565
+ },
1566
+ complete: () => {
1567
+ this.ReleaseSubscription(subscription);
1568
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1569
+ this.alert.Success(request.alertSuccess);
1570
+ }
1571
+ }
1572
+ });
1573
+ }
1574
+ });
1575
+ }
1576
+ /** HTTP POST */
1577
+ HTTP_POST(request, cancelPrevious = true) {
1578
+ return new Promise(Resolve => {
1579
+ if (cancelPrevious) {
1580
+ this.ReleaseSubscription(this._POST$);
1581
+ this._POST$ = this.http.request(new HttpRequest("POST", request.url, request.body, { params: request.queryParams, headers: request.headers })).subscribe({
1582
+ next: (response) => {
1583
+ if (response.type > 0) {
1584
+ Resolve({
1585
+ body: Tools.BreakReference(response.body),
1586
+ status: response.status,
1587
+ message: response.statusText,
1588
+ ok: true
1589
+ });
1590
+ }
1591
+ },
1592
+ error: (httpError) => {
1593
+ this.ReleaseSubscription(this._POST$);
1594
+ this.AlertError(httpError, request.alertError);
1595
+ Resolve({
1596
+ body: {},
1597
+ status: httpError.status,
1598
+ message: httpError.error?.message || httpError.error,
1599
+ ok: false
1600
+ });
1601
+ },
1602
+ complete: () => {
1603
+ this.ReleaseSubscription(this._POST$);
1604
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1605
+ this.alert.Success(request.alertSuccess);
1606
+ }
1607
+ }
1608
+ });
1609
+ }
1610
+ else {
1611
+ const subscription = this.http.request(new HttpRequest("POST", request.url, request.body, { params: request.queryParams, headers: request.headers })).subscribe({
1612
+ next: (response) => {
1613
+ if (response.type > 0) {
1614
+ Resolve({
1615
+ body: Tools.BreakReference(response.body),
1616
+ status: response.status,
1617
+ message: response.statusText,
1618
+ ok: true
1619
+ });
1620
+ }
1621
+ },
1622
+ error: (httpError) => {
1623
+ this.ReleaseSubscription(subscription);
1624
+ this.AlertError(httpError, request.alertError);
1625
+ Resolve({
1626
+ body: {},
1627
+ status: httpError.status,
1628
+ message: httpError.error?.message || httpError.error,
1629
+ ok: false
1630
+ });
1631
+ },
1632
+ complete: () => {
1633
+ this.ReleaseSubscription(subscription);
1634
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1635
+ this.alert.Success(request.alertSuccess);
1636
+ }
1637
+ }
1638
+ });
1639
+ }
1640
+ });
1641
+ }
1642
+ /** HTTP PUT */
1643
+ HTTP_PUT(request, cancelPrevious = true) {
1644
+ return new Promise(Resolve => {
1645
+ if (cancelPrevious) {
1646
+ this.ReleaseSubscription(this._PUT$);
1647
+ this._PUT$ = this.http.request(new HttpRequest("PUT", request.url, request.body, { params: request.queryParams, headers: request.headers })).subscribe({
1648
+ next: (response) => {
1649
+ if (response.type > 0) {
1650
+ Resolve({
1651
+ body: {},
1652
+ status: response.status,
1653
+ message: response.statusText,
1654
+ ok: true
1655
+ });
1656
+ }
1657
+ },
1658
+ error: (httpError) => {
1659
+ this.ReleaseSubscription(this._PUT$);
1660
+ this.AlertError(httpError, request.alertError);
1661
+ Resolve({
1662
+ body: {},
1663
+ status: httpError.status,
1664
+ message: httpError.error?.message || httpError.error,
1665
+ ok: false
1666
+ });
1667
+ },
1668
+ complete: () => {
1669
+ this.ReleaseSubscription(this._PUT$);
1670
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1671
+ this.alert.Success(request.alertSuccess, 'Updated', 'fa-solid fa-arrows-rotate fa-spin');
1672
+ }
1673
+ }
1674
+ });
1675
+ }
1676
+ else {
1677
+ const subscription = this.http.request(new HttpRequest("PUT", request.url, request.body, { params: request.queryParams, headers: request.headers })).subscribe({
1678
+ next: (response) => {
1679
+ if (response.type > 0) {
1680
+ Resolve({
1681
+ body: {},
1682
+ status: response.status,
1683
+ message: response.statusText,
1684
+ ok: true
1685
+ });
1686
+ }
1687
+ },
1688
+ error: (httpError) => {
1689
+ this.ReleaseSubscription(subscription);
1690
+ this.AlertError(httpError, request.alertError);
1691
+ Resolve({
1692
+ body: {},
1693
+ status: httpError.status,
1694
+ message: httpError.error?.message || httpError.error,
1695
+ ok: false
1696
+ });
1697
+ },
1698
+ complete: () => {
1699
+ this.ReleaseSubscription(subscription);
1700
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1701
+ this.alert.Success(request.alertSuccess, 'Updated', 'fa-solid fa-arrows-rotate fa-spin');
1702
+ }
1703
+ }
1704
+ });
1705
+ }
1706
+ });
1707
+ }
1708
+ /** HTTP PATCH */
1709
+ HTTP_PATCH(request, cancelPrevious = true) {
1710
+ return new Promise(Resolve => {
1711
+ if (cancelPrevious) {
1712
+ this.ReleaseSubscription(this._PATCH$);
1713
+ this._PATCH$ = this.http.request(new HttpRequest("PATCH", request.url, request.body, { params: request.queryParams, headers: request.headers })).subscribe({
1714
+ next: (response) => {
1715
+ if (response.type > 0) {
1716
+ Resolve({
1717
+ body: {},
1718
+ status: response.status,
1719
+ message: response.statusText,
1720
+ ok: true
1721
+ });
1722
+ }
1723
+ },
1724
+ error: (httpError) => {
1725
+ this.ReleaseSubscription(this._PATCH$);
1726
+ this.AlertError(httpError, request.alertError);
1727
+ Resolve({
1728
+ body: {},
1729
+ status: httpError.status,
1730
+ message: httpError.error?.message || httpError.error,
1731
+ ok: false
1732
+ });
1733
+ },
1734
+ complete: () => {
1735
+ this.ReleaseSubscription(this._PATCH$);
1736
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1737
+ this.alert.Success(request.alertSuccess, 'Updated', 'fa-solid fa-arrows-rotate fa-spin');
1738
+ }
1739
+ }
1740
+ });
1741
+ }
1742
+ else {
1743
+ const subscription = this.http.request(new HttpRequest("PATCH", request.url, request.body, { params: request.queryParams, headers: request.headers })).subscribe({
1744
+ next: (response) => {
1745
+ if (response.type > 0) {
1746
+ Resolve({
1747
+ body: {},
1748
+ status: response.status,
1749
+ message: response.statusText,
1750
+ ok: true
1751
+ });
1752
+ }
1753
+ },
1754
+ error: (httpError) => {
1755
+ this.ReleaseSubscription(subscription);
1756
+ this.AlertError(httpError, request.alertError);
1757
+ Resolve({
1758
+ body: {},
1759
+ status: httpError.status,
1760
+ message: httpError.error?.message || httpError.error,
1761
+ ok: false
1762
+ });
1763
+ },
1764
+ complete: () => {
1765
+ this.ReleaseSubscription(subscription);
1766
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1767
+ this.alert.Success(request.alertSuccess, 'Updated', 'fa-solid fa-arrows-rotate fa-spin');
1768
+ }
1769
+ }
1770
+ });
1771
+ }
1772
+ });
1773
+ }
1774
+ /** HTTP DELETE */
1775
+ HTTP_DELETE(request, cancelPrevious = true) {
1776
+ return new Promise(Resolve => {
1777
+ if (cancelPrevious) {
1778
+ this.ReleaseSubscription(this._DELETE$);
1779
+ this._DELETE$ = this.http.request(new HttpRequest("DELETE", request.url, { params: request.queryParams, headers: request.headers })).subscribe({
1780
+ next: (response) => {
1781
+ if (response.type > 0) {
1782
+ Resolve({
1783
+ body: {},
1784
+ status: response.status,
1785
+ message: response.statusText,
1786
+ ok: true
1787
+ });
1788
+ }
1789
+ },
1790
+ error: (httpError) => {
1791
+ this.ReleaseSubscription(this._DELETE$);
1792
+ this.AlertError(httpError, request.alertError);
1793
+ Resolve({
1794
+ body: {},
1795
+ status: httpError.status,
1796
+ message: httpError.error?.message || httpError.error,
1797
+ ok: false
1798
+ });
1799
+ },
1800
+ complete: () => {
1801
+ this.ReleaseSubscription(this._DELETE$);
1802
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1803
+ this.alert.Success(request.alertSuccess, 'Deleted', 'fa-regular fa-trash-can');
1804
+ }
1805
+ }
1806
+ });
1807
+ }
1808
+ else {
1809
+ const subscription = this.http.request(new HttpRequest("DELETE", request.url, { params: request.queryParams, headers: request.headers })).subscribe({
1810
+ next: (response) => {
1811
+ if (response.type > 0) {
1812
+ Resolve({
1813
+ body: {},
1814
+ status: response.status,
1815
+ message: response.statusText,
1816
+ ok: true
1817
+ });
1818
+ }
1819
+ },
1820
+ error: (httpError) => {
1821
+ this.ReleaseSubscription(subscription);
1822
+ this.AlertError(httpError, request.alertError);
1823
+ Resolve({
1824
+ body: {},
1825
+ status: httpError.status,
1826
+ message: httpError.error?.message || httpError.error,
1827
+ ok: false
1828
+ });
1829
+ },
1830
+ complete: () => {
1831
+ this.ReleaseSubscription(subscription);
1832
+ if (Tools.IsNotOnlyWhiteSpace(request.alertSuccess)) {
1833
+ this.alert.Success(request.alertSuccess, 'Deleted', 'fa-regular fa-trash-can');
1834
+ }
1835
+ }
1836
+ });
1837
+ }
1838
+ });
1839
+ }
1840
+ /** */
1841
+ AlertError(httpError, message) {
1842
+ if (httpError.status >= 500) {
1843
+ if (Tools.IsNotOnlyWhiteSpace(message)) {
1844
+ this.alert.Error(message, 'BUG', 'fa-solid fa-bug', null);
1845
+ }
1846
+ }
1847
+ else if (httpError.status < 500) {
1848
+ switch (httpError.status) {
1849
+ case 400: {
1850
+ this.alert.Warning(httpError.error?.message || httpError.error, 'Bad Request', 'fa-regular fa-face-grin-beam-sweat fa-lg');
1851
+ break;
1852
+ }
1853
+ case 401: {
1854
+ this.alert.Warning(httpError.error?.message || httpError.error, 'Unauthorize', 'fa-regular fa-face-rolling-eyes fa-lg');
1855
+ break;
1856
+ }
1857
+ case 403: {
1858
+ this.alert.Warning(httpError.error?.message || httpError.error, 'Forbidden', 'fa-regular fa-face-rolling-eyes fa-lg');
1859
+ break;
1860
+ }
1861
+ case 404: {
1862
+ this.alert.Warning(httpError.error?.message || httpError.error, 'Not Found', 'fa-regular fa-face-meh fa-lg');
1863
+ break;
1864
+ }
1865
+ case 405: {
1866
+ this.alert.Warning(httpError.error?.message || httpError.error, 'Not Allowed', 'fa-regular fa-face-grimace fa-lg');
1867
+ break;
1868
+ }
1869
+ case 406: {
1870
+ this.alert.Warning(httpError.error?.message || httpError.error, 'Not Acceptable', 'fa-regular fa-face-frown-open fa-lg');
1871
+ break;
1872
+ }
1873
+ case 409: {
1874
+ this.alert.Warning(httpError.error?.message || httpError.error, 'Conflict', 'fa-regular fa-face-dizzy fa-lg');
1875
+ break;
1876
+ }
1877
+ case 413: {
1878
+ this.alert.Warning(httpError.error?.message || httpError.error, 'Too Large', 'fa-regular fa-face-flushed fa-lg');
1879
+ break;
1880
+ }
1881
+ default: {
1882
+ if (httpError.status <= 0) {
1883
+ this.alert.Warning('Without Connection', 'WEB API DOWN', 'fa-solid fa-plug-circle-xmark fa-lg');
1884
+ }
1885
+ else
1886
+ this.alert.Warning(httpError.error?.message || httpError.error);
1887
+ break;
1888
+ }
1889
+ }
1890
+ }
1891
+ }
1892
+ }
1893
+
1894
+ /**
1895
+ * Generated bundle index. Do not edit.
1896
+ */
1897
+
1898
+ export { Breadcrumbs, CONTROL_VALUE, CoerAlert, Colors, ControlValue, DateTime, ElementsHTML, Files, Filters, GridTemplates, Menu, Page, Screen, Section, Service, Source, Tools, User };
1899
+ //# sourceMappingURL=coer-elements-tools.mjs.map