@elite.framework/ng.core 1.0.63 → 1.0.65

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 (127) hide show
  1. package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs +204 -0
  2. package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs.map +1 -0
  3. package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs +132 -0
  4. package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs.map +1 -0
  5. package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs +76 -0
  6. package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs.map +1 -0
  7. package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs +172 -0
  8. package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs.map +1 -0
  9. package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs +794 -0
  10. package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs.map +1 -0
  11. package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs +110 -0
  12. package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs.map +1 -0
  13. package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs +130 -0
  14. package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs.map +1 -0
  15. package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs +50 -0
  16. package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs.map +1 -0
  17. package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs +154 -0
  18. package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs.map +1 -0
  19. package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs +24 -0
  20. package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs.map +1 -0
  21. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs +100 -0
  22. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs.map +1 -0
  23. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs +78 -0
  24. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs.map +1 -0
  25. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs +167 -0
  26. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs.map +1 -0
  27. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs +62 -0
  28. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs.map +1 -0
  29. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs +50 -0
  30. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs.map +1 -0
  31. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs +76 -0
  32. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs.map +1 -0
  33. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs +163 -0
  34. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs.map +1 -0
  35. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs +133 -0
  36. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs.map +1 -0
  37. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs +214 -0
  38. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs.map +1 -0
  39. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs +385 -0
  40. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs.map +1 -0
  41. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs +23 -0
  42. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs.map +1 -0
  43. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs +53 -0
  44. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs.map +1 -0
  45. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs +23 -0
  46. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs.map +1 -0
  47. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs +85 -0
  48. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs.map +1 -0
  49. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs +430 -0
  50. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs.map +1 -0
  51. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs +216 -0
  52. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs.map +1 -0
  53. package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs +18 -0
  54. package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs.map +1 -0
  55. package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs +195 -0
  56. package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs.map +1 -0
  57. package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs +94 -0
  58. package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs.map +1 -0
  59. package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs +55 -0
  60. package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs.map +1 -0
  61. package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs +112 -0
  62. package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs.map +1 -0
  63. package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs +297 -0
  64. package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs.map +1 -0
  65. package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs +135 -0
  66. package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs.map +1 -0
  67. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs +40 -0
  68. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs.map +1 -0
  69. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs +41 -0
  70. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs.map +1 -0
  71. package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs +45 -0
  72. package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs.map +1 -0
  73. package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs +192 -0
  74. package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs.map +1 -0
  75. package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs +44 -0
  76. package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs.map +1 -0
  77. package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs +174 -0
  78. package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs.map +1 -0
  79. package/fesm2022/elite.framework-ng.core-src-lib-directives.mjs +59 -0
  80. package/fesm2022/elite.framework-ng.core-src-lib-directives.mjs.map +1 -0
  81. package/fesm2022/elite.framework-ng.core-src-lib-pipes.mjs +135 -0
  82. package/fesm2022/elite.framework-ng.core-src-lib-pipes.mjs.map +1 -0
  83. package/fesm2022/elite.framework-ng.core.mjs +1643 -384
  84. package/fesm2022/elite.framework-ng.core.mjs.map +1 -1
  85. package/index.d.ts +493 -24
  86. package/package.json +14 -62
  87. package/src/lib/components/attachments/index.d.ts +31 -0
  88. package/src/lib/components/breadcrumb/index.d.ts +10 -0
  89. package/src/lib/components/color-picker/index.d.ts +9 -0
  90. package/src/lib/components/column-settings-popover/index.d.ts +39 -0
  91. package/src/lib/components/condition-editor/index.d.ts +73 -0
  92. package/src/lib/components/custom-switch/index.d.ts +12 -0
  93. package/src/lib/components/deactivation-reason/index.d.ts +24 -0
  94. package/src/lib/components/form-button/index.d.ts +10 -0
  95. package/src/lib/components/form-field/index.d.ts +30 -0
  96. package/src/lib/components/form-template/index.d.ts +9 -0
  97. package/src/lib/components/formly-avatar-image/index.d.ts +11 -0
  98. package/src/lib/components/formly-avatar-label/index.d.ts +29 -0
  99. package/src/lib/components/formly-button/index.d.ts +13 -0
  100. package/src/lib/components/formly-button-selector/index.d.ts +28 -0
  101. package/src/lib/components/formly-split-button/index.d.ts +16 -0
  102. package/src/lib/components/formly-username-with-domain/index.d.ts +12 -0
  103. package/src/lib/components/generic-autocomplete/index.d.ts +34 -0
  104. package/src/lib/components/generic-button/index.d.ts +35 -0
  105. package/src/lib/components/generic-card/index.d.ts +90 -0
  106. package/src/lib/components/generic-crud-table/index.d.ts +120 -0
  107. package/src/lib/components/generic-errormessage/index.d.ts +10 -0
  108. package/src/lib/components/generic-formly-fields/index.d.ts +22 -0
  109. package/src/lib/components/generic-loadingspinner/index.d.ts +9 -0
  110. package/src/lib/components/generic-search/index.d.ts +29 -0
  111. package/src/lib/components/generic-selector/index.d.ts +66 -0
  112. package/src/lib/components/generic-table/index.d.ts +60 -0
  113. package/src/lib/components/header-wrapper/index.d.ts +8 -0
  114. package/src/lib/components/icon-picker/index.d.ts +23 -0
  115. package/src/lib/components/input-switch/index.d.ts +9 -0
  116. package/src/lib/components/input-with-icon/index.d.ts +10 -0
  117. package/src/lib/components/label-type/index.d.ts +19 -0
  118. package/src/lib/components/odata-query-builder/index.d.ts +81 -0
  119. package/src/lib/components/repeat/index.d.ts +17 -0
  120. package/src/lib/components/sidebar-cards/index.d.ts +18 -0
  121. package/src/lib/components/sidebar-toggles/index.d.ts +18 -0
  122. package/src/lib/components/tabs/index.d.ts +10 -0
  123. package/src/lib/components/tag-type/index.d.ts +27 -0
  124. package/src/lib/components/text-editor/index.d.ts +9 -0
  125. package/src/lib/components/wrappers/index.d.ts +24 -0
  126. package/src/lib/directives/index.d.ts +23 -0
  127. package/src/lib/pipes/index.d.ts +20 -0
