cmat 0.0.78 → 0.0.80

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 (211) hide show
  1. package/fesm2022/cmat-components-adapter.mjs +9 -46
  2. package/fesm2022/cmat-components-adapter.mjs.map +1 -1
  3. package/fesm2022/cmat-components-breadcrumb.mjs +104 -205
  4. package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
  5. package/fesm2022/cmat-components-card.mjs +4 -8
  6. package/fesm2022/cmat-components-card.mjs.map +1 -1
  7. package/fesm2022/cmat-components-carousel.mjs +21 -21
  8. package/fesm2022/cmat-components-carousel.mjs.map +1 -1
  9. package/fesm2022/cmat-components-cascade.mjs +18 -24
  10. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  11. package/fesm2022/cmat-components-chip-input.mjs +21 -21
  12. package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
  13. package/fesm2022/cmat-components-code-editor.mjs +4 -22
  14. package/fesm2022/cmat-components-code-editor.mjs.map +1 -1
  15. package/fesm2022/cmat-components-custom-formly.mjs +181 -245
  16. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
  17. package/fesm2022/cmat-components-date-range.mjs +12 -184
  18. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  19. package/fesm2022/cmat-components-date-time-display.mjs +3 -15
  20. package/fesm2022/cmat-components-date-time-display.mjs.map +1 -1
  21. package/fesm2022/cmat-components-drawer.mjs +10 -100
  22. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  23. package/fesm2022/cmat-components-empty-state.mjs +4 -25
  24. package/fesm2022/cmat-components-empty-state.mjs.map +1 -1
  25. package/fesm2022/cmat-components-file-preview.mjs +3 -21
  26. package/fesm2022/cmat-components-file-preview.mjs.map +1 -1
  27. package/fesm2022/cmat-components-filter-toolbar.mjs +7 -50
  28. package/fesm2022/cmat-components-filter-toolbar.mjs.map +1 -1
  29. package/fesm2022/cmat-components-form-actions.mjs +3 -9
  30. package/fesm2022/cmat-components-form-actions.mjs.map +1 -1
  31. package/fesm2022/cmat-components-fullscreen.mjs +4 -4
  32. package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
  33. package/fesm2022/cmat-components-highlight.mjs +6 -32
  34. package/fesm2022/cmat-components-highlight.mjs.map +1 -1
  35. package/fesm2022/cmat-components-image-viewer.mjs +12 -24
  36. package/fesm2022/cmat-components-image-viewer.mjs.map +1 -1
  37. package/fesm2022/cmat-components-inline-loading.mjs +3 -12
  38. package/fesm2022/cmat-components-inline-loading.mjs.map +1 -1
  39. package/fesm2022/cmat-components-json-editor.mjs +11 -16
  40. package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
  41. package/fesm2022/cmat-components-knob-input.mjs +24 -18
  42. package/fesm2022/cmat-components-knob-input.mjs.map +1 -1
  43. package/fesm2022/cmat-components-masonry.mjs +8 -17
  44. package/fesm2022/cmat-components-masonry.mjs.map +1 -1
  45. package/fesm2022/cmat-components-material-color-picker.mjs +13 -34
  46. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  47. package/fesm2022/cmat-components-material-datetimepicker.mjs +80 -436
  48. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  49. package/fesm2022/cmat-components-navigation.mjs +266 -816
  50. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  51. package/fesm2022/cmat-components-opt-input.mjs +7 -10
  52. package/fesm2022/cmat-components-opt-input.mjs.map +1 -1
  53. package/fesm2022/cmat-components-org-chart.mjs +11 -11
  54. package/fesm2022/cmat-components-org-chart.mjs.map +1 -1
  55. package/fesm2022/cmat-components-page-header.mjs +8 -19
  56. package/fesm2022/cmat-components-page-header.mjs.map +1 -1
  57. package/fesm2022/cmat-components-pagination.mjs +113 -108
  58. package/fesm2022/cmat-components-pagination.mjs.map +1 -1
  59. package/fesm2022/cmat-components-password-strength.mjs +13 -16
  60. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  61. package/fesm2022/cmat-components-popover.mjs +15 -151
  62. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  63. package/fesm2022/cmat-components-progress-bar.mjs +16 -26
  64. package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
  65. package/fesm2022/cmat-components-qrcode.mjs +5 -11
  66. package/fesm2022/cmat-components-qrcode.mjs.map +1 -1
  67. package/fesm2022/cmat-components-rating.mjs +14 -14
  68. package/fesm2022/cmat-components-rating.mjs.map +1 -1
  69. package/fesm2022/cmat-components-rich-text-editor.mjs +4 -25
  70. package/fesm2022/cmat-components-rich-text-editor.mjs.map +1 -1
  71. package/fesm2022/cmat-components-select-search.mjs +51 -79
  72. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  73. package/fesm2022/cmat-components-select-table.mjs +204 -162
  74. package/fesm2022/cmat-components-select-table.mjs.map +1 -1
  75. package/fesm2022/cmat-components-select-tree.mjs +142 -97
  76. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  77. package/fesm2022/cmat-components-skeleton.mjs +4 -22
  78. package/fesm2022/cmat-components-skeleton.mjs.map +1 -1
  79. package/fesm2022/cmat-components-speed-dial.mjs +14 -19
  80. package/fesm2022/cmat-components-speed-dial.mjs.map +1 -1
  81. package/fesm2022/cmat-components-status-tag.mjs +3 -18
  82. package/fesm2022/cmat-components-status-tag.mjs.map +1 -1
  83. package/fesm2022/cmat-components-table-toolbar.mjs +3 -15
  84. package/fesm2022/cmat-components-table-toolbar.mjs.map +1 -1
  85. package/fesm2022/cmat-components-timeline.mjs +18 -21
  86. package/fesm2022/cmat-components-timeline.mjs.map +1 -1
  87. package/fesm2022/cmat-components-toast.mjs +20 -20
  88. package/fesm2022/cmat-components-toast.mjs.map +1 -1
  89. package/fesm2022/cmat-components-transfer-picker.mjs +159 -123
  90. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
  91. package/fesm2022/cmat-components-treetable.mjs +17 -19
  92. package/fesm2022/cmat-components-treetable.mjs.map +1 -1
  93. package/fesm2022/cmat-components-upload.mjs +35 -57
  94. package/fesm2022/cmat-components-upload.mjs.map +1 -1
  95. package/fesm2022/cmat-components-x6-angular-shape.mjs +0 -4
  96. package/fesm2022/cmat-components-x6-angular-shape.mjs.map +1 -1
  97. package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -27
  98. package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
  99. package/fesm2022/cmat-directives-arrow-cursor.mjs +7 -9
  100. package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -1
  101. package/fesm2022/cmat-directives-autofocus.mjs +3 -3
  102. package/fesm2022/cmat-directives-data-exporter.mjs +24 -33
  103. package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -1
  104. package/fesm2022/cmat-directives-debounce.mjs +14 -17
  105. package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
  106. package/fesm2022/cmat-directives-digit-only.mjs +6 -23
  107. package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
  108. package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
  109. package/fesm2022/cmat-directives-seamless-auto-scroll.mjs +4 -11
  110. package/fesm2022/cmat-directives-seamless-auto-scroll.mjs.map +1 -1
  111. package/fesm2022/cmat-lib-mock-api.mjs +6 -43
  112. package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
  113. package/fesm2022/cmat-pipes-bytes.mjs +3 -3
  114. package/fesm2022/cmat-pipes-date-format.mjs +3 -3
  115. package/fesm2022/cmat-pipes-find-by-key.mjs +3 -5
  116. package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
  117. package/fesm2022/cmat-pipes-group-by.mjs +3 -3
  118. package/fesm2022/cmat-pipes-keys.mjs +3 -3
  119. package/fesm2022/cmat-pipes-secure.mjs +8 -12
  120. package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
  121. package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
  122. package/fesm2022/cmat-services-alert.mjs +3 -3
  123. package/fesm2022/cmat-services-config.mjs +50 -26
  124. package/fesm2022/cmat-services-config.mjs.map +1 -1
  125. package/fesm2022/cmat-services-confirmation.mjs +9 -11
  126. package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
  127. package/fesm2022/cmat-services-data.mjs +56 -101
  128. package/fesm2022/cmat-services-data.mjs.map +1 -1
  129. package/fesm2022/cmat-services-export-as.mjs +4 -32
  130. package/fesm2022/cmat-services-export-as.mjs.map +1 -1
  131. package/fesm2022/cmat-services-loading.mjs +49 -40
  132. package/fesm2022/cmat-services-loading.mjs.map +1 -1
  133. package/fesm2022/cmat-services-local-storage.mjs +3 -3
  134. package/fesm2022/cmat-services-media-watcher.mjs +19 -25
  135. package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
  136. package/fesm2022/cmat-services-platform.mjs +3 -10
  137. package/fesm2022/cmat-services-platform.mjs.map +1 -1
  138. package/fesm2022/cmat-services-splash-screen.mjs +8 -13
  139. package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
  140. package/fesm2022/cmat-services-title.mjs +8 -12
  141. package/fesm2022/cmat-services-title.mjs.map +1 -1
  142. package/fesm2022/cmat-services-translation.mjs +3 -3
  143. package/fesm2022/cmat-services-utils.mjs +5 -27
  144. package/fesm2022/cmat-services-utils.mjs.map +1 -1
  145. package/fesm2022/cmat-validators.mjs +0 -8
  146. package/fesm2022/cmat-validators.mjs.map +1 -1
  147. package/fesm2022/cmat.mjs +3477 -3795
  148. package/fesm2022/cmat.mjs.map +1 -1
  149. package/package.json +1 -1
  150. package/tailwind/plugins/helpers.js +1 -10
  151. package/tailwind/plugins/scrollbar/index.js +0 -1
  152. package/tailwind/plugins/scrollbar/typedefs.js +1 -7
  153. package/tailwind/plugins/scrollbar/utilities.js +9 -58
  154. package/tailwind/plugins/scrollbar/variants.js +2 -17
  155. package/tailwind/plugins/theming.js +1 -57
  156. package/tailwind/utils/generate-contrasts.js +1 -12
  157. package/tailwind/utils/generate-palette.js +1 -32
  158. package/types/cmat-components-adapter.d.ts +0 -25
  159. package/types/cmat-components-breadcrumb.d.ts +25 -175
  160. package/types/cmat-components-carousel.d.ts +2 -20
  161. package/types/cmat-components-cascade.d.ts +4 -4
  162. package/types/cmat-components-chip-input.d.ts +4 -3
  163. package/types/cmat-components-code-editor.d.ts +0 -18
  164. package/types/cmat-components-custom-formly.d.ts +30 -37
  165. package/types/cmat-components-date-range.d.ts +1 -72
  166. package/types/cmat-components-date-time-display.d.ts +0 -15
  167. package/types/cmat-components-drawer.d.ts +2 -44
  168. package/types/cmat-components-empty-state.d.ts +0 -21
  169. package/types/cmat-components-file-preview.d.ts +0 -18
  170. package/types/cmat-components-filter-toolbar.d.ts +3 -43
  171. package/types/cmat-components-form-actions.d.ts +0 -6
  172. package/types/cmat-components-image-viewer.d.ts +5 -18
  173. package/types/cmat-components-inline-loading.d.ts +0 -9
  174. package/types/cmat-components-json-editor.d.ts +0 -1
  175. package/types/cmat-components-knob-input.d.ts +3 -3
  176. package/types/cmat-components-masonry.d.ts +1 -2
  177. package/types/cmat-components-material-color-picker.d.ts +1 -2
  178. package/types/cmat-components-material-datetimepicker.d.ts +6 -272
  179. package/types/cmat-components-navigation.d.ts +34 -171
  180. package/types/cmat-components-opt-input.d.ts +1 -1
  181. package/types/cmat-components-page-header.d.ts +2 -16
  182. package/types/cmat-components-pagination.d.ts +26 -27
  183. package/types/cmat-components-password-strength.d.ts +1 -2
  184. package/types/cmat-components-popover.d.ts +1 -110
  185. package/types/cmat-components-progress-bar.d.ts +9 -11
  186. package/types/cmat-components-rating.d.ts +6 -7
  187. package/types/cmat-components-rich-text-editor.d.ts +0 -21
  188. package/types/cmat-components-select-search.d.ts +4 -20
  189. package/types/cmat-components-select-table.d.ts +24 -12
  190. package/types/cmat-components-select-tree.d.ts +29 -29
  191. package/types/cmat-components-skeleton.d.ts +0 -18
  192. package/types/cmat-components-speed-dial.d.ts +1 -2
  193. package/types/cmat-components-status-tag.d.ts +0 -15
  194. package/types/cmat-components-table-toolbar.d.ts +0 -12
  195. package/types/cmat-components-timeline.d.ts +3 -4
  196. package/types/cmat-components-toast.d.ts +2 -2
  197. package/types/cmat-components-transfer-picker.d.ts +42 -36
  198. package/types/cmat-components-treetable.d.ts +3 -4
  199. package/types/cmat-components-upload.d.ts +12 -17
  200. package/types/cmat-components-x6-angular-shape.d.ts +0 -1
  201. package/types/cmat-directives-arrow-cursor.d.ts +1 -1
  202. package/types/cmat-directives-debounce.d.ts +3 -4
  203. package/types/cmat-pipes-secure.d.ts +3 -4
  204. package/types/cmat-services-config.d.ts +35 -13
  205. package/types/cmat-services-data.d.ts +13 -12
  206. package/types/cmat-services-export-as.d.ts +0 -22
  207. package/types/cmat-services-loading.d.ts +15 -10
  208. package/types/cmat-services-media-watcher.d.ts +10 -13
  209. package/types/cmat-services-splash-screen.d.ts +2 -4
  210. package/types/cmat-services-title.d.ts +3 -5
  211. package/types/cmat.d.ts +733 -1391
