@es.framework/ng.ui.core 2.0.58

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 (246) hide show
  1. package/README.md +3 -0
  2. package/attachments/README.md +3 -0
  3. package/base-crud/README.md +3 -0
  4. package/breadcrumb/README.md +3 -0
  5. package/checkbox/README.md +3 -0
  6. package/collapsible/README.md +3 -0
  7. package/color-picker/README.md +3 -0
  8. package/column-settings-popover/README.md +3 -0
  9. package/custom-switch/README.md +3 -0
  10. package/datepicker/README.md +3 -0
  11. package/deactivation-reason/README.md +3 -0
  12. package/excel-import/README.md +3 -0
  13. package/fesm2022/es.framework-ng.ui.core-attachments.mjs +217 -0
  14. package/fesm2022/es.framework-ng.ui.core-attachments.mjs.map +1 -0
  15. package/fesm2022/es.framework-ng.ui.core-base-crud.mjs +370 -0
  16. package/fesm2022/es.framework-ng.ui.core-base-crud.mjs.map +1 -0
  17. package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs +145 -0
  18. package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs.map +1 -0
  19. package/fesm2022/es.framework-ng.ui.core-checkbox.mjs +131 -0
  20. package/fesm2022/es.framework-ng.ui.core-checkbox.mjs.map +1 -0
  21. package/fesm2022/es.framework-ng.ui.core-collapsible.mjs +90 -0
  22. package/fesm2022/es.framework-ng.ui.core-collapsible.mjs.map +1 -0
  23. package/fesm2022/es.framework-ng.ui.core-color-picker.mjs +87 -0
  24. package/fesm2022/es.framework-ng.ui.core-color-picker.mjs.map +1 -0
  25. package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs +183 -0
  26. package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs.map +1 -0
  27. package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs +119 -0
  28. package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs.map +1 -0
  29. package/fesm2022/es.framework-ng.ui.core-datepicker.mjs +519 -0
  30. package/fesm2022/es.framework-ng.ui.core-datepicker.mjs.map +1 -0
  31. package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs +144 -0
  32. package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs.map +1 -0
  33. package/fesm2022/es.framework-ng.ui.core-excel-import.mjs +566 -0
  34. package/fesm2022/es.framework-ng.ui.core-excel-import.mjs.map +1 -0
  35. package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs +386 -0
  36. package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs.map +1 -0
  37. package/fesm2022/es.framework-ng.ui.core-form-button.mjs +62 -0
  38. package/fesm2022/es.framework-ng.ui.core-form-button.mjs.map +1 -0
  39. package/fesm2022/es.framework-ng.ui.core-form-field.mjs +155 -0
  40. package/fesm2022/es.framework-ng.ui.core-form-field.mjs.map +1 -0
  41. package/fesm2022/es.framework-ng.ui.core-form-template.mjs +37 -0
  42. package/fesm2022/es.framework-ng.ui.core-form-template.mjs.map +1 -0
  43. package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs +132 -0
  44. package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -0
  45. package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs +89 -0
  46. package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -0
  47. package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs +195 -0
  48. package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs.map +1 -0
  49. package/fesm2022/es.framework-ng.ui.core-formly-button.mjs +73 -0
  50. package/fesm2022/es.framework-ng.ui.core-formly-button.mjs.map +1 -0
  51. package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs +201 -0
  52. package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs.map +1 -0
  53. package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs +542 -0
  54. package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs.map +1 -0
  55. package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs +62 -0
  56. package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs.map +1 -0
  57. package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs +422 -0
  58. package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs.map +1 -0
  59. package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs +48 -0
  60. package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs.map +1 -0
  61. package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs +85 -0
  62. package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -0
  63. package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs +22 -0
  64. package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs.map +1 -0
  65. package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs +173 -0
  66. package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -0
  67. package/fesm2022/es.framework-ng.ui.core-generic-button.mjs +150 -0
  68. package/fesm2022/es.framework-ng.ui.core-generic-button.mjs.map +1 -0
  69. package/fesm2022/es.framework-ng.ui.core-generic-card.mjs +218 -0
  70. package/fesm2022/es.framework-ng.ui.core-generic-card.mjs.map +1 -0
  71. package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs +929 -0
  72. package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs.map +1 -0
  73. package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs +321 -0
  74. package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs.map +1 -0
  75. package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs +35 -0
  76. package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs.map +1 -0
  77. package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs +63 -0
  78. package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -0
  79. package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs +34 -0
  80. package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -0
  81. package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs +196 -0
  82. package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs.map +1 -0
  83. package/fesm2022/es.framework-ng.ui.core-generic-report.mjs +556 -0
  84. package/fesm2022/es.framework-ng.ui.core-generic-report.mjs.map +1 -0
  85. package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs +2995 -0
  86. package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs.map +1 -0
  87. package/fesm2022/es.framework-ng.ui.core-generic-search.mjs +103 -0
  88. package/fesm2022/es.framework-ng.ui.core-generic-search.mjs.map +1 -0
  89. package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs +684 -0
  90. package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs.map +1 -0
  91. package/fesm2022/es.framework-ng.ui.core-generic-table.mjs +388 -0
  92. package/fesm2022/es.framework-ng.ui.core-generic-table.mjs.map +1 -0
  93. package/fesm2022/es.framework-ng.ui.core-generic-view.mjs +465 -0
  94. package/fesm2022/es.framework-ng.ui.core-generic-view.mjs.map +1 -0
  95. package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs +31 -0
  96. package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs.map +1 -0
  97. package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs +205 -0
  98. package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs.map +1 -0
  99. package/fesm2022/es.framework-ng.ui.core-input-switch.mjs +102 -0
  100. package/fesm2022/es.framework-ng.ui.core-input-switch.mjs.map +1 -0
  101. package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs +67 -0
  102. package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs.map +1 -0
  103. package/fesm2022/es.framework-ng.ui.core-input.mjs +250 -0
  104. package/fesm2022/es.framework-ng.ui.core-input.mjs.map +1 -0
  105. package/fesm2022/es.framework-ng.ui.core-label-type.mjs +184 -0
  106. package/fesm2022/es.framework-ng.ui.core-label-type.mjs.map +1 -0
  107. package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs +66 -0
  108. package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs.map +1 -0
  109. package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs +307 -0
  110. package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs.map +1 -0
  111. package/fesm2022/es.framework-ng.ui.core-query-type.mjs +162 -0
  112. package/fesm2022/es.framework-ng.ui.core-query-type.mjs.map +1 -0
  113. package/fesm2022/es.framework-ng.ui.core-radio.mjs +120 -0
  114. package/fesm2022/es.framework-ng.ui.core-radio.mjs.map +1 -0
  115. package/fesm2022/es.framework-ng.ui.core-repeat.mjs +290 -0
  116. package/fesm2022/es.framework-ng.ui.core-repeat.mjs.map +1 -0
  117. package/fesm2022/es.framework-ng.ui.core-select.mjs +179 -0
  118. package/fesm2022/es.framework-ng.ui.core-select.mjs.map +1 -0
  119. package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs +52 -0
  120. package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs.map +1 -0
  121. package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs +53 -0
  122. package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -0
  123. package/fesm2022/es.framework-ng.ui.core-tabs.mjs +57 -0
  124. package/fesm2022/es.framework-ng.ui.core-tabs.mjs.map +1 -0
  125. package/fesm2022/es.framework-ng.ui.core-tag-type.mjs +209 -0
  126. package/fesm2022/es.framework-ng.ui.core-tag-type.mjs.map +1 -0
  127. package/fesm2022/es.framework-ng.ui.core-text-editor.mjs +58 -0
  128. package/fesm2022/es.framework-ng.ui.core-text-editor.mjs.map +1 -0
  129. package/fesm2022/es.framework-ng.ui.core-textarea.mjs +93 -0
  130. package/fesm2022/es.framework-ng.ui.core-textarea.mjs.map +1 -0
  131. package/fesm2022/es.framework-ng.ui.core-wrappers.mjs +245 -0
  132. package/fesm2022/es.framework-ng.ui.core-wrappers.mjs.map +1 -0
  133. package/fesm2022/es.framework-ng.ui.core.mjs +20 -0
  134. package/fesm2022/es.framework-ng.ui.core.mjs.map +1 -0
  135. package/filter-templates/README.md +3 -0
  136. package/form-button/README.md +3 -0
  137. package/form-field/README.md +3 -0
  138. package/form-template/README.md +3 -0
  139. package/formly-avatar-image/README.md +3 -0
  140. package/formly-avatar-label/README.md +3 -0
  141. package/formly-button/README.md +3 -0
  142. package/formly-button-selector/README.md +3 -0
  143. package/formly-presets/README.md +3 -0
  144. package/formly-prime-icon-picker/README.md +3 -0
  145. package/formly-split-button/README.md +3 -0
  146. package/formly-ui/README.md +3 -0
  147. package/formly-ui-all/README.md +3 -0
  148. package/formly-username-with-domain/README.md +3 -0
  149. package/generic-assets/README.md +3 -0
  150. package/generic-autocomplete/README.md +3 -0
  151. package/generic-button/README.md +3 -0
  152. package/generic-card/README.md +3 -0
  153. package/generic-crud-table/README.md +3 -0
  154. package/generic-dialog/README.md +3 -0
  155. package/generic-errormessage/README.md +3 -0
  156. package/generic-formly-fields/README.md +3 -0
  157. package/generic-loadingspinner/README.md +3 -0
  158. package/generic-report/README.md +3 -0
  159. package/generic-report-tabs/README.md +0 -0
  160. package/generic-search/README.md +3 -0
  161. package/generic-search-advanced/README.md +3 -0
  162. package/generic-selector/README.md +3 -0
  163. package/generic-table/README.md +3 -0
  164. package/generic-view/README.md +3 -0
  165. package/header-wrapper/README.md +3 -0
  166. package/icon-picker/README.md +3 -0
  167. package/input/README.md +3 -0
  168. package/input-switch/README.md +3 -0
  169. package/input-with-icon/README.md +3 -0
  170. package/label-type/README.md +3 -0
  171. package/loading-skeletons/README.md +3 -0
  172. package/odata-query-builder/README.md +3 -0
  173. package/package.json +264 -0
  174. package/query-type/README.md +3 -0
  175. package/radio/README.md +3 -0
  176. package/repeat/README.md +3 -0
  177. package/select/README.md +3 -0
  178. package/sidebar-cards/README.md +3 -0
  179. package/sidebar-toggles/README.md +3 -0
  180. package/styles.css +2 -0
  181. package/tabs/README.md +3 -0
  182. package/tag-type/README.md +3 -0
  183. package/text-editor/README.md +3 -0
  184. package/textarea/README.md +3 -0
  185. package/types/es.framework-ng.ui.core-attachments.d.ts +38 -0
  186. package/types/es.framework-ng.ui.core-base-crud.d.ts +74 -0
  187. package/types/es.framework-ng.ui.core-breadcrumb.d.ts +17 -0
  188. package/types/es.framework-ng.ui.core-checkbox.d.ts +33 -0
  189. package/types/es.framework-ng.ui.core-collapsible.d.ts +18 -0
  190. package/types/es.framework-ng.ui.core-color-picker.d.ts +16 -0
  191. package/types/es.framework-ng.ui.core-column-settings-popover.d.ts +46 -0
  192. package/types/es.framework-ng.ui.core-custom-switch.d.ts +19 -0
  193. package/types/es.framework-ng.ui.core-datepicker.d.ts +23 -0
  194. package/types/es.framework-ng.ui.core-deactivation-reason.d.ts +32 -0
  195. package/types/es.framework-ng.ui.core-excel-import.d.ts +69 -0
  196. package/types/es.framework-ng.ui.core-filter-templates.d.ts +57 -0
  197. package/types/es.framework-ng.ui.core-form-button.d.ts +17 -0
  198. package/types/es.framework-ng.ui.core-form-field.d.ts +30 -0
  199. package/types/es.framework-ng.ui.core-form-template.d.ts +16 -0
  200. package/types/es.framework-ng.ui.core-formly-avatar-image.d.ts +18 -0
  201. package/types/es.framework-ng.ui.core-formly-avatar-label.d.ts +36 -0
  202. package/types/es.framework-ng.ui.core-formly-button-selector.d.ts +35 -0
  203. package/types/es.framework-ng.ui.core-formly-button.d.ts +20 -0
  204. package/types/es.framework-ng.ui.core-formly-presets.d.ts +37 -0
  205. package/types/es.framework-ng.ui.core-formly-prime-icon-picker.d.ts +45 -0
  206. package/types/es.framework-ng.ui.core-formly-split-button.d.ts +23 -0
  207. package/types/es.framework-ng.ui.core-formly-ui-all.d.ts +40 -0
  208. package/types/es.framework-ng.ui.core-formly-ui.d.ts +13 -0
  209. package/types/es.framework-ng.ui.core-formly-username-with-domain.d.ts +19 -0
  210. package/types/es.framework-ng.ui.core-generic-assets.d.ts +10 -0
  211. package/types/es.framework-ng.ui.core-generic-autocomplete.d.ts +41 -0
  212. package/types/es.framework-ng.ui.core-generic-button.d.ts +39 -0
  213. package/types/es.framework-ng.ui.core-generic-card.d.ts +93 -0
  214. package/types/es.framework-ng.ui.core-generic-crud-table.d.ts +293 -0
  215. package/types/es.framework-ng.ui.core-generic-dialog.d.ts +93 -0
  216. package/types/es.framework-ng.ui.core-generic-errormessage.d.ts +17 -0
  217. package/types/es.framework-ng.ui.core-generic-formly-fields.d.ts +26 -0
  218. package/types/es.framework-ng.ui.core-generic-loadingspinner.d.ts +16 -0
  219. package/types/es.framework-ng.ui.core-generic-report-tabs.d.ts +21 -0
  220. package/types/es.framework-ng.ui.core-generic-report.d.ts +121 -0
  221. package/types/es.framework-ng.ui.core-generic-search-advanced.d.ts +305 -0
  222. package/types/es.framework-ng.ui.core-generic-search.d.ts +36 -0
  223. package/types/es.framework-ng.ui.core-generic-selector.d.ts +99 -0
  224. package/types/es.framework-ng.ui.core-generic-table.d.ts +84 -0
  225. package/types/es.framework-ng.ui.core-generic-view.d.ts +97 -0
  226. package/types/es.framework-ng.ui.core-header-wrapper.d.ts +15 -0
  227. package/types/es.framework-ng.ui.core-icon-picker.d.ts +30 -0
  228. package/types/es.framework-ng.ui.core-input-switch.d.ts +16 -0
  229. package/types/es.framework-ng.ui.core-input-with-icon.d.ts +17 -0
  230. package/types/es.framework-ng.ui.core-input.d.ts +47 -0
  231. package/types/es.framework-ng.ui.core-label-type.d.ts +38 -0
  232. package/types/es.framework-ng.ui.core-loading-skeletons.d.ts +17 -0
  233. package/types/es.framework-ng.ui.core-odata-query-builder.d.ts +87 -0
  234. package/types/es.framework-ng.ui.core-query-type.d.ts +37 -0
  235. package/types/es.framework-ng.ui.core-radio.d.ts +38 -0
  236. package/types/es.framework-ng.ui.core-repeat.d.ts +31 -0
  237. package/types/es.framework-ng.ui.core-select.d.ts +42 -0
  238. package/types/es.framework-ng.ui.core-sidebar-cards.d.ts +25 -0
  239. package/types/es.framework-ng.ui.core-sidebar-toggles.d.ts +25 -0
  240. package/types/es.framework-ng.ui.core-tabs.d.ts +17 -0
  241. package/types/es.framework-ng.ui.core-tag-type.d.ts +34 -0
  242. package/types/es.framework-ng.ui.core-text-editor.d.ts +16 -0
  243. package/types/es.framework-ng.ui.core-textarea.d.ts +36 -0
  244. package/types/es.framework-ng.ui.core-wrappers.d.ts +36 -0
  245. package/types/es.framework-ng.ui.core.d.ts +8 -0
  246. package/wrappers/README.md +3 -0
