@elite.framework/ng.ui.core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/attachments/README.md +3 -0
- package/attachments/index.d.ts +38 -0
- package/base-crud/README.md +3 -0
- package/base-crud/index.d.ts +68 -0
- package/breadcrumb/README.md +3 -0
- package/breadcrumb/index.d.ts +17 -0
- package/checkbox/README.md +3 -0
- package/checkbox/index.d.ts +33 -0
- package/color-picker/README.md +3 -0
- package/color-picker/index.d.ts +16 -0
- package/column-settings-popover/README.md +3 -0
- package/column-settings-popover/index.d.ts +46 -0
- package/condition-editor/README.md +3 -0
- package/condition-editor/index.d.ts +80 -0
- package/custom-switch/README.md +3 -0
- package/custom-switch/index.d.ts +19 -0
- package/datepicker/README.md +3 -0
- package/datepicker/index.d.ts +23 -0
- package/deactivation-reason/README.md +3 -0
- package/deactivation-reason/index.d.ts +31 -0
- package/fesm2022/elite.framework-ng.ui.core-attachments.mjs +217 -0
- package/fesm2022/elite.framework-ng.ui.core-attachments.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-base-crud.mjs +312 -0
- package/fesm2022/elite.framework-ng.ui.core-base-crud.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-breadcrumb.mjs +144 -0
- package/fesm2022/elite.framework-ng.ui.core-breadcrumb.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-checkbox.mjs +130 -0
- package/fesm2022/elite.framework-ng.ui.core-checkbox.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-color-picker.mjs +88 -0
- package/fesm2022/elite.framework-ng.ui.core-color-picker.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-column-settings-popover.mjs +184 -0
- package/fesm2022/elite.framework-ng.ui.core-column-settings-popover.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-condition-editor.mjs +782 -0
- package/fesm2022/elite.framework-ng.ui.core-condition-editor.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-custom-switch.mjs +122 -0
- package/fesm2022/elite.framework-ng.ui.core-custom-switch.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-datepicker.mjs +206 -0
- package/fesm2022/elite.framework-ng.ui.core-datepicker.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-deactivation-reason.mjs +142 -0
- package/fesm2022/elite.framework-ng.ui.core-deactivation-reason.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-form-button.mjs +62 -0
- package/fesm2022/elite.framework-ng.ui.core-form-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-form-field.mjs +155 -0
- package/fesm2022/elite.framework-ng.ui.core-form-field.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-form-template.mjs +37 -0
- package/fesm2022/elite.framework-ng.ui.core-form-template.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-avatar-image.mjs +112 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-avatar-label.mjs +90 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-button-selector.mjs +179 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-button-selector.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-button.mjs +74 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-presets.mjs +201 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-presets.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-split-button.mjs +62 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-split-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-ui.mjs +416 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-ui.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-username-with-domain.mjs +88 -0
- package/fesm2022/elite.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-autocomplete.mjs +175 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-button.mjs +145 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-card.mjs +219 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-card.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs +398 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-errormessage.mjs +35 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-errormessage.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-formly-fields.mjs +65 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-loadingspinner.mjs +35 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-search.mjs +98 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-search.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs +441 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs +226 -0
- package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-header-wrapper.mjs +31 -0
- package/fesm2022/elite.framework-ng.ui.core-header-wrapper.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-icon-picker.mjs +207 -0
- package/fesm2022/elite.framework-ng.ui.core-icon-picker.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-input-switch.mjs +106 -0
- package/fesm2022/elite.framework-ng.ui.core-input-switch.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-input-with-icon.mjs +67 -0
- package/fesm2022/elite.framework-ng.ui.core-input-with-icon.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-input.mjs +201 -0
- package/fesm2022/elite.framework-ng.ui.core-input.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-label-type.mjs +125 -0
- package/fesm2022/elite.framework-ng.ui.core-label-type.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-odata-query-builder.mjs +308 -0
- package/fesm2022/elite.framework-ng.ui.core-odata-query-builder.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-radio.mjs +118 -0
- package/fesm2022/elite.framework-ng.ui.core-radio.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-repeat.mjs +147 -0
- package/fesm2022/elite.framework-ng.ui.core-repeat.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-select.mjs +180 -0
- package/fesm2022/elite.framework-ng.ui.core-select.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-sidebar-cards.mjs +52 -0
- package/fesm2022/elite.framework-ng.ui.core-sidebar-cards.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-sidebar-toggles.mjs +53 -0
- package/fesm2022/elite.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-tabs.mjs +57 -0
- package/fesm2022/elite.framework-ng.ui.core-tabs.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-tag-type.mjs +204 -0
- package/fesm2022/elite.framework-ng.ui.core-tag-type.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-text-editor.mjs +56 -0
- package/fesm2022/elite.framework-ng.ui.core-text-editor.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-textarea.mjs +95 -0
- package/fesm2022/elite.framework-ng.ui.core-textarea.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-ui-button.mjs +101 -0
- package/fesm2022/elite.framework-ng.ui.core-ui-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core-wrappers.mjs +186 -0
- package/fesm2022/elite.framework-ng.ui.core-wrappers.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.ui.core.mjs +18 -0
- package/fesm2022/elite.framework-ng.ui.core.mjs.map +1 -0
- package/form-button/README.md +3 -0
- package/form-button/index.d.ts +17 -0
- package/form-field/README.md +3 -0
- package/form-field/index.d.ts +30 -0
- package/form-template/README.md +3 -0
- package/form-template/index.d.ts +16 -0
- package/formly-avatar-image/README.md +3 -0
- package/formly-avatar-image/index.d.ts +18 -0
- package/formly-avatar-label/README.md +3 -0
- package/formly-avatar-label/index.d.ts +36 -0
- package/formly-button/README.md +3 -0
- package/formly-button/index.d.ts +20 -0
- package/formly-button-selector/README.md +3 -0
- package/formly-button-selector/index.d.ts +35 -0
- package/formly-presets/README.md +3 -0
- package/formly-presets/index.d.ts +37 -0
- package/formly-split-button/README.md +3 -0
- package/formly-split-button/index.d.ts +23 -0
- package/formly-ui/README.md +3 -0
- package/formly-ui/index.d.ts +42 -0
- package/formly-username-with-domain/README.md +3 -0
- package/formly-username-with-domain/index.d.ts +19 -0
- package/generic-autocomplete/README.md +3 -0
- package/generic-autocomplete/index.d.ts +41 -0
- package/generic-button/README.md +3 -0
- package/generic-button/index.d.ts +42 -0
- package/generic-card/README.md +3 -0
- package/generic-card/index.d.ts +93 -0
- package/generic-crud-table/README.md +3 -0
- package/generic-crud-table/index.d.ts +129 -0
- package/generic-errormessage/README.md +3 -0
- package/generic-errormessage/index.d.ts +17 -0
- package/generic-formly-fields/README.md +3 -0
- package/generic-formly-fields/index.d.ts +26 -0
- package/generic-loadingspinner/README.md +3 -0
- package/generic-loadingspinner/index.d.ts +16 -0
- package/generic-search/README.md +3 -0
- package/generic-search/index.d.ts +36 -0
- package/generic-selector/README.md +3 -0
- package/generic-selector/index.d.ts +73 -0
- package/generic-table/README.md +3 -0
- package/generic-table/index.d.ts +66 -0
- package/header-wrapper/README.md +3 -0
- package/header-wrapper/index.d.ts +15 -0
- package/icon-picker/README.md +3 -0
- package/icon-picker/index.d.ts +30 -0
- package/index.d.ts +8 -0
- package/input/README.md +3 -0
- package/input/index.d.ts +42 -0
- package/input-switch/README.md +3 -0
- package/input-switch/index.d.ts +16 -0
- package/input-with-icon/README.md +3 -0
- package/input-with-icon/index.d.ts +17 -0
- package/label-type/README.md +3 -0
- package/label-type/index.d.ts +26 -0
- package/odata-query-builder/README.md +3 -0
- package/odata-query-builder/index.d.ts +87 -0
- package/package.json +219 -0
- package/radio/README.md +3 -0
- package/radio/index.d.ts +38 -0
- package/repeat/README.md +3 -0
- package/repeat/index.d.ts +24 -0
- package/select/README.md +3 -0
- package/select/index.d.ts +42 -0
- package/sidebar-cards/README.md +3 -0
- package/sidebar-cards/index.d.ts +25 -0
- package/sidebar-toggles/README.md +3 -0
- package/sidebar-toggles/index.d.ts +25 -0
- package/tabs/README.md +3 -0
- package/tabs/index.d.ts +17 -0
- package/tag-type/README.md +3 -0
- package/tag-type/index.d.ts +34 -0
- package/text-editor/README.md +3 -0
- package/text-editor/index.d.ts +16 -0
- package/textarea/README.md +3 -0
- package/textarea/index.d.ts +36 -0
- package/ui-button/README.md +3 -0
- package/ui-button/index.d.ts +33 -0
- package/wrappers/README.md +3 -0
- package/wrappers/index.d.ts +31 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elite.framework-ng.ui.core-generic-search.mjs","sources":["../tmp-esm2022/generic-search/lib/generic-search-module.js","../tmp-esm2022/generic-search/lib/generic-search.js","../tmp-esm2022/generic-search/elite.framework-ng.ui.core-generic-search.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericSearchModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWFyY2gtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoL3NyYy9saWIvZ2VuZXJpYy1zZWFyY2gtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8sbUJBQW1CO3VHQUFuQixtQkFBbUI7d0dBQW5CLG1CQUFtQixZQUZwQixZQUFZO3dHQUVYLG1CQUFtQixZQUZwQixZQUFZOzsyRkFFWCxtQkFBbUI7a0JBSC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlYXJjaE1vZHVsZSB7fVxuIl19","import { Component, EventEmitter, Input, Output, ViewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ButtonModule } from 'primeng/button';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputTextModule } from 'primeng/inputtext';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"primeng/button\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/popover\";\nimport * as i4 from \"primeng/inputicon\";\nimport * as i5 from \"primeng/iconfield\";\nimport * as i6 from \"primeng/inputtext\";\nimport * as i7 from \"@ngx-translate/core\";\nexport class GenericSearch {\n overlay;\n translate = inject(TranslateService);\n placeholder = 'بحث...';\n /**\n * List of fields to search by\n * Example: [{ label: 'Name', value: 'name' }, { label: 'Email', value: 'email' }]\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n search = new EventEmitter();\n form = new FormGroup({});\n model = {};\n options = {};\n fields = [];\n fields_ = [];\n // onTogglePopover(event: any) {\n // debugger\n // this.overlay.toggle(event);\n // }\n ngOnInit() {\n this.fields_ = this.fields;\n }\n onSubmit() {\n this.search.emit(this.model);\n }\n onReset() {\n this.model = {};\n this.search.emit(this.model);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearch, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: GenericSearch, isStandalone: true, selector: \"lib-generic-search\", inputs: { placeholder: \"placeholder\", model: \"model\", fields: \"fields\" }, outputs: { search: \"search\" }, viewQueries: [{ propertyName: \"overlay\", first: true, predicate: [\"overlay\"], descendants: true }], ngImport: i0, template: \"<div class=\\\"flex items-center gap-3\\\">\\r\\n<p-iconfield iconPosition=\\\"left\\\">\\r\\n\\r\\n <p-inputicon class=\\\"pi pi-search\\\"> </p-inputicon>\\r\\n <input pInputText type=\\\"text\\\" (keyup.enter)=\\\"onSubmit()\\\" [(ngModel)]=\\\"model['filter']\\\" placeholder=\\\"{{ 'SEARCH' | translate }}\\\" />\\r\\n <!-- 2) Search Button that toggles the popover -->\\r\\n\\r\\n</p-iconfield>\\r\\n<p-button icon=\\\"pi pi-filter\\\" outlined severity=\\\"secondary\\\" (onClick)=\\\"overlay.toggle($event)\\\" />\\r\\n</div>\\r\\n<!-- 4) Popover for Advanced Multi-field Search -->\\r\\n<p-popover #overlay [dismissable]=\\\"true\\\" styleClass=\\\"p-4 w-80 max-h-96 flex flex-col\\\">\\r\\n\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); overlay.hide()\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\">\\r\\n </formly-form>\\r\\n </form>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button type=\\\"submit\\\" pButton size=\\\"small\\\" label=\\\"{{ 'SEARCH' | translate }}\\\"></button>\\r\\n <button type=\\\"button\\\" pButton size=\\\"small\\\" class=\\\"p-button-text\\\" (click)=\\\"onReset(); overlay.hide()\\\">\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n\\r\\n\\r\\n</p-popover>\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i1.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"component\", type: i1.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i2.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i2.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: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i2.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"component\", type: i3.Popover, selector: \"p-popover\", inputs: [\"ariaLabel\", \"ariaLabelledBy\", \"dismissable\", \"style\", \"styleClass\", \"appendTo\", \"autoZIndex\", \"ariaCloseLabel\", \"baseZIndex\", \"focusOnShow\", \"showTransitionOptions\", \"hideTransitionOptions\"], outputs: [\"onShow\", \"onHide\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: InputIconModule }, { kind: \"component\", type: i4.InputIcon, selector: \"p-inputicon, p-inputIcon\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: IconFieldModule }, { kind: \"component\", type: i5.IconField, selector: \"p-iconfield, p-iconField, p-icon-field\", inputs: [\"iconPosition\", \"styleClass\"] }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"directive\", type: i6.InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"pipe\", type: i7.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearch, decorators: [{\n type: Component,\n args: [{ selector: 'lib-generic-search', standalone: true, imports: [\n CommonModule,\n FormlyForm,\n TranslateModule,\n ToolbarModule,\n ButtonModule,\n ReactiveFormsModule,\n PopoverModule,\n FormsModule,\n InputIconModule,\n IconFieldModule,\n InputTextModule,\n ], template: \"<div class=\\\"flex items-center gap-3\\\">\\r\\n<p-iconfield iconPosition=\\\"left\\\">\\r\\n\\r\\n <p-inputicon class=\\\"pi pi-search\\\"> </p-inputicon>\\r\\n <input pInputText type=\\\"text\\\" (keyup.enter)=\\\"onSubmit()\\\" [(ngModel)]=\\\"model['filter']\\\" placeholder=\\\"{{ 'SEARCH' | translate }}\\\" />\\r\\n <!-- 2) Search Button that toggles the popover -->\\r\\n\\r\\n</p-iconfield>\\r\\n<p-button icon=\\\"pi pi-filter\\\" outlined severity=\\\"secondary\\\" (onClick)=\\\"overlay.toggle($event)\\\" />\\r\\n</div>\\r\\n<!-- 4) Popover for Advanced Multi-field Search -->\\r\\n<p-popover #overlay [dismissable]=\\\"true\\\" styleClass=\\\"p-4 w-80 max-h-96 flex flex-col\\\">\\r\\n\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); overlay.hide()\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\">\\r\\n </formly-form>\\r\\n </form>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button type=\\\"submit\\\" pButton size=\\\"small\\\" label=\\\"{{ 'SEARCH' | translate }}\\\"></button>\\r\\n <button type=\\\"button\\\" pButton size=\\\"small\\\" class=\\\"p-button-text\\\" (click)=\\\"onReset(); overlay.hide()\\\">\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n\\r\\n\\r\\n</p-popover>\\r\\n\" }]\n }], propDecorators: { overlay: [{\n type: ViewChild,\n args: ['overlay']\n }], placeholder: [{\n type: Input\n }], search: [{\n type: Output\n }], model: [{\n type: Input\n }], fields: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gvc3JjL2xpYi9nZW5lcmljLXNlYXJjaC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC9zcmMvbGliL2dlbmVyaWMtc2VhcmNoLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBcUIsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7OztBQW9CcEQsTUFBTSxPQUFPLGFBQWE7SUFDRCxPQUFPLENBQVc7SUFDekMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTVCLFdBQVcsR0FBRyxRQUFRLENBQUM7SUFFaEM7OztPQUdHO0lBR0gsNERBQTREO0lBQ2xELE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRTNDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQixLQUFLLEdBQVEsRUFBRSxDQUFDO0lBQ3hCLE9BQU8sR0FBc0IsRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sR0FBd0IsRUFBRSxDQUFDO0lBQ3pDLE9BQU8sR0FBd0IsRUFBRSxDQUFDO0lBRXJDLGtDQUFrQztJQUNsQyxlQUFlO0lBQ2YsZ0NBQWdDO0lBQ2hDLElBQUk7SUFDRixRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7dUdBcENVLGFBQWE7MkZBQWIsYUFBYSwyUkM5QjFCLHEwQ0FpQ0EsMkNEakJJLFlBQVksK0JBQ1osVUFBVSxpSUFDVixlQUFlLDhCQUNmLGFBQWEsOEJBQ2IsWUFBWSx1cEJBQ1osbUJBQW1CLDR5QkFDbkIsYUFBYSx1VUFDYixXQUFXLHNQQUNYLGVBQWUsdUlBQ2YsZUFBZSxxS0FDZixlQUFlOzsyRkFJTixhQUFhO2tCQWxCekIsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osVUFBVTt3QkFDVixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZUFBZTtxQkFDaEI7OEJBSXNCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFHWixXQUFXO3NCQUFuQixLQUFLO2dCQVNJLE1BQU07c0JBQWYsTUFBTTtnQkFHQyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm0sIEZvcm1seUZvcm1PcHRpb25zIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRvb2xiYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2xiYXInO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgUG9wb3ZlciwgUG9wb3Zlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcG9wb3Zlcic7XG5pbXBvcnQgeyBJbnB1dEljb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0aWNvbic7XG5pbXBvcnQgeyBJY29uRmllbGRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2ljb25maWVsZCc7XG5pbXBvcnQgeyBJbnB1dFRleHRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1nZW5lcmljLXNlYXJjaCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybWx5Rm9ybSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgVG9vbGJhck1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBQb3BvdmVyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElucHV0SWNvbk1vZHVsZSxcbiAgICBJY29uRmllbGRNb2R1bGUsXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy1zZWFyY2guaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNTZWFyY2ggaW1wbGVtZW50cyBPbkluaXQge1xuICAgQFZpZXdDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXkhOiBQb3BvdmVyO1xuICB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAn2KjYrdirLi4uJztcblxuICAvKipcbiAgICogTGlzdCBvZiBmaWVsZHMgdG8gc2VhcmNoIGJ5XG4gICAqIEV4YW1wbGU6IFt7IGxhYmVsOiAnTmFtZScsIHZhbHVlOiAnbmFtZScgfSwgeyBsYWJlbDogJ0VtYWlsJywgdmFsdWU6ICdlbWFpbCcgfV1cbiAgICovXG5cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiBASW5wdXQoKSBtb2RlbDogYW55ID0ge307XG4gIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge307XG4gIEBJbnB1dCgpIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgZmllbGRzXzogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuXG4vLyAgIG9uVG9nZ2xlUG9wb3ZlcihldmVudDogYW55KSB7XG4vLyAgICAgZGVidWdnZXJcbi8vICAgdGhpcy5vdmVybGF5LnRvZ2dsZShldmVudCk7XG4vLyB9XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmllbGRzXyA9IHRoaXMuZmllbGRzO1xuICB9XG5cbiAgb25TdWJtaXQoKSB7XG4gICAgdGhpcy5zZWFyY2guZW1pdCh0aGlzLm1vZGVsKTtcbiAgfVxuXG4gIG9uUmVzZXQoKSB7XG4gICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgIHRoaXMuc2VhcmNoLmVtaXQodGhpcy5tb2RlbCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG48cC1pY29uZmllbGQgaWNvblBvc2l0aW9uPVwibGVmdFwiPlxyXG5cclxuICAgICAgICAgIDxwLWlucHV0aWNvbiBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPiA8L3AtaW5wdXRpY29uPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiAoa2V5dXAuZW50ZXIpPVwib25TdWJtaXQoKVwiIFsobmdNb2RlbCldPVwibW9kZWxbJ2ZpbHRlciddXCIgcGxhY2Vob2xkZXI9XCJ7eyAnU0VBUkNIJyB8IHRyYW5zbGF0ZSB9fVwiIC8+XHJcbiAgPCEtLSAyKSBTZWFyY2ggQnV0dG9uIHRoYXQgdG9nZ2xlcyB0aGUgcG9wb3ZlciAtLT5cclxuXHJcbjwvcC1pY29uZmllbGQ+XHJcbjxwLWJ1dHRvbiBpY29uPVwicGkgcGktZmlsdGVyXCIgb3V0bGluZWQgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAob25DbGljayk9XCJvdmVybGF5LnRvZ2dsZSgkZXZlbnQpXCIgLz5cclxuPC9kaXY+XHJcbjwhLS0gNCkgUG9wb3ZlciBmb3IgQWR2YW5jZWQgTXVsdGktZmllbGQgU2VhcmNoIC0tPlxyXG48cC1wb3BvdmVyICNvdmVybGF5IFtkaXNtaXNzYWJsZV09XCJ0cnVlXCIgIHN0eWxlQ2xhc3M9XCJwLTQgdy04MCBtYXgtaC05NiBmbGV4IGZsZXgtY29sXCI+XHJcblxyXG4gICA8ZGl2IGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKTsgb3ZlcmxheS5oaWRlKClcIj5cclxuICAgIDxmb3JtbHktZm9ybVxyXG4gICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgW2ZpZWxkc109XCJmaWVsZHNfXCJcclxuICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiPlxyXG4gICAgPC9mb3JtbHktZm9ybT5cclxuICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBtdC0yIHNwYWNlLXgtMiBmbGV4LW5vbmVcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgcEJ1dHRvbiBzaXplPVwic21hbGxcIiBsYWJlbD1cInt7ICdTRUFSQ0gnIHwgdHJhbnNsYXRlIH19XCI+PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gc2l6ZT1cInNtYWxsXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgKGNsaWNrKT1cIm9uUmVzZXQoKTsgb3ZlcmxheS5oaWRlKClcIj5cclxuICAgICAgICB7eyAnQ0xFQVInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuPC9wLXBvcG92ZXI+XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gvc3JjL2VsaXRlLmZyYW1ld29yay1uZy51aS5jb3JlLWdlbmVyaWMtc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule, ViewChild, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { FieldType, FormlyAttributes } from '@ngx-formly/core';
|
|
5
|
+
import { DialogService } from 'primeng/dynamicdialog';
|
|
6
|
+
import { forkJoin } from 'rxjs';
|
|
7
|
+
import { finalize } from 'rxjs/operators';
|
|
8
|
+
import * as i2 from '@angular/forms';
|
|
9
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
10
|
+
import * as i3 from 'primeng/autocomplete';
|
|
11
|
+
import { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';
|
|
12
|
+
import * as i4 from 'primeng/inputgroup';
|
|
13
|
+
import { InputGroupModule } from 'primeng/inputgroup';
|
|
14
|
+
import * as i5 from 'primeng/inputgroupaddon';
|
|
15
|
+
import { InputGroupAddonModule } from 'primeng/inputgroupaddon';
|
|
16
|
+
import * as i7 from '@ngx-translate/core';
|
|
17
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
18
|
+
import { CheckboxModule } from 'primeng/checkbox';
|
|
19
|
+
import * as i6 from 'primeng/button';
|
|
20
|
+
import { ButtonModule } from 'primeng/button';
|
|
21
|
+
import * as i1 from '@elite.framework/ng.core/services';
|
|
22
|
+
import { BaseService } from '@elite.framework/ng.core/services';
|
|
23
|
+
|
|
24
|
+
class GenericSelectorModule {
|
|
25
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
26
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.8", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });
|
|
27
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericSelectorModule, imports: [CommonModule] });
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericSelectorModule, decorators: [{
|
|
30
|
+
type: NgModule,
|
|
31
|
+
args: [{
|
|
32
|
+
imports: [CommonModule],
|
|
33
|
+
}]
|
|
34
|
+
}] });
|
|
35
|
+
|
|
36
|
+
class GenericSelectorTypeComponent extends FieldType {
|
|
37
|
+
svc;
|
|
38
|
+
injector;
|
|
39
|
+
cdr;
|
|
40
|
+
autoComp;
|
|
41
|
+
options_ = [];
|
|
42
|
+
selectedItem;
|
|
43
|
+
loading = false;
|
|
44
|
+
_offlineList = [];
|
|
45
|
+
api;
|
|
46
|
+
dialog;
|
|
47
|
+
valueChangeSubscription; // Add a subscription to manage the observable
|
|
48
|
+
constructor(svc, injector, cdr) {
|
|
49
|
+
super();
|
|
50
|
+
this.svc = svc;
|
|
51
|
+
this.injector = injector;
|
|
52
|
+
this.cdr = cdr;
|
|
53
|
+
}
|
|
54
|
+
ngOnInit() {
|
|
55
|
+
this.api = this.svc;
|
|
56
|
+
this.dialog = this.injector.get(DialogService);
|
|
57
|
+
const to = this.props;
|
|
58
|
+
this.api.apiName = to['serviceName'];
|
|
59
|
+
if (to['offline']) {
|
|
60
|
+
if (to['offlineDataFn']) {
|
|
61
|
+
this._offlineList = to['offlineDataFn']();
|
|
62
|
+
this.initOfflineSelection();
|
|
63
|
+
}
|
|
64
|
+
else if (to['offlineItems$']) {
|
|
65
|
+
to['offlineItems$'].subscribe((list) => {
|
|
66
|
+
this._offlineList = list;
|
|
67
|
+
this.initOfflineSelection();
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this._offlineList = to['offlineItems'] || [];
|
|
72
|
+
this.initOfflineSelection();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {
|
|
77
|
+
const vf = this.to['valueField'] || 'id';
|
|
78
|
+
const lf = this.to['labelField'] || 'name';
|
|
79
|
+
this.selectedItem =
|
|
80
|
+
{
|
|
81
|
+
[vf]: this.formControl.value,
|
|
82
|
+
[lf]: this.model[this.props.loadSavedField],
|
|
83
|
+
};
|
|
84
|
+
if (this.props.change) {
|
|
85
|
+
this.props.change(this.field, { item: this.selectedItem });
|
|
86
|
+
this.cdr.detectChanges();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.initOnlineSelection();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Subscribe to formControl value changes
|
|
94
|
+
this.valueChangeSubscription = this.formControl.valueChanges
|
|
95
|
+
.subscribe(() => {
|
|
96
|
+
// This tap operator is a good place to run side effects
|
|
97
|
+
// like calling your change handler after a value changes.
|
|
98
|
+
// this.selectedItem = this.formControl.value;
|
|
99
|
+
if (this.props.change) {
|
|
100
|
+
if (to['offline']) {
|
|
101
|
+
if (to['offlineDataFn']) {
|
|
102
|
+
this._offlineList = to['offlineDataFn']();
|
|
103
|
+
this.initOfflineSelection(false);
|
|
104
|
+
}
|
|
105
|
+
else if (to['offlineItems$']) {
|
|
106
|
+
to['offlineItems$'].subscribe((list) => {
|
|
107
|
+
this._offlineList = list;
|
|
108
|
+
this.initOfflineSelection(false);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
this._offlineList = to['offlineItems'] || [];
|
|
113
|
+
this.initOfflineSelection(false);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.initOnlineSelection(false);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// Remember to unsubscribe to prevent memory leaks!
|
|
123
|
+
ngOnDestroy() {
|
|
124
|
+
if (this.valueChangeSubscription) {
|
|
125
|
+
this.valueChangeSubscription.unsubscribe();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
loadDefaultValue() {
|
|
129
|
+
this.loading = true;
|
|
130
|
+
const vf = this.to['valueField'] || 'id';
|
|
131
|
+
const fixedFilters = this.getFixedFilters();
|
|
132
|
+
const lf = this.to['loadDefaultField'] || 'isDefault';
|
|
133
|
+
const lfValue = this.to['loadDefaultValue'] || true;
|
|
134
|
+
const searchParams = {
|
|
135
|
+
[lf]: lfValue,
|
|
136
|
+
...fixedFilters,
|
|
137
|
+
};
|
|
138
|
+
this.api.getList(searchParams)
|
|
139
|
+
.subscribe({
|
|
140
|
+
next: (res) => {
|
|
141
|
+
// Assuming the API returns a list and you want to select the first one
|
|
142
|
+
if (res && res.items && res.items.length > 0) {
|
|
143
|
+
if (this.to['multiple']) {
|
|
144
|
+
this.formControl.setValue(res.items.map((c) => c[vf]));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const defaultValue = res.items[0];
|
|
148
|
+
this.formControl.setValue(defaultValue?.[vf]);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
this.loading = false;
|
|
152
|
+
// this.initOnlineSelection(); // Proceed with online selection after setting the value
|
|
153
|
+
},
|
|
154
|
+
error: (err) => {
|
|
155
|
+
console.error("Failed to load default value from API:", err);
|
|
156
|
+
this.loading = false;
|
|
157
|
+
// this.initOnlineSelection(); // Fallback to local selection if API fails
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// New method to handle loading the default value from the API
|
|
162
|
+
onSelect(event) {
|
|
163
|
+
if (this.props.onSelect) {
|
|
164
|
+
this.props.onSelect(this.field, { item: event.value });
|
|
165
|
+
this.cdr.detectChanges();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
onSelectionChange(val) {
|
|
169
|
+
this.selectedItem = val;
|
|
170
|
+
const vf = this.to['valueField'] || 'id';
|
|
171
|
+
if (this.to['multiple']) {
|
|
172
|
+
this.formControl.setValue(Array.isArray(val) ? val.map((c) => c[vf]) : []);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
this.formControl.setValue(val?.[vf] ?? null);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
initOfflineSelection(withSetValue = true) {
|
|
179
|
+
const val = this.formControl.value;
|
|
180
|
+
const vf = this.to['valueField'] || 'id';
|
|
181
|
+
if (val == null)
|
|
182
|
+
return;
|
|
183
|
+
if (this.to['multiple'] && Array.isArray(val)) {
|
|
184
|
+
this.selectedItem = this._offlineList.filter(item => val.includes(item[vf]));
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this.selectedItem = this._offlineList.find(item => item[vf] === val);
|
|
188
|
+
}
|
|
189
|
+
if (withSetValue == true) {
|
|
190
|
+
this.formControl.setValue(this.to['multiple']
|
|
191
|
+
? this.selectedItem.map((c) => c[vf])
|
|
192
|
+
: this.selectedItem?.[vf]);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
if (this.props.change) {
|
|
196
|
+
this.props.change(this.field, { item: this.selectedItem });
|
|
197
|
+
this.cdr.detectChanges();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
initOnlineSelection(withSetValue = true) {
|
|
202
|
+
const fullModel = this.model;
|
|
203
|
+
const val = this.formControl.value;
|
|
204
|
+
const vf = this.to['valueField'] || 'id';
|
|
205
|
+
if (val == null || (Array.isArray(val) && val.length === 0)) {
|
|
206
|
+
this.selectedItem = this.to['multiple'] ? [] : null;
|
|
207
|
+
if (this.props['loadDefault'] == true) {
|
|
208
|
+
this.loadDefaultValue();
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (this.to['multiple'] && Array.isArray(val) && val.length) {
|
|
215
|
+
const calls = val.map((id) => this.api.get(id));
|
|
216
|
+
forkJoin(calls)
|
|
217
|
+
.pipe(finalize(() => (this.loading = false)))
|
|
218
|
+
.subscribe(items => {
|
|
219
|
+
this.selectedItem = items;
|
|
220
|
+
if (withSetValue == true) {
|
|
221
|
+
this.formControl.setValue(items.map((c) => c[vf]));
|
|
222
|
+
this.cdr.detectChanges();
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
if (this.props.change) {
|
|
226
|
+
this.props.change(this.field, { item: this.selectedItem });
|
|
227
|
+
this.cdr.detectChanges();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
this.loading = true;
|
|
234
|
+
this.api.get(val)
|
|
235
|
+
.pipe(finalize(() => (this.loading = false)))
|
|
236
|
+
.subscribe((item) => {
|
|
237
|
+
this.selectedItem = item;
|
|
238
|
+
// debugger
|
|
239
|
+
if (withSetValue == true) {
|
|
240
|
+
this.formControl.setValue(item?.[vf]);
|
|
241
|
+
this.cdr.detectChanges();
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
if (this.props.change) {
|
|
245
|
+
this.props.change(this.field, { item: this.selectedItem });
|
|
246
|
+
this.cdr.detectChanges();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
getFixedFilters() {
|
|
253
|
+
const fixedFilters = this.to['fixedFilters'];
|
|
254
|
+
if (typeof fixedFilters === 'function') {
|
|
255
|
+
// Call with current model (and optionally field)
|
|
256
|
+
return fixedFilters(this.model);
|
|
257
|
+
}
|
|
258
|
+
return fixedFilters || {};
|
|
259
|
+
}
|
|
260
|
+
onDropdownButtonClick() {
|
|
261
|
+
console.log('Custom dropdown button clicked!');
|
|
262
|
+
this.search({ query: '' }); // trigger your own search
|
|
263
|
+
setTimeout(() => this.autoComp.show(), 0); // force dropdown to open
|
|
264
|
+
}
|
|
265
|
+
// Called when dropdown button clicked
|
|
266
|
+
onDropdownClick(event) {
|
|
267
|
+
// 🚫 stop the default dropdown behavior
|
|
268
|
+
event.originalEvent.preventDefault();
|
|
269
|
+
event.originalEvent.stopPropagation();
|
|
270
|
+
console.log('Dropdown clicked!', event);
|
|
271
|
+
// ✅ your custom code here
|
|
272
|
+
// e.g., force trigger search for empty query
|
|
273
|
+
this.search({ query: '' });
|
|
274
|
+
}
|
|
275
|
+
search(event) {
|
|
276
|
+
const q = event.query?.toString().toLowerCase() || '';
|
|
277
|
+
const lf = this.to['labelField'] || 'name';
|
|
278
|
+
const fixedFilters = this.getFixedFilters();
|
|
279
|
+
if (this.to['offline']) {
|
|
280
|
+
this.options_ = this.to['offlineDataFn']
|
|
281
|
+
? this.to['offlineDataFn'](q)
|
|
282
|
+
: this._offlineList.filter(item => item[lf]?.toString().toLowerCase().includes(q));
|
|
283
|
+
setTimeout(() => this.autoComp?.show(), 0);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
this.loading = true;
|
|
287
|
+
this.options_ = [];
|
|
288
|
+
const searchParams = {
|
|
289
|
+
[lf]: q,
|
|
290
|
+
...fixedFilters,
|
|
291
|
+
};
|
|
292
|
+
// ✅ استخدام listEndpoint إذا كان موجودًا، وإلا العودة إلى الافتراضي
|
|
293
|
+
let listEndpoint = this.props.listEndpoint;
|
|
294
|
+
if (typeof listEndpoint === 'function') {
|
|
295
|
+
listEndpoint = listEndpoint(this.model);
|
|
296
|
+
}
|
|
297
|
+
this.api.getList(searchParams, listEndpoint)
|
|
298
|
+
.pipe(finalize(() => (this.loading = false)))
|
|
299
|
+
.subscribe({
|
|
300
|
+
next: (res) => {
|
|
301
|
+
this.options_ = res.items ?? res ?? [];
|
|
302
|
+
setTimeout(() => this.autoComp?.show(), 0);
|
|
303
|
+
},
|
|
304
|
+
error: () => {
|
|
305
|
+
this.options_ = [];
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
openCrud(mode) {
|
|
311
|
+
const payload = mode === 'add' ? null : this.selectedItem;
|
|
312
|
+
// Example integration:
|
|
313
|
+
// const ref = this.dialog.open(CrudComponent, {
|
|
314
|
+
// data: {
|
|
315
|
+
// serviceName: this.to.serviceName,
|
|
316
|
+
// mode,
|
|
317
|
+
// record: payload
|
|
318
|
+
// }
|
|
319
|
+
// });
|
|
320
|
+
// ref.onClose.subscribe((updated: any) => {
|
|
321
|
+
// if (!this.to.multiple && updated?.[this.to.valueField]) {
|
|
322
|
+
// this.api.get(updated[this.to.valueField])
|
|
323
|
+
// .subscribe(item => {
|
|
324
|
+
// this.selectedItem = item;
|
|
325
|
+
// this.formControl.setValue(item?.[this.to.valueField]);
|
|
326
|
+
// });
|
|
327
|
+
// }
|
|
328
|
+
// });
|
|
329
|
+
}
|
|
330
|
+
getEmptyMessage() {
|
|
331
|
+
if (this.loading) {
|
|
332
|
+
return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ "جاري تحميل البيانات..."
|
|
333
|
+
}
|
|
334
|
+
else if (this.options_.length === 0) {
|
|
335
|
+
return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ "لا توجد نتائج مطابقة."
|
|
336
|
+
}
|
|
337
|
+
return ''; // لا تُعرض رسالة إذا كانت هناك نتائج
|
|
338
|
+
}
|
|
339
|
+
isItemSelected(item) {
|
|
340
|
+
const vf = this.to['valueField'] || 'id';
|
|
341
|
+
return Array.isArray(this.selectedItem) &&
|
|
342
|
+
this.selectedItem.some((sel) => sel[vf] === item[vf]);
|
|
343
|
+
}
|
|
344
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericSelectorTypeComponent, deps: [{ token: i1.BaseService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
345
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.8", type: GenericSelectorTypeComponent, isStandalone: true, selector: "formly-generic-selector", providers: [DialogService, BaseService], viewQueries: [{ propertyName: "autoComp", first: true, predicate: ["autoComp"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
346
|
+
<!-- (ngModelChange)="onSelectionChange($event)" -->
|
|
347
|
+
<p-inputGroup class="w-full">
|
|
348
|
+
<p-autoComplete
|
|
349
|
+
#autoComp
|
|
350
|
+
[ngModel]="selectedItem"
|
|
351
|
+
(ngModelChange)="onSelectionChange($event)"
|
|
352
|
+
[formlyAttributes]="field"
|
|
353
|
+
[suggestions]="options_"
|
|
354
|
+
(completeMethod)="search($event)"
|
|
355
|
+
[multiple]="to['multiple']"
|
|
356
|
+
[optionLabel]="to['labelField'] || 'name'"
|
|
357
|
+
[dropdown]="false"
|
|
358
|
+
[forceSelection]="true"
|
|
359
|
+
[placeholder]="(props['placeholder'] ?? '') | translate"
|
|
360
|
+
[disabled]="!!props.disabled"
|
|
361
|
+
dropdownMode="current"
|
|
362
|
+
appendTo="body"
|
|
363
|
+
class="w-full rounded-none"
|
|
364
|
+
[showEmptyMessage]="true"
|
|
365
|
+
(onSelect)="onSelect($event)"
|
|
366
|
+
emptyMessage="{{ getEmptyMessage() | translate }}"
|
|
367
|
+
[showTransitionOptions]="'0ms'">
|
|
368
|
+
</p-autoComplete>
|
|
369
|
+
|
|
370
|
+
<!-- 🔘 Custom dropdown addon -->
|
|
371
|
+
<p-inputGroupAddon>
|
|
372
|
+
<p-button icon="pi pi-chevron-down" (click)="onDropdownButtonClick()" severity="secondary" />
|
|
373
|
+
</p-inputGroupAddon>
|
|
374
|
+
</p-inputGroup>
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
`, 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: ReactiveFormsModule }, { 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: InputGroupModule }, { kind: "component", type: i4.InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "component", type: i5.InputGroupAddon, selector: "p-inputgroup-addon, p-inputGroupAddon", inputs: ["style", "styleClass"] }, { kind: "directive", type: FormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: CheckboxModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
|
378
|
+
}
|
|
379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: GenericSelectorTypeComponent, decorators: [{
|
|
380
|
+
type: Component,
|
|
381
|
+
args: [{
|
|
382
|
+
selector: 'formly-generic-selector',
|
|
383
|
+
template: `
|
|
384
|
+
<!-- (ngModelChange)="onSelectionChange($event)" -->
|
|
385
|
+
<p-inputGroup class="w-full">
|
|
386
|
+
<p-autoComplete
|
|
387
|
+
#autoComp
|
|
388
|
+
[ngModel]="selectedItem"
|
|
389
|
+
(ngModelChange)="onSelectionChange($event)"
|
|
390
|
+
[formlyAttributes]="field"
|
|
391
|
+
[suggestions]="options_"
|
|
392
|
+
(completeMethod)="search($event)"
|
|
393
|
+
[multiple]="to['multiple']"
|
|
394
|
+
[optionLabel]="to['labelField'] || 'name'"
|
|
395
|
+
[dropdown]="false"
|
|
396
|
+
[forceSelection]="true"
|
|
397
|
+
[placeholder]="(props['placeholder'] ?? '') | translate"
|
|
398
|
+
[disabled]="!!props.disabled"
|
|
399
|
+
dropdownMode="current"
|
|
400
|
+
appendTo="body"
|
|
401
|
+
class="w-full rounded-none"
|
|
402
|
+
[showEmptyMessage]="true"
|
|
403
|
+
(onSelect)="onSelect($event)"
|
|
404
|
+
emptyMessage="{{ getEmptyMessage() | translate }}"
|
|
405
|
+
[showTransitionOptions]="'0ms'">
|
|
406
|
+
</p-autoComplete>
|
|
407
|
+
|
|
408
|
+
<!-- 🔘 Custom dropdown addon -->
|
|
409
|
+
<p-inputGroupAddon>
|
|
410
|
+
<p-button icon="pi pi-chevron-down" (click)="onDropdownButtonClick()" severity="secondary" />
|
|
411
|
+
</p-inputGroupAddon>
|
|
412
|
+
</p-inputGroup>
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
`,
|
|
416
|
+
providers: [DialogService, BaseService],
|
|
417
|
+
imports: [
|
|
418
|
+
FormsModule,
|
|
419
|
+
ReactiveFormsModule,
|
|
420
|
+
AutoCompleteModule,
|
|
421
|
+
CommonModule,
|
|
422
|
+
InputGroupModule,
|
|
423
|
+
InputGroupAddonModule,
|
|
424
|
+
FormlyAttributes,
|
|
425
|
+
TranslateModule,
|
|
426
|
+
AutoComplete,
|
|
427
|
+
CheckboxModule,
|
|
428
|
+
ButtonModule
|
|
429
|
+
]
|
|
430
|
+
}]
|
|
431
|
+
}], ctorParameters: () => [{ type: i1.BaseService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }], propDecorators: { autoComp: [{
|
|
432
|
+
type: ViewChild,
|
|
433
|
+
args: ['autoComp']
|
|
434
|
+
}] } });
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Generated bundle index. Do not edit.
|
|
438
|
+
*/
|
|
439
|
+
|
|
440
|
+
export { GenericSelectorModule, GenericSelectorTypeComponent };
|
|
441
|
+
//# sourceMappingURL=elite.framework-ng.ui.core-generic-selector.mjs.map
|