@@ -16,39 +16,29 @@ class CmatMockApiHandler {
16
16
  this._replied = 0;
17
17
  }
18
18
  get response() {
19
- // If the execution limit has been reached, throw an error
20
19
  if (this._replyCount > 0 && this._replyCount <= this._replied) {
21
20
  return throwError(() => new Error('Execution limit has been reached!'));
22
21
  }
23
- // If the response callback has not been set, throw an error
24
22
  if (!this._reply) {
25
23
  return throwError(() => new Error('Response callback function does not exist!'));
26
24
  }
27
- // If the request has not been set, throw an error
28
25
  if (!this.request) {
29
26
  return throwError(() => new Error('Request does not exist!'));
30
27
  }
31
- // Increase the replied count
32
28
  this._replied++;
33
- // Execute the reply callback
34
29
  const replyResult = this._reply({
35
30
  request: this.request,
36
31
  urlParams: this.urlParams
37
32
  });
38
- // If the result of the reply callback is an observable...
39
33
  if (replyResult instanceof Observable) {
40
- // Return the result as it is
41
34
  return replyResult.pipe(take(1));
42
35
  }
43
- // Otherwise, return the result as an observable
44
36
  return of(replyResult).pipe(take(1));
45
37
  }
46
38
  reply(callback) {
47
- // Store the reply
48
39
  this._reply = callback;
49
40
  }
