@es.framework/ng.ui.core 2.0.64 → 2.0.66

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 (176) hide show
  1. package/README.md +3 -3
  2. package/attachments/README.md +3 -3
  3. package/base-crud/README.md +3 -3
  4. package/breadcrumb/README.md +3 -3
  5. package/checkbox/README.md +3 -3
  6. package/collapsible/README.md +3 -3
  7. package/color-picker/README.md +3 -3
  8. package/column-settings-popover/README.md +3 -3
  9. package/custom-switch/README.md +3 -3
  10. package/datepicker/README.md +3 -3
  11. package/deactivation-reason/README.md +3 -3
  12. package/excel-import/README.md +3 -3
  13. package/fesm2022/es.framework-ng.ui.core-attachments.mjs +2 -2
  14. package/fesm2022/es.framework-ng.ui.core-attachments.mjs.map +1 -1
  15. package/fesm2022/es.framework-ng.ui.core-base-crud.mjs.map +1 -1
  16. package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs +108 -108
  17. package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs.map +1 -1
  18. package/fesm2022/es.framework-ng.ui.core-checkbox.mjs +54 -54
  19. package/fesm2022/es.framework-ng.ui.core-checkbox.mjs.map +1 -1
  20. package/fesm2022/es.framework-ng.ui.core-collapsible.mjs.map +1 -1
  21. package/fesm2022/es.framework-ng.ui.core-color-picker.mjs +44 -44
  22. package/fesm2022/es.framework-ng.ui.core-color-picker.mjs.map +1 -1
  23. package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs +2 -2
  24. package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs.map +1 -1
  25. package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs.map +1 -1
  26. package/fesm2022/es.framework-ng.ui.core-datepicker.mjs +178 -178
  27. package/fesm2022/es.framework-ng.ui.core-datepicker.mjs.map +1 -1
  28. package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs +46 -46
  29. package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs.map +1 -1
  30. package/fesm2022/es.framework-ng.ui.core-excel-import.mjs.map +1 -1
  31. package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs +624 -624
  32. package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs.map +1 -1
  33. package/fesm2022/es.framework-ng.ui.core-form-button.mjs.map +1 -1
  34. package/fesm2022/es.framework-ng.ui.core-form-field.mjs +80 -80
  35. package/fesm2022/es.framework-ng.ui.core-form-field.mjs.map +1 -1
  36. package/fesm2022/es.framework-ng.ui.core-form-template.mjs.map +1 -1
  37. package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -1
  38. package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs +44 -44
  39. package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -1
  40. package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs +92 -92
  41. package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs.map +1 -1
  42. package/fesm2022/es.framework-ng.ui.core-formly-button.mjs +24 -24
  43. package/fesm2022/es.framework-ng.ui.core-formly-button.mjs.map +1 -1
  44. package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs.map +1 -1
  45. package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs +366 -366
  46. package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs.map +1 -1
  47. package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs +16 -16
  48. package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs.map +1 -1
  49. package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs.map +1 -1
  50. package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs.map +1 -1
  51. package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs +16 -16
  52. package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -1
  53. package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs.map +1 -1
  54. package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs +38 -38
  55. package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -1
  56. package/fesm2022/es.framework-ng.ui.core-generic-button.mjs +8 -2
  57. package/fesm2022/es.framework-ng.ui.core-generic-button.mjs.map +1 -1
  58. package/fesm2022/es.framework-ng.ui.core-generic-card.mjs +2 -2
  59. package/fesm2022/es.framework-ng.ui.core-generic-card.mjs.map +1 -1
  60. package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs +14 -3
  61. package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs.map +1 -1
  62. package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs +2 -2
  63. package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs.map +1 -1
  64. package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs +2 -2
  65. package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs.map +1 -1
  66. package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs +2 -2
  67. package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -1
  68. package/fesm2022/es.framework-ng.ui.core-generic-listbox.mjs +64 -64
  69. package/fesm2022/es.framework-ng.ui.core-generic-listbox.mjs.map +1 -1
  70. package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs +2 -2
  71. package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -1
  72. package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs +68 -68
  73. package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs.map +1 -1
  74. package/fesm2022/es.framework-ng.ui.core-generic-report.mjs +19 -3
  75. package/fesm2022/es.framework-ng.ui.core-generic-report.mjs.map +1 -1
  76. package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs +442 -442
  77. package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs.map +1 -1
  78. package/fesm2022/es.framework-ng.ui.core-generic-search.mjs +2 -2
  79. package/fesm2022/es.framework-ng.ui.core-generic-search.mjs.map +1 -1
  80. package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs.map +1 -1
  81. package/fesm2022/es.framework-ng.ui.core-generic-table.mjs +16 -8
  82. package/fesm2022/es.framework-ng.ui.core-generic-table.mjs.map +1 -1
  83. package/fesm2022/es.framework-ng.ui.core-generic-view.mjs +7 -4
  84. package/fesm2022/es.framework-ng.ui.core-generic-view.mjs.map +1 -1
  85. package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs +2 -2
  86. package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs.map +1 -1
  87. package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs +106 -106
  88. package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs.map +1 -1
  89. package/fesm2022/es.framework-ng.ui.core-input-switch.mjs +58 -58
  90. package/fesm2022/es.framework-ng.ui.core-input-switch.mjs.map +1 -1
  91. package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs +26 -26
  92. package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs.map +1 -1
  93. package/fesm2022/es.framework-ng.ui.core-input.mjs +64 -64
  94. package/fesm2022/es.framework-ng.ui.core-input.mjs.map +1 -1
  95. package/fesm2022/es.framework-ng.ui.core-label-type.mjs +16 -16
  96. package/fesm2022/es.framework-ng.ui.core-label-type.mjs.map +1 -1
  97. package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs +22 -22
  98. package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs.map +1 -1
  99. package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs +2 -2
  100. package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs.map +1 -1
  101. package/fesm2022/es.framework-ng.ui.core-query-type.mjs +14 -14
  102. package/fesm2022/es.framework-ng.ui.core-query-type.mjs.map +1 -1
  103. package/fesm2022/es.framework-ng.ui.core-radio.mjs +30 -30
  104. package/fesm2022/es.framework-ng.ui.core-radio.mjs.map +1 -1
  105. package/fesm2022/es.framework-ng.ui.core-repeat.mjs +354 -354
  106. package/fesm2022/es.framework-ng.ui.core-repeat.mjs.map +1 -1
  107. package/fesm2022/es.framework-ng.ui.core-select.mjs +84 -84
  108. package/fesm2022/es.framework-ng.ui.core-select.mjs.map +1 -1
  109. package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs +2 -2
  110. package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs.map +1 -1
  111. package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs +2 -2
  112. package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -1
  113. package/fesm2022/es.framework-ng.ui.core-tabs.mjs +14 -14
  114. package/fesm2022/es.framework-ng.ui.core-tabs.mjs.map +1 -1
  115. package/fesm2022/es.framework-ng.ui.core-tag-type.mjs +80 -80
  116. package/fesm2022/es.framework-ng.ui.core-tag-type.mjs.map +1 -1
  117. package/fesm2022/es.framework-ng.ui.core-text-editor.mjs.map +1 -1
  118. package/fesm2022/es.framework-ng.ui.core-textarea.mjs.map +1 -1
  119. package/fesm2022/es.framework-ng.ui.core-wrappers.mjs +118 -118
  120. package/fesm2022/es.framework-ng.ui.core-wrappers.mjs.map +1 -1
  121. package/fesm2022/es.framework-ng.ui.core.mjs +2 -2
  122. package/fesm2022/es.framework-ng.ui.core.mjs.map +1 -1
  123. package/filter-templates/README.md +3 -3
  124. package/form-button/README.md +3 -3
  125. package/form-field/README.md +3 -3
  126. package/form-template/README.md +3 -3
  127. package/formly-avatar-image/README.md +3 -3
  128. package/formly-avatar-label/README.md +3 -3
  129. package/formly-button/README.md +3 -3
  130. package/formly-button-selector/README.md +3 -3
  131. package/formly-presets/README.md +3 -3
  132. package/formly-prime-icon-picker/README.md +3 -3
  133. package/formly-split-button/README.md +3 -3
  134. package/formly-ui/README.md +3 -3
  135. package/formly-ui-all/README.md +3 -3
  136. package/formly-username-with-domain/README.md +3 -3
  137. package/generic-assets/README.md +3 -3
  138. package/generic-autocomplete/README.md +3 -3
  139. package/generic-button/README.md +3 -3
  140. package/generic-card/README.md +3 -3
  141. package/generic-crud-table/README.md +3 -3
  142. package/generic-dialog/README.md +3 -3
  143. package/generic-errormessage/README.md +3 -3
  144. package/generic-formly-fields/README.md +3 -3
  145. package/generic-loadingspinner/README.md +3 -3
  146. package/generic-report/README.md +3 -3
  147. package/generic-search/README.md +3 -3
  148. package/generic-search-advanced/README.md +3 -3
  149. package/generic-selector/README.md +3 -3
  150. package/generic-table/README.md +3 -3
  151. package/generic-view/README.md +3 -3
  152. package/header-wrapper/README.md +3 -3
  153. package/icon-picker/README.md +3 -3
  154. package/input/README.md +3 -3
  155. package/input-switch/README.md +3 -3
  156. package/input-with-icon/README.md +3 -3
  157. package/label-type/README.md +3 -3
  158. package/loading-skeletons/README.md +3 -3
  159. package/odata-query-builder/README.md +3 -3
  160. package/package.json +1 -1
  161. package/query-type/README.md +3 -3
  162. package/radio/README.md +3 -3
  163. package/repeat/README.md +3 -3
  164. package/select/README.md +3 -3
  165. package/sidebar-cards/README.md +3 -3
  166. package/sidebar-toggles/README.md +3 -3
  167. package/styles.css +0 -0
  168. package/tabs/README.md +3 -3
  169. package/tag-type/README.md +3 -3
  170. package/text-editor/README.md +3 -3
  171. package/textarea/README.md +3 -3
  172. package/types/es.framework-ng.ui.core-generic-button.d.ts +3 -1
  173. package/types/es.framework-ng.ui.core-generic-crud-table.d.ts +1 -0
  174. package/types/es.framework-ng.ui.core-generic-report.d.ts +1 -0
  175. package/types/es.framework-ng.ui.core-generic-table.d.ts +1 -1
  176. package/wrappers/README.md +3 -3
@@ -29,6 +29,8 @@ class GenericButton {
29
29
  type = 'button';
30
30
  icon = '';
31
31
  label = '';
32
+ tooltip;
33
+ tooltipPosition = 'top';
32
34
  variant = 'raised';
33
35
  severity = 'primary';
34
36
  size = 'small';
@@ -105,11 +107,11 @@ class GenericButton {
105
107
  this.itemClick.emit(evt);
106
108
  }
107
109
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
108
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericButton, isStandalone: true, selector: "lib-generic-button", inputs: { model: "model", type: "type", icon: "icon", label: "label", variant: "variant", severity: "severity", size: "size", iconPosition: "iconPosition", disabled: "disabled", loading: "loading", ariaLabel: "ariaLabel", extraClasses: "extraClasses", permission: "permission" }, outputs: { clicked: "clicked", itemClick: "itemClick" }, ngImport: i0, template: "\n\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"top\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i2.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
110
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericButton, isStandalone: true, selector: "lib-generic-button", inputs: { model: "model", type: "type", icon: "icon", label: "label", tooltip: "tooltip", tooltipPosition: "tooltipPosition", variant: "variant", severity: "severity", size: "size", iconPosition: "iconPosition", disabled: "disabled", loading: "loading", ariaLabel: "ariaLabel", extraClasses: "extraClasses", permission: "permission" }, outputs: { clicked: "clicked", itemClick: "itemClick" }, ngImport: i0, template: "\r\n\r\n<ng-container *hasPermission=\"permission ? [permission] : []\">\r\n @if (model && model?.length) {\r\n <!-- Split Button -->\r\n <!-- [outlined]=\"outlined\" -->\r\n <p-splitButton\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n [label]=\"label | translate\"\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [model]=\"model || []\"\r\n [disabled]=\"disabled || loading\"\r\n [severity]=\"severity || 'primary'\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n (onClick)=\"onClick()\"\r\n (onItemClick)=\"onItemClick($event)\"\r\n >\r\n </p-splitButton>\r\n } @else {\r\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\r\n <!-- [size]=\"size || 'small'\" -->\r\n <button\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n pButton\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [label]=\"label | translate\"\r\n class=\"hidden sm:inline\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [severity]=\"severity || 'primary'\"\r\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\r\n [disabled]=\"disabled || loading\"\r\n (click)=\"onClick()\"\r\n >\r\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\r\n @if (!label && !icon && !loading) {\r\n <ng-content></ng-content>\r\n }\r\n </button>\r\n }\r\n\r\n</ng-container>\r\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i2.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
109
111
  }