@@ -0,0 +1,370 @@
1
+ import * as i0 from '@angular/core';
2
+ import { NgModule, inject, Directive } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { Router, ActivatedRoute } from '@angular/router';
5
+ import { SwalService, IdParserService } from '@es.framework/ng.core/services';
6
+ import { DeactivationReasonFormComponent } from '@es.framework/ng.ui.core/deactivation-reason';
7
+ import { firstValueFrom } from 'rxjs';
8
+
9
+ class BaseCrudModule {
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrudModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: BaseCrudModule, imports: [CommonModule] });
12
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrudModule, imports: [CommonModule] });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrudModule, decorators: [{
15
+ type: NgModule,
16
+ args: [{
17
+ imports: [CommonModule],
18
+ }]
19
+ }] });
20
+
21
+ class BaseCrud {
22
+ list = [];
23
+ paginator = true;
24
+ canLoad = true;
25
+ loading = false;
26
+ errorMsg = '';
27
+ first = 0;
28
+ rows = 10;
29
+ totalRecords = 0;
30
+ searchGlobal = '';
31
+ sort;
32
+ pageFilters = {};
33
+ currentFilters = {};
34
+ mode = '';
35
+ scrollHeight = '400px';
36
+ swalService = inject(SwalService);
37
+ dialogRef;
38
+ // abstract idField: keyof T;
39
+ dialogVisible = false;
40
+ drawerVisible = false;
41
+ selectedItem = null;
42
+ defaultModel = null;
43
+ // selectedItem: T | any = {};
44
+ isViewMode = false;
45
+ isEditMode = false;
46
+ // حالة ظهور درج القوالب
47
+ templateDrawerVisible = false;
48
+ displayMode = 'drawer';
49
+ idParser = inject(IdParserService);
50
+ router = inject(Router);
51
+ route = inject(ActivatedRoute);
52
+ loadPage(pageIndex, pageSize) {
53
+ if (this.canLoad) {
54
+ this.loading = true;
55
+ const filters = {
56
+ maxResultCount: pageSize,
57
+ skipCount: pageIndex,
58
+ sorting: this.sort,
59
+ ...this.currentFilters,
60
+ ...this.pageFilters,
61
+ ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),
62
+ };
63
+ //
64
+ //
65
+ this.service.getList(filters)
66
+ .subscribe({
67
+ next: (res) => {
68
+ //
69
+ this.list = res.items;
70
+ this.totalRecords = res.totalCount;
71
+ this.loading = false;
72
+ },
73
+ error: (err) => {
74
+ this.errorMsg = err.error?.message || err.message || 'خطأ في التحميل';
75
+ this.loading = false;
76
+ }
77
+ });
78
+ }
79
+ }
80
+ onSearch(filters) {
81
+ //
82
+ if (filters && typeof filters === 'object' && !Array.isArray(filters)) {
83
+ this.pageFilters = filters;
84
+ }
85
+ else {
86
+ this.searchGlobal = filters;
87
+ }
88
+ this.loadPage(0, 10);
89
+ }
90
+ onPageChange(event) {
91
+ // فك المتغيّرات مع قيمة افتراضية لفلاتر
92
+ const { first = this.first, rows = this.rows, sort = this.sort, filters = {} } = event;
93
+ this.first = first;
94
+ this.rows = rows;
95
+ this.sort = sort;
96
+ // const pageIndex = Math.floor(first / rows);
97
+ const skipCount = first;
98
+ const pageIndex = skipCount;
99
+ // الوصول للفلتر العام عبر الصيغة المربعة
100
+ const globalValue = filters['global'];
101
+ this.searchGlobal = typeof globalValue === 'string' ? globalValue : '';
102
+ this.loadPage(pageIndex, rows);
103
+ }
104
+ openEditor(item, mode) {
105
+ this.mode = mode;
106
+ this.selectedItem = item ?? this.defaultModel ?? {};
107
+ this.isEditMode = mode === 'edit';
108
+ this.isViewMode = mode === 'view';
109
+ // Auto-load details if edit or view and have ID
110
+ const id = item?.[this.idField];
111
+ if ((this.isEditMode || this.isViewMode) && id) {
112
+ // this.loadDetail(id);
113
+ // (async () => {
114
+ // await this.loadDetail(id);
115
+ // })();
116
+ }
117
+ // resolve displayMode (string or map)
118
+ const modeConfig = typeof this.displayMode === 'string'
119
+ ? this.displayMode
120
+ : this.displayMode[mode] ?? 'drawer';
121
+ switch (modeConfig) {
122
+ case 'drawer':
123
+ this.drawerVisible = true;
124
+ break;
125
+ case 'dialog':
126
+ this.dialogVisible = true;
127
+ break;
128
+ case 'route':
129
+ {
130
+ const id = item ? item[this.idField] : 'new';
131
+ if (mode === 'add') {
132
+ this.router.navigate([mode], { relativeTo: this.route });
133
+ }
134
+ else {
135
+ const commands = [id, mode];
136
+ console.log('Commands:', commands);
137
+ console.log('Current route:', this.route.snapshot.pathFromRoot.map(r => r.routeConfig?.path));
138
+ const tree = this.router.createUrlTree(commands, { relativeTo: this.route });
139
+ console.log('URL Tree:', tree.toString());
140
+ this.router.navigate([id, mode], { relativeTo: this.route });
141
+ }
142
+ break;
143
+ }
144
+ }
145
+ }
146
+ loadDetail(id) {
147
+ return firstValueFrom(this.service.get(id)).then(res => {
148
+ this.selectedItem = res;
149
+ });
150
+ }
151
+ visibleChange(value) {
152
+ const modeConfig = typeof this.displayMode === 'string'
153
+ ? this.displayMode
154
+ : this.displayMode[this.mode] ?? 'drawer';
155
+ if (modeConfig === 'dialog') {
156
+ this.dialogVisible = value;
157
+ }
158
+ else if (modeConfig === 'drawer') {
159
+ this.drawerVisible = value;
160
+ }
161
+ else {
162
+ // route mode does not use drawer/dialog
163
+ }
164
+ }
165
+ onTableAction(event) {
166
+ switch (event.name) {
167
+ case 'add':
168
+ case 'edit':
169
+ case 'view':
170
+ this.openEditor(event.row, event.name);
171
+ break;
172
+ case 'delete':
173
+ this.onDelete(event.row);
174
+ break;
175
+ case 'state':
176
+ this.openDeactivationReason(event.row);
177
+ break;
178
+ // 🟢 الحالة الجديدة للقوالب
179
+ case 'openTemplates':
180
+ this.templateDrawerVisible = true; // نفتح الدرج
181
+ break;
182
+ }
183
+ }
184
+ openDrawer(item, mode) {
185
+ this.mode = mode;
186
+ // this.drawerVisible = !this.drawerVisible;
187
+ if (item == null) {
188
+ this.selectedItem = this.defaultModel || {};
189
+ }
190
+ else {
191
+ this.selectedItem = item;
192
+ }
193
+ if (mode == 'edit') {
194
+ this.drawerVisible = true;
195
+ this.isEditMode = true;
196
+ this.isViewMode = false;
197
+ // this.isEditMode = item !=null ;
198
+ }
199
+ if (mode == 'add') {
200
+ this.drawerVisible = true;
201
+ this.isViewMode = false;
202
+ this.isEditMode = false;
203
+ }
204
+ if (mode == 'view') {
205
+ // this.drawerVisible = true;
206
+ this.dialogVisible = true;
207
+ this.isViewMode = true;
208
+ this.isEditMode = false;
209
+ }
210
+ }
211
+ openDeactivationReason(model) {
212
+ this.selectedItem = model;
213
+ if (this.selectedItem.isActive == true) {
214
+ const ref = this.dialogService.open(DeactivationReasonFormComponent, {
215
+ header: 'السبب (في حال تم إيقافه)',
216
+ width: '30vw',
217
+ data: { model: { ...model },
218
+ fields: this.formFields,
219
+ service: this.service,
220
+ idField: this.idField },
221
+ });
222
+ ref?.onClose.subscribe((result) => {
223
+ if (result) {
224
+ this.selectedItem.isActive = false;
225
+ this.selectedItem.deactivationReason = result.deactivationReason;
226
+ // Optionally: save model via API
227
+ this.loadPage(this.first, this.rows);
228
+ }
229
+ });
230
+ }
231
+ else {
232
+ this.selectedItem.isActive = true;
233
+ this.selectedItem.deactivationReason = "";
234
+ const id = this.idParser.parseIds(this.selectedItem, this.idField);
235
+ // const id = (this.selectedItem as any)[this.idField] ;
236
+ this.service.update(id, this.selectedItem).subscribe({
237
+ next: () => {
238
+ this.loadPage(this.first, this.rows);
239
+ // this.loadPage(0, 10);
240
+ },
241
+ error: (err) => {
242
+ this.loading = false;
243
+ }
244
+ });
245
+ }
246
+ }
247
+ onDelete(item) {
248
+ // const id = item[this.idField];
249
+ const id = this.idParser.parseIds(item, this.idField);
250
+ this.swalService.confirm('تأكيد الحذف', 'هل تريد حذف هذا السجل فعلاً؟', 'نعم، احذف', 'إلغاء').then((result) => {
251
+ if (result.isConfirmed) {
252
+ this.service.delete(id).subscribe({
253
+ next: () => {
254
+ this.loadPage(this.first, this.rows);
255
+ this.swalService.success('تم الحذف بنجاح');
256
+ },
257
+ error: (err) => {
258
+ this.loading = false;
259
+ }
260
+ });
261
+ }
262
+ });
263
+ }
264
+ get columnFormFields() {
265
+ const flattenFields = (fields) => {
266
+ return fields.flatMap(field => {
267
+ if (field.fieldGroup?.length)
268
+ return flattenFields(field.fieldGroup);
269
+ if (!field.props)
270
+ return [];
271
+ const tableConfig = field.props['table'] ?? {};
272
+ const hideExpr = tableConfig.expressions?.hide;
273
+ // if (tableConfig.hidden === false || (typeof hideExpr === 'function' && hideExpr() == false) || field.props.readonly ) return [];
274
+ if (field.props.readonly || field.hide)
275
+ return [];
276
+ const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };
277
+ const order = tableConfig.order ??
278
+ tableConfig.props?.order ??
279
+ mergedProps['order'];
280
+ return [{
281
+ type: field.type,
282
+ key: field.key,
283
+ props: field.props,
284
+ wrappers: ['td'],
285
+ expressions: field.expressions,
286
+ order
287
+ }];
288
+ });
289
+ };
290
+ return flattenFields(this.formFields)
291
+ .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER))
292
+ .map(({ order, ...rest }) => rest);
293
+ }
294
+ get columns() {
295
+ const flattenFields = (fields) => {
296
+ return fields.flatMap(field => {
297
+ if (field.fieldGroup?.length)
298
+ return flattenFields(field.fieldGroup);
299
+ if (!field.props)
300
+ return [];
301
+ const tableConfig = field.props['table'] ?? {};
302
+ const hideExpr = tableConfig.expressions?.hide;
303
+ if (tableConfig.hidden === true || (typeof hideExpr === 'function' && hideExpr()))
304
+ return [];
305
+ const tableType = tableConfig.type ?? 'label-type';
306
+ const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };
307
+ const order = tableConfig.order ??
308
+ tableConfig.props?.order ??
309
+ mergedProps['order'];
310
+ return [{
311
+ type: tableType,
312
+ key: field.key,
313
+ props: mergedProps,
314
+ expressions: tableConfig.expressions,
315
+ order
316
+ }];
317
+ });
318
+ };
319
+ return flattenFields(this.formFields)
320
+ .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER))
321
+ .map(({ order, ...rest }) => rest);
322
+ }
323
+ get filters() {
324
+ const flattenForFilter = (fields) => {
325
+ return fields.flatMap(field => {
326
+ if (field.fieldGroup?.length) {
327
+ // Recursively handle nested panels/groups
328
+ return flattenForFilter(field.fieldGroup);
329
+ }
330
+ // Skip fields with no props or filter.hidden === true
331
+ if (!field.props /* || field.props['filter']?.hidden === true */) {
332
+ return [];
333
+ }
334
+ // Merge base props with filter overrides
335
+ const mergedProps = {
336
+ ...field.props,
337
+ ...field.props['filter']?.props,
338
+ };
339
+ // Remove disabled and required props
340
+ delete mergedProps['disabled'];
341
+ delete mergedProps['required'];
342
+ delete mergedProps['loadDefault'];
343
+ delete mergedProps['canAdd'];
344
+ return [{
345
+ type: field.type,
346
+ key: field.key, // always set key for table rendering
347
+ props: mergedProps,
348
+ // expressions: field.props['filter']?.expressions // uncomment if needed
349
+ }];
350
+ });
351
+ };
352
+ return flattenForFilter(this.formFields);
353
+ }
354
+ // 3. دالة فتح الدرج (Action)
355
+ openTemplatesAction() {
356
+ this.templateDrawerVisible = true;
357
+ }
358
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrud, deps: [], target: i0.ɵɵFactoryTarget.Directive });
359
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: BaseCrud, isStandalone: true, ngImport: i0 });
360
+ }
361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrud, decorators: [{
362
+ type: Directive
363
+ }] });
364
+
365
+ /**
366
+ * Generated bundle index. Do not edit.
367
+ */
368
+
369
+ export { BaseCrud, BaseCrudModule };
370
+ //# sourceMappingURL=es.framework-ng.ui.core-base-crud.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.framework-ng.ui.core-base-crud.mjs","sources":["../../../../libs/ng.ui.core/base-crud/src/lib/base-crud-module.ts","../../../../libs/ng.ui.core/base-crud/src/lib/base-crud.ts","../../../../libs/ng.ui.core/base-crud/src/es.framework-ng.ui.core-base-crud.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class BaseCrudModule {}\n","\r\n\r\nimport { Directive, inject } from '@angular/core';\r\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { BaseService, IdParserService, SwalService } from '@es.framework/ng.core/services';\r\nimport { ActionDef, PaginatedResult } from '@es.framework/ng.core/models';\r\nimport { DeactivationReasonFormComponent } from '@es.framework/ng.ui.core/deactivation-reason';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Directive()\r\nexport abstract class BaseCrud<T, F = any> {\r\n list: T[] = [];\r\n paginator = true;\r\n canLoad = true;\r\n loading = false;\r\n errorMsg = '';\r\n first = 0;\r\n rows = 10;\r\n totalRecords = 0;\r\n searchGlobal = '';\r\n sort?: string;\r\n pageFilters: Partial<F> = {};\r\n currentFilters: Partial<F> = {};\r\n mode ='';\r\n scrollHeight ='400px';\r\n private swalService = inject(SwalService);\r\n\r\n protected dialogRef!: DynamicDialogRef;\r\n\r\n\r\n // abstract service: CrudService<T, F>;\r\n abstract service: BaseService;\r\n abstract dialogService: DialogService;\r\n // abstract dialogComponent: any;\r\n // abstract columns: ColumnDef<T>[];\r\n abstract actions: ActionDef<T>[];\r\n\r\n // for generic dialog:\r\n abstract formFields: FormlyFieldConfig[];\r\n abstract idField: string |any;\r\n // abstract idField: keyof T;\r\n dialogVisible = false;\r\n drawerVisible = false;\r\n selectedItem: T | any = null;\r\n defaultModel: T | any = null;\r\n // selectedItem: T | any = {};\r\n isViewMode = false;\r\n isEditMode = false;\r\n // حالة ظهور درج القوالب\r\n templateDrawerVisible = false;\r\n\r\n\r\n\r\n displayMode:\r\n | 'drawer' | 'dialog' | 'route'\r\n | Partial<Record<'add' | 'edit' | 'view', 'drawer' | 'dialog' | 'route'>>\r\n = 'drawer';\r\nprivate idParser= inject(IdParserService);\r\n public router= inject(Router);\r\n public route = inject(ActivatedRoute);\r\n\r\nloadPage(pageIndex: number, pageSize: number): void {\r\n if(this.canLoad){\r\n\r\n\r\n this.loading = true;\r\n const filters: Partial<F> = {\r\n maxResultCount:pageSize,\r\n skipCount:pageIndex,\r\n sorting:this.sort,\r\n ...this.currentFilters,\r\n ...this.pageFilters,\r\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\r\n };\r\n //\r\n //\r\n this.service.getList(filters)\r\n .subscribe({\r\n next: (res: PaginatedResult<T>) => {\r\n //\r\n this.list = res.items;\r\n this.totalRecords = res.totalCount;\r\n this.loading = false;\r\n },\r\n error: (err:any) => {\r\n this.errorMsg = err.error?.message || err.message || 'خطأ في التحميل';\r\n this.loading = false;\r\n }\r\n });\r\n }\r\n}\r\n\r\nonSearch(filters?: any): void {\r\n //\r\n if (filters && typeof filters === 'object' && !Array.isArray(filters)) {\r\n this.pageFilters = filters;\r\n } else {\r\n this.searchGlobal = filters;\r\n }\r\n\r\n this.loadPage(0, 10);\r\n}\r\n\r\n\r\nonPageChange(event: { first?: number; rows?: number; sort?: string; filters?: Record<string, any> }): void {\r\n // فك المتغيّرات مع قيمة افتراضية لفلاتر\r\n const {\r\n first = this.first,\r\n rows = this.rows,\r\n sort = this.sort,\r\n filters = {}\r\n } = event;\r\n\r\n this.first = first;\r\n this.rows = rows;\r\n this.sort = sort;\r\n\r\n // const pageIndex = Math.floor(first / rows);\r\n const skipCount = first;\r\n const pageIndex = skipCount;\r\n\r\n // الوصول للفلتر العام عبر الصيغة المربعة\r\n const globalValue = filters['global'];\r\n this.searchGlobal = typeof globalValue === 'string' ? globalValue : '';\r\n\r\n\r\n this.loadPage(pageIndex, rows);\r\n}\r\n\r\n\r\nprotected openEditor(item: T | null, mode: 'add' | 'edit' | 'view'): void {\r\n this.mode = mode;\r\n this.selectedItem = item ?? this.defaultModel ?? {};\r\n this.isEditMode = mode === 'edit';\r\n this.isViewMode = mode === 'view';\r\n // Auto-load details if edit or view and have ID\r\n const id = (item as any)?.[this.idField];\r\n if ((this.isEditMode || this.isViewMode) && id) {\r\n // this.loadDetail(id);\r\n // (async () => {\r\n // await this.loadDetail(id);\r\n // })();\r\n }\r\n // resolve displayMode (string or map)\r\n const modeConfig = typeof this.displayMode === 'string'\r\n ? this.displayMode\r\n : this.displayMode[mode] ?? 'drawer';\r\n\r\n switch (modeConfig) {\r\n case 'drawer':\r\n this.drawerVisible = true;\r\n break;\r\n\r\n case 'dialog':\r\n this.dialogVisible = true;\r\n break;\r\n\r\n case 'route':\r\n {\r\n\r\n\r\n const id = item ? (item as any)[this.idField] : 'new';\r\n\r\n if(mode === 'add'){\r\n this.router.navigate([mode], { relativeTo: this.route });\r\n }\r\n else{\r\n const commands = [id, mode];\r\n console.log('Commands:', commands);\r\n console.log('Current route:', this.route.snapshot.pathFromRoot.map(r => r.routeConfig?.path));\r\n\r\n const tree = this.router.createUrlTree(commands, { relativeTo: this.route });\r\n console.log('URL Tree:', tree.toString());\r\n\r\n this.router.navigate([id, mode], { relativeTo: this.route });\r\n }\r\n break;\r\n }\r\n }\r\n}\r\nprotected loadDetail(id: string | number) {\r\n\r\n return firstValueFrom(this.service.get(id as any)).then(res => {\r\n this.selectedItem = res;\r\n });\r\n}\r\nvisibleChange(value: boolean) {\r\n const modeConfig = typeof this.displayMode === 'string'\r\n ? this.displayMode\r\n : this.displayMode[this.mode as 'add' | 'edit' | 'view'] ?? 'drawer';\r\n\r\n if (modeConfig === 'dialog') {\r\n this.dialogVisible = value;\r\n } else if (modeConfig === 'drawer') {\r\n this.drawerVisible = value;\r\n } else {\r\n // route mode does not use drawer/dialog\r\n }\r\n}\r\n\r\n\r\n\r\nonTableAction(event: { name: string; row: T | null }): void {\r\n switch (event.name) {\r\n case 'add':\r\n case 'edit':\r\n case 'view':\r\n this.openEditor(event.row, event.name);\r\n break;\r\n case 'delete':\r\n this.onDelete(event.row!);\r\n break;\r\n case 'state':\r\n this.openDeactivationReason(event.row!);\r\n break;\r\n // 🟢 الحالة الجديدة للقوالب\r\n case 'openTemplates':\r\n this.templateDrawerVisible = true; // نفتح الدرج\r\n break;\r\n }\r\n}\r\n\r\n\r\nprotected openDrawer(item: T | null,mode:string): void {\r\n\r\n this.mode = mode;\r\n\r\n // this.drawerVisible = !this.drawerVisible;\r\n\r\n\r\n if (item == null) {\r\n\r\n this.selectedItem = this.defaultModel || {};\r\n }\r\n else{\r\n this.selectedItem = item;\r\n }\r\n\r\n if(mode == 'edit'){\r\n this.drawerVisible = true;\r\n this.isEditMode = true ;\r\n this.isViewMode = false ;\r\n // this.isEditMode = item !=null ;\r\n }\r\n if(mode == 'add'){\r\n this.drawerVisible = true;\r\n this.isViewMode = false ;\r\n this.isEditMode = false ;\r\n }\r\n if(mode == 'view'){\r\n // this.drawerVisible = true;\r\n this.dialogVisible = true;\r\n\r\n this.isViewMode = true ;\r\n this.isEditMode = false ;\r\n }\r\n}\r\n\r\n\r\nopenDeactivationReason(model: any) {\r\n\r\n this.selectedItem = model;\r\n if(this.selectedItem.isActive == true){\r\n\r\n\r\n const ref = this.dialogService.open(DeactivationReasonFormComponent, {\r\n header: 'السبب (في حال تم إيقافه)',\r\n width: '30vw',\r\n data: { model: { ...model },\r\n fields: this.formFields,\r\n service: this.service,\r\n idField: this.idField },\r\n });\r\n\r\n ref?.onClose.subscribe((result) => {\r\n if (result) {\r\n this.selectedItem.isActive = false;\r\n this.selectedItem.deactivationReason = result.deactivationReason;\r\n // Optionally: save model via API\r\n this.loadPage(this.first, this.rows);\r\n }\r\n });\r\n}\r\nelse{\r\n this.selectedItem.isActive = true;\r\n this.selectedItem.deactivationReason = \"\";\r\n const id = this.idParser.parseIds(this.selectedItem, this.idField);\r\n // const id = (this.selectedItem as any)[this.idField] ;\r\n this.service.update(id, this.selectedItem).subscribe({\r\n next: () => {\r\n this.loadPage(this.first, this.rows);\r\n // this.loadPage(0, 10);\r\n },\r\n error: (err:any) => {\r\n this.loading = false;\r\n\r\n }\r\n });\r\n}\r\n}\r\n\r\n\r\nonDelete(item: any): void {\r\n // const id = item[this.idField];\r\n const id = this.idParser.parseIds(item, this.idField);\r\n\r\n this.swalService.confirm(\r\n 'تأكيد الحذف',\r\n 'هل تريد حذف هذا السجل فعلاً؟',\r\n 'نعم، احذف',\r\n 'إلغاء'\r\n ).then((result) => {\r\n if (result.isConfirmed) {\r\n this.service.delete(id).subscribe({\r\n next: () => {\r\n this.loadPage(this.first, this.rows);\r\n this.swalService.success('تم الحذف بنجاح');\r\n },\r\n error: (err: any) => {\r\n this.loading = false;\r\n\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\nget columnFormFields(): FormlyFieldConfig[] {\r\n type Col = FormlyFieldConfig & { order?: number };\r\n\r\n const flattenFields = (fields: FormlyFieldConfig[]): Col[] => {\r\n return fields.flatMap(field => {\r\n if (field.fieldGroup?.length) return flattenFields(field.fieldGroup);\r\n if (!field.props) return [];\r\n\r\n const tableConfig = field.props['table'] ?? {};\r\n const hideExpr = tableConfig.expressions?.hide;\r\n // if (tableConfig.hidden === false || (typeof hideExpr === 'function' && hideExpr() == false) || field.props.readonly ) return [];\r\n if (field.props.readonly || field.hide ) return [];\r\n\r\n const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };\r\n\r\n const order: number | undefined =\r\n (tableConfig.order as number | undefined) ??\r\n (tableConfig.props?.order as number | undefined) ??\r\n (mergedProps['order'] as number | undefined);\r\n\r\n return [{\r\n type: field.type,\r\n key: field.key,\r\n props: field.props,\r\n wrappers:['td'],\r\n expressions: field.expressions,\r\n order\r\n }];\r\n });\r\n };\r\n\r\n return flattenFields(this.formFields)\r\n .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER))\r\n .map(({ order, ...rest }) => rest as FormlyFieldConfig);\r\n}\r\n\r\nget columns(): FormlyFieldConfig[] {\r\n type Col = FormlyFieldConfig & { order?: number };\r\n\r\n const flattenFields = (fields: FormlyFieldConfig[]): Col[] => {\r\n return fields.flatMap(field => {\r\n if (field.fieldGroup?.length) return flattenFields(field.fieldGroup);\r\n if (!field.props) return [];\r\n\r\n const tableConfig = field.props['table'] ?? {};\r\n const hideExpr = tableConfig.expressions?.hide;\r\n if (tableConfig.hidden === true || (typeof hideExpr === 'function' && hideExpr())) return [];\r\n\r\n const tableType = tableConfig.type ?? 'label-type';\r\n const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };\r\n\r\n const order: number | undefined =\r\n (tableConfig.order as number | undefined) ??\r\n (tableConfig.props?.order as number | undefined) ??\r\n (mergedProps['order'] as number | undefined);\r\n\r\n return [{\r\n type: tableType,\r\n key: field.key,\r\n props: mergedProps,\r\n expressions: tableConfig.expressions,\r\n order\r\n }];\r\n });\r\n };\r\n\r\n return flattenFields(this.formFields)\r\n .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER))\r\n .map(({ order, ...rest }) => rest as FormlyFieldConfig);\r\n}\r\n\r\n\r\n\r\n\r\nget filters(): FormlyFieldConfig[] {\r\n const flattenForFilter = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] => {\r\n return fields.flatMap(field => {\r\n if (field.fieldGroup?.length) {\r\n // Recursively handle nested panels/groups\r\n return flattenForFilter(field.fieldGroup);\r\n }\r\n\r\n // Skip fields with no props or filter.hidden === true\r\n if (!field.props /* || field.props['filter']?.hidden === true */) {\r\n return [];\r\n }\r\n\r\n // Merge base props with filter overrides\r\n const mergedProps = {\r\n ...field.props,\r\n ...field.props['filter']?.props,\r\n };\r\n\r\n // Remove disabled and required props\r\n delete mergedProps['disabled'];\r\n delete mergedProps['required'];\r\n delete mergedProps['loadDefault'];\r\n delete mergedProps['canAdd'];\r\n\r\n\r\n return [{\r\n type: field.type,\r\n key: field.key, // always set key for table rendering\r\n props: mergedProps,\r\n // expressions: field.props['filter']?.expressions // uncomment if needed\r\n }];\r\n });\r\n };\r\n\r\n return flattenForFilter(this.formFields);\r\n}\r\n\r\n\r\n// 3. دالة فتح الدرج (Action)\r\nopenTemplatesAction() {\r\n this.templateDrawerVisible = true;\r\n}\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;MAMa,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAFf,YAAY,CAAA,EAAA,CAAA;AAEX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAFf,YAAY,CAAA,EAAA,CAAA;;2FAEX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;MCOqB,QAAQ,CAAA;IAC5B,IAAI,GAAsB,EAAE;IAC5B,SAAS,GAAU,IAAI;IACvB,OAAO,GAAU,IAAI;IACrB,OAAO,GAAU,KAAK;IACtB,QAAQ,GAAU,EAAE;IACpB,KAAK,GAAa,CAAC;IACnB,IAAI,GAAc,EAAE;IACpB,YAAY,GAAM,CAAC;IACnB,YAAY,GAAM,EAAE;AACpB,IAAA,IAAI;IACJ,WAAW,GAAe,EAAE;IAC5B,cAAc,GAAe,EAAE;IAC/B,IAAI,GAAE,EAAE;IACR,YAAY,GAAE,OAAO;AACb,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAE/B,IAAA,SAAS;;IAcnB,aAAa,GAAG,KAAK;IACrB,aAAa,GAAG,KAAK;IACrB,YAAY,GAAY,IAAI;IAC5B,YAAY,GAAY,IAAI;;IAE5B,UAAU,GAAG,KAAK;IAClB,UAAU,GAAG,KAAK;;IAElB,qBAAqB,GAAG,KAAK;IAI7B,WAAW,GAGT,QAAQ;AACJ,IAAA,QAAQ,GAAE,MAAM,CAAC,eAAe,CAAC;AAChC,IAAA,MAAM,GAAE,MAAM,CAAC,MAAM,CAAC;AACtB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;IAEvC,QAAQ,CAAC,SAAiB,EAAE,QAAgB,EAAA;AACxC,QAAA,IAAG,IAAI,CAAC,OAAO,EAAC;AAGhB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,MAAM,OAAO,GAAe;AAC1B,gBAAA,cAAc,EAAC,QAAQ;AACvB,gBAAA,SAAS,EAAC,SAAS;gBACnB,OAAO,EAAC,IAAI,CAAC,IAAI;gBACnB,GAAG,IAAI,CAAC,cAAc;gBACtB,GAAG,IAAI,CAAC,WAAW;AACnB,gBAAA,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;aAC1D;;;AAGD,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;AACzB,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,GAAuB,KAAI;;AAEhC,oBAAA,IAAI,CAAC,IAAI,GAAW,GAAG,CAAC,KAAK;AAC7B,oBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,UAAU;AAClC,oBAAA,IAAI,CAAC,OAAO,GAAQ,KAAK;gBAC3B,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,GAAO,KAAI;AACjB,oBAAA,IAAI,CAAC,QAAQ,GAAO,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,gBAAgB;AACzE,oBAAA,IAAI,CAAC,OAAO,GAAQ,KAAK;gBAC3B;AACD,aAAA,CAAC;QACJ;IACJ;AAEA,IAAA,QAAQ,CAAC,OAAa,EAAA;;AAEpB,QAAA,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;QAC7B;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;IACtB;AAGA,IAAA,YAAY,CAAC,KAAsF,EAAA;;QAEjG,MAAM,EACJ,KAAK,GAAK,IAAI,CAAC,KAAK,EACpB,IAAI,GAAM,IAAI,CAAC,IAAI,EACnB,IAAI,GAAM,IAAI,CAAC,IAAI,EACnB,OAAO,GAAG,EAAE,EACb,GAAG,KAAK;AAET,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,GAAI,IAAI;AACjB,QAAA,IAAI,CAAC,IAAI,GAAI,IAAI;;QAGjB,MAAM,SAAS,GAAG,KAAK;QACvB,MAAM,SAAS,GAAG,SAAS;;AAG3B,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,WAAW,KAAK,QAAQ,GAAG,WAAW,GAAG,EAAE;AAGtE,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAChC;IAGU,UAAU,CAAC,IAAc,EAAE,IAA6B,EAAA;AAChE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;AACnD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,MAAM;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,MAAM;;QAEjC,MAAM,EAAE,GAAI,IAAY,GAAG,IAAI,CAAC,OAAO,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;;;;;QAKhD;;AAEA,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK;cAC3C,IAAI,CAAC;cACL,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,QAAQ;QAEtC,QAAQ,UAAU;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;gBACzB;AAEF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;gBACzB;AAEF,YAAA,KAAK,OAAO;gBACV;AAGE,oBAAA,MAAM,EAAE,GAAG,IAAI,GAAI,IAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK;AAEvD,oBAAA,IAAG,IAAI,KAAK,KAAK,EAAC;AAChB,wBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC1D;yBACI;AACF,wBAAA,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC;AAC3B,wBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;wBAClC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAE7F,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;wBAC5E,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAEzC,wBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC9D;oBACA;gBACA;;IAEN;AACU,IAAA,UAAU,CAAC,EAAmB,EAAA;AAEtC,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;AAC5D,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG;AACzB,QAAA,CAAC,CAAC;IACJ;AACA,IAAA,aAAa,CAAC,KAAc,EAAA;AAC1B,QAAA,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK;cAC3C,IAAI,CAAC;cACL,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAA+B,CAAC,IAAI,QAAQ;AAEtE,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;AAAO,aAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;aAAO;;QAEP;IACF;AAIA,IAAA,aAAa,CAAC,KAAsC,EAAA;AAClD,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC;gBACtC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAI,CAAC;gBACzB;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAI,CAAC;gBACvC;;AAEF,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBAClC;;IAEN;IAGU,UAAU,CAAC,IAAc,EAAC,IAAW,EAAA;AAEzC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;AAKhB,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;YAEhB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE;QAC7C;aACI;AACD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC3B;AAEA,QAAA,IAAG,IAAI,IAAI,MAAM,EAAC;AAChB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;QAEzB;AACA,QAAA,IAAG,IAAI,IAAI,KAAK,EAAC;AACd,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;AACA,QAAA,IAAG,IAAI,IAAI,MAAM,EAAC;;AAEhB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACzB;IACN;AAGA,IAAA,sBAAsB,CAAC,KAAU,EAAA;AAE/B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,IAAI,EAAC;YAGtC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,+BAA+B,EAAE;AACnE,gBAAA,MAAM,EAAE,0BAA0B;AAClC,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE;oBACvB,MAAM,EAAE,IAAI,CAAC,UAAU;oBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AAC5B,aAAA,CAAC;YAEF,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;gBAChC,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,KAAK;oBAClC,IAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB;;oBAEpE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;gBAClC;AACF,YAAA,CAAC,CAAC;QACJ;aACI;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,EAAE;AACzC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC;;AAEjE,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;gBAC9C,IAAI,EAAE,MAAK;oBACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;;gBAEvC,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,GAAO,KAAI;AACjB,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBAEtB;AACD,aAAA,CAAC;QACX;IACA;AAGA,IAAA,QAAQ,CAAC,IAAS,EAAA;;AAEhB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;AAErD,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CACtB,aAAa,EACb,8BAA8B,EAC9B,WAAW,EACX,OAAO,CACR,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAChB,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE;gBACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;oBAChC,IAAI,EAAE,MAAK;wBACT,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AACpC,wBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;oBAC5C,CAAC;AACD,oBAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,wBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;oBAEtB;AACD,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAGlB,QAAA,MAAM,aAAa,GAAG,CAAC,MAA2B,KAAW;AAC3D,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AAC5B,gBAAA,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM;AAAE,oBAAA,OAAO,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;gBACpE,IAAI,CAAC,KAAK,CAAC,KAAK;AAAE,oBAAA,OAAO,EAAE;gBAE3B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AAC9C,gBAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI;;gBAE9C,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI;AAAG,oBAAA,OAAO,EAAE;AAElD,gBAAA,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE;AAEpE,gBAAA,MAAM,KAAK,GACR,WAAW,CAAC,KAA4B;oBACxC,WAAW,CAAC,KAAK,EAAE,KAA4B;oBAC/C,WAAW,CAAC,OAAO,CAAwB;AAE9C,gBAAA,OAAO,CAAC;wBACN,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,QAAQ,EAAC,CAAC,IAAI,CAAC;wBACf,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B;AACD,qBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,UAAU;aACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC;AAC1F,aAAA,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,KAAK,IAAyB,CAAC;IAC3D;AAEA,IAAA,IAAI,OAAO,GAAA;AAGT,QAAA,MAAM,aAAa,GAAG,CAAC,MAA2B,KAAW;AAC3D,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AAC5B,gBAAA,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM;AAAE,oBAAA,OAAO,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;gBACpE,IAAI,CAAC,KAAK,CAAC,KAAK;AAAE,oBAAA,OAAO,EAAE;gBAE3B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AAC9C,gBAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI;AAC9C,gBAAA,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,EAAE,CAAC;AAAE,oBAAA,OAAO,EAAE;AAE5F,gBAAA,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,IAAI,YAAY;AAClD,gBAAA,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE;AAEpE,gBAAA,MAAM,KAAK,GACR,WAAW,CAAC,KAA4B;oBACxC,WAAW,CAAC,KAAK,EAAE,KAA4B;oBAC/C,WAAW,CAAC,OAAO,CAAwB;AAE9C,gBAAA,OAAO,CAAC;AACN,wBAAA,IAAI,EAAE,SAAS;wBACf,GAAG,EAAE,KAAK,CAAC,GAAG;AACd,wBAAA,KAAK,EAAE,WAAW;wBAClB,WAAW,EAAE,WAAW,CAAC,WAAW;wBACpC;AACD,qBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,UAAU;aACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC;AAC1F,aAAA,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,KAAK,IAAyB,CAAC;IAC3D;AAKA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,gBAAgB,GAAG,CAAC,MAA2B,KAAyB;AAC5E,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AAC5B,gBAAA,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE;;AAE5B,oBAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC3C;;AAGA,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,kDAAkD;AAChE,oBAAA,OAAO,EAAE;gBACX;;AAGA,gBAAA,MAAM,WAAW,GAAG;oBAClB,GAAG,KAAK,CAAC,KAAK;AACd,oBAAA,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK;iBAChC;;AAGD,gBAAA,OAAO,WAAW,CAAC,UAAU,CAAC;AAC9B,gBAAA,OAAO,WAAW,CAAC,UAAU,CAAC;AAC9B,gBAAA,OAAO,WAAW,CAAC,aAAa,CAAC;AACjC,gBAAA,OAAO,WAAW,CAAC,QAAQ,CAAC;AAG5B,gBAAA,OAAO,CAAC;wBACN,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,wBAAA,GAAG,EAAE,KAAK,CAAC,GAAG;AACd,wBAAA,KAAK,EAAE,WAAW;;AAEnB,qBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1C;;IAIA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;IACnC;uGAjbsB,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACXD;;AAEG;;;;"}
@@ -0,0 +1,145 @@
1
+ import * as i0 from '@angular/core';
2
+ import { NgModule, Input, Component } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i2 from '@angular/router';
6
+ import { RouterModule } from '@angular/router';
7
+
8
+ class BreadcrumbModule {
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbModule, imports: [CommonModule] });
11
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbModule, imports: [CommonModule] });
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ imports: [CommonModule],
17
+ }]
18
+ }] });
19
+
20
+ class BreadcrumbComponent {
21
+ breadcrumb = [];
22
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: BreadcrumbComponent, isStandalone: true, selector: "app-breadcrumb", inputs: { breadcrumb: "breadcrumb" }, ngImport: i0, template: `
24
+ <nav class="overflow-x-auto">
25
+ <ul class="flex items-center text-white text-sm font-medium" role="list">
26
+
27
+ @for (item of breadcrumb; track item; let i = $index; let first = $first; let last = $last) {
28
+ <li
29
+ class="relative z-10"
30
+ >
31
+ @if (item.routerLink && !last) {
32
+ @if(i === 0){
33
+ <a
34
+ [routerLink]="item.routerLink"
35
+ class="breadcrumb-link flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150 rounded-r-md"
36
+ >
37
+ <i class="pi pi-home mr-2 rtl:ml-2 rtl:mr-0 text-base"></i>
38
+ </a>
39
+ }
40
+ @else {
41
+ <a
42
+ [routerLink]="item.routerLink"
43
+ class="breadcrumb-item flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150"
44
+ [ngClass]="{
45
+ 'bg-primary-500': i % 2 === 0,
46
+ 'bg-primary-600': i % 2 === 1,
47
+ 'rounded-l-md pl-5': first,
48
+ 'rounded-r-md pr-5': last
49
+ }"
50
+ >
51
+ @if (item.icon) {
52
+ <i [class]="item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'"></i>
53
+ }
54
+ {{ item.label }}
55
+ </a>
56
+ }
57
+ } @else {
58
+ <span
59
+ class="breadcrumb-text flex items-center h-10 px-4 pr-6 text-white"
60
+ [ngClass]="{
61
+ 'bg-primary-500': i % 2 === 0,
62
+ 'bg-primary-600': i % 2 === 1,
63
+ 'rounded-l-md pl-5': first,
64
+ 'rounded-r-md pr-5': last
65
+ }"
66
+ >
67
+ @if (item.icon) {
68
+ <i [class]="item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'"></i>
69
+ }
70
+ {{ item.label }}
71
+ </span>
72
+ }
73
+ </li>
74
+ }
75
+ </ul>
76
+ </nav>
77
+ `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbComponent, decorators: [{
80
+ type: Component,
81
+ args: [{ selector: 'app-breadcrumb', standalone: true, imports: [CommonModule, RouterModule], template: `
82
+ <nav class="overflow-x-auto">
83
+ <ul class="flex items-center text-white text-sm font-medium" role="list">
84
+
85
+ @for (item of breadcrumb; track item; let i = $index; let first = $first; let last = $last) {
86
+ <li
87
+ class="relative z-10"
88
+ >
89
+ @if (item.routerLink && !last) {
90
+ @if(i === 0){
91
+ <a
92
+ [routerLink]="item.routerLink"
93
+ class="breadcrumb-link flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150 rounded-r-md"
94
+ >
95
+ <i class="pi pi-home mr-2 rtl:ml-2 rtl:mr-0 text-base"></i>
96
+ </a>
97
+ }
98
+ @else {
99
+ <a
100
+ [routerLink]="item.routerLink"
101
+ class="breadcrumb-item flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150"
102
+ [ngClass]="{
103
+ 'bg-primary-500': i % 2 === 0,
104
+ 'bg-primary-600': i % 2 === 1,
105
+ 'rounded-l-md pl-5': first,
106
+ 'rounded-r-md pr-5': last
107
+ }"
108
+ >
109
+ @if (item.icon) {
110
+ <i [class]="item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'"></i>
111
+ }
112
+ {{ item.label }}
113
+ </a>
114
+ }
115
+ } @else {
116
+ <span
117
+ class="breadcrumb-text flex items-center h-10 px-4 pr-6 text-white"
118
+ [ngClass]="{
119
+ 'bg-primary-500': i % 2 === 0,
120
+ 'bg-primary-600': i % 2 === 1,
121
+ 'rounded-l-md pl-5': first,
122
+ 'rounded-r-md pr-5': last
123
+ }"
124
+ >
125
+ @if (item.icon) {
126
+ <i [class]="item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'"></i>
127
+ }
128
+ {{ item.label }}
129
+ </span>
130
+ }
131
+ </li>
132
+ }
133
+ </ul>
134
+ </nav>
135
+ ` }]
136
+ }], propDecorators: { breadcrumb: [{
137
+ type: Input
138
+ }] } });
139
+
140
+ /**
141
+ * Generated bundle index. Do not edit.
142
+ */
143
+
144
+ export { BreadcrumbComponent, BreadcrumbModule };
145
+ //# sourceMappingURL=es.framework-ng.ui.core-breadcrumb.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.framework-ng.ui.core-breadcrumb.mjs","sources":["../../../../libs/ng.ui.core/breadcrumb/src/lib/breadcrumb-module.ts","../../../../libs/ng.ui.core/breadcrumb/src/lib/breadcrumb.ts","../../../../libs/ng.ui.core/breadcrumb/src/es.framework-ng.ui.core-breadcrumb.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class BreadcrumbModule {}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MenuItem } from 'primeng/api';\nimport { RouterModule } from '@angular/router'; // <--- أضف هذا الاستيراد\n\n@Component({\n selector: 'app-breadcrumb',\n standalone: true,\n imports: [CommonModule, RouterModule], // <--- أضف RouterModule هنا\n template: `\n <nav class=\"overflow-x-auto\">\n <ul class=\"flex items-center text-white text-sm font-medium\" role=\"list\">\n \n @for (item of breadcrumb; track item; let i = $index; let first = $first; let last = $last) {\n <li\n class=\"relative z-10\"\n >\n @if (item.routerLink && !last) {\n @if(i === 0){\n <a\n [routerLink]=\"item.routerLink\"\n class=\"breadcrumb-link flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150 rounded-r-md\"\n >\n <i class=\"pi pi-home mr-2 rtl:ml-2 rtl:mr-0 text-base\"></i>\n </a>\n }\n @else {\n <a\n [routerLink]=\"item.routerLink\"\n class=\"breadcrumb-item flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150\"\n [ngClass]=\"{\n 'bg-primary-500': i % 2 === 0,\n 'bg-primary-600': i % 2 === 1,\n 'rounded-l-md pl-5': first,\n 'rounded-r-md pr-5': last\n }\"\n >\n @if (item.icon) {\n <i [class]=\"item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'\"></i>\n }\n {{ item.label }}\n </a>\n }\n } @else {\n <span\n class=\"breadcrumb-text flex items-center h-10 px-4 pr-6 text-white\"\n [ngClass]=\"{\n 'bg-primary-500': i % 2 === 0,\n 'bg-primary-600': i % 2 === 1,\n 'rounded-l-md pl-5': first,\n 'rounded-r-md pr-5': last\n }\"\n >\n @if (item.icon) {\n <i [class]=\"item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'\"></i>\n }\n {{ item.label }}\n </span>\n }\n </li>\n }\n </ul>\n </nav>\n `,\n styles:[\n ``\n ]\n})\nexport class BreadcrumbComponent {\n @Input() breadcrumb: MenuItem[] | any = [];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAMa,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAFjB,YAAY,CAAA,EAAA,CAAA;AAEX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAFjB,YAAY,CAAA,EAAA,CAAA;;2FAEX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;MC+DY,mBAAmB,CAAA;IACrB,UAAU,GAAqB,EAAE;uGAD/B,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3DpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsDP,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAvDO,YAAY,4HAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA4DzB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA/D/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,YAAY,CAAC,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDP,IAAA,CAAA,EAAA;;sBAMF;;;ACrEH;;AAEG;;;;"}