@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.
Files changed (201) hide show
  1. package/README.md +3 -0
  2. package/attachments/README.md +3 -0
  3. package/attachments/index.d.ts +38 -0
  4. package/base-crud/README.md +3 -0
  5. package/base-crud/index.d.ts +68 -0
  6. package/breadcrumb/README.md +3 -0
  7. package/breadcrumb/index.d.ts +17 -0
  8. package/checkbox/README.md +3 -0
  9. package/checkbox/index.d.ts +33 -0
  10. package/color-picker/README.md +3 -0
  11. package/color-picker/index.d.ts +16 -0
  12. package/column-settings-popover/README.md +3 -0
  13. package/column-settings-popover/index.d.ts +46 -0
  14. package/condition-editor/README.md +3 -0
  15. package/condition-editor/index.d.ts +80 -0
  16. package/custom-switch/README.md +3 -0
  17. package/custom-switch/index.d.ts +19 -0
  18. package/datepicker/README.md +3 -0
  19. package/datepicker/index.d.ts +23 -0
  20. package/deactivation-reason/README.md +3 -0
  21. package/deactivation-reason/index.d.ts +31 -0
  22. package/fesm2022/elite.framework-ng.ui.core-attachments.mjs +217 -0
  23. package/fesm2022/elite.framework-ng.ui.core-attachments.mjs.map +1 -0
  24. package/fesm2022/elite.framework-ng.ui.core-base-crud.mjs +312 -0
  25. package/fesm2022/elite.framework-ng.ui.core-base-crud.mjs.map +1 -0
  26. package/fesm2022/elite.framework-ng.ui.core-breadcrumb.mjs +144 -0
  27. package/fesm2022/elite.framework-ng.ui.core-breadcrumb.mjs.map +1 -0
  28. package/fesm2022/elite.framework-ng.ui.core-checkbox.mjs +130 -0
  29. package/fesm2022/elite.framework-ng.ui.core-checkbox.mjs.map +1 -0
  30. package/fesm2022/elite.framework-ng.ui.core-color-picker.mjs +88 -0
  31. package/fesm2022/elite.framework-ng.ui.core-color-picker.mjs.map +1 -0
  32. package/fesm2022/elite.framework-ng.ui.core-column-settings-popover.mjs +184 -0
  33. package/fesm2022/elite.framework-ng.ui.core-column-settings-popover.mjs.map +1 -0
  34. package/fesm2022/elite.framework-ng.ui.core-condition-editor.mjs +782 -0
  35. package/fesm2022/elite.framework-ng.ui.core-condition-editor.mjs.map +1 -0
  36. package/fesm2022/elite.framework-ng.ui.core-custom-switch.mjs +122 -0
  37. package/fesm2022/elite.framework-ng.ui.core-custom-switch.mjs.map +1 -0
  38. package/fesm2022/elite.framework-ng.ui.core-datepicker.mjs +206 -0
  39. package/fesm2022/elite.framework-ng.ui.core-datepicker.mjs.map +1 -0
  40. package/fesm2022/elite.framework-ng.ui.core-deactivation-reason.mjs +142 -0
  41. package/fesm2022/elite.framework-ng.ui.core-deactivation-reason.mjs.map +1 -0
  42. package/fesm2022/elite.framework-ng.ui.core-form-button.mjs +62 -0
  43. package/fesm2022/elite.framework-ng.ui.core-form-button.mjs.map +1 -0
  44. package/fesm2022/elite.framework-ng.ui.core-form-field.mjs +155 -0
  45. package/fesm2022/elite.framework-ng.ui.core-form-field.mjs.map +1 -0
  46. package/fesm2022/elite.framework-ng.ui.core-form-template.mjs +37 -0
  47. package/fesm2022/elite.framework-ng.ui.core-form-template.mjs.map +1 -0
  48. package/fesm2022/elite.framework-ng.ui.core-formly-avatar-image.mjs +112 -0
  49. package/fesm2022/elite.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -0
  50. package/fesm2022/elite.framework-ng.ui.core-formly-avatar-label.mjs +90 -0
  51. package/fesm2022/elite.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -0
  52. package/fesm2022/elite.framework-ng.ui.core-formly-button-selector.mjs +179 -0
  53. package/fesm2022/elite.framework-ng.ui.core-formly-button-selector.mjs.map +1 -0
  54. package/fesm2022/elite.framework-ng.ui.core-formly-button.mjs +74 -0
  55. package/fesm2022/elite.framework-ng.ui.core-formly-button.mjs.map +1 -0
  56. package/fesm2022/elite.framework-ng.ui.core-formly-presets.mjs +201 -0
  57. package/fesm2022/elite.framework-ng.ui.core-formly-presets.mjs.map +1 -0
  58. package/fesm2022/elite.framework-ng.ui.core-formly-split-button.mjs +62 -0
  59. package/fesm2022/elite.framework-ng.ui.core-formly-split-button.mjs.map +1 -0
  60. package/fesm2022/elite.framework-ng.ui.core-formly-ui.mjs +416 -0
  61. package/fesm2022/elite.framework-ng.ui.core-formly-ui.mjs.map +1 -0
  62. package/fesm2022/elite.framework-ng.ui.core-formly-username-with-domain.mjs +88 -0
  63. package/fesm2022/elite.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -0
  64. package/fesm2022/elite.framework-ng.ui.core-generic-autocomplete.mjs +175 -0
  65. package/fesm2022/elite.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -0
  66. package/fesm2022/elite.framework-ng.ui.core-generic-button.mjs +145 -0
  67. package/fesm2022/elite.framework-ng.ui.core-generic-button.mjs.map +1 -0
  68. package/fesm2022/elite.framework-ng.ui.core-generic-card.mjs +219 -0
  69. package/fesm2022/elite.framework-ng.ui.core-generic-card.mjs.map +1 -0
  70. package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs +398 -0
  71. package/fesm2022/elite.framework-ng.ui.core-generic-crud-table.mjs.map +1 -0
  72. package/fesm2022/elite.framework-ng.ui.core-generic-errormessage.mjs +35 -0
  73. package/fesm2022/elite.framework-ng.ui.core-generic-errormessage.mjs.map +1 -0
  74. package/fesm2022/elite.framework-ng.ui.core-generic-formly-fields.mjs +65 -0
  75. package/fesm2022/elite.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -0
  76. package/fesm2022/elite.framework-ng.ui.core-generic-loadingspinner.mjs +35 -0
  77. package/fesm2022/elite.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -0
  78. package/fesm2022/elite.framework-ng.ui.core-generic-search.mjs +98 -0
  79. package/fesm2022/elite.framework-ng.ui.core-generic-search.mjs.map +1 -0
  80. package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs +441 -0
  81. package/fesm2022/elite.framework-ng.ui.core-generic-selector.mjs.map +1 -0
  82. package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs +226 -0
  83. package/fesm2022/elite.framework-ng.ui.core-generic-table.mjs.map +1 -0
  84. package/fesm2022/elite.framework-ng.ui.core-header-wrapper.mjs +31 -0
  85. package/fesm2022/elite.framework-ng.ui.core-header-wrapper.mjs.map +1 -0
  86. package/fesm2022/elite.framework-ng.ui.core-icon-picker.mjs +207 -0
  87. package/fesm2022/elite.framework-ng.ui.core-icon-picker.mjs.map +1 -0
  88. package/fesm2022/elite.framework-ng.ui.core-input-switch.mjs +106 -0
  89. package/fesm2022/elite.framework-ng.ui.core-input-switch.mjs.map +1 -0
  90. package/fesm2022/elite.framework-ng.ui.core-input-with-icon.mjs +67 -0
  91. package/fesm2022/elite.framework-ng.ui.core-input-with-icon.mjs.map +1 -0
  92. package/fesm2022/elite.framework-ng.ui.core-input.mjs +201 -0
  93. package/fesm2022/elite.framework-ng.ui.core-input.mjs.map +1 -0
  94. package/fesm2022/elite.framework-ng.ui.core-label-type.mjs +125 -0
  95. package/fesm2022/elite.framework-ng.ui.core-label-type.mjs.map +1 -0
  96. package/fesm2022/elite.framework-ng.ui.core-odata-query-builder.mjs +308 -0
  97. package/fesm2022/elite.framework-ng.ui.core-odata-query-builder.mjs.map +1 -0
  98. package/fesm2022/elite.framework-ng.ui.core-radio.mjs +118 -0
  99. package/fesm2022/elite.framework-ng.ui.core-radio.mjs.map +1 -0
  100. package/fesm2022/elite.framework-ng.ui.core-repeat.mjs +147 -0
  101. package/fesm2022/elite.framework-ng.ui.core-repeat.mjs.map +1 -0
  102. package/fesm2022/elite.framework-ng.ui.core-select.mjs +180 -0
  103. package/fesm2022/elite.framework-ng.ui.core-select.mjs.map +1 -0
  104. package/fesm2022/elite.framework-ng.ui.core-sidebar-cards.mjs +52 -0
  105. package/fesm2022/elite.framework-ng.ui.core-sidebar-cards.mjs.map +1 -0
  106. package/fesm2022/elite.framework-ng.ui.core-sidebar-toggles.mjs +53 -0
  107. package/fesm2022/elite.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -0
  108. package/fesm2022/elite.framework-ng.ui.core-tabs.mjs +57 -0
  109. package/fesm2022/elite.framework-ng.ui.core-tabs.mjs.map +1 -0
  110. package/fesm2022/elite.framework-ng.ui.core-tag-type.mjs +204 -0
  111. package/fesm2022/elite.framework-ng.ui.core-tag-type.mjs.map +1 -0
  112. package/fesm2022/elite.framework-ng.ui.core-text-editor.mjs +56 -0
  113. package/fesm2022/elite.framework-ng.ui.core-text-editor.mjs.map +1 -0
  114. package/fesm2022/elite.framework-ng.ui.core-textarea.mjs +95 -0
  115. package/fesm2022/elite.framework-ng.ui.core-textarea.mjs.map +1 -0
  116. package/fesm2022/elite.framework-ng.ui.core-ui-button.mjs +101 -0
  117. package/fesm2022/elite.framework-ng.ui.core-ui-button.mjs.map +1 -0
  118. package/fesm2022/elite.framework-ng.ui.core-wrappers.mjs +186 -0
  119. package/fesm2022/elite.framework-ng.ui.core-wrappers.mjs.map +1 -0
  120. package/fesm2022/elite.framework-ng.ui.core.mjs +18 -0
  121. package/fesm2022/elite.framework-ng.ui.core.mjs.map +1 -0
  122. package/form-button/README.md +3 -0
  123. package/form-button/index.d.ts +17 -0
  124. package/form-field/README.md +3 -0
  125. package/form-field/index.d.ts +30 -0
  126. package/form-template/README.md +3 -0
  127. package/form-template/index.d.ts +16 -0
  128. package/formly-avatar-image/README.md +3 -0
  129. package/formly-avatar-image/index.d.ts +18 -0
  130. package/formly-avatar-label/README.md +3 -0
  131. package/formly-avatar-label/index.d.ts +36 -0
  132. package/formly-button/README.md +3 -0
  133. package/formly-button/index.d.ts +20 -0
  134. package/formly-button-selector/README.md +3 -0
  135. package/formly-button-selector/index.d.ts +35 -0
  136. package/formly-presets/README.md +3 -0
  137. package/formly-presets/index.d.ts +37 -0
  138. package/formly-split-button/README.md +3 -0
  139. package/formly-split-button/index.d.ts +23 -0
  140. package/formly-ui/README.md +3 -0
  141. package/formly-ui/index.d.ts +42 -0
  142. package/formly-username-with-domain/README.md +3 -0
  143. package/formly-username-with-domain/index.d.ts +19 -0
  144. package/generic-autocomplete/README.md +3 -0
  145. package/generic-autocomplete/index.d.ts +41 -0
  146. package/generic-button/README.md +3 -0
  147. package/generic-button/index.d.ts +42 -0
  148. package/generic-card/README.md +3 -0
  149. package/generic-card/index.d.ts +93 -0
  150. package/generic-crud-table/README.md +3 -0
  151. package/generic-crud-table/index.d.ts +129 -0
  152. package/generic-errormessage/README.md +3 -0
  153. package/generic-errormessage/index.d.ts +17 -0
  154. package/generic-formly-fields/README.md +3 -0
  155. package/generic-formly-fields/index.d.ts +26 -0
  156. package/generic-loadingspinner/README.md +3 -0
  157. package/generic-loadingspinner/index.d.ts +16 -0
  158. package/generic-search/README.md +3 -0
  159. package/generic-search/index.d.ts +36 -0
  160. package/generic-selector/README.md +3 -0
  161. package/generic-selector/index.d.ts +73 -0
  162. package/generic-table/README.md +3 -0
  163. package/generic-table/index.d.ts +66 -0
  164. package/header-wrapper/README.md +3 -0
  165. package/header-wrapper/index.d.ts +15 -0
  166. package/icon-picker/README.md +3 -0
  167. package/icon-picker/index.d.ts +30 -0
  168. package/index.d.ts +8 -0
  169. package/input/README.md +3 -0
  170. package/input/index.d.ts +42 -0
  171. package/input-switch/README.md +3 -0
  172. package/input-switch/index.d.ts +16 -0
  173. package/input-with-icon/README.md +3 -0
  174. package/input-with-icon/index.d.ts +17 -0
  175. package/label-type/README.md +3 -0
  176. package/label-type/index.d.ts +26 -0
  177. package/odata-query-builder/README.md +3 -0
  178. package/odata-query-builder/index.d.ts +87 -0
  179. package/package.json +219 -0
  180. package/radio/README.md +3 -0
  181. package/radio/index.d.ts +38 -0
  182. package/repeat/README.md +3 -0
  183. package/repeat/index.d.ts +24 -0
  184. package/select/README.md +3 -0
  185. package/select/index.d.ts +42 -0
  186. package/sidebar-cards/README.md +3 -0
  187. package/sidebar-cards/index.d.ts +25 -0
  188. package/sidebar-toggles/README.md +3 -0
  189. package/sidebar-toggles/index.d.ts +25 -0
  190. package/tabs/README.md +3 -0
  191. package/tabs/index.d.ts +17 -0
  192. package/tag-type/README.md +3 -0
  193. package/tag-type/index.d.ts +34 -0
  194. package/text-editor/README.md +3 -0
  195. package/text-editor/index.d.ts +16 -0
  196. package/textarea/README.md +3 -0
  197. package/textarea/index.d.ts +36 -0
  198. package/ui-button/README.md +3 -0
  199. package/ui-button/index.d.ts +33 -0
  200. package/wrappers/README.md +3 -0
  201. 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