50
41
  replyCount(count) {
51
- // Store the reply count
52
42
  this._replyCount = count;
53
43
  }
54
44
  }
@@ -67,34 +57,23 @@ class CmatMockApiService {
67
57
  };
68
58
  }
69
59
  findHandler(method, url) {
70
- // Prepare the return object
71
60
  const matchingHandler = {
72
61
  handler: void 0,
73
62
  urlParams: {}
74
63
  };
75
- // Split the url
76
64
  const urlParts = url.split('/');
77
- // Get all related request handlers
78
65
  const handlers = this._handlers[method.toLowerCase()];
79
- // Iterate through the handlers
80
66
  handlers.forEach((handler, handlerUrl) => {
81
- // Skip if there is already a matching handler
82
67
  if (matchingHandler.handler) {
83
68
  return;
84
69
  }
85
- // Split the handler url
86
70
  const handlerUrlParts = handlerUrl.split('/');
87
- // Skip if the lengths of the urls we are comparing are not the same
88
71
  if (urlParts.length !== handlerUrlParts.length) {
89
72
  return;
90
73
  }
91
- // Compare
92
74
  const matches = handlerUrlParts.every((handlerUrlPart, index) => handlerUrlPart === urlParts[index] || handlerUrlPart.startsWith(':'));
93
- // If there is a match...
94
75
  if (matches) {
95
- // Assign the matching handler
96
76
  matchingHandler.handler = handler;
97
- // Extract and assign the parameters
98
77
  matchingHandler.urlParams = fromPairs(compact(handlerUrlParts.map((handlerUrlPart, index) => handlerUrlPart.startsWith(':') ? [handlerUrlPart.substring(1), urlParts[index]] : void 0)));
99
78
  }
100
79
  });
@@ -125,17 +104,14 @@ class CmatMockApiService {
125
104
  return this._registerHandler('options', url, delay);
126
105
  }
127
106
  _registerHandler(method, url, delay) {
128
- // Create a new instance of CmatMockApiRequestHandler
129
107
  const cmatMockHttp = new CmatMockApiHandler(url, delay);
130
- // Store the handler to access it from the interceptor
131
108
  this._handlers[method].set(url, cmatMockHttp);
132
- // Return the instance
133
109
  return cmatMockHttp;
134
110
  }
135
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatMockApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
136
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatMockApiService, providedIn: 'root' }); }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatMockApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
112
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatMockApiService, providedIn: 'root' }); }
137
113
  }
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatMockApiService, decorators: [{
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatMockApiService, decorators: [{
139
115
  type: Injectable,
140
116
  args: [{
141
117
  providedIn: 'root'
@@ -145,7 +121,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
145
121
  class CmatMockApiUtils {
146
122
  static guid() {
147
123
  let d = new Date().getTime();
148
- // Use high-precision timer if available
149
124
  if (!isUndefined(performance) && typeof performance.now === 'function') {
150
125
  d += performance.now();
151
126
  }
@@ -163,20 +138,13 @@ class CmatMockApiInterceptor {
163
138
  this._cmatMockApiService = inject(CmatMockApiService);
164
139
  }
165
140
  intercept(request, next) {
166
- // Try to get the request handler
167
141
  const { handler, urlParams } = this._cmatMockApiService.findHandler(request.method.toUpperCase(), request.url);
168
- // Pass through if the request handler does not exist
169
142
  if (!handler) {
170
143
  return next.handle(request);
171
144
  }
172
- // Set the intercepted request on the handler
173
145
  handler.request = request;
174
- // Set the url params on the handler
175
146
  handler.urlParams = urlParams;
176
- // Subscribe to the response function observable
177
147
  return handler.response.pipe(delay(handler.delay ?? this._defaultDelay ?? 0), switchMap((response) => {
178
- // If there is no response data,
179
- // throw an error response
180
148
  if (!response) {
181
149
  response = new HttpErrorResponse({
182
150
  error: 'NOT FOUND',
@@ -185,13 +153,10 @@ class CmatMockApiInterceptor {
185
153
  });
186
154
  return throwError(() => response);
187
155
  }
188
- // Parse the response data
189
156
  const data = {
190
157
  status: response[0],
191
158
  body: response[1]
192
159
  };
193
- // If the status code is in between 200 and 300,
194
- // return a success response
195
160
  if (data.status >= 200 && data.status < 300) {
196
161
  response = new HttpResponse({
197
162
  body: data.body,
@@ -200,8 +165,6 @@ class CmatMockApiInterceptor {
200
165
  });
201
166
  return of(response);
202
167
  }
203
- // For other status codes,
204
- // throw an error response
205
168
  response = new HttpErrorResponse({
206
169
  error: data.body.error,
207
170
  status: data.status,
@@ -210,10 +173,10 @@ class CmatMockApiInterceptor {
210
173
  return throwError(() => response);
211
174
  }));
212
175
  }
213
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatMockApiInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
214
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatMockApiInterceptor, providedIn: 'root' }); }
176
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatMockApiInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
177
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatMockApiInterceptor, providedIn: 'root' }); }
215
178
  }
216
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatMockApiInterceptor, decorators: [{
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatMockApiInterceptor, decorators: [{
217
180
  type: Injectable,
218
181
  args: [{
219
182
  providedIn: 'root'
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-lib-mock-api.mjs","sources":["../../../projects/cmat/lib/mock-api/mock-api.constants.ts","../../../projects/cmat/lib/mock-api/mock-api.request-handler.ts","../../../projects/cmat/lib/mock-api/mock-api.service.ts","../../../projects/cmat/lib/mock-api/mock-api.utils.ts","../../../projects/cmat/lib/mock-api/mock-api.interceptor.ts","../../../projects/cmat/lib/mock-api/cmat-lib-mock-api.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const CMAT_MOCK_API_DEFAULT_DELAY = new InjectionToken<number>('CMAT_MOCK_API_DEFAULT_DELAY');\r\n","import { HttpRequest } from '@angular/common/http';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { CmatMockApiReplyCallback } from './mock-api.types';\r\n\r\nexport class CmatMockApiHandler {\r\n request!: HttpRequest<any>;\r\n urlParams!: Record<string, string>;\r\n\r\n private _reply: CmatMockApiReplyCallback = void 0;\r\n private _replyCount = 0;\r\n private _replied = 0;\r\n\r\n constructor(\r\n public url: string,\r\n public delay?: number\r\n ) {\r\n }\r\n\r\n get response(): Observable<any> {\r\n // If the execution limit has been reached, throw an error\r\n if (this._replyCount > 0 && this._replyCount <= this._replied) {\r\n return throwError(() => new Error('Execution limit has been reached!'));\r\n }\r\n\r\n // If the response callback has not been set, throw an error\r\n if (!this._reply) {\r\n return throwError(() => new Error('Response callback function does not exist!'));\r\n }\r\n\r\n // If the request has not been set, throw an error\r\n if (!this.request) {\r\n return throwError(() => new Error('Request does not exist!'));\r\n }\r\n\r\n // Increase the replied count\r\n this._replied++;\r\n\r\n // Execute the reply callback\r\n const replyResult = this._reply({\r\n request: this.request,\r\n urlParams: this.urlParams\r\n });\r\n\r\n // If the result of the reply callback is an observable...\r\n if (replyResult instanceof Observable) {\r\n // Return the result as it is\r\n return replyResult.pipe(take(1));\r\n }\r\n\r\n // Otherwise, return the result as an observable\r\n return of(replyResult).pipe(take(1));\r\n }\r\n\r\n reply(callback: CmatMockApiReplyCallback): void {\r\n // Store the reply\r\n this._reply = callback;\r\n }\r\n\r\n replyCount(count: number): void {\r\n // Store the reply count\r\n this._replyCount = count;\r\n }\r\n}\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { compact, fromPairs } from 'lodash-es';\r\nimport { CmatMockApiHandler } from './mock-api.request-handler';\r\nimport { CmatMockApiMethods } from './mock-api.types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatMockApiService {\r\n private _handlers: Record<string, Map<string, CmatMockApiHandler>> = {\r\n 'get': new Map<string, CmatMockApiHandler>(),\r\n 'post': new Map<string, CmatMockApiHandler>(),\r\n 'patch': new Map<string, CmatMockApiHandler>(),\r\n 'delete': new Map<string, CmatMockApiHandler>(),\r\n 'put': new Map<string, CmatMockApiHandler>(),\r\n 'head': new Map<string, CmatMockApiHandler>(),\r\n 'jsonp': new Map<string, CmatMockApiHandler>(),\r\n 'options': new Map<string, CmatMockApiHandler>()\r\n };\r\n\r\n findHandler(method: string, url: string): { handler: CmatMockApiHandler | void; urlParams: Record<string, string> } {\r\n // Prepare the return object\r\n const matchingHandler: { handler: CmatMockApiHandler | void; urlParams: Record<string, string> } = {\r\n handler: void 0,\r\n urlParams: {}\r\n };\r\n\r\n // Split the url\r\n const urlParts = url.split('/');\r\n\r\n // Get all related request handlers\r\n const handlers = this._handlers[method.toLowerCase()];\r\n\r\n // Iterate through the handlers\r\n handlers.forEach((handler, handlerUrl) => {\r\n\r\n // Skip if there is already a matching handler\r\n if (matchingHandler.handler) {\r\n return;\r\n }\r\n\r\n // Split the handler url\r\n const handlerUrlParts = handlerUrl.split('/');\r\n\r\n // Skip if the lengths of the urls we are comparing are not the same\r\n if (urlParts.length !== handlerUrlParts.length) {\r\n return;\r\n }\r\n\r\n // Compare\r\n const matches = handlerUrlParts.every((handlerUrlPart, index) => handlerUrlPart === urlParts[index] || handlerUrlPart.startsWith(':'));\r\n\r\n // If there is a match...\r\n if (matches) {\r\n // Assign the matching handler\r\n matchingHandler.handler = handler;\r\n\r\n // Extract and assign the parameters\r\n matchingHandler.urlParams = fromPairs(compact(handlerUrlParts.map((handlerUrlPart, index) =>\r\n handlerUrlPart.startsWith(':') ? [handlerUrlPart.substring(1), urlParts[index]] : void 0\r\n )));\r\n }\r\n });\r\n\r\n return matchingHandler;\r\n }\r\n\r\n onDelete(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('delete', url, delay);\r\n }\r\n\r\n onGet(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('get', url, delay);\r\n }\r\n\r\n onPatch(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('patch', url, delay);\r\n }\r\n\r\n onPost(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('post', url, delay);\r\n }\r\n\r\n onPut(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('put', url, delay);\r\n }\r\n\r\n onHead(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('head', url, delay);\r\n }\r\n\r\n onJsonp(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('jsonp', url, delay);\r\n }\r\n\r\n onOptions(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('options', url, delay);\r\n }\r\n\r\n private _registerHandler(method: CmatMockApiMethods, url: string, delay?: number): CmatMockApiHandler {\r\n // Create a new instance of CmatMockApiRequestHandler\r\n const cmatMockHttp = new CmatMockApiHandler(url, delay);\r\n\r\n // Store the handler to access it from the interceptor\r\n this._handlers[method].set(url, cmatMockHttp);\r\n\r\n // Return the instance\r\n return cmatMockHttp;\r\n }\r\n}\r\n","import { isUndefined } from 'lodash-es';\r\n\r\nexport class CmatMockApiUtils {\r\n static guid(): string {\r\n \r\n\r\n let d = new Date().getTime();\r\n\r\n // Use high-precision timer if available\r\n if (!isUndefined(performance) && typeof performance.now === 'function') {\r\n d += performance.now();\r\n }\r\n\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { delay, switchMap } from 'rxjs/operators';\r\nimport { CMAT_MOCK_API_DEFAULT_DELAY } from './mock-api.constants';\r\nimport { CmatMockApiService } from './mock-api.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatMockApiInterceptor implements HttpInterceptor {\r\n private _defaultDelay = inject(CMAT_MOCK_API_DEFAULT_DELAY);\r\n private _cmatMockApiService = inject(CmatMockApiService);\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n // Try to get the request handler\r\n const {\r\n handler,\r\n urlParams\r\n } = this._cmatMockApiService.findHandler(request.method.toUpperCase(), request.url);\r\n\r\n // Pass through if the request handler does not exist\r\n if (!handler) {\r\n return next.handle(request);\r\n }\r\n\r\n // Set the intercepted request on the handler\r\n handler.request = request;\r\n\r\n // Set the url params on the handler\r\n handler.urlParams = urlParams;\r\n\r\n // Subscribe to the response function observable\r\n return handler.response.pipe(\r\n delay(handler.delay ?? this._defaultDelay ?? 0),\r\n switchMap((response: any) => {\r\n\r\n // If there is no response data,\r\n // throw an error response\r\n if (!response) {\r\n response = new HttpErrorResponse({\r\n error: 'NOT FOUND',\r\n status: 404,\r\n statusText: 'NOT FOUND'\r\n });\r\n\r\n return throwError(() => response);\r\n }\r\n\r\n // Parse the response data\r\n const data = {\r\n status: response[0],\r\n body: response[1]\r\n };\r\n\r\n // If the status code is in between 200 and 300,\r\n // return a success response\r\n if (data.status >= 200 && data.status < 300) {\r\n response = new HttpResponse({\r\n body: data.body,\r\n status: data.status,\r\n statusText: 'OK'\r\n });\r\n\r\n return of(response);\r\n }\r\n\r\n // For other status codes,\r\n // throw an error response\r\n response = new HttpErrorResponse({\r\n error: data.body.error,\r\n status: data.status,\r\n statusText: 'ERROR'\r\n });\r\n\r\n return throwError(() => response);\r\n }));\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmat-lib-mock-api.mjs","sources":["../../../projects/cmat/lib/mock-api/mock-api.constants.ts","../../../projects/cmat/lib/mock-api/mock-api.request-handler.ts","../../../projects/cmat/lib/mock-api/mock-api.service.ts","../../../projects/cmat/lib/mock-api/mock-api.utils.ts","../../../projects/cmat/lib/mock-api/mock-api.interceptor.ts","../../../projects/cmat/lib/mock-api/cmat-lib-mock-api.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const CMAT_MOCK_API_DEFAULT_DELAY = new InjectionToken<number>('CMAT_MOCK_API_DEFAULT_DELAY');\r\n","import { HttpRequest } from '@angular/common/http';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { CmatMockApiReplyCallback } from './mock-api.types';\r\n\r\nexport class CmatMockApiHandler {\r\n request!: HttpRequest<any>;\r\n urlParams!: Record<string, string>;\r\n\r\n private _reply: CmatMockApiReplyCallback = void 0;\r\n private _replyCount = 0;\r\n private _replied = 0;\r\n\r\n constructor(\r\n public url: string,\r\n public delay?: number\r\n ) {\r\n }\r\n\r\n get response(): Observable<any> {\r\n if (this._replyCount > 0 && this._replyCount <= this._replied) {\r\n return throwError(() => new Error('Execution limit has been reached!'));\r\n }\r\n if (!this._reply) {\r\n return throwError(() => new Error('Response callback function does not exist!'));\r\n }\r\n if (!this.request) {\r\n return throwError(() => new Error('Request does not exist!'));\r\n }\r\n this._replied++;\r\n const replyResult = this._reply({\r\n request: this.request,\r\n urlParams: this.urlParams\r\n });\r\n if (replyResult instanceof Observable) {\r\n return replyResult.pipe(take(1));\r\n }\r\n return of(replyResult).pipe(take(1));\r\n }\r\n\r\n reply(callback: CmatMockApiReplyCallback): void {\r\n this._reply = callback;\r\n }\r\n\r\n replyCount(count: number): void {\r\n this._replyCount = count;\r\n }\r\n}\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { compact, fromPairs } from 'lodash-es';\r\nimport { CmatMockApiHandler } from './mock-api.request-handler';\r\nimport { CmatMockApiMethods } from './mock-api.types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatMockApiService {\r\n private _handlers: Record<string, Map<string, CmatMockApiHandler>> = {\r\n 'get': new Map<string, CmatMockApiHandler>(),\r\n 'post': new Map<string, CmatMockApiHandler>(),\r\n 'patch': new Map<string, CmatMockApiHandler>(),\r\n 'delete': new Map<string, CmatMockApiHandler>(),\r\n 'put': new Map<string, CmatMockApiHandler>(),\r\n 'head': new Map<string, CmatMockApiHandler>(),\r\n 'jsonp': new Map<string, CmatMockApiHandler>(),\r\n 'options': new Map<string, CmatMockApiHandler>()\r\n };\r\n\r\n findHandler(method: string, url: string): { handler: CmatMockApiHandler | void; urlParams: Record<string, string> } {\r\n const matchingHandler: { handler: CmatMockApiHandler | void; urlParams: Record<string, string> } = {\r\n handler: void 0,\r\n urlParams: {}\r\n };\r\n const urlParts = url.split('/');\r\n const handlers = this._handlers[method.toLowerCase()];\r\n handlers.forEach((handler, handlerUrl) => {\r\n if (matchingHandler.handler) {\r\n return;\r\n }\r\n const handlerUrlParts = handlerUrl.split('/');\r\n if (urlParts.length !== handlerUrlParts.length) {\r\n return;\r\n }\r\n const matches = handlerUrlParts.every((handlerUrlPart, index) => handlerUrlPart === urlParts[index] || handlerUrlPart.startsWith(':'));\r\n if (matches) {\r\n matchingHandler.handler = handler;\r\n matchingHandler.urlParams = fromPairs(compact(handlerUrlParts.map((handlerUrlPart, index) =>\r\n handlerUrlPart.startsWith(':') ? [handlerUrlPart.substring(1), urlParts[index]] : void 0\r\n )));\r\n }\r\n });\r\n\r\n return matchingHandler;\r\n }\r\n\r\n onDelete(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('delete', url, delay);\r\n }\r\n\r\n onGet(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('get', url, delay);\r\n }\r\n\r\n onPatch(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('patch', url, delay);\r\n }\r\n\r\n onPost(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('post', url, delay);\r\n }\r\n\r\n onPut(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('put', url, delay);\r\n }\r\n\r\n onHead(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('head', url, delay);\r\n }\r\n\r\n onJsonp(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('jsonp', url, delay);\r\n }\r\n\r\n onOptions(url: string, delay?: number): CmatMockApiHandler {\r\n return this._registerHandler('options', url, delay);\r\n }\r\n\r\n private _registerHandler(method: CmatMockApiMethods, url: string, delay?: number): CmatMockApiHandler {\r\n const cmatMockHttp = new CmatMockApiHandler(url, delay);\r\n this._handlers[method].set(url, cmatMockHttp);\r\n return cmatMockHttp;\r\n }\r\n}\r\n","import { isUndefined } from 'lodash-es';\r\n\r\nexport class CmatMockApiUtils {\r\n static guid(): string {\r\n \r\n\r\n let d = new Date().getTime();\r\n if (!isUndefined(performance) && typeof performance.now === 'function') {\r\n d += performance.now();\r\n }\r\n\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { delay, switchMap } from 'rxjs/operators';\r\nimport { CMAT_MOCK_API_DEFAULT_DELAY } from './mock-api.constants';\r\nimport { CmatMockApiService } from './mock-api.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatMockApiInterceptor implements HttpInterceptor {\r\n private _defaultDelay = inject(CMAT_MOCK_API_DEFAULT_DELAY);\r\n private _cmatMockApiService = inject(CmatMockApiService);\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n const {\r\n handler,\r\n urlParams\r\n } = this._cmatMockApiService.findHandler(request.method.toUpperCase(), request.url);\r\n if (!handler) {\r\n return next.handle(request);\r\n }\r\n handler.request = request;\r\n handler.urlParams = urlParams;\r\n return handler.response.pipe(\r\n delay(handler.delay ?? this._defaultDelay ?? 0),\r\n switchMap((response: any) => {\r\n if (!response) {\r\n response = new HttpErrorResponse({\r\n error: 'NOT FOUND',\r\n status: 404,\r\n statusText: 'NOT FOUND'\r\n });\r\n\r\n return throwError(() => response);\r\n }\r\n const data = {\r\n status: response[0],\r\n body: response[1]\r\n };\r\n if (data.status >= 200 && data.status < 300) {\r\n response = new HttpResponse({\r\n body: data.body,\r\n status: data.status,\r\n statusText: 'OK'\r\n });\r\n\r\n return of(response);\r\n }\r\n response = new HttpErrorResponse({\r\n error: data.body.error,\r\n status: data.status,\r\n statusText: 'ERROR'\r\n });\r\n\r\n return throwError(() => response);\r\n }));\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -13,10 +13,10 @@ class CmatBytesPipe {
13
13
  const size = Math.floor(Math.log(bytes) / Math.log(1024));
14
14
  return (bytes / Math.pow(1024, Math.floor(size))).toFixed(1) + ' ' + units[size];
15
15
  }
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatBytesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
17
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: CmatBytesPipe, isStandalone: true, name: "cmatBytes" }); }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatBytesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
17
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: CmatBytesPipe, isStandalone: true, name: "cmatBytes" }); }
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatBytesPipe, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatBytesPipe, decorators: [{
20
20
  type: Pipe,
21
21
  args: [{
22
22
  name: 'cmatBytes'
@@ -8,10 +8,10 @@ class CmatDateFormatPipe {
8
8
  return dayjs(value).format(format);
9
9
  return '';
10
10
  }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatDateFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
12
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: CmatDateFormatPipe, isStandalone: true, name: "cmatDateFormat" }); }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatDateFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
12
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: CmatDateFormatPipe, isStandalone: true, name: "cmatDateFormat" }); }
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatDateFormatPipe, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatDateFormatPipe, decorators: [{
15
15
  type: Pipe,
16
16
  args: [{
17
17
  name: 'cmatDateFormat'
@@ -3,17 +3,15 @@ import { Pipe } from '@angular/core';
3
3
 
4
4
  class CmatFindByKeyPipe {
5
5
  transform(value, key, source) {
6
- // If the given value is an array of strings...
7
6
  if (Array.isArray(value)) {
8
7
  return value.map(item => source.find(sourceItem => sourceItem[key] === item));
9
8
  }
10
- // If the value is a string...
11
9
  return source.find(sourceItem => sourceItem[key] === value);
12
10
  }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatFindByKeyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
14
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: CmatFindByKeyPipe, isStandalone: true, name: "cmatFindByKey", pure: false }); }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatFindByKeyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
12
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: CmatFindByKeyPipe, isStandalone: true, name: "cmatFindByKey", pure: false }); }
15
13
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatFindByKeyPipe, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatFindByKeyPipe, decorators: [{
17
15
  type: Pipe,
18
16
  args: [{
19
17
  name: 'cmatFindByKey',
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-pipes-find-by-key.mjs","sources":["../../../projects/cmat/pipes/find-by-key/find-by-key.pipe.ts","../../../projects/cmat/pipes/find-by-key/cmat-pipes-find-by-key.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'cmatFindByKey',\r\n pure: false\r\n})\r\nexport class CmatFindByKeyPipe implements PipeTransform {\r\n transform(value: string | string[], key: string, source: any[]): any {\r\n // If the given value is an array of strings...\r\n if (Array.isArray(value)) {\r\n return value.map(item => source.find(sourceItem => sourceItem[key] === item));\r\n }\r\n\r\n // If the value is a string...\r\n return source.find(sourceItem => sourceItem[key] === value);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAMa,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,KAAwB,EAAE,GAAW,EAAE,MAAa,EAAA;;AAE1D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QACjF;;AAGA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;IAC/D;8GATS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACLD;;AAEG;;;;"}
1
+ {"version":3,"file":"cmat-pipes-find-by-key.mjs","sources":["../../../projects/cmat/pipes/find-by-key/find-by-key.pipe.ts","../../../projects/cmat/pipes/find-by-key/cmat-pipes-find-by-key.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'cmatFindByKey',\r\n pure: false\r\n})\r\nexport class CmatFindByKeyPipe implements PipeTransform {\r\n transform(value: string | string[], key: string, source: any[]): any {\r\n if (Array.isArray(value)) {\r\n return value.map(item => source.find(sourceItem => sourceItem[key] === item));\r\n }\r\n return source.find(sourceItem => sourceItem[key] === value);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAMa,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,KAAwB,EAAE,GAAW,EAAE,MAAa,EAAA;AAC1D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QACjF;AACA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;IAC/D;8GANS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACLD;;AAEG;;;;"}
@@ -17,10 +17,10 @@ class CmatGroupByPipe {
17
17
  }, {});
18
18
  return Object.keys(groupedObj).map(key => ({ key, value: groupedObj[key] }));
19
19
  }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatGroupByPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
21
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: CmatGroupByPipe, isStandalone: true, name: "cmatGroupBy" }); }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatGroupByPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
21
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: CmatGroupByPipe, isStandalone: true, name: "cmatGroupBy" }); }
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatGroupByPipe, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatGroupByPipe, decorators: [{
24
24
  type: Pipe,
25
25
  args: [{
26
26
  name: 'cmatGroupBy'
@@ -14,10 +14,10 @@ class CmatKeysPipe {
14
14
  }
15
15
  return keys;
16
16
  }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatKeysPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
18
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: CmatKeysPipe, isStandalone: true, name: "cmatKeys" }); }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatKeysPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
18
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: CmatKeysPipe, isStandalone: true, name: "cmatKeys" }); }
19
19
  }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatKeysPipe, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatKeysPipe, decorators: [{
21
21
  type: Pipe,
22
22
  args: [{
23
23
  name: 'cmatKeys'
@@ -1,28 +1,24 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, Pipe } from '@angular/core';
3
+ import { inject, DestroyRef, Pipe } from '@angular/core';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
5
  import { DomSanitizer } from '@angular/platform-browser';
5
6
  import { CmatUrlStateConfigService } from 'cmat/services/config';
6
7
  import { CmatUtilsService } from 'cmat/services/utils';
7
- import { Subject } from 'rxjs';
8
- import { takeUntil, map } from 'rxjs/operators';
8
+ import { map } from 'rxjs/operators';
9
9
 
10
10
  class CmatSecurePipe {
11
11
  constructor() {
12
12
  this._http = inject(HttpClient);
13
13
  this._sanitizer = inject(DomSanitizer);
14
14
  this._urlStateConfigService = inject(CmatUrlStateConfigService);
15
- this._unsubscribeAll = new Subject();
15
+ this._destroyRef = inject(DestroyRef);
16
16
  this._urlStateConfigService.config$
17
- .pipe(takeUntil(this._unsubscribeAll))
17
+ .pipe(takeUntilDestroyed(this._destroyRef))
18
18
  .subscribe((config) => {
19
19
  this._config = config;
20
20
  });
21
21
  }
22
- ngOnDestroy() {
23
- this._unsubscribeAll.next(void 0);
24
- this._unsubscribeAll.complete();
25
- }
26
22
  transform(fileId) {
27
23
  return this._http
28
24
  .get(`${this._config.fileUrl}/download/${fileId}`, {
@@ -34,10 +30,10 @@ class CmatSecurePipe {
34
30
  })
35
31
  .pipe(map((val) => this._sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(val))));
36
32
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatSecurePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
38
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: CmatSecurePipe, isStandalone: true, name: "cmatSecure" }); }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatSecurePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
34
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: CmatSecurePipe, isStandalone: true, name: "cmatSecure" }); }
39
35
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatSecurePipe, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatSecurePipe, decorators: [{
41
37
  type: Pipe,
42
38
  args: [{
43
39
  name: 'cmatSecure'
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-pipes-secure.mjs","sources":["../../../projects/cmat/pipes/secure/secure-pipe.ts","../../../projects/cmat/pipes/secure/cmat-pipes-secure.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { CmatUrlStateConfigService, IUrlStateConfig } from 'cmat/services/config';\r\nimport { CmatUtilsService } from 'cmat/services/utils';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\n\r\n\r\n@Pipe({\r\n name: 'cmatSecure'\r\n})\r\nexport class CmatSecurePipe implements PipeTransform, OnDestroy {\r\n private _http = inject(HttpClient);\r\n private _sanitizer = inject(DomSanitizer);\r\n private _urlStateConfigService = inject(CmatUrlStateConfigService);\r\n\r\n private _config: IUrlStateConfig;\r\n private _unsubscribeAll: Subject<void> = new Subject<void>();\r\n\r\n \r\n\r\n constructor() {\r\n this._urlStateConfigService.config$\r\n .pipe(takeUntil(this._unsubscribeAll))\r\n .subscribe((config: IUrlStateConfig) => {\r\n this._config = config;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n transform(fileId: string): Observable<SafeUrl> {\r\n return this._http\r\n .get(`${this._config.fileUrl}/download/${fileId}`, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders(fileId.toString()),\r\n responseType: 'blob',\r\n params: {\r\n isStream: false\r\n }\r\n })\r\n .pipe(map((val: Blob | MediaSource) => this._sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(val))));\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MAYa,cAAc,CAAA;AAUvB,IAAA,WAAA,GAAA;AATQ,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAG1D,QAAA,IAAA,CAAA,eAAe,GAAkB,IAAI,OAAO,EAAQ;QAKxD,IAAI,CAAC,sBAAsB,CAAC;AACvB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;AACpC,aAAA,SAAS,CAAC,CAAC,MAAuB,KAAI;AACnC,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACzB,QAAA,CAAC,CAAC;IACV;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;IACnC;AAEA,IAAA,SAAS,CAAC,MAAc,EAAA;QACpB,OAAO,IAAI,CAAC;aACP,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA,UAAA,EAAa,MAAM,CAAA,CAAE,EAAE;YAC/C,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpE,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,MAAM,EAAE;AACJ,gBAAA,QAAQ,EAAE;AACb;SACJ;aACA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAuB,KAAK,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjH;8GAjCS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACXD;;AAEG;;;;"}
1
+ {"version":3,"file":"cmat-pipes-secure.mjs","sources":["../../../projects/cmat/pipes/secure/secure-pipe.ts","../../../projects/cmat/pipes/secure/cmat-pipes-secure.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { DestroyRef, Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { CmatUrlStateConfigService, IUrlStateConfig } from 'cmat/services/config';\r\nimport { CmatUtilsService } from 'cmat/services/utils';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n@Pipe({\r\n name: 'cmatSecure'\r\n})\r\nexport class CmatSecurePipe implements PipeTransform {\r\n private _http = inject(HttpClient);\r\n private _sanitizer = inject(DomSanitizer);\r\n private _urlStateConfigService = inject(CmatUrlStateConfigService);\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n private _config: IUrlStateConfig;\r\n\r\n constructor() {\r\n this._urlStateConfigService.config$\r\n .pipe(takeUntilDestroyed(this._destroyRef))\r\n .subscribe((config: IUrlStateConfig) => {\r\n this._config = config;\r\n });\r\n }\r\n\r\n transform(fileId: string): Observable<SafeUrl> {\r\n return this._http\r\n .get(`${this._config.fileUrl}/download/${fileId}`, {\r\n headers: CmatUtilsService.getRequestCryptoHeaders(fileId.toString()),\r\n responseType: 'blob',\r\n params: {\r\n isStream: false\r\n }\r\n })\r\n .pipe(map((val: Blob | MediaSource) => this._sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(val))));\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MAaa,cAAc,CAAA;AAQvB,IAAA,WAAA,GAAA;AAPQ,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACjD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAK7C,IAAI,CAAC,sBAAsB,CAAC;AACvB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,MAAuB,KAAI;AACnC,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACzB,QAAA,CAAC,CAAC;IACV;AAEA,IAAA,SAAS,CAAC,MAAc,EAAA;QACpB,OAAO,IAAI,CAAC;aACP,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA,UAAA,EAAa,MAAM,CAAA,CAAE,EAAE;YAC/C,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpE,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,MAAM,EAAE;AACJ,gBAAA,QAAQ,EAAE;AACb;SACJ;aACA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAuB,KAAK,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjH;8GA1BS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACZD;;AAEG;;;;"}
@@ -5,10 +5,10 @@ class CmatUppercasePipe {
5
5
  transform(value) {
6
6
  return value.toUpperCase();
7
7
  }
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatUppercasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: CmatUppercasePipe, isStandalone: true, name: "cmatUppercase" }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUppercasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: CmatUppercasePipe, isStandalone: true, name: "cmatUppercase" }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatUppercasePipe, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUppercasePipe, decorators: [{
12
12
  type: Pipe,
13
13
  args: [{
14
14
  name: 'cmatUppercase'
@@ -190,10 +190,10 @@ class CmatAlertService {
190
190
  typeof obj.msg === 'string' &&
191
191
  typeof obj.type === 'number');
192
192
  }
193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatAlertService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
194
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatAlertService, providedIn: 'root' }); }
193
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatAlertService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
194
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatAlertService, providedIn: 'root' }); }
195
195
  }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatAlertService, decorators: [{
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatAlertService, decorators: [{
197
197
  type: Injectable,
198
198
  args: [{
199
199
  providedIn: 'root'
@@ -1,58 +1,82 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable } from '@angular/core';
3
- import { merge } from 'lodash-es';
4
- import { BehaviorSubject } from 'rxjs';
2
+ import { InjectionToken, inject, signal, Injectable } from '@angular/core';
3
+ import { toObservable } from '@angular/core/rxjs-interop';
5
4
 
6
5
  const CMAT_APP_CONFIG = new InjectionToken('CMAT_APP_CONFIG');
7
6
 
8
7
  class CmatConfigService {
9
8
  constructor() {
10
- const config = inject(CMAT_APP_CONFIG);
11
- this._config = new BehaviorSubject(config);
9
+ this._defaultConfig = structuredClone(inject(CMAT_APP_CONFIG));
10
+ this._config = signal(structuredClone(this._defaultConfig), ...(ngDevMode ? [{ debugName: "_config" }] : /* istanbul ignore next */ []));
11
+ this._config$ = toObservable(this._config);
12
12
  }
13
13
  get config$() {
14
- return this._config.asObservable();
14
+ return this._config$;
15
15
  }
16
16
  set config(value) {
17
- // Merge the new config over to the current config
18
- const config = merge({}, this._config.getValue(), value);
19
- // Execute the observable
20
- this._config.next(config);
17
+ this.updateConfig(value);
18
+ }
19
+ updateConfig(value) {
20
+ const config = this._mergeConfig(this._config(), value);
21
+ this._config.set(config);
21
22
  }
22
23
  reset() {
23
- // Set the config
24
- this._config.next(this.config);
24
+ this._config.set(structuredClone(this._defaultConfig));
25
+ }
26
+ _mergeConfig(target, source) {
27
+ const result = structuredClone(target);
28
+ for (const [key, value] of Object.entries(source)) {
29
+ if (value === undefined) {
30
+ continue;
31
+ }
32
+ const resultValue = result[key];
33
+ if (this._isRecord(resultValue) && this._isRecord(value)) {
34
+ result[key] = this._mergeConfig(resultValue, value);
35
+ continue;
36
+ }
37
+ result[key] = structuredClone(value);
38
+ }
39
+ return result;
40
+ }
41
+ _isRecord(value) {
42
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
25
43
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
27
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatConfigService, providedIn: 'root' }); }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
45
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatConfigService, providedIn: 'root' }); }
28
46
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatConfigService, decorators: [{
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatConfigService, decorators: [{
30
48
  type: Injectable,
31
49
  args: [{
32
50
  providedIn: 'root'
33
51
  }]
34
- }], ctorParameters: () => [] });
52
+ }] });
35
53
 