110
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButton, decorators: [{
111
113
  type: Component,
112
- args: [{ selector: 'lib-generic-button', standalone: true, imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "\n\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"top\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"] }]
114
+ args: [{ selector: 'lib-generic-button', standalone: true, imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n\r\n<ng-container *hasPermission=\"permission ? [permission] : []\">\r\n @if (model && model?.length) {\r\n <!-- Split Button -->\r\n <!-- [outlined]=\"outlined\" -->\r\n <p-splitButton\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n [label]=\"label | translate\"\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [model]=\"model || []\"\r\n [disabled]=\"disabled || loading\"\r\n [severity]=\"severity || 'primary'\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n (onClick)=\"onClick()\"\r\n (onItemClick)=\"onItemClick($event)\"\r\n >\r\n </p-splitButton>\r\n } @else {\r\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\r\n <!-- [size]=\"size || 'small'\" -->\r\n <button\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n pButton\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [label]=\"label | translate\"\r\n class=\"hidden sm:inline\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [severity]=\"severity || 'primary'\"\r\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\r\n [disabled]=\"disabled || loading\"\r\n (click)=\"onClick()\"\r\n >\r\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\r\n @if (!label && !icon && !loading) {\r\n <ng-content></ng-content>\r\n }\r\n </button>\r\n }\r\n\r\n</ng-container>\r\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"] }]
113
115
  }], propDecorators: { model: [{
114
116
  type: Input
115
117
  }], type: [{
@@ -118,6 +120,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
118
120
  type: Input
119
121
  }], label: [{
120
122
  type: Input
123
+ }], tooltip: [{
124
+ type: Input
125
+ }], tooltipPosition: [{
126
+ type: Input
121
127
  }], variant: [{
122
128
  type: Input
123
129
  }], severity: [{
@@ -1 +1 @@
1
- {"version":3,"file":"es.framework-ng.ui.core-generic-button.mjs","sources":["../../../../libs/ng.ui.core/generic-button/src/lib/generic-button-module.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.html","../../../../libs/ng.ui.core/generic-button/src/es.framework-ng.ui.core-generic-button.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericButtonModule {}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { MenuItem } from 'primeng/api';\nimport { HasPermissionDirective } from '@es.framework/ng.core/directives';\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\nimport { ButtonSeverity, ButtonSize, ButtonVariant, IconPosition } from '@es.framework/ng.core/models';\nimport { TooltipModule } from \"primeng/tooltip\";\n\n@Component({\n selector: 'lib-generic-button',\n standalone: true,\n imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './generic-button.html',\n styleUrls: ['./generic-button.css']\n})\nexport class GenericButton {\n\n // permissionChecker = inject(PermissionCheckerService);\n\n // لو وُجدت هذه المصفوفة، نُستخدم splitButton\n @Input() model?: MenuItem[];\n\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() icon = '';\n @Input() label = '';\n @Input() variant: ButtonVariant = 'raised';\n @Input() severity: ButtonSeverity = 'primary';\n @Input() size: ButtonSize = 'small';\n @Input() iconPosition: IconPosition = 'left';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() ariaLabel?: string;\n @Input() extraClasses = ''; // لأي Tailwind إضافي\n @Input() permission?: string;\n @Output() clicked = new EventEmitter<void>();\n @Output() itemClick = new EventEmitter<any>();\n\n\n // خريطة أحجام\n private sizeMap: Record<ButtonSize,string> = {\n small: 'text-sm',\n // normal: 'px-4 py-2 text-base',\n large: 'text-lg',\n };\n\n // خريطة ألوان للـ raised و rounded\n private colorMap: Record<ButtonSeverity,string> = {\n primary: 'bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 text-white',\n secondary: 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500 text-white',\n success: 'bg-green-600 hover:bg-green-700 focus:ring-green-500 text-white',\n info: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n warn: 'bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-400 text-white',\n danger: 'bg-red-600 hover:bg-red-700 focus:ring-red-500 text-white',\n help: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n contrast: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n };\n\n // خريطة حدوده للـ outlined\n private outlinedMap: Record<ButtonSeverity,string> = {\n primary: 'border border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',\n secondary: 'border border-gray-600 text-gray-600 hover:bg-gray-50 focus:ring-gray-500',\n success: 'border border-green-600 text-green-600 hover:bg-green-50 focus:ring-green-500',\n info: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n help: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n contrast: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n warn: 'border border-yellow-500 text-yellow-500 hover:bg-yellow-50 focus:ring-yellow-400',\n danger: 'border border-red-600 text-red-600 hover:bg-red-50 focus:ring-red-500',\n };\n\n get twClasses(): string {\n const base = [\n // 'inline-flex items-center justify-center font-medium',\n // 'focus:outline-none focus:ring-2 focus:ring-offset-2 transition',\n this.sizeMap[this.size]\n ];\n // // variant-specific\n // if (this.variant === 'outlined') {\n // base.push(this.outlinedMap[this.severity]);\n // } else {\n // base.push(this.colorMap[this.severity]);\n // }\n // if (this.variant === 'text') {\n // base.push('bg-transparent hover:bg-gray-100 focus:ring-gray-200 text-gray-700');\n // }\n // if (this.variant === 'rounded') {\n // base.push('rounded-full');\n // } else {\n // base.push('rounded-md');\n // }\n // if (this.disabled || this.loading) {\n // base.push('opacity-50 cursor-not-allowed');\n // }\n // if (this.extraClasses) {\n // base.push(this.extraClasses);\n // }\n return base.join(' ');\n }\n\n onClick() {\n if (!this.disabled && !this.loading) {\n this.clicked.emit();\n }\n }\n\n onItemClick(evt: any) {\n this.itemClick.emit(evt);\n }\n\n\n}\n","\n\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- حالة الزرّ العادي -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"top\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n <!-- محتوى مخصّص -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"es.framework-ng.ui.core-generic-button.mjs","sources":["../../../../libs/ng.ui.core/generic-button/src/lib/generic-button-module.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.html","../../../../libs/ng.ui.core/generic-button/src/es.framework-ng.ui.core-generic-button.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n})\r\nexport class GenericButtonModule {}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SplitButtonModule } from 'primeng/splitbutton';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { HasPermissionDirective } from '@es.framework/ng.core/directives';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { ButtonSeverity, ButtonSize, ButtonVariant, IconPosition } from '@es.framework/ng.core/models';\r\nimport { TooltipModule } from \"primeng/tooltip\";\r\n\r\n@Component({\r\n selector: 'lib-generic-button',\r\n standalone: true,\r\n imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './generic-button.html',\r\n styleUrls: ['./generic-button.css']\r\n})\r\nexport class GenericButton {\r\n\r\n // permissionChecker = inject(PermissionCheckerService);\r\n\r\n // لو وُجدت هذه المصفوفة، نُستخدم splitButton\r\n @Input() model?: MenuItem[];\r\n\r\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n @Input() icon = '';\r\n @Input() label = '';\r\n @Input() tooltip?: string;\r\n @Input() tooltipPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\r\n @Input() variant: ButtonVariant = 'raised';\r\n @Input() severity: ButtonSeverity = 'primary';\r\n @Input() size: ButtonSize = 'small';\r\n @Input() iconPosition: IconPosition = 'left';\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() ariaLabel?: string;\r\n @Input() extraClasses = ''; // لأي Tailwind إضافي\r\n @Input() permission?: string;\r\n @Output() clicked = new EventEmitter<void>();\r\n @Output() itemClick = new EventEmitter<any>();\r\n\r\n\r\n // خريطة أحجام\r\n private sizeMap: Record<ButtonSize,string> = {\r\n small: 'text-sm',\r\n // normal: 'px-4 py-2 text-base',\r\n large: 'text-lg',\r\n };\r\n\r\n // خريطة ألوان للـ raised و rounded\r\n private colorMap: Record<ButtonSeverity,string> = {\r\n primary: 'bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 text-white',\r\n secondary: 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500 text-white',\r\n success: 'bg-green-600 hover:bg-green-700 focus:ring-green-500 text-white',\r\n info: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\r\n warn: 'bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-400 text-white',\r\n danger: 'bg-red-600 hover:bg-red-700 focus:ring-red-500 text-white',\r\n help: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\r\n contrast: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\r\n };\r\n\r\n // خريطة حدوده للـ outlined\r\n private outlinedMap: Record<ButtonSeverity,string> = {\r\n primary: 'border border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',\r\n secondary: 'border border-gray-600 text-gray-600 hover:bg-gray-50 focus:ring-gray-500',\r\n success: 'border border-green-600 text-green-600 hover:bg-green-50 focus:ring-green-500',\r\n info: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\r\n help: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\r\n contrast: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\r\n warn: 'border border-yellow-500 text-yellow-500 hover:bg-yellow-50 focus:ring-yellow-400',\r\n danger: 'border border-red-600 text-red-600 hover:bg-red-50 focus:ring-red-500',\r\n };\r\n\r\n get twClasses(): string {\r\n const base = [\r\n // 'inline-flex items-center justify-center font-medium',\r\n // 'focus:outline-none focus:ring-2 focus:ring-offset-2 transition',\r\n this.sizeMap[this.size]\r\n ];\r\n // // variant-specific\r\n // if (this.variant === 'outlined') {\r\n // base.push(this.outlinedMap[this.severity]);\r\n // } else {\r\n // base.push(this.colorMap[this.severity]);\r\n // }\r\n // if (this.variant === 'text') {\r\n // base.push('bg-transparent hover:bg-gray-100 focus:ring-gray-200 text-gray-700');\r\n // }\r\n // if (this.variant === 'rounded') {\r\n // base.push('rounded-full');\r\n // } else {\r\n // base.push('rounded-md');\r\n // }\r\n // if (this.disabled || this.loading) {\r\n // base.push('opacity-50 cursor-not-allowed');\r\n // }\r\n // if (this.extraClasses) {\r\n // base.push(this.extraClasses);\r\n // }\r\n return base.join(' ');\r\n }\r\n\r\n onClick() {\r\n if (!this.disabled && !this.loading) {\r\n this.clicked.emit();\r\n }\r\n }\r\n\r\n onItemClick(evt: any) {\r\n this.itemClick.emit(evt);\r\n }\r\n\r\n\r\n}\r\n","\r\n\r\n<ng-container *hasPermission=\"permission ? [permission] : []\">\r\n @if (model && model?.length) {\r\n <!-- Split Button -->\r\n <!-- [outlined]=\"outlined\" -->\r\n <p-splitButton\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n [label]=\"label | translate\"\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [model]=\"model || []\"\r\n [disabled]=\"disabled || loading\"\r\n [severity]=\"severity || 'primary'\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n (onClick)=\"onClick()\"\r\n (onItemClick)=\"onItemClick($event)\"\r\n >\r\n </p-splitButton>\r\n } @else {\r\n <!-- حالة الزرّ العادي -->\r\n <!-- [size]=\"size || 'small'\" -->\r\n <button\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n pButton\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [label]=\"label | translate\"\r\n class=\"hidden sm:inline\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [severity]=\"severity || 'primary'\"\r\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\r\n [disabled]=\"disabled || loading\"\r\n (click)=\"onClick()\"\r\n >\r\n <!-- محتوى مخصّص -->\r\n @if (!label && !icon && !loading) {\r\n <ng-content></ng-content>\r\n }\r\n </button>\r\n }\r\n\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -169,7 +169,7 @@ class GenericCard {
169
169
  return item.id || index;
170
170
  }
171
171
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
172
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCard, isStandalone: true, selector: "lib-generic-card", inputs: { data: "data", columns: "columns", loading: "loading", actions: "actions", actionsMode: "actionsMode", showOperations: "showOperations", rowSelectable: "rowSelectable", showRowSelectionCheckbox: "showRowSelectionCheckbox", paginator: "paginator", rowClassFn: "rowClassFn", selection: "selection" }, outputs: { action: "action", selectionChange: "selectionChange", rowSelect: "rowSelect" }, ngImport: i0, template: "\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\n @if (loading) {\n <div class=\"col-span-full text-center py-8\">\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\n </div>\n }\n\n @if (!loading && data.length === 0) {\n <div class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n }\n\n @for (item of data; track trackById($index, item)) {\n <div\n [ngClass]=\"rowClassFn(item)\"\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\n (click)=\"handleCardClick(item)\"\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\n @if (showRowSelectionCheckbox) {\n <div class=\"p-4\">\n <input type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n (change)=\"toggleItemSelection(item, $event)\"\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\n </div>\n }\n <div class=\"p-6 flex-grow\">\n <div class=\"flex flex-wrap -mx-2\">\n @for (col of columns; track col) {\n @if (col.isCardVisible) {\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\n @if (col.clickable) {\n <span class=\"cursor-pointer hover:underline text-blue-600\"\n (click)=\"handleCellClick(col, item, $event)\"\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n } @else {\n <span>\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n @if (showOperations && actions.length > 0) {\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n @if (actionsMode === 'buttons') {\n @for (act of actions; track act) {\n <button\n pButton\n type=\"button\"\n [icon]=\"act.icon || ''\"\n [title]=\"act.label?? '' | translate\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\n [ngClass]=\"act.styleClass\"\n (click)=\"action.emit({ name: act.name, row: item })\"\n ></button>\n }\n } @else {\n <p-menu\n #cardMenu\n [model]=\"getMenuItems(item)\"\n popup=\"true\"\n appendTo=\"body\">\n </p-menu>\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-ellipsis-v\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\n (click)=\"cardMenu.toggle($event)\">\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i3.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
172
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCard, isStandalone: true, selector: "lib-generic-card", inputs: { data: "data", columns: "columns", loading: "loading", actions: "actions", actionsMode: "actionsMode", showOperations: "showOperations", rowSelectable: "rowSelectable", showRowSelectionCheckbox: "showRowSelectionCheckbox", paginator: "paginator", rowClassFn: "rowClassFn", selection: "selection" }, outputs: { action: "action", selectionChange: "selectionChange", rowSelect: "rowSelect" }, ngImport: i0, template: "\r\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\r\n @if (loading) {\r\n <div class=\"col-span-full text-center py-8\">\r\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\r\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\r\n </div>\r\n }\r\n\r\n @if (!loading && data.length === 0) {\r\n <div class=\"col-span-full text-center py-8 text-gray-500\">\r\n No records found.\r\n </div>\r\n }\r\n\r\n @for (item of data; track trackById($index, item)) {\r\n <div\r\n [ngClass]=\"rowClassFn(item)\"\r\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\r\n (click)=\"handleCardClick(item)\"\r\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\r\n @if (showRowSelectionCheckbox) {\r\n <div class=\"p-4\">\r\n <input type=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n (change)=\"toggleItemSelection(item, $event)\"\r\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\r\n </div>\r\n }\r\n <div class=\"p-6 flex-grow\">\r\n <div class=\"flex flex-wrap -mx-2\">\r\n @for (col of columns; track col) {\r\n @if (col.isCardVisible) {\r\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\r\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\r\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\r\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\r\n @if (col.clickable) {\r\n <span class=\"cursor-pointer hover:underline text-blue-600\"\r\n (click)=\"handleCellClick(col, item, $event)\"\r\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\r\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n } @else {\r\n <span>\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n @if (showOperations && actions.length > 0) {\r\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\r\n @if (actionsMode === 'buttons') {\r\n @for (act of actions; track act) {\r\n <button\r\n pButton\r\n type=\"button\"\r\n [icon]=\"act.icon || ''\"\r\n [title]=\"act.label?? '' | translate\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\r\n [ngClass]=\"act.styleClass\"\r\n (click)=\"action.emit({ name: act.name, row: item })\"\r\n ></button>\r\n }\r\n } @else {\r\n <p-menu\r\n #cardMenu\r\n [model]=\"getMenuItems(item)\"\r\n popup=\"true\"\r\n appendTo=\"body\">\r\n </p-menu>\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\r\n (click)=\"cardMenu.toggle($event)\">\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i3.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
173
173
  }
174
174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCard, decorators: [{
175
175
  type: Component,
@@ -179,7 +179,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
179
179
  MenuModule,
180
180
  TranslatePipe,
181
181
  FormsModule,
182
- ], template: "\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\n @if (loading) {\n <div class=\"col-span-full text-center py-8\">\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\n </div>\n }\n\n @if (!loading && data.length === 0) {\n <div class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n }\n\n @for (item of data; track trackById($index, item)) {\n <div\n [ngClass]=\"rowClassFn(item)\"\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\n (click)=\"handleCardClick(item)\"\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\n @if (showRowSelectionCheckbox) {\n <div class=\"p-4\">\n <input type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n (change)=\"toggleItemSelection(item, $event)\"\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\n </div>\n }\n <div class=\"p-6 flex-grow\">\n <div class=\"flex flex-wrap -mx-2\">\n @for (col of columns; track col) {\n @if (col.isCardVisible) {\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\n @if (col.clickable) {\n <span class=\"cursor-pointer hover:underline text-blue-600\"\n (click)=\"handleCellClick(col, item, $event)\"\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n } @else {\n <span>\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n @if (showOperations && actions.length > 0) {\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n @if (actionsMode === 'buttons') {\n @for (act of actions; track act) {\n <button\n pButton\n type=\"button\"\n [icon]=\"act.icon || ''\"\n [title]=\"act.label?? '' | translate\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\n [ngClass]=\"act.styleClass\"\n (click)=\"action.emit({ name: act.name, row: item })\"\n ></button>\n }\n } @else {\n <p-menu\n #cardMenu\n [model]=\"getMenuItems(item)\"\n popup=\"true\"\n appendTo=\"body\">\n </p-menu>\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-ellipsis-v\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\n (click)=\"cardMenu.toggle($event)\">\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"] }]
182
+ ], template: "\r\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\r\n @if (loading) {\r\n <div class=\"col-span-full text-center py-8\">\r\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\r\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\r\n </div>\r\n }\r\n\r\n @if (!loading && data.length === 0) {\r\n <div class=\"col-span-full text-center py-8 text-gray-500\">\r\n No records found.\r\n </div>\r\n }\r\n\r\n @for (item of data; track trackById($index, item)) {\r\n <div\r\n [ngClass]=\"rowClassFn(item)\"\r\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\r\n (click)=\"handleCardClick(item)\"\r\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\r\n @if (showRowSelectionCheckbox) {\r\n <div class=\"p-4\">\r\n <input type=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n (change)=\"toggleItemSelection(item, $event)\"\r\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\r\n </div>\r\n }\r\n <div class=\"p-6 flex-grow\">\r\n <div class=\"flex flex-wrap -mx-2\">\r\n @for (col of columns; track col) {\r\n @if (col.isCardVisible) {\r\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\r\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\r\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\r\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\r\n @if (col.clickable) {\r\n <span class=\"cursor-pointer hover:underline text-blue-600\"\r\n (click)=\"handleCellClick(col, item, $event)\"\r\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\r\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n } @else {\r\n <span>\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n @if (showOperations && actions.length > 0) {\r\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\r\n @if (actionsMode === 'buttons') {\r\n @for (act of actions; track act) {\r\n <button\r\n pButton\r\n type=\"button\"\r\n [icon]=\"act.icon || ''\"\r\n [title]=\"act.label?? '' | translate\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\r\n [ngClass]=\"act.styleClass\"\r\n (click)=\"action.emit({ name: act.name, row: item })\"\r\n ></button>\r\n }\r\n } @else {\r\n <p-menu\r\n #cardMenu\r\n [model]=\"getMenuItems(item)\"\r\n popup=\"true\"\r\n appendTo=\"body\">\r\n </p-menu>\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\r\n (click)=\"cardMenu.toggle($event)\">\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"] }]
183
183
  }], propDecorators: { data: [{
184
184
  type: Input
185
185
  }], columns: [{
@@ -1 +1 @@
1
- {"version":3,"file":"es.framework-ng.ui.core-generic-card.mjs","sources":["../../../../libs/ng.ui.core/generic-card/src/lib/generic-card-module.ts","../../../../libs/ng.ui.core/generic-card/src/lib/generic-card.ts","../../../../libs/ng.ui.core/generic-card/src/lib/generic-card.html","../../../../libs/ng.ui.core/generic-card/src/es.framework-ng.ui.core-generic-card.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericCardModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActionDef } from '@es.framework/ng.core/models';\nimport { ColumnDef } from '@es.framework/ng.core/models';\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\nimport { MenuItem } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { MenuModule } from 'primeng/menu';\n\n@Component({\n selector: 'lib-generic-card',\n imports: [\n CommonModule,\n ButtonModule,\n MenuModule,\n TranslatePipe,\n FormsModule,\n ],\n templateUrl: './generic-card.html',\n styleUrl: './generic-card.css'\n})\nexport class GenericCard <T extends { [key: string]: any }> {\n\n @Input() data: T[] = [];\n @Input() columns: ColumnDef<T>[] = [];\n @Input() loading = false;\n @Input() actions: ActionDef<T>[] = [];\n @Input() actionsMode: 'buttons' | 'menu' = 'buttons';\n @Input() showOperations = true;\n\n // Added inputs for selection mirroring the table component\n @Input() rowSelectable = false;\n @Input() showRowSelectionCheckbox = false;\n @Input() paginator = false; // Indicates if pagination is externally managed\n\n // Row class function, mirroring the table component\n @Input() rowClassFn: (rowData: any) => string = () => '';\n\n @Output() action = new EventEmitter<{ name: string; row: T }>();\n\n\n _selection: T | T[] | null = null;\n @Input()\n get selection(): T | T[] | null {\n return this._selection;\n }\n set selection(val: T | T[] | null) {\n this._selection = val;\n // No emit here, emit only from actual user interaction methods\n }\n\n @Output() selectionChange = new EventEmitter<T | T[] | null>();\n @Output() rowSelect = new EventEmitter<T>();\n // Note: onLazyLoad is not directly applicable as the card component doesn't have internal pagination UI.\n // The parent component should manage data slicing and pass the correct 'data' array.\n\n\n\n /**\n * Generates menu items for the action menu.\n * @param row The data row for which to generate actions.\n * @returns An array of PrimeNG MenuItem objects.\n */\n getMenuItems(row: T): MenuItem[] {\n return this.actions.map(act => ({\n label: act.label,\n icon: act.icon,\n command: () => this.action.emit({ name: act.name, row }),\n styleClass: act.styleClass\n }));\n }\n\n /**\n * Handles click events on a clickable cell.\n * @param col The ColumnDef of the clicked column.\n * @param rowData The data row of the clicked cell.\n * @param event The mouse event.\n */\n handleCellClick(col: ColumnDef<any>, rowData: any, event: MouseEvent): void {\n event.stopPropagation(); // Prevent card selection if applicable\n if (col.clickAction) {\n col.clickAction(rowData, event);\n }\n }\n\n /**\n * Handles mouse enter events on a hoverable cell.\n * @param col The ColumnDef of the hovered column.\n * @param rowData The data row of the hovered cell.\n * @param event The mouse event.\n */\n onCellHover(col: ColumnDef<T>, row: T, event: MouseEvent): void {\n event.stopPropagation();\n col.onCellMouseEnter?.(row, event);\n }\n\n /**\n * Handles mouse leave events on a hoverable cell.\n * @param col The ColumnDef of the hovered column.\n * @param rowData The data row of the hovered cell.\n * @param event The mouse event.\n */\n onCellLeave(col: ColumnDef<T>, row: T, event: MouseEvent): void {\n event.stopPropagation();\n col.onCellMouseLeave?.(row, event);\n }\n\n /**\n * Handles click on the entire card for row selection (if not using checkboxes).\n * @param item The data item associated with the clicked card.\n */\n handleCardClick(item: T): void {\n if (this.rowSelectable && !this.showRowSelectionCheckbox) {\n // Single selection mode logic\n if (this._selection === item) {\n this._selection = null; // Deselect if already selected\n } else {\n this._selection = item; // Select the current item\n }\n this.selectionChange.emit(this._selection);\n this.rowSelect.emit(item); // Emit the selected item\n }\n }\n\n /**\n * Checks if an item is currently selected.\n * Used for checkbox binding.\n * @param item The item to check.\n * @returns True if the item is selected, false otherwise.\n */\n isItemSelected(item: T): boolean {\n if (!this._selection) {\n return false;\n }\n if (Array.isArray(this._selection)) {\n // Check if item exists in the array (for multi-select)\n return (this._selection as T[]).includes(item);\n }\n // Single selection mode\n return this._selection === item;\n }\n\n /**\n * Toggles the selection state of an item.\n * Used when a checkbox is clicked.\n * @param item The item to toggle.\n * @param event The change event from the checkbox.\n */\n toggleItemSelection(item: T, event: Event): void {\n event.stopPropagation(); // Prevent card click event from firing\n const isChecked = (event.target as HTMLInputElement).checked;\n\n if (this.showRowSelectionCheckbox) {\n // Multi-selection logic\n let currentSelectionArray = Array.isArray(this._selection) ? [...this._selection] : [];\n\n if (isChecked) {\n if (!currentSelectionArray.includes(item)) {\n currentSelectionArray.push(item);\n }\n } else {\n currentSelectionArray = currentSelectionArray.filter(selectedItem => selectedItem !== item);\n }\n this._selection = currentSelectionArray;\n } else if (this.rowSelectable) {\n // Single selection logic (if no checkboxes, this block would be redundant with handleCardClick, but kept for clarity)\n this._selection = isChecked ? item : null;\n }\n this.selectionChange.emit(this._selection);\n if (isChecked) {\n this.rowSelect.emit(item);\n }\n }\n\n /**\n * Used by *ngFor to optimize rendering.\n * Assumes each item has a unique 'id' property.\n * @param index The index of the item.\n * @param item The data item.\n * @returns The unique identifier of the item.\n */\n trackById(index: number, item: T): any {\n // You might need to adjust 'id' if your data uses a different unique identifier\n return (item as any).id || index;\n }\n\n}\n","\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\n @if (loading) {\n <div class=\"col-span-full text-center py-8\">\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\n </div>\n }\n\n @if (!loading && data.length === 0) {\n <div class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n }\n\n @for (item of data; track trackById($index, item)) {\n <div\n [ngClass]=\"rowClassFn(item)\"\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\n (click)=\"handleCardClick(item)\"\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\n @if (showRowSelectionCheckbox) {\n <div class=\"p-4\">\n <input type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n (change)=\"toggleItemSelection(item, $event)\"\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\n </div>\n }\n <div class=\"p-6 flex-grow\">\n <div class=\"flex flex-wrap -mx-2\">\n @for (col of columns; track col) {\n @if (col.isCardVisible) {\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\n @if (col.clickable) {\n <span class=\"cursor-pointer hover:underline text-blue-600\"\n (click)=\"handleCellClick(col, item, $event)\"\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n } @else {\n <span>\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n @if (showOperations && actions.length > 0) {\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n @if (actionsMode === 'buttons') {\n @for (act of actions; track act) {\n <button\n pButton\n type=\"button\"\n [icon]=\"act.icon || ''\"\n [title]=\"act.label?? '' | translate\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\n [ngClass]=\"act.styleClass\"\n (click)=\"action.emit({ name: act.name, row: item })\"\n ></button>\n }\n } @else {\n <p-menu\n #cardMenu\n [model]=\"getMenuItems(item)\"\n popup=\"true\"\n appendTo=\"body\">\n </p-menu>\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-ellipsis-v\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\n (click)=\"cardMenu.toggle($event)\">\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"es.framework-ng.ui.core-generic-card.mjs","sources":["../../../../libs/ng.ui.core/generic-card/src/lib/generic-card-module.ts","../../../../libs/ng.ui.core/generic-card/src/lib/generic-card.ts","../../../../libs/ng.ui.core/generic-card/src/lib/generic-card.html","../../../../libs/ng.ui.core/generic-card/src/es.framework-ng.ui.core-generic-card.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n})\r\nexport class GenericCardModule {}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ActionDef } from '@es.framework/ng.core/models';\r\nimport { ColumnDef } from '@es.framework/ng.core/models';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { MenuModule } from 'primeng/menu';\r\n\r\n@Component({\r\n selector: 'lib-generic-card',\r\n imports: [\r\n CommonModule,\r\n ButtonModule,\r\n MenuModule,\r\n TranslatePipe,\r\n FormsModule,\r\n ],\r\n templateUrl: './generic-card.html',\r\n styleUrl: './generic-card.css'\r\n})\r\nexport class GenericCard <T extends { [key: string]: any }> {\r\n\r\n @Input() data: T[] = [];\r\n @Input() columns: ColumnDef<T>[] = [];\r\n @Input() loading = false;\r\n @Input() actions: ActionDef<T>[] = [];\r\n @Input() actionsMode: 'buttons' | 'menu' = 'buttons';\r\n @Input() showOperations = true;\r\n\r\n // Added inputs for selection mirroring the table component\r\n @Input() rowSelectable = false;\r\n @Input() showRowSelectionCheckbox = false;\r\n @Input() paginator = false; // Indicates if pagination is externally managed\r\n\r\n // Row class function, mirroring the table component\r\n @Input() rowClassFn: (rowData: any) => string = () => '';\r\n\r\n @Output() action = new EventEmitter<{ name: string; row: T }>();\r\n\r\n\r\n _selection: T | T[] | null = null;\r\n @Input()\r\n get selection(): T | T[] | null {\r\n return this._selection;\r\n }\r\n set selection(val: T | T[] | null) {\r\n this._selection = val;\r\n // No emit here, emit only from actual user interaction methods\r\n }\r\n\r\n @Output() selectionChange = new EventEmitter<T | T[] | null>();\r\n @Output() rowSelect = new EventEmitter<T>();\r\n // Note: onLazyLoad is not directly applicable as the card component doesn't have internal pagination UI.\r\n // The parent component should manage data slicing and pass the correct 'data' array.\r\n\r\n\r\n\r\n /**\r\n * Generates menu items for the action menu.\r\n * @param row The data row for which to generate actions.\r\n * @returns An array of PrimeNG MenuItem objects.\r\n */\r\n getMenuItems(row: T): MenuItem[] {\r\n return this.actions.map(act => ({\r\n label: act.label,\r\n icon: act.icon,\r\n command: () => this.action.emit({ name: act.name, row }),\r\n styleClass: act.styleClass\r\n }));\r\n }\r\n\r\n /**\r\n * Handles click events on a clickable cell.\r\n * @param col The ColumnDef of the clicked column.\r\n * @param rowData The data row of the clicked cell.\r\n * @param event The mouse event.\r\n */\r\n handleCellClick(col: ColumnDef<any>, rowData: any, event: MouseEvent): void {\r\n event.stopPropagation(); // Prevent card selection if applicable\r\n if (col.clickAction) {\r\n col.clickAction(rowData, event);\r\n }\r\n }\r\n\r\n /**\r\n * Handles mouse enter events on a hoverable cell.\r\n * @param col The ColumnDef of the hovered column.\r\n * @param rowData The data row of the hovered cell.\r\n * @param event The mouse event.\r\n */\r\n onCellHover(col: ColumnDef<T>, row: T, event: MouseEvent): void {\r\n event.stopPropagation();\r\n col.onCellMouseEnter?.(row, event);\r\n }\r\n\r\n /**\r\n * Handles mouse leave events on a hoverable cell.\r\n * @param col The ColumnDef of the hovered column.\r\n * @param rowData The data row of the hovered cell.\r\n * @param event The mouse event.\r\n */\r\n onCellLeave(col: ColumnDef<T>, row: T, event: MouseEvent): void {\r\n event.stopPropagation();\r\n col.onCellMouseLeave?.(row, event);\r\n }\r\n\r\n /**\r\n * Handles click on the entire card for row selection (if not using checkboxes).\r\n * @param item The data item associated with the clicked card.\r\n */\r\n handleCardClick(item: T): void {\r\n if (this.rowSelectable && !this.showRowSelectionCheckbox) {\r\n // Single selection mode logic\r\n if (this._selection === item) {\r\n this._selection = null; // Deselect if already selected\r\n } else {\r\n this._selection = item; // Select the current item\r\n }\r\n this.selectionChange.emit(this._selection);\r\n this.rowSelect.emit(item); // Emit the selected item\r\n }\r\n }\r\n\r\n /**\r\n * Checks if an item is currently selected.\r\n * Used for checkbox binding.\r\n * @param item The item to check.\r\n * @returns True if the item is selected, false otherwise.\r\n */\r\n isItemSelected(item: T): boolean {\r\n if (!this._selection) {\r\n return false;\r\n }\r\n if (Array.isArray(this._selection)) {\r\n // Check if item exists in the array (for multi-select)\r\n return (this._selection as T[]).includes(item);\r\n }\r\n // Single selection mode\r\n return this._selection === item;\r\n }\r\n\r\n /**\r\n * Toggles the selection state of an item.\r\n * Used when a checkbox is clicked.\r\n * @param item The item to toggle.\r\n * @param event The change event from the checkbox.\r\n */\r\n toggleItemSelection(item: T, event: Event): void {\r\n event.stopPropagation(); // Prevent card click event from firing\r\n const isChecked = (event.target as HTMLInputElement).checked;\r\n\r\n if (this.showRowSelectionCheckbox) {\r\n // Multi-selection logic\r\n let currentSelectionArray = Array.isArray(this._selection) ? [...this._selection] : [];\r\n\r\n if (isChecked) {\r\n if (!currentSelectionArray.includes(item)) {\r\n currentSelectionArray.push(item);\r\n }\r\n } else {\r\n currentSelectionArray = currentSelectionArray.filter(selectedItem => selectedItem !== item);\r\n }\r\n this._selection = currentSelectionArray;\r\n } else if (this.rowSelectable) {\r\n // Single selection logic (if no checkboxes, this block would be redundant with handleCardClick, but kept for clarity)\r\n this._selection = isChecked ? item : null;\r\n }\r\n this.selectionChange.emit(this._selection);\r\n if (isChecked) {\r\n this.rowSelect.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Used by *ngFor to optimize rendering.\r\n * Assumes each item has a unique 'id' property.\r\n * @param index The index of the item.\r\n * @param item The data item.\r\n * @returns The unique identifier of the item.\r\n */\r\n trackById(index: number, item: T): any {\r\n // You might need to adjust 'id' if your data uses a different unique identifier\r\n return (item as any).id || index;\r\n }\r\n\r\n}\r\n","\r\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\r\n @if (loading) {\r\n <div class=\"col-span-full text-center py-8\">\r\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\r\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\r\n </div>\r\n }\r\n\r\n @if (!loading && data.length === 0) {\r\n <div class=\"col-span-full text-center py-8 text-gray-500\">\r\n No records found.\r\n </div>\r\n }\r\n\r\n @for (item of data; track trackById($index, item)) {\r\n <div\r\n [ngClass]=\"rowClassFn(item)\"\r\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\r\n (click)=\"handleCardClick(item)\"\r\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\r\n @if (showRowSelectionCheckbox) {\r\n <div class=\"p-4\">\r\n <input type=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n (change)=\"toggleItemSelection(item, $event)\"\r\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\r\n </div>\r\n }\r\n <div class=\"p-6 flex-grow\">\r\n <div class=\"flex flex-wrap -mx-2\">\r\n @for (col of columns; track col) {\r\n @if (col.isCardVisible) {\r\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\r\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\r\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\r\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\r\n @if (col.clickable) {\r\n <span class=\"cursor-pointer hover:underline text-blue-600\"\r\n (click)=\"handleCellClick(col, item, $event)\"\r\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\r\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n } @else {\r\n <span>\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n @if (showOperations && actions.length > 0) {\r\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\r\n @if (actionsMode === 'buttons') {\r\n @for (act of actions; track act) {\r\n <button\r\n pButton\r\n type=\"button\"\r\n [icon]=\"act.icon || ''\"\r\n [title]=\"act.label?? '' | translate\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\r\n [ngClass]=\"act.styleClass\"\r\n (click)=\"action.emit({ name: act.name, row: item })\"\r\n ></button>\r\n }\r\n } @else {\r\n <p-menu\r\n #cardMenu\r\n [model]=\"getMenuItems(item)\"\r\n popup=\"true\"\r\n appendTo=\"body\">\r\n </p-menu>\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\r\n (click)=\"cardMenu.toggle($event)\">\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -243,7 +243,7 @@ class GenericCrudHeaderComponent {
243
243
  // etc.
244
244
  }
245
245
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
246
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCrudHeaderComponent, isStandalone: true, selector: "app-generic-crud-header", inputs: { mode: "mode", breadcrumb: "breadcrumb", isSingleItemSelected: "isSingleItemSelected", selectedItems: "selectedItems", singleActionButtons: "singleActionButtons", bulkActionButtons: "bulkActionButtons", addButtonConfigs: "addButtonConfigs", mergedButtonConfigs: "mergedButtonConfigs", filters: "filters", filterModel: "filterModel", showSearch: "showSearch", first: "first", rows: "rows", totalRecords: "totalRecords", moduleName: "moduleName", apiName: "apiName", actions: "actions", showAdvancedFilter: "showAdvancedFilter", advancedFilterIcon: "advancedFilterIcon", searchTabs: "searchTabs", showViewMode: "showViewMode", viewMode: "viewMode" }, outputs: { singleItemAction: "singleItemAction", bulkAction: "bulkAction", search: "search", resetSearch: "resetSearch", action: "action", paginateChange: "paginateChange", viewModeChange: "viewModeChange" }, providers: [DialogService], ngImport: i0, template: "@if (mode !== 'form-only' && mode !== 'detail') {\r\n<div class=\"flex items-start gap-2 justify-between\">\r\n <div>\r\n <app-breadcrumb\r\n class=\"xs:block hidden\"\r\n [breadcrumb]=\"breadcrumb\"\r\n ></app-breadcrumb>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-2 justify-end flex-wrap\">\r\n @if (mode === 'full') {\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u0641\u0631\u062F\u0629 -->\r\n @if (isSingleItemSelected) {\r\n @for (btn of singleActionButtons; track trackByIdx($index)) {\r\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onSingleItemAction(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0645\u062A\u0639\u062F\u062F\u0629 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 -->\r\n @if (selectedItems.length > 0) {\r\n @for (btn of bulkActionButtons; track trackByIdx($index)) {\r\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onInternalBulkAction(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0625\u0636\u0627\u0641\u0629 -->\r\n @for (btn of mergedButtonConfigs; track trackByIdx($index)) {\r\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"handleButtonClick(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n </div>\r\n</div>\r\n}\r\n\r\n@if (mode !== 'form-only' && mode !== 'detail') {\r\n<div class=\"mt-2 mb-4 flex items-center justify-between\">\r\n <!-- \u0627\u0644\u0628\u062D\u062B -->\r\n @if (showSearch && filters) {\r\n <lib-generic-search-advanced\r\n [model]=\"filterModel\"\r\n [fields]=\"filters\"\r\n (search)=\"applySearch($event)\"\r\n (paginationChange)=\"paginationChange($event)\"\r\n >\r\n</lib-generic-search-advanced>\r\n } @else {\r\n <div></div>\r\n }\r\n\r\n <!-- \u0623\u062F\u0648\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629 -->\r\n <div class=\"flex items-center gap-3 rtl:space-x-reverse\">\r\n\r\n @if (showAdvancedFilter && searchTabs.length > 0) {\r\n <p-button\r\n [icon]=\"advancedFilterIcon\"\r\n [outlined]=\"!isAdvancedFilterVisible\"\r\n severity=\"secondary\"\r\n [pTooltip]=\"'ADVANCED_FILTER' | translate\"\r\n tooltipPosition=\"top\"\r\n (onClick)=\"toggleAdvancedFilter()\"\r\n class=\"hidden sm:inline-flex\"\r\n />\r\n}\r\n <!-- Refresh Button -->\r\n <p-button\r\n icon=\"pi pi-refresh\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (onClick)=\"reset()\"\r\n />\r\n\r\n <p-divider layout=\"vertical\" class=\"m-0 p-0 hidden xs:block\" />\r\n\r\n\r\n <!-- <p-button (click)=\"menu.toggle($event)\" class=\"xs:block\" severity=\"secondary\" outlined icon=\"pi pi-ellipsis-v\"/>\r\n <p-menu #menu [model]=\"actions\" [popup]=\"true\" /> -->\r\n\r\n\r\n <!-- Pagination Controls -->\r\n <div class=\"flex items-center gap-1 rtl:space-x-reverse\">\r\n\r\n @if ( showViewMode ) {\r\n<p-selectButton\r\n [options]=\"viewOptions\"\r\n [(ngModel)]=\"viewMode\"\r\n (onChange)=\"onViewChange($event)\"\r\n [unselectable]=\"false\"\r\n optionLabel=\"icon\"\r\n optionValue=\"value\"\r\n\r\n styleClass=\"inline-flex bg-slate-100 dark:bg-slate-800 p-1 rounded-xl border border-slate-200 dark:border-slate-700 shadow-inner\"\r\n>\r\n\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"flex items-center justify-center rounded-lg transition-all duration-200\"\r\n [ngClass]=\"{\r\n ' dark:bg-slate-600 shadow-sm': viewMode === item.value,\r\n 'text-slate-500 hover:bg-slate-200 dark:hover:bg-slate-700': viewMode !== item.value\r\n }\"\r\n [pTooltip]=\"item.title | translate\"\r\n tooltipPosition=\"top\"\r\n >\r\n <i [class]=\"item.icon\" class=\"text-base\"></i>\r\n </div>\r\n </ng-template>\r\n\r\n</p-selectButton>\r\n }\r\n <p-divider layout=\"vertical\" class=\"m-0 p-0 hidden xs:block\" />\r\n\r\n <!-- First Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-angle-double-right' : 'pi pi-angle-double-left'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"goFirst()\"\r\n [disabled]=\"isFirstPage()\"\r\n ></p-button>\r\n\r\n <!-- Previous Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-chevron-right' : 'pi pi-chevron-left'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"xs:block\"\r\n (click)=\"goPrev()\"\r\n [disabled]=\"isFirstPage()\"\r\n ></p-button>\r\n\r\n\r\n <!-- Current Page Display with Dropdown -->\r\n <div class=\"relative\">\r\n\r\n <p-button\r\n [label]=\"currentPage + ' / ' + totalPages()\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"showPageMenu = !showPageMenu\"\r\n pTooltip=\"{{totalRecords}}\"\r\n tooltipPosition=\"top\"\r\n />\r\n\r\n\r\n </div>\r\n <!-- Next Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-chevron-left' : 'pi pi-chevron-right'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"xs:block\"\r\n (click)=\"goNext()\"\r\n [disabled]=\"isLastPage()\"\r\n ></p-button>\r\n\r\n <!-- Last Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-angle-double-left' : 'pi pi-angle-double-right'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"goLast()\"\r\n [disabled]=\"isLastPage()\"\r\n ></p-button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n @if (showSearch && showAdvancedFilter && searchTabs.length > 0) {\r\n <div\r\n [ngClass]=\"{\r\n 'block': true,\r\n 'sm:hidden': !isAdvancedFilterVisible,\r\n 'sm:block': isAdvancedFilterVisible\r\n }\"\r\n class=\"animate-fade-in\"\r\n >\r\n <app-tabbed-search\r\n [fields]=\"searchTabs\"\r\n [model]=\"filterModel\"\r\n (onSearch)=\"applySearch($event)\"\r\n (onReset)=\"reset()\"\r\n (paginationChange)=\"paginationChange($event)\">\r\n </app-tabbed-search>\r\n </div>\r\n}\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: GenericButton, selector: "lib-generic-button", inputs: ["model", "type", "icon", "label", "variant", "severity", "size", "iconPosition", "disabled", "loading", "ariaLabel", "extraClasses", "permission"], outputs: ["clicked", "itemClick"] }, { kind: "component", type: BreadcrumbComponent, selector: "app-breadcrumb", inputs: ["breadcrumb"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i4.Divider, selector: "p-divider", inputs: ["styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "component", type: GenericSearchAdvanced, selector: "lib-generic-search-advanced", inputs: ["model", "fields", "enableSelect", "enableGroup", "odataConfig"], outputs: ["search", "paginationChange", "odataSearch"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i7.SelectButton, selector: "p-selectButton, p-selectbutton, p-select-button", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "unselectable", "tabindex", "multiple", "allowEmpty", "styleClass", "ariaLabelledBy", "dataKey", "autofocus", "size", "fluid"], outputs: ["onOptionClick", "onChange"] }, { kind: "component", type: TabbedSearchComponent, selector: "app-tabbed-search", inputs: ["fields", "model", "form"], outputs: ["onSearch", "onReset", "paginationChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
246
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCrudHeaderComponent, isStandalone: true, selector: "app-generic-crud-header", inputs: { mode: "mode", breadcrumb: "breadcrumb", isSingleItemSelected: "isSingleItemSelected", selectedItems: "selectedItems", singleActionButtons: "singleActionButtons", bulkActionButtons: "bulkActionButtons", addButtonConfigs: "addButtonConfigs", mergedButtonConfigs: "mergedButtonConfigs", filters: "filters", filterModel: "filterModel", showSearch: "showSearch", first: "first", rows: "rows", totalRecords: "totalRecords", moduleName: "moduleName", apiName: "apiName", actions: "actions", showAdvancedFilter: "showAdvancedFilter", advancedFilterIcon: "advancedFilterIcon", searchTabs: "searchTabs", showViewMode: "showViewMode", viewMode: "viewMode" }, outputs: { singleItemAction: "singleItemAction", bulkAction: "bulkAction", search: "search", resetSearch: "resetSearch", action: "action", paginateChange: "paginateChange", viewModeChange: "viewModeChange" }, providers: [DialogService], ngImport: i0, template: "@if (mode !== 'form-only' && mode !== 'detail') {\r\n<div class=\"flex items-start gap-2 justify-between\">\r\n <div>\r\n <app-breadcrumb\r\n class=\"xs:block hidden\"\r\n [breadcrumb]=\"breadcrumb\"\r\n ></app-breadcrumb>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-2 justify-end flex-wrap\">\r\n @if (mode === 'full') {\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u0641\u0631\u062F\u0629 -->\r\n @if (isSingleItemSelected) {\r\n @for (btn of singleActionButtons; track trackByIdx($index)) {\r\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onSingleItemAction(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0645\u062A\u0639\u062F\u062F\u0629 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 -->\r\n @if (selectedItems.length > 0) {\r\n @for (btn of bulkActionButtons; track trackByIdx($index)) {\r\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onInternalBulkAction(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0625\u0636\u0627\u0641\u0629 -->\r\n @for (btn of mergedButtonConfigs; track trackByIdx($index)) {\r\n @if (!btn.visible || (btn.visible && btn.visible === true)) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"handleButtonClick(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n </div>\r\n</div>\r\n}\r\n\r\n@if (mode !== 'form-only' && mode !== 'detail') {\r\n<div class=\"mt-2 mb-4 flex items-center justify-between\">\r\n <!-- \u0627\u0644\u0628\u062D\u062B -->\r\n @if (showSearch && filters) {\r\n <lib-generic-search-advanced\r\n [model]=\"filterModel\"\r\n [fields]=\"filters\"\r\n (search)=\"applySearch($event)\"\r\n (paginationChange)=\"paginationChange($event)\"\r\n >\r\n</lib-generic-search-advanced>\r\n } @else {\r\n <div></div>\r\n }\r\n\r\n <!-- \u0623\u062F\u0648\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629 -->\r\n <div class=\"flex items-center gap-3 rtl:space-x-reverse\">\r\n\r\n @if (showAdvancedFilter && searchTabs.length > 0) {\r\n <p-button\r\n [icon]=\"advancedFilterIcon\"\r\n [outlined]=\"!isAdvancedFilterVisible\"\r\n severity=\"secondary\"\r\n [pTooltip]=\"'ADVANCED_FILTER' | translate\"\r\n tooltipPosition=\"top\"\r\n (onClick)=\"toggleAdvancedFilter()\"\r\n class=\"hidden sm:inline-flex\"\r\n />\r\n}\r\n <!-- Refresh Button -->\r\n <p-button\r\n icon=\"pi pi-refresh\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (onClick)=\"reset()\"\r\n />\r\n\r\n <p-divider layout=\"vertical\" class=\"m-0 p-0 hidden xs:block\" />\r\n\r\n\r\n <!-- <p-button (click)=\"menu.toggle($event)\" class=\"xs:block\" severity=\"secondary\" outlined icon=\"pi pi-ellipsis-v\"/>\r\n <p-menu #menu [model]=\"actions\" [popup]=\"true\" /> -->\r\n\r\n\r\n <!-- Pagination Controls -->\r\n <div class=\"flex items-center gap-1 rtl:space-x-reverse\">\r\n\r\n @if ( showViewMode ) {\r\n<p-selectButton\r\n [options]=\"viewOptions\"\r\n [(ngModel)]=\"viewMode\"\r\n (onChange)=\"onViewChange($event)\"\r\n [unselectable]=\"false\"\r\n optionLabel=\"icon\"\r\n optionValue=\"value\"\r\n\r\n styleClass=\"inline-flex bg-slate-100 dark:bg-slate-800 p-1 rounded-xl border border-slate-200 dark:border-slate-700 shadow-inner\"\r\n>\r\n\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"flex items-center justify-center rounded-lg transition-all duration-200\"\r\n [ngClass]=\"{\r\n ' dark:bg-slate-600 shadow-sm': viewMode === item.value,\r\n 'text-slate-500 hover:bg-slate-200 dark:hover:bg-slate-700': viewMode !== item.value\r\n }\"\r\n [pTooltip]=\"item.title | translate\"\r\n tooltipPosition=\"top\"\r\n >\r\n <i [class]=\"item.icon\" class=\"text-base\"></i>\r\n </div>\r\n </ng-template>\r\n\r\n</p-selectButton>\r\n }\r\n <p-divider layout=\"vertical\" class=\"m-0 p-0 hidden xs:block\" />\r\n\r\n <!-- First Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-angle-double-right' : 'pi pi-angle-double-left'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"goFirst()\"\r\n [disabled]=\"isFirstPage()\"\r\n ></p-button>\r\n\r\n <!-- Previous Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-chevron-right' : 'pi pi-chevron-left'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"xs:block\"\r\n (click)=\"goPrev()\"\r\n [disabled]=\"isFirstPage()\"\r\n ></p-button>\r\n\r\n\r\n <!-- Current Page Display with Dropdown -->\r\n <div class=\"relative\">\r\n\r\n <p-button\r\n [label]=\"currentPage + ' / ' + totalPages()\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"showPageMenu = !showPageMenu\"\r\n pTooltip=\"{{totalRecords}}\"\r\n tooltipPosition=\"top\"\r\n />\r\n\r\n\r\n </div>\r\n <!-- Next Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-chevron-left' : 'pi pi-chevron-right'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"xs:block\"\r\n (click)=\"goNext()\"\r\n [disabled]=\"isLastPage()\"\r\n ></p-button>\r\n\r\n <!-- Last Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-angle-double-left' : 'pi pi-angle-double-right'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"goLast()\"\r\n [disabled]=\"isLastPage()\"\r\n ></p-button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n @if (showSearch && showAdvancedFilter && searchTabs.length > 0) {\r\n <div\r\n [ngClass]=\"{\r\n 'block': true,\r\n 'sm:hidden': !isAdvancedFilterVisible,\r\n 'sm:block': isAdvancedFilterVisible\r\n }\"\r\n class=\"animate-fade-in\"\r\n >\r\n <app-tabbed-search\r\n [fields]=\"searchTabs\"\r\n [model]=\"filterModel\"\r\n (onSearch)=\"applySearch($event)\"\r\n (onReset)=\"reset()\"\r\n (paginationChange)=\"paginationChange($event)\">\r\n </app-tabbed-search>\r\n </div>\r\n}\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: GenericButton, selector: "lib-generic-button", inputs: ["model", "type", "icon", "label", "tooltip", "tooltipPosition", "variant", "severity", "size", "iconPosition", "disabled", "loading", "ariaLabel", "extraClasses", "permission"], outputs: ["clicked", "itemClick"] }, { kind: "component", type: BreadcrumbComponent, selector: "app-breadcrumb", inputs: ["breadcrumb"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i4.Divider, selector: "p-divider", inputs: ["styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "component", type: GenericSearchAdvanced, selector: "lib-generic-search-advanced", inputs: ["model", "fields", "enableSelect", "enableGroup", "odataConfig"], outputs: ["search", "paginationChange", "odataSearch"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i7.SelectButton, selector: "p-selectButton, p-selectbutton, p-select-button", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "unselectable", "tabindex", "multiple", "allowEmpty", "styleClass", "ariaLabelledBy", "dataKey", "autofocus", "size", "fluid"], outputs: ["onOptionClick", "onChange"] }, { kind: "component", type: TabbedSearchComponent, selector: "app-tabbed-search", inputs: ["fields", "model", "form"], outputs: ["onSearch", "onReset", "paginationChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
247
247
  }
248
248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudHeaderComponent, decorators: [{
249
249
  type: Component,
@@ -775,8 +775,19 @@ class GenericCrudTableComponent {
775
775
  // }
776
776
  // etc.
777
777
  }
778
+ onTableSelectionChange(selection) {
779
+ this._selectedRows = Array.isArray(selection)
780
+ ? [...selection]
781
+ : selection
782
+ ? [selection]
783
+ : [];
784
+ this.selectionChange.emit({
785
+ selected: [...this._selectedRows],
786
+ selectedCount: this._selectedRows.length,
787
+ });
788
+ }
778
789
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
779
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCrudTableComponent, isStandalone: true, selector: "app-generic-crud-table", inputs: { data: "data", formFields: "formFields", columnFormFields: "columnFormFields", columns: "columns", dialogMaxWidth: "dialogMaxWidth", isViewMode: "isViewMode", displayMode: "displayMode", useConfirmOnSave: "useConfirmOnSave", isEditMode: "isEditMode", drawerVisible: "drawerVisible", dialogVisible: "dialogVisible", model: "model", loading: "loading", errorMsg: "errorMsg", errorMessage: "errorMessage", actions: "actions", actionsMode: "actionsMode", beforeSaveTransform: "beforeSaveTransform", filters: "filters", filterModel: "filterModel", showSearch: "showSearch", first: "first", rows: "rows", totalRecords: "totalRecords", rowEditable: "rowEditable", rowSelectable: "rowSelectable", scrollHeight: "scrollHeight", paginator: "paginator", service: "service", apiName: "apiName", moduleName: "moduleName", idField: "idField", showRowSelectionCheckbox: "showRowSelectionCheckbox", showAddButton: "showAddButton", showPrintButton: "showPrintButton", PermissionName: "PermissionName", addButtonConfigs: "addButtonConfigs", createEditActions: "createEditActions", supportSubPage: "supportSubPage", tabs: "tabs", bulkActionButtons: "bulkActionButtons", singleActionButtons: "singleActionButtons", breadcrumb: "breadcrumb", mode: "mode", forceState: "forceState", hideTable: "hideTable", autoShowForm: "autoShowForm", rowStyleFn: "rowStyleFn", rowClassFn: "rowClassFn", disableRowCheckboxFn: "disableRowCheckboxFn", showAdvancedFilter: "showAdvancedFilter", advancedFilterIcon: "advancedFilterIcon", searchTabs: "searchTabs", showViewMode: "showViewMode", viewMode: "viewMode", templateDrawerVisible: "templateDrawerVisible", category: "category", feature: "feature" }, outputs: { action: "action", bulkAction: "bulkAction", singleAction: "singleAction", afterSave: "afterSave", afterDelete: "afterDelete", beforeSave: "beforeSave", beforeDelete: "beforeDelete", formCancel: "formCancel", formInit: "formInit", dataLoaded: "dataLoaded", selectionChange: "selectionChange", error: "error", search: "search", pageChange: "pageChange", onSearch: "onSearch", visibleChange: "visibleChange", rowSelect: "rowSelect", viewModeChange: "viewModeChange", templateSelected: "templateSelected", templateDrawerVisibleChange: "templateDrawerVisibleChange" }, viewQueries: [{ propertyName: "genericTable", first: true, predicate: ["genericTable"], descendants: true }, { propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], ngImport: i0, template: "<div\r\n [class]=\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\"\r\n>\r\n <app-generic-crud-header\r\n [mode]=\"mode\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [isSingleItemSelected]=\"isSingleItemSelected\"\r\n [selectedItems]=\"_selectedRows\"\r\n [singleActionButtons]=\"singleActionButtons\"\r\n [bulkActionButtons]=\"bulkActionButtons\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [mergedButtonConfigs]=\"mergedButtonConfigs\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [filters]=\"filters\"\r\n [filterModel]=\"filterModel\"\r\n [showSearch]=\"showSearch\"\r\n (singleItemAction)=\"onSingleItemAction($event)\"\r\n (bulkAction)=\"onInternalBulkAction($event)\"\r\n (action)=\"action.emit($event)\"\r\n (search)=\"resetPage($event);applySearch($event);\"\r\n (resetSearch)=\"resetPage($event);applySearch('');\"\r\n (paginateChange)=\"onHeaderPaginateChange($event)\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [searchTabs]=\"searchTabs\"\r\n [showAdvancedFilter]=\"showAdvancedFilter\"\r\n [advancedFilterIcon]=\"advancedFilterIcon\"\r\n [showViewMode]=\"showViewMode\"\r\n [viewMode]=\"viewMode\"\r\n (viewModeChange)=\"onViewModeChange($event)\"\r\n/>\r\n\r\n @if (!hideTable) {\r\n <lib-generic-table\r\n [data]=\"data\"\r\n [columns]=\"columns\"\r\n [columnFormFields]=\"columnFormFields\"\r\n [paginator]=\"paginator\"\r\n [loading]=\"loading\"\r\n [actions]=\"actions\"\r\n [actionsMode]=\"actionsMode\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [showRowSelectionCheckbox]=\"showRowSelectionCheckbox\"\r\n (action)=\"action.emit($event)\"\r\n (onAddNew)=\"action.emit($event)\"\r\n (pageChange)=\"onLazyLoad($event)\"\r\n [rowSelectable]=\"rowSelectable\"\r\n [rowEditable]=\"rowEditable\"\r\n (rowSelect)=\"onRowClick($event)\"\r\n [(selection)]=\"_selectedRows\"\r\n #genericTable\r\n ></lib-generic-table>\r\n\r\n }\r\n\r\n <app-generic-dialog\r\n #dialog\r\n [service]=\"service\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [dialogMaxWidth]=\"dialogMaxWidth\"\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [forceState]=\"forceState\"\r\n [drawerVisible]=\"drawerVisible\"\r\n [dialogVisible]=\"dialogVisible\"\r\n [isViewMode]=\"isViewMode\"\r\n [isEditMode]=\"isEditMode\"\r\n [useConfirmOnSave]=\"useConfirmOnSave\"\r\n [loading]=\"loading\"\r\n [errorMsg]=\"errorMsg\"\r\n [errorMessage]=\"errorMessage\"\r\n [beforeSaveTransform]=\"beforeSaveTransform\"\r\n (action)=\"action.emit($event)\"\r\n (afterSave)=\"afterSave.emit($event);onSubmit();\"\r\n (afterDelete)=\"afterDelete.emit($event)\"\r\n (beforeSave)=\"beforeSave.emit($event)\"\r\n (beforeDelete)=\"beforeDelete.emit($event)\"\r\n (formCancel)=\"formCancel.emit()\"\r\n (formInit)=\"formInit.emit($event)\"\r\n (dataLoaded)=\"dataLoaded.emit($event)\"\r\n (selectionChange)=\"selectionChange.emit($event)\"\r\n (error)=\"error.emit($event)\"\r\n (visibleChange)=\"visibleChange.emit($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n <app-detail-view\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [title]=\"breadcrumb_?.[0]?.label || 'Detail'\"\r\n [service]=\"service\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [actions]=\"actions\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [tabs]=\"tabs\"\r\n [loading]=\"loading\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [createEditActions]=\"createEditActions\"\r\n (action)=\"action.emit($event)\"\r\n >\r\n </app-detail-view>\r\n\r\n <!-- \uD83D\uDFE2 \u0645\u0643\u0648\u0646 \u062F\u0631\u062C \u0627\u0644\u0642\u0648\u0627\u0644\u0628 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 -->\r\n<!-- <saved-report-templates-drawer\r\n [(visible)]=\"templateDrawerVisible\"\r\n (visibleChange)=\"templateDrawerVisibleChange.emit($event)\"\r\n [filterFields]=\"filters\"\r\n [service]=\"service.moduleName\"\r\n [category]=\"category\"\r\n [feature]=\"feature\"\r\n (templateSelected)=\"templateSelected.emit($event)\">\r\n</saved-report-templates-drawer> -->\r\n\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: GenericTable, selector: "lib-generic-table", inputs: ["data", "columns", "columnFormFields", "loading", "actions", "actionsPosition", "actionsMode", "first", "rows", "totalRecords", "sortField", "sortOrder", "globalFilterFields", "addButtonConfigs", "scrollHeight", "rowEditable", "rowSelectable", "selection", "dataKey", "paginator", "showRowSelectionCheckbox"], outputs: ["action", "pageChange", "onAddNew", "rowSelect", "selectionChange"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "ngmodule", type: DividerModule }, { kind: "ngmodule", type: IconFieldModule }, { kind: "ngmodule", type: DrawerModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MessageModule }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: GenericDialogComponent, selector: "app-generic-dialog", inputs: ["form", "service", "formFields", "model", "apiName", "moduleName", "idField", "dialogMaxWidth", "displayMode", "mode", "forceState", "drawerVisible", "dialogVisible", "isViewMode", "isEditMode", "useConfirmOnSave", "loading", "errorMsg", "errorMessage", "beforeSaveTransform", "hideTable", "autoShowForm"], outputs: ["action", "afterSave", "afterDelete", "beforeSave", "beforeDelete", "formCancel", "formInit", "dataLoaded", "selectionChange", "error", "visibleChange"] }, { kind: "component", type: GenericCrudHeaderComponent, selector: "app-generic-crud-header", inputs: ["mode", "breadcrumb", "isSingleItemSelected", "selectedItems", "singleActionButtons", "bulkActionButtons", "addButtonConfigs", "mergedButtonConfigs", "filters", "filterModel", "showSearch", "first", "rows", "totalRecords", "moduleName", "apiName", "actions", "showAdvancedFilter", "advancedFilterIcon", "searchTabs", "showViewMode", "viewMode"], outputs: ["singleItemAction", "bulkAction", "search", "resetSearch", "action", "paginateChange", "viewModeChange"] }, { kind: "component", type: GenericViewComponent, selector: "app-detail-view", inputs: ["title", "actions", "createEditActions", "tabs", "viewMode", "breadcrumb", "service", "formFields", "apiName", "moduleName", "idField", "standaloneMode", "useRouteParams", "query", "currentId", "useTabs", "isViewMode", "isCreateMode", "isEditMode", "model", "displayMode", "mode", "loading", "showToolbar"], outputs: ["action", "afterDelete"] }] });
790
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCrudTableComponent, isStandalone: true, selector: "app-generic-crud-table", inputs: { data: "data", formFields: "formFields", columnFormFields: "columnFormFields", columns: "columns", dialogMaxWidth: "dialogMaxWidth", isViewMode: "isViewMode", displayMode: "displayMode", useConfirmOnSave: "useConfirmOnSave", isEditMode: "isEditMode", drawerVisible: "drawerVisible", dialogVisible: "dialogVisible", model: "model", loading: "loading", errorMsg: "errorMsg", errorMessage: "errorMessage", actions: "actions", actionsMode: "actionsMode", beforeSaveTransform: "beforeSaveTransform", filters: "filters", filterModel: "filterModel", showSearch: "showSearch", first: "first", rows: "rows", totalRecords: "totalRecords", rowEditable: "rowEditable", rowSelectable: "rowSelectable", scrollHeight: "scrollHeight", paginator: "paginator", service: "service", apiName: "apiName", moduleName: "moduleName", idField: "idField", showRowSelectionCheckbox: "showRowSelectionCheckbox", showAddButton: "showAddButton", showPrintButton: "showPrintButton", PermissionName: "PermissionName", addButtonConfigs: "addButtonConfigs", createEditActions: "createEditActions", supportSubPage: "supportSubPage", tabs: "tabs", bulkActionButtons: "bulkActionButtons", singleActionButtons: "singleActionButtons", breadcrumb: "breadcrumb", mode: "mode", forceState: "forceState", hideTable: "hideTable", autoShowForm: "autoShowForm", rowStyleFn: "rowStyleFn", rowClassFn: "rowClassFn", disableRowCheckboxFn: "disableRowCheckboxFn", showAdvancedFilter: "showAdvancedFilter", advancedFilterIcon: "advancedFilterIcon", searchTabs: "searchTabs", showViewMode: "showViewMode", viewMode: "viewMode", templateDrawerVisible: "templateDrawerVisible", category: "category", feature: "feature" }, outputs: { action: "action", bulkAction: "bulkAction", singleAction: "singleAction", afterSave: "afterSave", afterDelete: "afterDelete", beforeSave: "beforeSave", beforeDelete: "beforeDelete", formCancel: "formCancel", formInit: "formInit", dataLoaded: "dataLoaded", selectionChange: "selectionChange", error: "error", search: "search", pageChange: "pageChange", onSearch: "onSearch", visibleChange: "visibleChange", rowSelect: "rowSelect", viewModeChange: "viewModeChange", templateSelected: "templateSelected", templateDrawerVisibleChange: "templateDrawerVisibleChange" }, viewQueries: [{ propertyName: "genericTable", first: true, predicate: ["genericTable"], descendants: true }, { propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], ngImport: i0, template: "<div\r\n [class]=\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\"\r\n>\r\n <app-generic-crud-header\r\n [mode]=\"mode\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [isSingleItemSelected]=\"isSingleItemSelected\"\r\n [selectedItems]=\"_selectedRows\"\r\n [singleActionButtons]=\"singleActionButtons\"\r\n [bulkActionButtons]=\"bulkActionButtons\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [mergedButtonConfigs]=\"mergedButtonConfigs\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [filters]=\"filters\"\r\n [filterModel]=\"filterModel\"\r\n [showSearch]=\"showSearch\"\r\n (singleItemAction)=\"onSingleItemAction($event)\"\r\n (bulkAction)=\"onInternalBulkAction($event)\"\r\n (action)=\"action.emit($event)\"\r\n (search)=\"resetPage($event);applySearch($event);\"\r\n (resetSearch)=\"resetPage($event);applySearch('');\"\r\n (paginateChange)=\"onHeaderPaginateChange($event)\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [searchTabs]=\"searchTabs\"\r\n [showAdvancedFilter]=\"showAdvancedFilter\"\r\n [advancedFilterIcon]=\"advancedFilterIcon\"\r\n [showViewMode]=\"showViewMode\"\r\n [viewMode]=\"viewMode\"\r\n (viewModeChange)=\"onViewModeChange($event)\"\r\n/>\r\n\r\n @if (!hideTable) {\r\n <lib-generic-table\r\n [data]=\"data\"\r\n [columns]=\"columns\"\r\n [columnFormFields]=\"columnFormFields\"\r\n [paginator]=\"paginator\"\r\n [loading]=\"loading\"\r\n [actions]=\"actions\"\r\n [actionsMode]=\"actionsMode\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [showRowSelectionCheckbox]=\"showRowSelectionCheckbox\"\r\n (action)=\"action.emit($event)\"\r\n (onAddNew)=\"action.emit($event)\"\r\n (pageChange)=\"onLazyLoad($event)\"\r\n [rowSelectable]=\"rowSelectable\"\r\n [rowEditable]=\"rowEditable\"\r\n (rowSelect)=\"onRowClick($event)\"\r\n [(selection)]=\"_selectedRows\"\r\n (selectionChange)=\"onTableSelectionChange($event)\"\r\n #genericTable\r\n ></lib-generic-table>\r\n }\r\n\r\n <app-generic-dialog\r\n #dialog\r\n [service]=\"service\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [dialogMaxWidth]=\"dialogMaxWidth\"\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [forceState]=\"forceState\"\r\n [drawerVisible]=\"drawerVisible\"\r\n [dialogVisible]=\"dialogVisible\"\r\n [isViewMode]=\"isViewMode\"\r\n [isEditMode]=\"isEditMode\"\r\n [useConfirmOnSave]=\"useConfirmOnSave\"\r\n [loading]=\"loading\"\r\n [errorMsg]=\"errorMsg\"\r\n [errorMessage]=\"errorMessage\"\r\n [beforeSaveTransform]=\"beforeSaveTransform\"\r\n (action)=\"action.emit($event)\"\r\n (afterSave)=\"afterSave.emit($event);onSubmit();\"\r\n (afterDelete)=\"afterDelete.emit($event)\"\r\n (beforeSave)=\"beforeSave.emit($event)\"\r\n (beforeDelete)=\"beforeDelete.emit($event)\"\r\n (formCancel)=\"formCancel.emit()\"\r\n (formInit)=\"formInit.emit($event)\"\r\n (dataLoaded)=\"dataLoaded.emit($event)\"\r\n (selectionChange)=\"selectionChange.emit($event)\"\r\n (error)=\"error.emit($event)\"\r\n (visibleChange)=\"visibleChange.emit($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n <app-detail-view\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [title]=\"breadcrumb_?.[0]?.label || 'Detail'\"\r\n [service]=\"service\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [actions]=\"actions\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [tabs]=\"tabs\"\r\n [loading]=\"loading\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [createEditActions]=\"createEditActions\"\r\n (action)=\"action.emit($event)\"\r\n >\r\n </app-detail-view>\r\n\r\n <!-- \uD83D\uDFE2 \u0645\u0643\u0648\u0646 \u062F\u0631\u062C \u0627\u0644\u0642\u0648\u0627\u0644\u0628 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 -->\r\n<!-- <saved-report-templates-drawer\r\n [(visible)]=\"templateDrawerVisible\"\r\n (visibleChange)=\"templateDrawerVisibleChange.emit($event)\"\r\n [filterFields]=\"filters\"\r\n [service]=\"service.moduleName\"\r\n [category]=\"category\"\r\n [feature]=\"feature\"\r\n (templateSelected)=\"templateSelected.emit($event)\">\r\n</saved-report-templates-drawer> -->\r\n\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: GenericTable, selector: "lib-generic-table", inputs: ["data", "columns", "columnFormFields", "loading", "actions", "actionsPosition", "actionsMode", "first", "rows", "totalRecords", "sortField", "sortOrder", "globalFilterFields", "addButtonConfigs", "scrollHeight", "rowEditable", "rowSelectable", "selection", "dataKey", "paginator", "showRowSelectionCheckbox"], outputs: ["action", "pageChange", "onAddNew", "rowSelect", "selectionChange"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "ngmodule", type: DividerModule }, { kind: "ngmodule", type: IconFieldModule }, { kind: "ngmodule", type: DrawerModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MessageModule }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: GenericDialogComponent, selector: "app-generic-dialog", inputs: ["form", "service", "formFields", "model", "apiName", "moduleName", "idField", "dialogMaxWidth", "displayMode", "mode", "forceState", "drawerVisible", "dialogVisible", "isViewMode", "isEditMode", "useConfirmOnSave", "loading", "errorMsg", "errorMessage", "beforeSaveTransform", "hideTable", "autoShowForm"], outputs: ["action", "afterSave", "afterDelete", "beforeSave", "beforeDelete", "formCancel", "formInit", "dataLoaded", "selectionChange", "error", "visibleChange"] }, { kind: "component", type: GenericCrudHeaderComponent, selector: "app-generic-crud-header", inputs: ["mode", "breadcrumb", "isSingleItemSelected", "selectedItems", "singleActionButtons", "bulkActionButtons", "addButtonConfigs", "mergedButtonConfigs", "filters", "filterModel", "showSearch", "first", "rows", "totalRecords", "moduleName", "apiName", "actions", "showAdvancedFilter", "advancedFilterIcon", "searchTabs", "showViewMode", "viewMode"], outputs: ["singleItemAction", "bulkAction", "search", "resetSearch", "action", "paginateChange", "viewModeChange"] }, { kind: "component", type: GenericViewComponent, selector: "app-detail-view", inputs: ["title", "actions", "createEditActions", "tabs", "viewMode", "breadcrumb", "service", "formFields", "apiName", "moduleName", "idField", "standaloneMode", "useRouteParams", "query", "currentId", "useTabs", "isViewMode", "isCreateMode", "isEditMode", "model", "displayMode", "mode", "loading", "showToolbar"], outputs: ["action", "afterDelete"] }] });
780
791
  }
781
792
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudTableComponent, decorators: [{
782
793
  type: Component,
@@ -799,7 +810,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
799
810
  // SavedReportTemplatesDrawerComponent
800
811
  ], host: {
801
812
  class: ''
802
- }, template: "<div\r\n [class]=\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\"\r\n>\r\n <app-generic-crud-header\r\n [mode]=\"mode\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [isSingleItemSelected]=\"isSingleItemSelected\"\r\n [selectedItems]=\"_selectedRows\"\r\n [singleActionButtons]=\"singleActionButtons\"\r\n [bulkActionButtons]=\"bulkActionButtons\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [mergedButtonConfigs]=\"mergedButtonConfigs\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [filters]=\"filters\"\r\n [filterModel]=\"filterModel\"\r\n [showSearch]=\"showSearch\"\r\n (singleItemAction)=\"onSingleItemAction($event)\"\r\n (bulkAction)=\"onInternalBulkAction($event)\"\r\n (action)=\"action.emit($event)\"\r\n (search)=\"resetPage($event);applySearch($event);\"\r\n (resetSearch)=\"resetPage($event);applySearch('');\"\r\n (paginateChange)=\"onHeaderPaginateChange($event)\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [searchTabs]=\"searchTabs\"\r\n [showAdvancedFilter]=\"showAdvancedFilter\"\r\n [advancedFilterIcon]=\"advancedFilterIcon\"\r\n [showViewMode]=\"showViewMode\"\r\n [viewMode]=\"viewMode\"\r\n (viewModeChange)=\"onViewModeChange($event)\"\r\n/>\r\n\r\n @if (!hideTable) {\r\n <lib-generic-table\r\n [data]=\"data\"\r\n [columns]=\"columns\"\r\n [columnFormFields]=\"columnFormFields\"\r\n [paginator]=\"paginator\"\r\n [loading]=\"loading\"\r\n [actions]=\"actions\"\r\n [actionsMode]=\"actionsMode\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [showRowSelectionCheckbox]=\"showRowSelectionCheckbox\"\r\n (action)=\"action.emit($event)\"\r\n (onAddNew)=\"action.emit($event)\"\r\n (pageChange)=\"onLazyLoad($event)\"\r\n [rowSelectable]=\"rowSelectable\"\r\n [rowEditable]=\"rowEditable\"\r\n (rowSelect)=\"onRowClick($event)\"\r\n [(selection)]=\"_selectedRows\"\r\n #genericTable\r\n ></lib-generic-table>\r\n\r\n }\r\n\r\n <app-generic-dialog\r\n #dialog\r\n [service]=\"service\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [dialogMaxWidth]=\"dialogMaxWidth\"\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [forceState]=\"forceState\"\r\n [drawerVisible]=\"drawerVisible\"\r\n [dialogVisible]=\"dialogVisible\"\r\n [isViewMode]=\"isViewMode\"\r\n [isEditMode]=\"isEditMode\"\r\n [useConfirmOnSave]=\"useConfirmOnSave\"\r\n [loading]=\"loading\"\r\n [errorMsg]=\"errorMsg\"\r\n [errorMessage]=\"errorMessage\"\r\n [beforeSaveTransform]=\"beforeSaveTransform\"\r\n (action)=\"action.emit($event)\"\r\n (afterSave)=\"afterSave.emit($event);onSubmit();\"\r\n (afterDelete)=\"afterDelete.emit($event)\"\r\n (beforeSave)=\"beforeSave.emit($event)\"\r\n (beforeDelete)=\"beforeDelete.emit($event)\"\r\n (formCancel)=\"formCancel.emit()\"\r\n (formInit)=\"formInit.emit($event)\"\r\n (dataLoaded)=\"dataLoaded.emit($event)\"\r\n (selectionChange)=\"selectionChange.emit($event)\"\r\n (error)=\"error.emit($event)\"\r\n (visibleChange)=\"visibleChange.emit($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n <app-detail-view\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [title]=\"breadcrumb_?.[0]?.label || 'Detail'\"\r\n [service]=\"service\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [actions]=\"actions\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [tabs]=\"tabs\"\r\n [loading]=\"loading\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [createEditActions]=\"createEditActions\"\r\n (action)=\"action.emit($event)\"\r\n >\r\n </app-detail-view>\r\n\r\n <!-- \uD83D\uDFE2 \u0645\u0643\u0648\u0646 \u062F\u0631\u062C \u0627\u0644\u0642\u0648\u0627\u0644\u0628 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 -->\r\n<!-- <saved-report-templates-drawer\r\n [(visible)]=\"templateDrawerVisible\"\r\n (visibleChange)=\"templateDrawerVisibleChange.emit($event)\"\r\n [filterFields]=\"filters\"\r\n [service]=\"service.moduleName\"\r\n [category]=\"category\"\r\n [feature]=\"feature\"\r\n (templateSelected)=\"templateSelected.emit($event)\">\r\n</saved-report-templates-drawer> -->\r\n\r\n</div>\r\n" }]
813
+ }, template: "<div\r\n [class]=\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\"\r\n>\r\n <app-generic-crud-header\r\n [mode]=\"mode\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [isSingleItemSelected]=\"isSingleItemSelected\"\r\n [selectedItems]=\"_selectedRows\"\r\n [singleActionButtons]=\"singleActionButtons\"\r\n [bulkActionButtons]=\"bulkActionButtons\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [mergedButtonConfigs]=\"mergedButtonConfigs\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [filters]=\"filters\"\r\n [filterModel]=\"filterModel\"\r\n [showSearch]=\"showSearch\"\r\n (singleItemAction)=\"onSingleItemAction($event)\"\r\n (bulkAction)=\"onInternalBulkAction($event)\"\r\n (action)=\"action.emit($event)\"\r\n (search)=\"resetPage($event);applySearch($event);\"\r\n (resetSearch)=\"resetPage($event);applySearch('');\"\r\n (paginateChange)=\"onHeaderPaginateChange($event)\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [searchTabs]=\"searchTabs\"\r\n [showAdvancedFilter]=\"showAdvancedFilter\"\r\n [advancedFilterIcon]=\"advancedFilterIcon\"\r\n [showViewMode]=\"showViewMode\"\r\n [viewMode]=\"viewMode\"\r\n (viewModeChange)=\"onViewModeChange($event)\"\r\n/>\r\n\r\n @if (!hideTable) {\r\n <lib-generic-table\r\n [data]=\"data\"\r\n [columns]=\"columns\"\r\n [columnFormFields]=\"columnFormFields\"\r\n [paginator]=\"paginator\"\r\n [loading]=\"loading\"\r\n [actions]=\"actions\"\r\n [actionsMode]=\"actionsMode\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [showRowSelectionCheckbox]=\"showRowSelectionCheckbox\"\r\n (action)=\"action.emit($event)\"\r\n (onAddNew)=\"action.emit($event)\"\r\n (pageChange)=\"onLazyLoad($event)\"\r\n [rowSelectable]=\"rowSelectable\"\r\n [rowEditable]=\"rowEditable\"\r\n (rowSelect)=\"onRowClick($event)\"\r\n [(selection)]=\"_selectedRows\"\r\n (selectionChange)=\"onTableSelectionChange($event)\"\r\n #genericTable\r\n ></lib-generic-table>\r\n }\r\n\r\n <app-generic-dialog\r\n #dialog\r\n [service]=\"service\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [dialogMaxWidth]=\"dialogMaxWidth\"\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [forceState]=\"forceState\"\r\n [drawerVisible]=\"drawerVisible\"\r\n [dialogVisible]=\"dialogVisible\"\r\n [isViewMode]=\"isViewMode\"\r\n [isEditMode]=\"isEditMode\"\r\n [useConfirmOnSave]=\"useConfirmOnSave\"\r\n [loading]=\"loading\"\r\n [errorMsg]=\"errorMsg\"\r\n [errorMessage]=\"errorMessage\"\r\n [beforeSaveTransform]=\"beforeSaveTransform\"\r\n (action)=\"action.emit($event)\"\r\n (afterSave)=\"afterSave.emit($event);onSubmit();\"\r\n (afterDelete)=\"afterDelete.emit($event)\"\r\n (beforeSave)=\"beforeSave.emit($event)\"\r\n (beforeDelete)=\"beforeDelete.emit($event)\"\r\n (formCancel)=\"formCancel.emit()\"\r\n (formInit)=\"formInit.emit($event)\"\r\n (dataLoaded)=\"dataLoaded.emit($event)\"\r\n (selectionChange)=\"selectionChange.emit($event)\"\r\n (error)=\"error.emit($event)\"\r\n (visibleChange)=\"visibleChange.emit($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n <app-detail-view\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [title]=\"breadcrumb_?.[0]?.label || 'Detail'\"\r\n [service]=\"service\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [actions]=\"actions\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [tabs]=\"tabs\"\r\n [loading]=\"loading\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [createEditActions]=\"createEditActions\"\r\n (action)=\"action.emit($event)\"\r\n >\r\n </app-detail-view>\r\n\r\n <!-- \uD83D\uDFE2 \u0645\u0643\u0648\u0646 \u062F\u0631\u062C \u0627\u0644\u0642\u0648\u0627\u0644\u0628 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 -->\r\n<!-- <saved-report-templates-drawer\r\n [(visible)]=\"templateDrawerVisible\"\r\n (visibleChange)=\"templateDrawerVisibleChange.emit($event)\"\r\n [filterFields]=\"filters\"\r\n [service]=\"service.moduleName\"\r\n [category]=\"category\"\r\n [feature]=\"feature\"\r\n (templateSelected)=\"templateSelected.emit($event)\">\r\n</saved-report-templates-drawer> -->\r\n\r\n</div>\r\n" }]
803
814
  }], propDecorators: { genericTable: [{
804
815
  type: ViewChild,
805
816
  args: ['genericTable']