@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.
- package/README.md +3 -0
- package/attachments/README.md +3 -0
- package/base-crud/README.md +3 -0
- package/breadcrumb/README.md +3 -0
- package/checkbox/README.md +3 -0
- package/collapsible/README.md +3 -0
- package/color-picker/README.md +3 -0
- package/column-settings-popover/README.md +3 -0
- package/custom-switch/README.md +3 -0
- package/datepicker/README.md +3 -0
- package/deactivation-reason/README.md +3 -0
- package/excel-import/README.md +3 -0
- package/fesm2022/es.framework-ng.ui.core-attachments.mjs +217 -0
- package/fesm2022/es.framework-ng.ui.core-attachments.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-base-crud.mjs +370 -0
- package/fesm2022/es.framework-ng.ui.core-base-crud.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs +145 -0
- package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-checkbox.mjs +131 -0
- package/fesm2022/es.framework-ng.ui.core-checkbox.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-collapsible.mjs +90 -0
- package/fesm2022/es.framework-ng.ui.core-collapsible.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-color-picker.mjs +87 -0
- package/fesm2022/es.framework-ng.ui.core-color-picker.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs +183 -0
- package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs +119 -0
- package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-datepicker.mjs +519 -0
- package/fesm2022/es.framework-ng.ui.core-datepicker.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs +144 -0
- package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-excel-import.mjs +566 -0
- package/fesm2022/es.framework-ng.ui.core-excel-import.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs +386 -0
- package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-form-button.mjs +62 -0
- package/fesm2022/es.framework-ng.ui.core-form-button.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-form-field.mjs +155 -0
- package/fesm2022/es.framework-ng.ui.core-form-field.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-form-template.mjs +37 -0
- package/fesm2022/es.framework-ng.ui.core-form-template.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs +132 -0
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs +89 -0
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs +195 -0
- package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-button.mjs +73 -0
- package/fesm2022/es.framework-ng.ui.core-formly-button.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs +201 -0
- package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs +542 -0
- package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs +62 -0
- package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs +422 -0
- package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs +48 -0
- package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs +85 -0
- package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs +22 -0
- package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs +173 -0
- package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-button.mjs +150 -0
- package/fesm2022/es.framework-ng.ui.core-generic-button.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-card.mjs +218 -0
- package/fesm2022/es.framework-ng.ui.core-generic-card.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs +929 -0
- package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs +321 -0
- package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs +35 -0
- package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs +63 -0
- package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs +34 -0
- package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs +196 -0
- package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs +556 -0
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs +2995 -0
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-search.mjs +103 -0
- package/fesm2022/es.framework-ng.ui.core-generic-search.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs +684 -0
- package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs +388 -0
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs +465 -0
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs +31 -0
- package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs +205 -0
- package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-input-switch.mjs +102 -0
- package/fesm2022/es.framework-ng.ui.core-input-switch.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs +67 -0
- package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-input.mjs +250 -0
- package/fesm2022/es.framework-ng.ui.core-input.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-label-type.mjs +184 -0
- package/fesm2022/es.framework-ng.ui.core-label-type.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs +66 -0
- package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs +307 -0
- package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-query-type.mjs +162 -0
- package/fesm2022/es.framework-ng.ui.core-query-type.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-radio.mjs +120 -0
- package/fesm2022/es.framework-ng.ui.core-radio.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-repeat.mjs +290 -0
- package/fesm2022/es.framework-ng.ui.core-repeat.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-select.mjs +179 -0
- package/fesm2022/es.framework-ng.ui.core-select.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs +52 -0
- package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs +53 -0
- package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-tabs.mjs +57 -0
- package/fesm2022/es.framework-ng.ui.core-tabs.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-tag-type.mjs +209 -0
- package/fesm2022/es.framework-ng.ui.core-tag-type.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-text-editor.mjs +58 -0
- package/fesm2022/es.framework-ng.ui.core-text-editor.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-textarea.mjs +93 -0
- package/fesm2022/es.framework-ng.ui.core-textarea.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-wrappers.mjs +245 -0
- package/fesm2022/es.framework-ng.ui.core-wrappers.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core.mjs +20 -0
- package/fesm2022/es.framework-ng.ui.core.mjs.map +1 -0
- package/filter-templates/README.md +3 -0
- package/form-button/README.md +3 -0
- package/form-field/README.md +3 -0
- package/form-template/README.md +3 -0
- package/formly-avatar-image/README.md +3 -0
- package/formly-avatar-label/README.md +3 -0
- package/formly-button/README.md +3 -0
- package/formly-button-selector/README.md +3 -0
- package/formly-presets/README.md +3 -0
- package/formly-prime-icon-picker/README.md +3 -0
- package/formly-split-button/README.md +3 -0
- package/formly-ui/README.md +3 -0
- package/formly-ui-all/README.md +3 -0
- package/formly-username-with-domain/README.md +3 -0
- package/generic-assets/README.md +3 -0
- package/generic-autocomplete/README.md +3 -0
- package/generic-button/README.md +3 -0
- package/generic-card/README.md +3 -0
- package/generic-crud-table/README.md +3 -0
- package/generic-dialog/README.md +3 -0
- package/generic-errormessage/README.md +3 -0
- package/generic-formly-fields/README.md +3 -0
- package/generic-loadingspinner/README.md +3 -0
- package/generic-report/README.md +3 -0
- package/generic-report-tabs/README.md +0 -0
- package/generic-search/README.md +3 -0
- package/generic-search-advanced/README.md +3 -0
- package/generic-selector/README.md +3 -0
- package/generic-table/README.md +3 -0
- package/generic-view/README.md +3 -0
- package/header-wrapper/README.md +3 -0
- package/icon-picker/README.md +3 -0
- package/input/README.md +3 -0
- package/input-switch/README.md +3 -0
- package/input-with-icon/README.md +3 -0
- package/label-type/README.md +3 -0
- package/loading-skeletons/README.md +3 -0
- package/odata-query-builder/README.md +3 -0
- package/package.json +264 -0
- package/query-type/README.md +3 -0
- package/radio/README.md +3 -0
- package/repeat/README.md +3 -0
- package/select/README.md +3 -0
- package/sidebar-cards/README.md +3 -0
- package/sidebar-toggles/README.md +3 -0
- package/styles.css +2 -0
- package/tabs/README.md +3 -0
- package/tag-type/README.md +3 -0
- package/text-editor/README.md +3 -0
- package/textarea/README.md +3 -0
- package/types/es.framework-ng.ui.core-attachments.d.ts +38 -0
- package/types/es.framework-ng.ui.core-base-crud.d.ts +74 -0
- package/types/es.framework-ng.ui.core-breadcrumb.d.ts +17 -0
- package/types/es.framework-ng.ui.core-checkbox.d.ts +33 -0
- package/types/es.framework-ng.ui.core-collapsible.d.ts +18 -0
- package/types/es.framework-ng.ui.core-color-picker.d.ts +16 -0
- package/types/es.framework-ng.ui.core-column-settings-popover.d.ts +46 -0
- package/types/es.framework-ng.ui.core-custom-switch.d.ts +19 -0
- package/types/es.framework-ng.ui.core-datepicker.d.ts +23 -0
- package/types/es.framework-ng.ui.core-deactivation-reason.d.ts +32 -0
- package/types/es.framework-ng.ui.core-excel-import.d.ts +69 -0
- package/types/es.framework-ng.ui.core-filter-templates.d.ts +57 -0
- package/types/es.framework-ng.ui.core-form-button.d.ts +17 -0
- package/types/es.framework-ng.ui.core-form-field.d.ts +30 -0
- package/types/es.framework-ng.ui.core-form-template.d.ts +16 -0
- package/types/es.framework-ng.ui.core-formly-avatar-image.d.ts +18 -0
- package/types/es.framework-ng.ui.core-formly-avatar-label.d.ts +36 -0
- package/types/es.framework-ng.ui.core-formly-button-selector.d.ts +35 -0
- package/types/es.framework-ng.ui.core-formly-button.d.ts +20 -0
- package/types/es.framework-ng.ui.core-formly-presets.d.ts +37 -0
- package/types/es.framework-ng.ui.core-formly-prime-icon-picker.d.ts +45 -0
- package/types/es.framework-ng.ui.core-formly-split-button.d.ts +23 -0
- package/types/es.framework-ng.ui.core-formly-ui-all.d.ts +40 -0
- package/types/es.framework-ng.ui.core-formly-ui.d.ts +13 -0
- package/types/es.framework-ng.ui.core-formly-username-with-domain.d.ts +19 -0
- package/types/es.framework-ng.ui.core-generic-assets.d.ts +10 -0
- package/types/es.framework-ng.ui.core-generic-autocomplete.d.ts +41 -0
- package/types/es.framework-ng.ui.core-generic-button.d.ts +39 -0
- package/types/es.framework-ng.ui.core-generic-card.d.ts +93 -0
- package/types/es.framework-ng.ui.core-generic-crud-table.d.ts +293 -0
- package/types/es.framework-ng.ui.core-generic-dialog.d.ts +93 -0
- package/types/es.framework-ng.ui.core-generic-errormessage.d.ts +17 -0
- package/types/es.framework-ng.ui.core-generic-formly-fields.d.ts +26 -0
- package/types/es.framework-ng.ui.core-generic-loadingspinner.d.ts +16 -0
- package/types/es.framework-ng.ui.core-generic-report-tabs.d.ts +21 -0
- package/types/es.framework-ng.ui.core-generic-report.d.ts +121 -0
- package/types/es.framework-ng.ui.core-generic-search-advanced.d.ts +305 -0
- package/types/es.framework-ng.ui.core-generic-search.d.ts +36 -0
- package/types/es.framework-ng.ui.core-generic-selector.d.ts +99 -0
- package/types/es.framework-ng.ui.core-generic-table.d.ts +84 -0
- package/types/es.framework-ng.ui.core-generic-view.d.ts +97 -0
- package/types/es.framework-ng.ui.core-header-wrapper.d.ts +15 -0
- package/types/es.framework-ng.ui.core-icon-picker.d.ts +30 -0
- package/types/es.framework-ng.ui.core-input-switch.d.ts +16 -0
- package/types/es.framework-ng.ui.core-input-with-icon.d.ts +17 -0
- package/types/es.framework-ng.ui.core-input.d.ts +47 -0
- package/types/es.framework-ng.ui.core-label-type.d.ts +38 -0
- package/types/es.framework-ng.ui.core-loading-skeletons.d.ts +17 -0
- package/types/es.framework-ng.ui.core-odata-query-builder.d.ts +87 -0
- package/types/es.framework-ng.ui.core-query-type.d.ts +37 -0
- package/types/es.framework-ng.ui.core-radio.d.ts +38 -0
- package/types/es.framework-ng.ui.core-repeat.d.ts +31 -0
- package/types/es.framework-ng.ui.core-select.d.ts +42 -0
- package/types/es.framework-ng.ui.core-sidebar-cards.d.ts +25 -0
- package/types/es.framework-ng.ui.core-sidebar-toggles.d.ts +25 -0
- package/types/es.framework-ng.ui.core-tabs.d.ts +17 -0
- package/types/es.framework-ng.ui.core-tag-type.d.ts +34 -0
- package/types/es.framework-ng.ui.core-text-editor.d.ts +16 -0
- package/types/es.framework-ng.ui.core-textarea.d.ts +36 -0
- package/types/es.framework-ng.ui.core-wrappers.d.ts +36 -0
- package/types/es.framework-ng.ui.core.d.ts +8 -0
- package/wrappers/README.md +3 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { FieldType, FormlyAttributes } from '@ngx-formly/core';
|
|
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 FormlyUsernameWithDomainModule {
|
|
13
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FormlyUsernameWithDomainModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
14
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: FormlyUsernameWithDomainModule, imports: [CommonModule] });
|
|
15
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FormlyUsernameWithDomainModule, imports: [CommonModule] });
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FormlyUsernameWithDomainModule, decorators: [{
|
|
18
|
+
type: NgModule,
|
|
19
|
+
args: [{
|
|
20
|
+
imports: [CommonModule],
|
|
21
|
+
}]
|
|
22
|
+
}] });
|
|
23
|
+
|
|
24
|
+
class UsernameWithDomainComponent extends FieldType {
|
|
25
|
+
// ✅ إضافة ثابت لاسم النطاق لتسهيل التغيير
|
|
26
|
+
domain = '@ELITESOFTSYS.COM';
|
|
27
|
+
// ✅ دالة يتم استدعاؤها عند تهيئة الحقل
|
|
28
|
+
ngOnInit() {
|
|
29
|
+
const currentValue = this.formControl.value;
|
|
30
|
+
// إذا كانت القيمة تحتوي على النطاق، قم بإزالته
|
|
31
|
+
if (currentValue && typeof currentValue === 'string' && currentValue.endsWith(this.domain)) {
|
|
32
|
+
const username = currentValue.replace(this.domain, '');
|
|
33
|
+
this.formControl.setValue(username);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ✅ هذه الدالة يتم استدعاؤها عند خروج المستخدم من الحقل
|
|
37
|
+
onBlur() {
|
|
38
|
+
const currentValue = this.formControl.value;
|
|
39
|
+
// إذا كانت القيمة لا تحتوي على النطاق، قم بإضافته
|
|
40
|
+
if (currentValue && typeof currentValue === 'string' && !currentValue.endsWith(this.domain)) {
|
|
41
|
+
this.formControl.setValue(currentValue + this.domain);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: UsernameWithDomainComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: UsernameWithDomainComponent, isStandalone: true, selector: "lib-formly-username-with-domain", usesInheritance: true, ngImport: i0, template: `
|
|
46
|
+
<input
|
|
47
|
+
type="text"
|
|
48
|
+
pInputText
|
|
49
|
+
[formControl]="formControl"
|
|
50
|
+
[formlyAttributes]="field"
|
|
51
|
+
(blur)="onBlur()"
|
|
52
|
+
/>
|
|
53
|
+
`, isInline: true, dependencies: [{ 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: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "directive", type: FormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }] });
|
|
54
|
+
}
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: UsernameWithDomainComponent, decorators: [{
|
|
56
|
+
type: Component,
|
|
57
|
+
args: [{
|
|
58
|
+
standalone: true, // ✅ يجب إضافة هذه الخاصية
|
|
59
|
+
selector: 'lib-formly-username-with-domain',
|
|
60
|
+
imports: [
|
|
61
|
+
FormsModule,
|
|
62
|
+
ReactiveFormsModule,
|
|
63
|
+
InputTextModule,
|
|
64
|
+
InputGroupModule,
|
|
65
|
+
InputGroupAddonModule,
|
|
66
|
+
FormlyAttributes
|
|
67
|
+
],
|
|
68
|
+
template: `
|
|
69
|
+
<input
|
|
70
|
+
type="text"
|
|
71
|
+
pInputText
|
|
72
|
+
[formControl]="formControl"
|
|
73
|
+
[formlyAttributes]="field"
|
|
74
|
+
(blur)="onBlur()"
|
|
75
|
+
/>
|
|
76
|
+
`,
|
|
77
|
+
}]
|
|
78
|
+
}] });
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Generated bundle index. Do not edit.
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
export { FormlyUsernameWithDomainModule, UsernameWithDomainComponent };
|
|
85
|
+
//# sourceMappingURL=es.framework-ng.ui.core-formly-username-with-domain.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-formly-username-with-domain.mjs","sources":["../../../../libs/ng.ui.core/formly-username-with-domain/src/lib/formly-username-with-domain-module.ts","../../../../libs/ng.ui.core/formly-username-with-domain/src/lib/formly-username-with-domain.ts","../../../../libs/ng.ui.core/formly-username-with-domain/src/es.framework-ng.ui.core-formly-username-with-domain.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class FormlyUsernameWithDomainModule {}\n","import { Component } from '@angular/core';\nimport { FieldType, FieldTypeConfig,FormlyAttributes } from '@ngx-formly/core'; // ✅ استيراد FormlyModule\n\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 FormsModule,\n ReactiveFormsModule,\n InputTextModule,\n InputGroupModule,\n 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 './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
|
|
5
|
+
class GenericAssetsModule {
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericAssetsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: GenericAssetsModule, imports: [CommonModule] });
|
|
8
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericAssetsModule, imports: [CommonModule] });
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericAssetsModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
imports: [CommonModule],
|
|
14
|
+
}]
|
|
15
|
+
}] });
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Generated bundle index. Do not edit.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export { GenericAssetsModule };
|
|
22
|
+
//# sourceMappingURL=es.framework-ng.ui.core-generic-assets.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-assets.mjs","sources":["../../../../libs/ng.ui.core/generic-assets/src/lib/generic-assets-module.ts","../../../../libs/ng.ui.core/generic-assets/src/es.framework-ng.ui.core-generic-assets.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericAssetsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAMa,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAFpB,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,mBAAmB,YAFpB,YAAY,CAAA,EAAA,CAAA;;2FAEX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;ACLD;;AAEG;;;;"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule, 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 { TranslatePipe } from '@es.framework/ng.core/pipes';
|
|
9
|
+
import { finalize } from 'rxjs/operators';
|
|
10
|
+
import * as i1 from '@es.framework/ng.core/services';
|
|
11
|
+
import { BaseService } from '@es.framework/ng.core/services';
|
|
12
|
+
|
|
13
|
+
class GenericAutocompleteModule {
|
|
14
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
15
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: GenericAutocompleteModule, imports: [CommonModule] });
|
|
16
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericAutocompleteModule, imports: [CommonModule] });
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericAutocompleteModule, decorators: [{
|
|
19
|
+
type: NgModule,
|
|
20
|
+
args: [{
|
|
21
|
+
imports: [CommonModule],
|
|
22
|
+
}]
|
|
23
|
+
}] });
|
|
24
|
+
|
|
25
|
+
class GenericAutocompleteComponent {
|
|
26
|
+
svc;
|
|
27
|
+
autoComp;
|
|
28
|
+
// الخصائص المدخلة (Inputs)
|
|
29
|
+
serviceName;
|
|
30
|
+
listEndpoint;
|
|
31
|
+
labelField = 'name';
|
|
32
|
+
valueField = 'id';
|
|
33
|
+
multiple = false;
|
|
34
|
+
placeholder;
|
|
35
|
+
fixedFilters;
|
|
36
|
+
value;
|
|
37
|
+
loadOnInit = false;
|
|
38
|
+
// الأحداث المخرجة (Outputs)
|
|
39
|
+
selectionChange = new EventEmitter();
|
|
40
|
+
options_ = [];
|
|
41
|
+
selectedItem;
|
|
42
|
+
loading = false;
|
|
43
|
+
api;
|
|
44
|
+
constructor(svc) {
|
|
45
|
+
this.svc = svc;
|
|
46
|
+
}
|
|
47
|
+
ngOnInit() {
|
|
48
|
+
this.api = this.svc;
|
|
49
|
+
this.api.apiName = this.serviceName;
|
|
50
|
+
// ✅ إضافة الشرط الجديد للتحميل التلقائي عند تهيئة المكون
|
|
51
|
+
if (this.loadOnInit) {
|
|
52
|
+
this.search({ query: '' });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
onSelectionChange(val) {
|
|
56
|
+
this.selectedItem = val;
|
|
57
|
+
this.selectionChange.emit(val);
|
|
58
|
+
}
|
|
59
|
+
search(event) {
|
|
60
|
+
const q = event.query?.toString().toLowerCase() || '';
|
|
61
|
+
this.loading = true;
|
|
62
|
+
this.options_ = [];
|
|
63
|
+
const searchParams = {
|
|
64
|
+
[this.labelField]: q,
|
|
65
|
+
...this.fixedFilters,
|
|
66
|
+
};
|
|
67
|
+
const listEndpoint = this.listEndpoint;
|
|
68
|
+
this.api.getList(searchParams, listEndpoint)
|
|
69
|
+
.pipe(finalize(() => (this.loading = false)))
|
|
70
|
+
.subscribe({
|
|
71
|
+
next: (res) => {
|
|
72
|
+
this.options_ = res.items ?? res ?? [];
|
|
73
|
+
setTimeout(() => this.autoComp?.show(), 0);
|
|
74
|
+
},
|
|
75
|
+
error: () => {
|
|
76
|
+
this.options_ = [];
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
getEmptyMessage() {
|
|
81
|
+
if (this.loading) {
|
|
82
|
+
return 'LOADING_DATA_MESSAGE';
|
|
83
|
+
}
|
|
84
|
+
else if (this.options_.length === 0) {
|
|
85
|
+
return 'NO_RESULTS_FOUND';
|
|
86
|
+
}
|
|
87
|
+
return '';
|
|
88
|
+
}
|
|
89
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericAutocompleteComponent, deps: [{ token: i1.BaseService }], target: i0.ɵɵFactoryTarget.Component });
|
|
90
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", 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: `
|
|
91
|
+
<p-autoComplete
|
|
92
|
+
#autoComp
|
|
93
|
+
[ngModel]="selectedItem"
|
|
94
|
+
(ngModelChange)="onSelectionChange($event)"
|
|
95
|
+
[suggestions]="options_"
|
|
96
|
+
(completeMethod)="search($event)"
|
|
97
|
+
[multiple]="multiple"
|
|
98
|
+
[optionLabel]="labelField || 'name'"
|
|
99
|
+
[dropdown]="true"
|
|
100
|
+
[forceSelection]="true"
|
|
101
|
+
[placeholder]="(placeholder || '') | translate"
|
|
102
|
+
dropdownMode="current"
|
|
103
|
+
appendTo="self"
|
|
104
|
+
class="w-full"
|
|
105
|
+
[showEmptyMessage]="true"
|
|
106
|
+
emptyMessage="{{ getEmptyMessage() | translate }}"
|
|
107
|
+
[showTransitionOptions]="'0ms'"
|
|
108
|
+
></p-autoComplete>
|
|
109
|
+
`, 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", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
110
|
+
}
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericAutocompleteComponent, decorators: [{
|
|
112
|
+
type: Component,
|
|
113
|
+
args: [{
|
|
114
|
+
selector: 'app-generic-autocomplete',
|
|
115
|
+
template: `
|
|
116
|
+
<p-autoComplete
|
|
117
|
+
#autoComp
|
|
118
|
+
[ngModel]="selectedItem"
|
|
119
|
+
(ngModelChange)="onSelectionChange($event)"
|
|
120
|
+
[suggestions]="options_"
|
|
121
|
+
(completeMethod)="search($event)"
|
|
122
|
+
[multiple]="multiple"
|
|
123
|
+
[optionLabel]="labelField || 'name'"
|
|
124
|
+
[dropdown]="true"
|
|
125
|
+
[forceSelection]="true"
|
|
126
|
+
[placeholder]="(placeholder || '') | translate"
|
|
127
|
+
dropdownMode="current"
|
|
128
|
+
appendTo="self"
|
|
129
|
+
class="w-full"
|
|
130
|
+
[showEmptyMessage]="true"
|
|
131
|
+
emptyMessage="{{ getEmptyMessage() | translate }}"
|
|
132
|
+
[showTransitionOptions]="'0ms'"
|
|
133
|
+
></p-autoComplete>
|
|
134
|
+
`,
|
|
135
|
+
providers: [BaseService],
|
|
136
|
+
standalone: true, // تأكد أن المكون مستقل
|
|
137
|
+
imports: [
|
|
138
|
+
FormsModule,
|
|
139
|
+
AutoCompleteModule,
|
|
140
|
+
TranslatePipe
|
|
141
|
+
]
|
|
142
|
+
}]
|
|
143
|
+
}], ctorParameters: () => [{ type: i1.BaseService }], propDecorators: { autoComp: [{
|
|
144
|
+
type: ViewChild,
|
|
145
|
+
args: ['autoComp']
|
|
146
|
+
}], serviceName: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], listEndpoint: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], labelField: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], valueField: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], multiple: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], placeholder: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], fixedFilters: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], value: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], loadOnInit: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], selectionChange: [{
|
|
165
|
+
type: Output
|
|
166
|
+
}] } });
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Generated bundle index. Do not edit.
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
export { GenericAutocompleteComponent, GenericAutocompleteModule };
|
|
173
|
+
//# sourceMappingURL=es.framework-ng.ui.core-generic-autocomplete.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-autocomplete.mjs","sources":["../../../../libs/ng.ui.core/generic-autocomplete/src/lib/generic-autocomplete-module.ts","../../../../libs/ng.ui.core/generic-autocomplete/src/lib/generic-autocomplete-component.ts","../../../../libs/ng.ui.core/generic-autocomplete/src/es.framework-ng.ui.core-generic-autocomplete.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericAutocompleteModule {}\n","import { Component, EventEmitter, Injector, Input, OnInit, Output, ViewChild } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\nimport { finalize } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { BaseService } from '@es.framework/ng.core/services';\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 TranslatePipe\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 = false;\n @Input() placeholder?: string;\n @Input() fixedFilters?: Record<string, any>;\n @Input() value: any;\n @Input() loadOnInit = 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 './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule, EventEmitter, Output, Input, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import * as i1 from 'primeng/button';
|
|
5
|
+
import { ButtonModule } from 'primeng/button';
|
|
6
|
+
import * as i2 from 'primeng/splitbutton';
|
|
7
|
+
import { SplitButtonModule } from 'primeng/splitbutton';
|
|
8
|
+
import { HasPermissionDirective } from '@es.framework/ng.core/directives';
|
|
9
|
+
import { TranslatePipe } from '@es.framework/ng.core/pipes';
|
|
10
|
+
import * as i3 from 'primeng/tooltip';
|
|
11
|
+
import { TooltipModule } from 'primeng/tooltip';
|
|
12
|
+
|
|
13
|
+
class GenericButtonModule {
|
|
14
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
15
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: GenericButtonModule, imports: [CommonModule] });
|
|
16
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButtonModule, imports: [CommonModule] });
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButtonModule, decorators: [{
|
|
19
|
+
type: NgModule,
|
|
20
|
+
args: [{
|
|
21
|
+
imports: [CommonModule],
|
|
22
|
+
}]
|
|
23
|
+
}] });
|
|
24
|
+
|
|
25
|
+
class GenericButton {
|
|
26
|
+
// permissionChecker = inject(PermissionCheckerService);
|
|
27
|
+
// لو وُجدت هذه المصفوفة، نُستخدم splitButton
|
|
28
|
+
model;
|
|
29
|
+
type = 'button';
|
|
30
|
+
icon = '';
|
|
31
|
+
label = '';
|
|
32
|
+
variant = 'raised';
|
|
33
|
+
severity = 'primary';
|
|
34
|
+
size = 'small';
|
|
35
|
+
iconPosition = 'left';
|
|
36
|
+
disabled = false;
|
|
37
|
+
loading = false;
|
|
38
|
+
ariaLabel;
|
|
39
|
+
extraClasses = ''; // لأي Tailwind إضافي
|
|
40
|
+
permission;
|
|
41
|
+
clicked = new EventEmitter();
|
|
42
|
+
itemClick = new EventEmitter();
|
|
43
|
+
// خريطة أحجام
|
|
44
|
+
sizeMap = {
|
|
45
|
+
small: 'text-sm',
|
|
46
|
+
// normal: 'px-4 py-2 text-base',
|
|
47
|
+
large: 'text-lg',
|
|
48
|
+
};
|
|
49
|
+
// خريطة ألوان للـ raised و rounded
|
|
50
|
+
colorMap = {
|
|
51
|
+
primary: 'bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 text-white',
|
|
52
|
+
secondary: 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500 text-white',
|
|
53
|
+
success: 'bg-green-600 hover:bg-green-700 focus:ring-green-500 text-white',
|
|
54
|
+
info: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',
|
|
55
|
+
warn: 'bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-400 text-white',
|
|
56
|
+
danger: 'bg-red-600 hover:bg-red-700 focus:ring-red-500 text-white',
|
|
57
|
+
help: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',
|
|
58
|
+
contrast: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',
|
|
59
|
+
};
|
|
60
|
+
// خريطة حدوده للـ outlined
|
|
61
|
+
outlinedMap = {
|
|
62
|
+
primary: 'border border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',
|
|
63
|
+
secondary: 'border border-gray-600 text-gray-600 hover:bg-gray-50 focus:ring-gray-500',
|
|
64
|
+
success: 'border border-green-600 text-green-600 hover:bg-green-50 focus:ring-green-500',
|
|
65
|
+
info: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',
|
|
66
|
+
help: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',
|
|
67
|
+
contrast: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',
|
|
68
|
+
warn: 'border border-yellow-500 text-yellow-500 hover:bg-yellow-50 focus:ring-yellow-400',
|
|
69
|
+
danger: 'border border-red-600 text-red-600 hover:bg-red-50 focus:ring-red-500',
|
|
70
|
+
};
|
|
71
|
+
get twClasses() {
|
|
72
|
+
const base = [
|
|
73
|
+
// 'inline-flex items-center justify-center font-medium',
|
|
74
|
+
// 'focus:outline-none focus:ring-2 focus:ring-offset-2 transition',
|
|
75
|
+
this.sizeMap[this.size]
|
|
76
|
+
];
|
|
77
|
+
// // variant-specific
|
|
78
|
+
// if (this.variant === 'outlined') {
|
|
79
|
+
// base.push(this.outlinedMap[this.severity]);
|
|
80
|
+
// } else {
|
|
81
|
+
// base.push(this.colorMap[this.severity]);
|
|
82
|
+
// }
|
|
83
|
+
// if (this.variant === 'text') {
|
|
84
|
+
// base.push('bg-transparent hover:bg-gray-100 focus:ring-gray-200 text-gray-700');
|
|
85
|
+
// }
|
|
86
|
+
// if (this.variant === 'rounded') {
|
|
87
|
+
// base.push('rounded-full');
|
|
88
|
+
// } else {
|
|
89
|
+
// base.push('rounded-md');
|
|
90
|
+
// }
|
|
91
|
+
// if (this.disabled || this.loading) {
|
|
92
|
+
// base.push('opacity-50 cursor-not-allowed');
|
|
93
|
+
// }
|
|
94
|
+
// if (this.extraClasses) {
|
|
95
|
+
// base.push(this.extraClasses);
|
|
96
|
+
// }
|
|
97
|
+
return base.join(' ');
|
|
98
|
+
}
|
|
99
|
+
onClick() {
|
|
100
|
+
if (!this.disabled && !this.loading) {
|
|
101
|
+
this.clicked.emit();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
onItemClick(evt) {
|
|
105
|
+
this.itemClick.emit(evt);
|
|
106
|
+
}
|
|
107
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
108
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", 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\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"top\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i2.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"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
109
|
+
}
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButton, decorators: [{
|
|
111
|
+
type: Component,
|
|
112
|
+
args: [{ selector: 'lib-generic-button', standalone: true, imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "\n\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"top\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"] }]
|
|
113
|
+
}], propDecorators: { model: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], type: [{
|
|
116
|
+
type: Input
|
|
117
|
+
}], icon: [{
|
|
118
|
+
type: Input
|
|
119
|
+
}], label: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}], variant: [{
|
|
122
|
+
type: Input
|
|
123
|
+
}], severity: [{
|
|
124
|
+
type: Input
|
|
125
|
+
}], size: [{
|
|
126
|
+
type: Input
|
|
127
|
+
}], iconPosition: [{
|
|
128
|
+
type: Input
|
|
129
|
+
}], disabled: [{
|
|
130
|
+
type: Input
|
|
131
|
+
}], loading: [{
|
|
132
|
+
type: Input
|
|
133
|
+
}], ariaLabel: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}], extraClasses: [{
|
|
136
|
+
type: Input
|
|
137
|
+
}], permission: [{
|
|
138
|
+
type: Input
|
|
139
|
+
}], clicked: [{
|
|
140
|
+
type: Output
|
|
141
|
+
}], itemClick: [{
|
|
142
|
+
type: Output
|
|
143
|
+
}] } });
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Generated bundle index. Do not edit.
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
export { GenericButton, GenericButtonModule };
|
|
150
|
+
//# sourceMappingURL=es.framework-ng.ui.core-generic-button.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-button.mjs","sources":["../../../../libs/ng.ui.core/generic-button/src/lib/generic-button-module.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.html","../../../../libs/ng.ui.core/generic-button/src/es.framework-ng.ui.core-generic-button.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericButtonModule {}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { MenuItem } from 'primeng/api';\nimport { HasPermissionDirective } from '@es.framework/ng.core/directives';\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\nimport { ButtonSeverity, ButtonSize, ButtonVariant, IconPosition } from '@es.framework/ng.core/models';\nimport { TooltipModule } from \"primeng/tooltip\";\n\n@Component({\n selector: 'lib-generic-button',\n standalone: true,\n imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './generic-button.html',\n styleUrls: ['./generic-button.css']\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 = '';\n @Input() label = '';\n @Input() variant: ButtonVariant = 'raised';\n @Input() severity: ButtonSeverity = 'primary';\n @Input() size: ButtonSize = 'small';\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: 'text-sm',\n // normal: 'px-4 py-2 text-base',\n large: '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 warn: '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 help: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n contrast: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-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 help: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n contrast: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n warn: '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}\n","\n\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- حالة الزرّ العادي -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"top\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n <!-- محتوى مخصّص -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|