36
54
  class CmatUrlStateConfigService {
37
55
  constructor() {
38
- this._config = new BehaviorSubject({
56
+ this._defaultConfig = {
39
57
  fileUrl: '',
40
58
  enableDataProtect: false
41
- });
59
+ };
60
+ this._config = signal({ ...this._defaultConfig }, ...(ngDevMode ? [{ debugName: "_config" }] : /* istanbul ignore next */ []));
61
+ this._config$ = toObservable(this._config);
42
62
  }
43
63
  get config$() {
44
- return this._config.asObservable();
64
+ return this._config$;
45
65
  }
46
66
  config(value) {
47
- // Merge the new config over to the current config
48
- const config = merge({}, this._config.getValue(), value);
49
- // Execute the observable
50
- this._config.next(config);
67
+ this.updateConfig(value);
68
+ }
69
+ updateConfig(value) {
70
+ const config = {
71
+ ...this._config(),
72
+ ...value
73
+ };
74
+ this._config.set(config);
51
75
  }
52
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatUrlStateConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
53
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatUrlStateConfigService, providedIn: 'root' }); }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUrlStateConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
77
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUrlStateConfigService, providedIn: 'root' }); }
54
78
  }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CmatUrlStateConfigService, decorators: [{
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUrlStateConfigService, decorators: [{
56
80
  type: Injectable,
57
81
  args: [{
58
82
  providedIn: 'root'
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-services-config.mjs","sources":["../../../projects/cmat/services/config/config.constants.ts","../../../projects/cmat/services/config/config.service.ts","../../../projects/cmat/services/config/urlStateConfig.service.ts","../../../projects/cmat/services/config/cmat-services-config.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\r\n\r\nexport const CMAT_APP_CONFIG = new InjectionToken<any>('CMAT_APP_CONFIG');\r\n\r\nexport interface IUrlStateConfig {\r\n fileUrl: string;\r\n enableDataProtect: boolean;\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { merge } from 'lodash-es';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { CMAT_APP_CONFIG } from './config.constants';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatConfigService {\r\n private _config: BehaviorSubject<any>;\r\n\r\n \r\n\r\n constructor() {\r\n const config = inject(CMAT_APP_CONFIG);\r\n\r\n this._config = new BehaviorSubject(config);\r\n }\r\n\r\n get config$(): Observable<any> {\r\n return this._config.asObservable();\r\n }\r\n\r\n set config(value: any) {\r\n // Merge the new config over to the current config\r\n const config = merge({}, this._config.getValue(), value);\r\n\r\n // Execute the observable\r\n this._config.next(config);\r\n }\r\n\r\n reset(): void {\r\n // Set the config\r\n this._config.next(this.config);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { merge } from 'lodash-es';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { IUrlStateConfig } from './config.constants';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatUrlStateConfigService {\r\n private _config: BehaviorSubject<IUrlStateConfig> = new BehaviorSubject<IUrlStateConfig>({\r\n fileUrl: '',\r\n enableDataProtect: false\r\n });\r\n\r\n get config$(): Observable<IUrlStateConfig> {\r\n return this._config.asObservable();\r\n }\r\n\r\n config(value: IUrlStateConfig):void {\r\n // Merge the new config over to the current config\r\n const config = merge({}, this._config.getValue(), value);\r\n\r\n // Execute the observable\r\n this._config.next(config);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAEa,eAAe,GAAG,IAAI,cAAc,CAAM,iBAAiB;;MCM3D,iBAAiB,CAAA;AAK1B,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;QAEtC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC;IAC9C;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;IACtC;IAEA,IAAI,MAAM,CAAC,KAAU,EAAA;;AAEjB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC;;AAGxD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;IAEA,KAAK,GAAA;;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAClC;8GA1BS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFd,MAAM,EAAA,CAAA,CAAA;;2FAET,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,yBAAyB,CAAA;AAHtC,IAAA,WAAA,GAAA;QAIY,IAAA,CAAA,OAAO,GAAqC,IAAI,eAAe,CAAkB;AACrF,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,iBAAiB,EAAE;AACtB,SAAA,CAAC;AAaL,IAAA;AAXG,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;IACtC;AAEA,IAAA,MAAM,CAAC,KAAsB,EAAA;;AAEzB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC;;AAGxD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;8GAhBS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFtB,MAAM,EAAA,CAAA,CAAA;;2FAET,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACPD;;AAEG;;;;"}
1
+ {"version":3,"file":"cmat-services-config.mjs","sources":["../../../projects/cmat/services/config/config.constants.ts","../../../projects/cmat/services/config/config.service.ts","../../../projects/cmat/services/config/urlStateConfig.service.ts","../../../projects/cmat/services/config/cmat-services-config.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport type CmatScheme = 'auto' | 'dark' | 'light';\r\n\r\nexport type CmatTheme = string;\r\n\r\nexport type CmatScreens = Record<string, string>;\r\n\r\nexport type CmatThemeOption<TExtra extends Record<string, unknown> = Record<string, unknown>> = {\r\n id: string;\r\n name: string;\r\n} & TExtra;\r\n\r\nexport interface CmatAppConfigBase {\r\n layout: string;\r\n scheme: CmatScheme;\r\n screens: CmatScreens;\r\n theme: CmatTheme;\r\n themes: CmatThemeOption[];\r\n}\r\n\r\nexport type CmatAppConfig<TExtra extends Record<string, unknown> = Record<string, unknown>> = CmatAppConfigBase & TExtra;\r\n\r\nexport const CMAT_APP_CONFIG = new InjectionToken<CmatAppConfig>('CMAT_APP_CONFIG');\r\n\r\nexport interface IUrlStateConfig {\r\n fileUrl: string;\r\n enableDataProtect: boolean;\r\n}\r\n","import { Injectable, inject, signal } from '@angular/core';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport { Observable } from 'rxjs';\r\nimport { CMAT_APP_CONFIG, CmatAppConfig } from './config.constants';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatConfigService {\r\n private readonly _defaultConfig = structuredClone(inject(CMAT_APP_CONFIG));\r\n private readonly _config = signal<CmatAppConfig>(structuredClone(this._defaultConfig));\r\n private readonly _config$ = toObservable(this._config);\r\n\r\n get config$(): Observable<CmatAppConfig> {\r\n return this._config$;\r\n }\r\n\r\n set config(value: Partial<CmatAppConfig>) {\r\n this.updateConfig(value);\r\n }\r\n\r\n updateConfig(value: Partial<CmatAppConfig>): void {\r\n const config = this._mergeConfig(this._config(), value);\r\n\r\n this._config.set(config);\r\n }\r\n\r\n reset(): void {\r\n this._config.set(structuredClone(this._defaultConfig));\r\n }\r\n\r\n private _mergeConfig<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {\r\n const result = structuredClone(target) as Record<string, unknown>;\r\n\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value === undefined) {\r\n continue;\r\n }\r\n\r\n const resultValue = result[key];\r\n if (this._isRecord(resultValue) && this._isRecord(value)) {\r\n result[key] = this._mergeConfig(resultValue, value);\r\n continue;\r\n }\r\n\r\n result[key] = structuredClone(value);\r\n }\r\n\r\n return result as T;\r\n }\r\n\r\n private _isRecord(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport { Observable } from 'rxjs';\r\nimport { IUrlStateConfig } from './config.constants';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatUrlStateConfigService {\r\n private readonly _defaultConfig: IUrlStateConfig = {\r\n fileUrl: '',\r\n enableDataProtect: false\r\n };\r\n private readonly _config = signal<IUrlStateConfig>({ ...this._defaultConfig });\r\n private readonly _config$ = toObservable(this._config);\r\n\r\n get config$(): Observable<IUrlStateConfig> {\r\n return this._config$;\r\n }\r\n\r\n config(value: Partial<IUrlStateConfig>): void {\r\n this.updateConfig(value);\r\n }\r\n\r\n updateConfig(value: Partial<IUrlStateConfig>): void {\r\n const config: IUrlStateConfig = {\r\n ...this._config(),\r\n ...value\r\n };\r\n\r\n this._config.set(config);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}