@@ -0,0 +1,76 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component } from '@angular/core';
3
+ import { FieldType, FormlyAttributes } from '@ngx-formly/core';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i1 from '@angular/forms';
6
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
7
+ import * as i2 from 'primeng/inputtext';
8
+ import { InputTextModule } from 'primeng/inputtext';
9
+ import { InputGroupAddonModule } from 'primeng/inputgroupaddon';
10
+ import { InputGroupModule } from 'primeng/inputgroup';
11
+
12
+ class UsernameWithDomainComponent extends FieldType {
13
+ // ✅ إضافة ثابت لاسم النطاق لتسهيل التغيير
14
+ domain = '@ELITESOFTSYS.COM';
15
+ // ✅ دالة يتم استدعاؤها عند تهيئة الحقل
16
+ ngOnInit() {
17
+ const currentValue = this.formControl.value;
18
+ // إذا كانت القيمة تحتوي على النطاق، قم بإزالته
19
+ if (currentValue && typeof currentValue === 'string' && currentValue.endsWith(this.domain)) {
20
+ const username = currentValue.replace(this.domain, '');
21
+ this.formControl.setValue(username);
22
+ }
23
+ }
24
+ // ✅ هذه الدالة يتم استدعاؤها عند خروج المستخدم من الحقل
25
+ onBlur() {
26
+ const currentValue = this.formControl.value;
27
+ // إذا كانت القيمة لا تحتوي على النطاق، قم بإضافته
28
+ if (currentValue && typeof currentValue === 'string' && !currentValue.endsWith(this.domain)) {
29
+ this.formControl.setValue(currentValue + this.domain);
30
+ }
31
+ }
32
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UsernameWithDomainComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
33
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: UsernameWithDomainComponent, isStandalone: true, selector: "lib-formly-username-with-domain", usesInheritance: true, ngImport: i0, template: `
34
+ <input
35
+ type="text"
36
+ pInputText
37
+ [formControl]="formControl"
38
+ [formlyAttributes]="field"
39
+ (blur)="onBlur()"
40
+ />
41
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i2.InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "ngmodule", type: // ✅ إضافة InputGroupModule
42
+ InputGroupAddonModule }, { kind: "directive", type: // ✅ إضافة InputGroupAddonModule
43
+ FormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }] });
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: UsernameWithDomainComponent, decorators: [{
46
+ type: Component,
47
+ args: [{
48
+ standalone: true, // ✅ يجب إضافة هذه الخاصية
49
+ selector: 'lib-formly-username-with-domain',
50
+ imports: [
51
+ CommonModule,
52
+ FormsModule,
53
+ ReactiveFormsModule,
54
+ InputTextModule,
55
+ InputGroupModule, // ✅ إضافة InputGroupModule
56
+ InputGroupAddonModule, // ✅ إضافة InputGroupAddonModule
57
+ FormlyAttributes
58
+ ],
59
+ template: `
60
+ <input
61
+ type="text"
62
+ pInputText
63
+ [formControl]="formControl"
64
+ [formlyAttributes]="field"
65
+ (blur)="onBlur()"
66
+ />
67
+ `,
68
+ }]
69
+ }] });
70
+
71
+ /**
72
+ * Generated bundle index. Do not edit.
73
+ */
74
+
75
+ export { UsernameWithDomainComponent };
76
+ //# sourceMappingURL=elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs","sources":["../../../projects/core/src/lib/components/formly-username-with-domain/formly-username-with-domain.ts","../../../projects/core/src/lib/components/formly-username-with-domain/elite.framework-ng.core-src-lib-components-formly-username-with-domain.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { FieldType, FieldTypeConfig,FormlyAttributes } from '@ngx-formly/core'; // ✅ استيراد FormlyModule\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon'; // ✅ استيراد وحدة p-inputgroup-addon\nimport { InputGroupModule } from 'primeng/inputgroup'; // ✅ استيراد وحدة p-inputgroup\n\n@Component({\n standalone: true, // ✅ يجب إضافة هذه الخاصية\n selector: 'lib-formly-username-with-domain',\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n InputTextModule,\n InputGroupModule, // ✅ إضافة InputGroupModule\n InputGroupAddonModule, // ✅ إضافة InputGroupAddonModule\n FormlyAttributes\n ],\n template: `\n <input\n type=\"text\"\n pInputText\n [formControl]=\"formControl\"\n [formlyAttributes]=\"field\"\n (blur)=\"onBlur()\"\n />\n `,\n})\nexport class UsernameWithDomainComponent extends FieldType<FieldTypeConfig> {\n // ✅ إضافة ثابت لاسم النطاق لتسهيل التغيير\n readonly domain = '@ELITESOFTSYS.COM';\n\n // ✅ دالة يتم استدعاؤها عند تهيئة الحقل\n ngOnInit() {\n const currentValue = this.formControl.value;\n\n // إذا كانت القيمة تحتوي على النطاق، قم بإزالته\n if (currentValue && typeof currentValue === 'string' && currentValue.endsWith(this.domain)) {\n const username = currentValue.replace(this.domain, '');\n this.formControl.setValue(username);\n }\n }\n\n // ✅ هذه الدالة يتم استدعاؤها عند خروج المستخدم من الحقل\n\n onBlur() {\n const currentValue = this.formControl.value;\n\n // إذا كانت القيمة لا تحتوي على النطاق، قم بإضافته\n if (currentValue && typeof currentValue === 'string' && !currentValue.endsWith(this.domain)) {\n this.formControl.setValue(currentValue + this.domain);\n }\n }\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;AA8BM,MAAO,2BAA4B,SAAQ,SAA0B,CAAA;;IAEjE,MAAM,GAAG,mBAAmB;;IAGrC,QAAQ,GAAA;AACR,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;;AAG3C,QAAA,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC5F,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;;;;IAMlC,MAAM,GAAA;AACP,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;;AAG3C,QAAA,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC7F,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;;;uGAtBzC,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAV5B;;;;;;;;GAQT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhBC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,iNACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;AAChB,gBAAA,qBAAqB;gBACrB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,IAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAYP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAtBvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;AACf,wBAAA,gBAAgB;AAChB,wBAAA,qBAAqB;wBACrB;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,EAAA,CAAA;AACF,iBAAA;;;AC7BD;;AAEG;;;;"}
@@ -0,0 +1,163 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Output, Input, ViewChild, Component } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import * as i2 from '@angular/forms';
5
+ import { FormsModule } from '@angular/forms';
6
+ import * as i3 from 'primeng/autocomplete';
7
+ import { AutoCompleteModule } from 'primeng/autocomplete';
8
+ import * as i4 from '@ngx-translate/core';
9
+ import { TranslateModule } from '@ngx-translate/core';
10
+ import { finalize } from 'rxjs/operators';
11
+ import * as i1 from '@elite.framework/ng.core';
12
+ import { BaseService } from '@elite.framework/ng.core';
13
+
14
+ class GenericAutocompleteComponent {
15
+ svc;
16
+ autoComp;
17
+ // الخصائص المدخلة (Inputs)
18
+ serviceName;
19
+ listEndpoint;
20
+ labelField = 'name';
21
+ valueField = 'id';
22
+ multiple = false;
23
+ placeholder;
24
+ fixedFilters;
25
+ value;
26
+ loadOnInit = false;
27
+ // الأحداث المخرجة (Outputs)
28
+ selectionChange = new EventEmitter();
29
+ options_ = [];
30
+ selectedItem;
31
+ loading = false;
32
+ api;
33
+ constructor(svc) {
34
+ this.svc = svc;
35
+ }
36
+ ngOnInit() {
37
+ this.api = this.svc;
38
+ this.api.apiName = this.serviceName;
39
+ // ✅ إضافة الشرط الجديد للتحميل التلقائي عند تهيئة المكون
40
+ if (this.loadOnInit) {
41
+ this.search({ query: '' });
42
+ }
43
+ }
44
+ onSelectionChange(val) {
45
+ this.selectedItem = val;
46
+ this.selectionChange.emit(val);
47
+ }
48
+ search(event) {
49
+ const q = event.query?.toString().toLowerCase() || '';
50
+ this.loading = true;
51
+ this.options_ = [];
52
+ const searchParams = {
53
+ [this.labelField]: q,
54
+ ...this.fixedFilters,
55
+ };
56
+ const listEndpoint = this.listEndpoint;
57
+ this.api.getList(searchParams, listEndpoint)
58
+ .pipe(finalize(() => (this.loading = false)))
59
+ .subscribe({
60
+ next: (res) => {
61
+ this.options_ = res.items ?? res ?? [];
62
+ setTimeout(() => this.autoComp?.show(), 0);
63
+ },
64
+ error: () => {
65
+ this.options_ = [];
66
+ },
67
+ });
68
+ }
69
+ getEmptyMessage() {
70
+ if (this.loading) {
71
+ return 'LOADING_DATA_MESSAGE';
72
+ }
73
+ else if (this.options_.length === 0) {
74
+ return 'NO_RESULTS_FOUND';
75
+ }
76
+ return '';
77
+ }
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GenericAutocompleteComponent, deps: [{ token: i1.BaseService }], target: i0.ɵɵFactoryTarget.Component });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: GenericAutocompleteComponent, isStandalone: true, selector: "app-generic-autocomplete", inputs: { serviceName: "serviceName", listEndpoint: "listEndpoint", labelField: "labelField", valueField: "valueField", multiple: "multiple", placeholder: "placeholder", fixedFilters: "fixedFilters", value: "value", loadOnInit: "loadOnInit" }, outputs: { selectionChange: "selectionChange" }, providers: [BaseService], viewQueries: [{ propertyName: "autoComp", first: true, predicate: ["autoComp"], descendants: true }], ngImport: i0, template: `
80
+ <p-autoComplete
81
+ #autoComp
82
+ [ngModel]="selectedItem"
83
+ (ngModelChange)="onSelectionChange($event)"
84
+ [suggestions]="options_"
85
+ (completeMethod)="search($event)"
86
+ [multiple]="multiple"
87
+ [optionLabel]="labelField || 'name'"
88
+ [dropdown]="true"
89
+ [forceSelection]="true"
90
+ [placeholder]="(placeholder || '') | translate"
91
+ dropdownMode="current"
92
+ appendTo="self"
93
+ class="w-full"
94
+ [showEmptyMessage]="true"
95
+ emptyMessage="{{ getEmptyMessage() | translate }}"
96
+ [showTransitionOptions]="'0ms'"
97
+ ></p-autoComplete>
98
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i3.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "appendTo"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GenericAutocompleteComponent, decorators: [{
101
+ type: Component,
102
+ args: [{
103
+ selector: 'app-generic-autocomplete',
104
+ template: `
105
+ <p-autoComplete
106
+ #autoComp
107
+ [ngModel]="selectedItem"
108
+ (ngModelChange)="onSelectionChange($event)"
109
+ [suggestions]="options_"
110
+ (completeMethod)="search($event)"
111
+ [multiple]="multiple"
112
+ [optionLabel]="labelField || 'name'"
113
+ [dropdown]="true"
114
+ [forceSelection]="true"
115
+ [placeholder]="(placeholder || '') | translate"
116
+ dropdownMode="current"
117
+ appendTo="self"
118
+ class="w-full"
119
+ [showEmptyMessage]="true"
120
+ emptyMessage="{{ getEmptyMessage() | translate }}"
121
+ [showTransitionOptions]="'0ms'"
122
+ ></p-autoComplete>
123
+ `,
124
+ providers: [BaseService],
125
+ standalone: true, // تأكد أن المكون مستقل
126
+ imports: [
127
+ FormsModule,
128
+ AutoCompleteModule,
129
+ CommonModule,
130
+ TranslateModule,
131
+ ]
132
+ }]
133
+ }], ctorParameters: () => [{ type: i1.BaseService }], propDecorators: { autoComp: [{
134
+ type: ViewChild,
135
+ args: ['autoComp']
136
+ }], serviceName: [{
137
+ type: Input
138
+ }], listEndpoint: [{
139
+ type: Input
140
+ }], labelField: [{
141
+ type: Input
142
+ }], valueField: [{
143
+ type: Input
144
+ }], multiple: [{
145
+ type: Input
146
+ }], placeholder: [{
147
+ type: Input
148
+ }], fixedFilters: [{
149
+ type: Input
150
+ }], value: [{
151
+ type: Input
152
+ }], loadOnInit: [{
153
+ type: Input
154
+ }], selectionChange: [{
155
+ type: Output
156
+ }] } });
157
+
158
+ /**
159
+ * Generated bundle index. Do not edit.
160
+ */
161
+
162
+ export { GenericAutocompleteComponent };
163
+ //# sourceMappingURL=elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs","sources":["../../../projects/core/src/lib/components/generic-autocomplete/generic-autocomplete-component.ts","../../../projects/core/src/lib/components/generic-autocomplete/elite.framework-ng.core-src-lib-components-generic-autocomplete.ts"],"sourcesContent":["import { Component, EventEmitter, Injector, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { finalize } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { BaseService } from '@elite.framework/ng.core';\n\n@Component({\n selector: 'app-generic-autocomplete',\n template: `\n <p-autoComplete\n #autoComp\n [ngModel]=\"selectedItem\"\n (ngModelChange)=\"onSelectionChange($event)\"\n [suggestions]=\"options_\"\n (completeMethod)=\"search($event)\"\n [multiple]=\"multiple\"\n [optionLabel]=\"labelField || 'name'\"\n [dropdown]=\"true\"\n [forceSelection]=\"true\"\n [placeholder]=\"(placeholder || '') | translate\"\n dropdownMode=\"current\"\n appendTo=\"self\"\n class=\"w-full\"\n [showEmptyMessage]=\"true\"\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\n [showTransitionOptions]=\"'0ms'\"\n ></p-autoComplete>\n `,\n providers: [BaseService],\n standalone: true, // تأكد أن المكون مستقل\n imports: [\n FormsModule,\n AutoCompleteModule,\n CommonModule,\n TranslateModule,\n ]\n})\nexport class GenericAutocompleteComponent implements OnInit {\n @ViewChild('autoComp') autoComp!: AutoComplete;\n\n // الخصائص المدخلة (Inputs)\n @Input() serviceName!: string;\n @Input() listEndpoint?: string;\n @Input() labelField?: string = 'name';\n @Input() valueField?: string = 'id';\n @Input() multiple: boolean = false;\n @Input() placeholder?: string;\n @Input() fixedFilters?: Record<string, any>;\n @Input() value: any;\n @Input() loadOnInit: boolean = false;\n\n // الأحداث المخرجة (Outputs)\n @Output() selectionChange = new EventEmitter<any>();\n\n options_: any[] = [];\n selectedItem: any;\n loading = false;\n\n api!: BaseService;\n\n constructor(private svc: BaseService) {}\n\n ngOnInit() {\n\n this.api = this.svc;\n this.api.apiName = this.serviceName;\n\n // ✅ إضافة الشرط الجديد للتحميل التلقائي عند تهيئة المكون\n if (this.loadOnInit) {\n this.search({ query: '' });\n }\n }\n\n onSelectionChange(val: any) {\n this.selectedItem = val;\n this.selectionChange.emit(val);\n }\n\n search(event: { query: string }) {\n const q = event.query?.toString().toLowerCase() || '';\n this.loading = true;\n this.options_ = [];\n\n const searchParams = {\n [this.labelField!]: q,\n ...this.fixedFilters,\n };\n\n const listEndpoint = this.listEndpoint;\n this.api.getList(searchParams, listEndpoint)\n .pipe(finalize(() => (this.loading = false)))\n .subscribe({\n next: (res: any) => {\n this.options_ = res.items ?? res ?? [];\n setTimeout(() => this.autoComp?.show(), 0);\n },\n error: () => {\n this.options_ = [];\n },\n });\n }\n\n getEmptyMessage(): string {\n if (this.loading) {\n return 'LOADING_DATA_MESSAGE';\n } else if (this.options_.length === 0) {\n return 'NO_RESULTS_FOUND';\n }\n return '';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i2 from 'primeng/button';
6
+ import { ButtonModule } from 'primeng/button';
7
+ import * as i3 from 'primeng/splitbutton';
8
+ import { SplitButtonModule } from 'primeng/splitbutton';
9
+
10
+ class GenericButton {
11
+ // permissionChecker = inject(PermissionCheckerService);
12
+ // لو وُجدت هذه المصفوفة، نُستخدم splitButton
13
+ model;
14
+ type = 'button';
15
+ icon = '';
16
+ label = '';
17
+ variant = 'raised';
18
+ severity = 'primary';
19
+ size = 'normal';
20
+ iconPosition = 'left';
21
+ disabled = false;
22
+ loading = false;
23
+ ariaLabel;
24
+ extraClasses = ''; // لأي Tailwind إضافي
25
+ permission;
26
+ clicked = new EventEmitter();
27
+ itemClick = new EventEmitter();
28
+ // خريطة أحجام
29
+ sizeMap = {
30
+ small: 'px-2 py-1 text-sm',
31
+ normal: 'px-4 py-2 text-base',
32
+ large: 'px-6 py-3 text-lg',
33
+ };
34
+ // خريطة ألوان للـ raised و rounded
35
+ colorMap = {
36
+ primary: 'bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 text-white',
37
+ secondary: 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500 text-white',
38
+ success: 'bg-green-600 hover:bg-green-700 focus:ring-green-500 text-white',
39
+ info: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',
40
+ warning: 'bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-400 text-white',
41
+ danger: 'bg-red-600 hover:bg-red-700 focus:ring-red-500 text-white',
42
+ };
43
+ // خريطة حدوده للـ outlined
44
+ outlinedMap = {
45
+ primary: 'border border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',
46
+ secondary: 'border border-gray-600 text-gray-600 hover:bg-gray-50 focus:ring-gray-500',
47
+ success: 'border border-green-600 text-green-600 hover:bg-green-50 focus:ring-green-500',
48
+ info: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',
49
+ warning: 'border border-yellow-500 text-yellow-500 hover:bg-yellow-50 focus:ring-yellow-400',
50
+ danger: 'border border-red-600 text-red-600 hover:bg-red-50 focus:ring-red-500',
51
+ };
52
+ get twClasses() {
53
+ const base = [
54
+ 'inline-flex items-center justify-center font-medium',
55
+ 'focus:outline-none focus:ring-2 focus:ring-offset-2 transition',
56
+ this.sizeMap[this.size]
57
+ ];
58
+ // variant-specific
59
+ if (this.variant === 'outlined') {
60
+ base.push(this.outlinedMap[this.severity]);
61
+ }
62
+ else {
63
+ base.push(this.colorMap[this.severity]);
64
+ }
65
+ if (this.variant === 'text') {
66
+ base.push('bg-transparent hover:bg-gray-100 focus:ring-gray-200 text-gray-700');
67
+ }
68
+ if (this.variant === 'rounded') {
69
+ base.push('rounded-full');
70
+ }
71
+ else {
72
+ base.push('rounded-md');
73
+ }
74
+ if (this.disabled || this.loading) {
75
+ base.push('opacity-50 cursor-not-allowed');
76
+ }
77
+ if (this.extraClasses) {
78
+ base.push(this.extraClasses);
79
+ }
80
+ return base.join(' ');
81
+ }
82
+ onClick() {
83
+ if (!this.disabled && !this.loading) {
84
+ this.clicked.emit();
85
+ }
86
+ }
87
+ onItemClick(evt) {
88
+ this.itemClick.emit(evt);
89
+ }
90
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GenericButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
91
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: GenericButton, isStandalone: true, selector: "lib-generic-button", inputs: { model: "model", type: "type", icon: "icon", label: "label", variant: "variant", severity: "severity", size: "size", iconPosition: "iconPosition", disabled: "disabled", loading: "loading", ariaLabel: "ariaLabel", extraClasses: "extraClasses", permission: "permission" }, outputs: { clicked: "clicked", itemClick: "itemClick" }, ngImport: i0, template: "\n<!-- generic-button.component.html -->\n <!-- *hasPermission=\"permission\" -->\n<ng-container >\n <ng-container *ngIf=\"model?.length; else simpleBtn\">\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0640 splitButton -->\n <p-splitButton\n [model]=\"model\"\n [icon]=\"icon\"\n [label]=\"label\"\n [styleClass]=\"twClasses\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n ></p-splitButton>\n </ng-container>\n\n <ng-template #simpleBtn>\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\n <button\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label\"\n [ngClass]=\"twClasses\"\n [attr.aria-label]=\"ariaLabel || label\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\n <ng-content *ngIf=\"!label && !icon && !loading\"></ng-content>\n </button>\n </ng-template>\n </ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i3.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
92
+ }
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GenericButton, decorators: [{
94
+ type: Component,
95
+ args: [{ selector: 'lib-generic-button', standalone: true, imports: [CommonModule, ButtonModule, SplitButtonModule, /* HasPermissionDirective */], changeDetection: ChangeDetectionStrategy.OnPush, template: "\n<!-- generic-button.component.html -->\n <!-- *hasPermission=\"permission\" -->\n<ng-container >\n <ng-container *ngIf=\"model?.length; else simpleBtn\">\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0640 splitButton -->\n <p-splitButton\n [model]=\"model\"\n [icon]=\"icon\"\n [label]=\"label\"\n [styleClass]=\"twClasses\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n ></p-splitButton>\n </ng-container>\n\n <ng-template #simpleBtn>\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\n <button\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label\"\n [ngClass]=\"twClasses\"\n [attr.aria-label]=\"ariaLabel || label\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\n <ng-content *ngIf=\"!label && !icon && !loading\"></ng-content>\n </button>\n </ng-template>\n </ng-container>\n" }]
96
+ }], propDecorators: { model: [{
97
+ type: Input
98
+ }], type: [{
99
+ type: Input
100
+ }], icon: [{
101
+ type: Input
102
+ }], label: [{
103
+ type: Input
104
+ }], variant: [{
105
+ type: Input
106
+ }], severity: [{
107
+ type: Input
108
+ }], size: [{
109
+ type: Input
110
+ }], iconPosition: [{
111
+ type: Input
112
+ }], disabled: [{
113
+ type: Input
114
+ }], loading: [{
115
+ type: Input
116
+ }], ariaLabel: [{
117
+ type: Input
118
+ }], extraClasses: [{
119
+ type: Input
120
+ }], permission: [{
121
+ type: Input
122
+ }], clicked: [{
123
+ type: Output
124
+ }], itemClick: [{
125
+ type: Output
126
+ }] } });
127
+
128
+ /**
129
+ * Generated bundle index. Do not edit.
130
+ */
131
+
132
+ export { GenericButton };
133
+ //# sourceMappingURL=elite.framework-ng.core-src-lib-components-generic-button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elite.framework-ng.core-src-lib-components-generic-button.mjs","sources":["../../../projects/core/src/lib/components/generic-button/generic-button.ts","../../../projects/core/src/lib/components/generic-button/generic-button.html","../../../projects/core/src/lib/components/generic-button/elite.framework-ng.core-src-lib-components-generic-button.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { MenuItem } from 'primeng/api';\n\ntype ButtonVariant = 'text' | 'outlined' | 'raised' | 'rounded';\ntype ButtonSeverity = 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' ;\ntype ButtonSize = 'small' | 'normal' | 'large';\ntype IconPosition = 'left' | 'right';\n\n@Component({\n selector: 'lib-generic-button',\n standalone: true,\n imports: [ CommonModule , ButtonModule, SplitButtonModule,/* HasPermissionDirective */],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './generic-button.html',\n})\nexport class GenericButton {\n\n // permissionChecker = inject(PermissionCheckerService);\n\n // لو وُجدت هذه المصفوفة، نُستخدم splitButton\n @Input() model?: MenuItem[];\n\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() icon: string = '';\n @Input() label: string = '';\n @Input() variant: ButtonVariant = 'raised';\n @Input() severity: ButtonSeverity = 'primary';\n @Input() size: ButtonSize = 'normal';\n @Input() iconPosition: IconPosition = 'left';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() ariaLabel?: string;\n @Input() extraClasses = ''; // لأي Tailwind إضافي\n @Input() permission?: string;\n @Output() clicked = new EventEmitter<void>();\n @Output() itemClick = new EventEmitter<any>();\n\n\n // خريطة أحجام\n private sizeMap: Record<ButtonSize,string> = {\n small: 'px-2 py-1 text-sm',\n normal: 'px-4 py-2 text-base',\n large: 'px-6 py-3 text-lg',\n };\n\n // خريطة ألوان للـ raised و rounded\n private colorMap: Record<ButtonSeverity,string> = {\n primary: 'bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 text-white',\n secondary: 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500 text-white',\n success: 'bg-green-600 hover:bg-green-700 focus:ring-green-500 text-white',\n info: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n warning: 'bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-400 text-white',\n danger: 'bg-red-600 hover:bg-red-700 focus:ring-red-500 text-white',\n };\n\n // خريطة حدوده للـ outlined\n private outlinedMap: Record<ButtonSeverity,string> = {\n primary: 'border border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',\n secondary: 'border border-gray-600 text-gray-600 hover:bg-gray-50 focus:ring-gray-500',\n success: 'border border-green-600 text-green-600 hover:bg-green-50 focus:ring-green-500',\n info: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n warning: 'border border-yellow-500 text-yellow-500 hover:bg-yellow-50 focus:ring-yellow-400',\n danger: 'border border-red-600 text-red-600 hover:bg-red-50 focus:ring-red-500',\n };\n\n get twClasses(): string {\n const base = [\n 'inline-flex items-center justify-center font-medium',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2 transition',\n this.sizeMap[this.size]\n ];\n // variant-specific\n if (this.variant === 'outlined') {\n base.push(this.outlinedMap[this.severity]);\n } else {\n base.push(this.colorMap[this.severity]);\n }\n if (this.variant === 'text') {\n base.push('bg-transparent hover:bg-gray-100 focus:ring-gray-200 text-gray-700');\n }\n if (this.variant === 'rounded') {\n base.push('rounded-full');\n } else {\n base.push('rounded-md');\n }\n if (this.disabled || this.loading) {\n base.push('opacity-50 cursor-not-allowed');\n }\n if (this.extraClasses) {\n base.push(this.extraClasses);\n }\n return base.join(' ');\n }\n\n onClick() {\n if (!this.disabled && !this.loading) {\n this.clicked.emit();\n }\n }\n\n onItemClick(evt: any) {\n this.itemClick.emit(evt);\n }\n\n // دالة مساعدة لدمج حالة التعطيل مع حالة الصلاحية\n // get isDisabledOrLoadingOrNoPermission(): boolean {\n // // إذا كان الزر معطلاً بشكل صريح أو في حالة تحميل، فهو معطل\n // if (this.disabled || this.loading) {\n // return true;\n // }\n // // إذا تم تحديد صلاحية للزر، تحقق منها\n // if (this.permission) {\n // return !this.permissionChecker.isGranted(this.permission);\n // }\n // // إذا لم يتم تحديد صلاحية، فالزر ليس معطلاً بسبب الصلاحيات\n // return false;\n // }\n\n}\n","\n<!-- generic-button.component.html -->\n <!-- *hasPermission=\"permission\" -->\n<ng-container >\n <ng-container *ngIf=\"model?.length; else simpleBtn\">\n <!-- حالة الـ splitButton -->\n <p-splitButton\n [model]=\"model\"\n [icon]=\"icon\"\n [label]=\"label\"\n [styleClass]=\"twClasses\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n ></p-splitButton>\n </ng-container>\n\n <ng-template #simpleBtn>\n <!-- حالة الزرّ العادي -->\n <button\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label\"\n [ngClass]=\"twClasses\"\n [attr.aria-label]=\"ariaLabel || label\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n\n <!-- محتوى مخصّص -->\n <ng-content *ngIf=\"!label && !icon && !loading\"></ng-content>\n </button>\n </ng-template>\n </ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}