@elite.framework/ng.core 1.0.65 → 2.0.2

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 (148) hide show
  1. package/README.md +2 -22
  2. package/directives/README.md +3 -0
  3. package/fesm2022/{elite.framework-ng.core-src-lib-directives.mjs → elite.framework-ng.core-directives.mjs} +7 -7
  4. package/fesm2022/elite.framework-ng.core-directives.mjs.map +1 -0
  5. package/fesm2022/elite.framework-ng.core-models.mjs +47 -0
  6. package/fesm2022/elite.framework-ng.core-models.mjs.map +1 -0
  7. package/fesm2022/{elite.framework-ng.core-src-lib-pipes.mjs → elite.framework-ng.core-pipes.mjs} +7 -7
  8. package/fesm2022/elite.framework-ng.core-pipes.mjs.map +1 -0
  9. package/fesm2022/elite.framework-ng.core-providers.mjs +26 -0
  10. package/fesm2022/elite.framework-ng.core-providers.mjs.map +1 -0
  11. package/fesm2022/elite.framework-ng.core-services.mjs +509 -0
  12. package/fesm2022/elite.framework-ng.core-services.mjs.map +1 -0
  13. package/fesm2022/elite.framework-ng.core-tokens.mjs +20 -0
  14. package/fesm2022/elite.framework-ng.core-tokens.mjs.map +1 -0
  15. package/fesm2022/elite.framework-ng.core.mjs +7 -2239
  16. package/fesm2022/elite.framework-ng.core.mjs.map +1 -1
  17. package/index.d.ts +4 -648
  18. package/models/README.md +3 -0
  19. package/models/index.d.ts +135 -0
  20. package/package.json +26 -170
  21. package/pipes/README.md +3 -0
  22. package/providers/README.md +3 -0
  23. package/providers/index.d.ts +9 -0
  24. package/services/README.md +3 -0
  25. package/services/index.d.ts +250 -0
  26. package/tokens/README.md +3 -0
  27. package/tokens/index.d.ts +18 -0
  28. package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs +0 -204
  29. package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs.map +0 -1
  30. package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs +0 -132
  31. package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs.map +0 -1
  32. package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs +0 -76
  33. package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs.map +0 -1
  34. package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs +0 -172
  35. package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs.map +0 -1
  36. package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs +0 -794
  37. package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs.map +0 -1
  38. package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs +0 -110
  39. package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs.map +0 -1
  40. package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs +0 -130
  41. package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs.map +0 -1
  42. package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs +0 -50
  43. package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs.map +0 -1
  44. package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs +0 -154
  45. package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs.map +0 -1
  46. package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs +0 -24
  47. package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs.map +0 -1
  48. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs +0 -100
  49. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs.map +0 -1
  50. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs +0 -78
  51. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs.map +0 -1
  52. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs +0 -167
  53. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs.map +0 -1
  54. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs +0 -62
  55. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs.map +0 -1
  56. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs +0 -50
  57. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs.map +0 -1
  58. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs +0 -76
  59. package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs.map +0 -1
  60. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs +0 -163
  61. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs.map +0 -1
  62. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs +0 -133
  63. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs.map +0 -1
  64. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs +0 -214
  65. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs.map +0 -1
  66. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs +0 -385
  67. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs.map +0 -1
  68. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs +0 -23
  69. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs.map +0 -1
  70. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs +0 -53
  71. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs.map +0 -1
  72. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs +0 -23
  73. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs.map +0 -1
  74. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs +0 -85
  75. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs.map +0 -1
  76. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs +0 -430
  77. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs.map +0 -1
  78. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs +0 -216
  79. package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs.map +0 -1
  80. package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs +0 -18
  81. package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs.map +0 -1
  82. package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs +0 -195
  83. package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs.map +0 -1
  84. package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs +0 -94
  85. package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs.map +0 -1
  86. package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs +0 -55
  87. package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs.map +0 -1
  88. package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs +0 -112
  89. package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs.map +0 -1
  90. package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs +0 -297
  91. package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs.map +0 -1
  92. package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs +0 -135
  93. package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs.map +0 -1
  94. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs +0 -40
  95. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs.map +0 -1
  96. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs +0 -41
  97. package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs.map +0 -1
  98. package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs +0 -45
  99. package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs.map +0 -1
  100. package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs +0 -192
  101. package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs.map +0 -1
  102. package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs +0 -44
  103. package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs.map +0 -1
  104. package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs +0 -174
  105. package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs.map +0 -1
  106. package/fesm2022/elite.framework-ng.core-src-lib-directives.mjs.map +0 -1
  107. package/fesm2022/elite.framework-ng.core-src-lib-pipes.mjs.map +0 -1
  108. package/src/lib/components/attachments/index.d.ts +0 -31
  109. package/src/lib/components/breadcrumb/index.d.ts +0 -10
  110. package/src/lib/components/color-picker/index.d.ts +0 -9
  111. package/src/lib/components/column-settings-popover/index.d.ts +0 -39
  112. package/src/lib/components/condition-editor/index.d.ts +0 -73
  113. package/src/lib/components/custom-switch/index.d.ts +0 -12
  114. package/src/lib/components/deactivation-reason/index.d.ts +0 -24
  115. package/src/lib/components/form-button/index.d.ts +0 -10
  116. package/src/lib/components/form-field/index.d.ts +0 -30
  117. package/src/lib/components/form-template/index.d.ts +0 -9
  118. package/src/lib/components/formly-avatar-image/index.d.ts +0 -11
  119. package/src/lib/components/formly-avatar-label/index.d.ts +0 -29
  120. package/src/lib/components/formly-button/index.d.ts +0 -13
  121. package/src/lib/components/formly-button-selector/index.d.ts +0 -28
  122. package/src/lib/components/formly-split-button/index.d.ts +0 -16
  123. package/src/lib/components/formly-username-with-domain/index.d.ts +0 -12
  124. package/src/lib/components/generic-autocomplete/index.d.ts +0 -34
  125. package/src/lib/components/generic-button/index.d.ts +0 -35
  126. package/src/lib/components/generic-card/index.d.ts +0 -90
  127. package/src/lib/components/generic-crud-table/index.d.ts +0 -120
  128. package/src/lib/components/generic-errormessage/index.d.ts +0 -10
  129. package/src/lib/components/generic-formly-fields/index.d.ts +0 -22
  130. package/src/lib/components/generic-loadingspinner/index.d.ts +0 -9
  131. package/src/lib/components/generic-search/index.d.ts +0 -29
  132. package/src/lib/components/generic-selector/index.d.ts +0 -66
  133. package/src/lib/components/generic-table/index.d.ts +0 -60
  134. package/src/lib/components/header-wrapper/index.d.ts +0 -8
  135. package/src/lib/components/icon-picker/index.d.ts +0 -23
  136. package/src/lib/components/input-switch/index.d.ts +0 -9
  137. package/src/lib/components/input-with-icon/index.d.ts +0 -10
  138. package/src/lib/components/label-type/index.d.ts +0 -19
  139. package/src/lib/components/odata-query-builder/index.d.ts +0 -81
  140. package/src/lib/components/repeat/index.d.ts +0 -17
  141. package/src/lib/components/sidebar-cards/index.d.ts +0 -18
  142. package/src/lib/components/sidebar-toggles/index.d.ts +0 -18
  143. package/src/lib/components/tabs/index.d.ts +0 -10
  144. package/src/lib/components/tag-type/index.d.ts +0 -27
  145. package/src/lib/components/text-editor/index.d.ts +0 -9
  146. package/src/lib/components/wrappers/index.d.ts +0 -24
  147. /package/{src/lib/directives → directives}/index.d.ts +0 -0
  148. /package/{src/lib/pipes → pipes}/index.d.ts +0 -0
@@ -1,214 +0,0 @@
1
- import * as i2 from '@angular/common';
2
- import { CommonModule } from '@angular/common';
3
- import * as i0 from '@angular/core';
4
- import { EventEmitter, Output, Input, Component } from '@angular/core';
5
- import { FormsModule } from '@angular/forms';
6
- import * as i1 from '@ngx-translate/core';
7
- import { TranslateModule } from '@ngx-translate/core';
8
- import * as i3 from 'primeng/button';
9
- import { ButtonModule } from 'primeng/button';
10
- import * as i4 from 'primeng/menu';
11
- import { MenuModule } from 'primeng/menu';
12
-
13
- class GenericCard {
14
- translateService;
15
- data = [];
16
- columns = [];
17
- loading = false;
18
- actions = [];
19
- actionsMode = 'buttons';
20
- showOperations = true;
21
- // Added inputs for selection mirroring the table component
22
- rowSelectable = false;
23
- showRowSelectionCheckbox = false;
24
- paginator = false; // Indicates if pagination is externally managed
25
- // Row class function, mirroring the table component
26
- rowClassFn = () => '';
27
- action = new EventEmitter();
28
- _selection = null;
29
- get selection() {
30
- return this._selection;
31
- }
32
- set selection(val) {
33
- this._selection = val;
34
- // No emit here, emit only from actual user interaction methods
35
- }
36
- selectionChange = new EventEmitter();
37
- rowSelect = new EventEmitter();
38
- // Note: onLazyLoad is not directly applicable as the card component doesn't have internal pagination UI.
39
- // The parent component should manage data slicing and pass the correct 'data' array.
40
- constructor(translateService) {
41
- this.translateService = translateService;
42
- }
43
- ngOnInit() {
44
- // Initialize selection if needed, e.g., if a default selection should be present
45
- }
46
- /**
47
- * Generates menu items for the action menu.
48
- * @param row The data row for which to generate actions.
49
- * @returns An array of PrimeNG MenuItem objects.
50
- */
51
- getMenuItems(row) {
52
- return this.actions.map(act => ({
53
- label: act.label,
54
- icon: act.icon,
55
- command: () => this.action.emit({ name: act.name, row }),
56
- styleClass: act.styleClass
57
- }));
58
- }
59
- /**
60
- * Handles click events on a clickable cell.
61
- * @param col The ColumnDef of the clicked column.
62
- * @param rowData The data row of the clicked cell.
63
- * @param event The mouse event.
64
- */
65
- handleCellClick(col, rowData, event) {
66
- event.stopPropagation(); // Prevent card selection if applicable
67
- if (col.clickAction) {
68
- col.clickAction(rowData, event);
69
- }
70
- }
71
- /**
72
- * Handles mouse enter events on a hoverable cell.
73
- * @param col The ColumnDef of the hovered column.
74
- * @param rowData The data row of the hovered cell.
75
- * @param event The mouse event.
76
- */
77
- onCellHover(col, row, event) {
78
- event.stopPropagation();
79
- col.onCellMouseEnter?.(row, event);
80
- }
81
- /**
82
- * Handles mouse leave events on a hoverable cell.
83
- * @param col The ColumnDef of the hovered column.
84
- * @param rowData The data row of the hovered cell.
85
- * @param event The mouse event.
86
- */
87
- onCellLeave(col, row, event) {
88
- event.stopPropagation();
89
- col.onCellMouseLeave?.(row, event);
90
- }
91
- /**
92
- * Handles click on the entire card for row selection (if not using checkboxes).
93
- * @param item The data item associated with the clicked card.
94
- */
95
- handleCardClick(item) {
96
- if (this.rowSelectable && !this.showRowSelectionCheckbox) {
97
- // Single selection mode logic
98
- if (this._selection === item) {
99
- this._selection = null; // Deselect if already selected
100
- }
101
- else {
102
- this._selection = item; // Select the current item
103
- }
104
- this.selectionChange.emit(this._selection);
105
- this.rowSelect.emit(item); // Emit the selected item
106
- }
107
- }
108
- /**
109
- * Checks if an item is currently selected.
110
- * Used for checkbox binding.
111
- * @param item The item to check.
112
- * @returns True if the item is selected, false otherwise.
113
- */
114
- isItemSelected(item) {
115
- if (!this._selection) {
116
- return false;
117
- }
118
- if (Array.isArray(this._selection)) {
119
- // Check if item exists in the array (for multi-select)
120
- return this._selection.includes(item);
121
- }
122
- // Single selection mode
123
- return this._selection === item;
124
- }
125
- /**
126
- * Toggles the selection state of an item.
127
- * Used when a checkbox is clicked.
128
- * @param item The item to toggle.
129
- * @param event The change event from the checkbox.
130
- */
131
- toggleItemSelection(item, event) {
132
- event.stopPropagation(); // Prevent card click event from firing
133
- const isChecked = event.target.checked;
134
- if (this.showRowSelectionCheckbox) {
135
- // Multi-selection logic
136
- let currentSelectionArray = Array.isArray(this._selection) ? [...this._selection] : [];
137
- if (isChecked) {
138
- if (!currentSelectionArray.includes(item)) {
139
- currentSelectionArray.push(item);
140
- }
141
- }
142
- else {
143
- currentSelectionArray = currentSelectionArray.filter(selectedItem => selectedItem !== item);
144
- }
145
- this._selection = currentSelectionArray;
146
- }
147
- else if (this.rowSelectable) {
148
- // Single selection logic (if no checkboxes, this block would be redundant with handleCardClick, but kept for clarity)
149
- this._selection = isChecked ? item : null;
150
- }
151
- this.selectionChange.emit(this._selection);
152
- if (isChecked) {
153
- this.rowSelect.emit(item);
154
- }
155
- }
156
- /**
157
- * Used by *ngFor to optimize rendering.
158
- * Assumes each item has a unique 'id' property.
159
- * @param index The index of the item.
160
- * @param item The data item.
161
- * @returns The unique identifier of the item.
162
- */
163
- trackById(index, item) {
164
- // You might need to adjust 'id' if your data uses a different unique identifier
165
- return item.id || index;
166
- }
167
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GenericCard, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
168
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", 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 <div *ngIf=\"loading\" 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 <div *ngIf=\"!loading && data.length === 0\" class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n\n <div *ngFor=\"let item of data; trackBy: trackById\"\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\n <div *ngIf=\"showRowSelectionCheckbox\" 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 <ng-container *ngFor=\"let col of columns\">\n <div *ngIf=\"col.isCardVisible\" 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 <ng-container *ngIf=\"col.clickable; else readonlyCardCell\">\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 <ng-container *ngIf=\"col.formatter; else defaultCardText\">\n <span [innerHTML]=\"col.formatter(item)\"></span>\n </ng-container>\n <ng-template #defaultCardText>\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n </ng-template>\n </span>\n </ng-container>\n\n <ng-template #readonlyCardCell>\n <span>\n <ng-container *ngIf=\"col.formatter; else defaultCardText2\">\n <span [innerHTML]=\"col.formatter(item)\"></span>\n </ng-container>\n <ng-template #defaultCardText2>\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n </ng-template>\n </span>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n </div>\n\n <div *ngIf=\"showOperations && actions.length > 0\" class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n <ng-container *ngIf=\"actionsMode === 'buttons'; else cardMenuTpl\">\n <ng-container *ngFor=\"let act of actions\">\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 </ng-container>\n </ng-container>\n\n <ng-template #cardMenuTpl>\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 </ng-template>\n </div>\n </div>\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: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i4.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: TranslateModule }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
169
- }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GenericCard, decorators: [{
171
- type: Component,
172
- args: [{ selector: 'lib-generic-card', imports: [
173
- CommonModule,
174
- ButtonModule,
175
- MenuModule,
176
- TranslateModule,
177
- FormsModule,
178
- ], template: "\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\n <div *ngIf=\"loading\" 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 <div *ngIf=\"!loading && data.length === 0\" class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n\n <div *ngFor=\"let item of data; trackBy: trackById\"\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\n <div *ngIf=\"showRowSelectionCheckbox\" 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 <ng-container *ngFor=\"let col of columns\">\n <div *ngIf=\"col.isCardVisible\" 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 <ng-container *ngIf=\"col.clickable; else readonlyCardCell\">\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 <ng-container *ngIf=\"col.formatter; else defaultCardText\">\n <span [innerHTML]=\"col.formatter(item)\"></span>\n </ng-container>\n <ng-template #defaultCardText>\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n </ng-template>\n </span>\n </ng-container>\n\n <ng-template #readonlyCardCell>\n <span>\n <ng-container *ngIf=\"col.formatter; else defaultCardText2\">\n <span [innerHTML]=\"col.formatter(item)\"></span>\n </ng-container>\n <ng-template #defaultCardText2>\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n </ng-template>\n </span>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n </div>\n\n <div *ngIf=\"showOperations && actions.length > 0\" class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n <ng-container *ngIf=\"actionsMode === 'buttons'; else cardMenuTpl\">\n <ng-container *ngFor=\"let act of actions\">\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 </ng-container>\n </ng-container>\n\n <ng-template #cardMenuTpl>\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 </ng-template>\n </div>\n </div>\n</div>\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"] }]
179
- }], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { data: [{
180
- type: Input
181
- }], columns: [{
182
- type: Input
183
- }], loading: [{
184
- type: Input
185
- }], actions: [{
186
- type: Input
187
- }], actionsMode: [{
188
- type: Input
189
- }], showOperations: [{
190
- type: Input
191
- }], rowSelectable: [{
192
- type: Input
193
- }], showRowSelectionCheckbox: [{
194
- type: Input
195
- }], paginator: [{
196
- type: Input
197
- }], rowClassFn: [{
198
- type: Input
199
- }], action: [{
200
- type: Output
201
- }], selection: [{
202
- type: Input
203
- }], selectionChange: [{
204
- type: Output
205
- }], rowSelect: [{
206
- type: Output
207
- }] } });
208
-
209
- /**
210
- * Generated bundle index. Do not edit.
211
- */
212
-
213
- export { GenericCard };
214
- //# sourceMappingURL=elite.framework-ng.core-src-lib-components-generic-card.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"elite.framework-ng.core-src-lib-components-generic-card.mjs","sources":["../../../projects/core/src/lib/components/generic-card/generic-card.ts","../../../projects/core/src/lib/components/generic-card/generic-card.html","../../../projects/core/src/lib/components/generic-card/elite.framework-ng.core-src-lib-components-generic-card.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActionDef } from '@elite.framework/ng.core';\nimport { ColumnDef } from '@elite.framework/ng.core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\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 TranslateModule,\n FormsModule,\n ],\n templateUrl: './generic-card.html',\n styleUrl: './generic-card.css'\n})\nexport class GenericCard <T extends { [key: string]: any }> implements OnInit{\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: boolean = true;\n\n // Added inputs for selection mirroring the table component\n @Input() rowSelectable: boolean = false;\n @Input() showRowSelectionCheckbox: boolean = false;\n @Input() paginator: boolean = 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 constructor(private translateService: TranslateService) {}\n\n ngOnInit(): void {\n // Initialize selection if needed, e.g., if a default selection should be present\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 <div *ngIf=\"loading\" 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 <div *ngIf=\"!loading && data.length === 0\" class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n\n <div *ngFor=\"let item of data; trackBy: trackById\"\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\n <div *ngIf=\"showRowSelectionCheckbox\" 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 <ng-container *ngFor=\"let col of columns\">\n <div *ngIf=\"col.isCardVisible\" 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 <ng-container *ngIf=\"col.clickable; else readonlyCardCell\">\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 <ng-container *ngIf=\"col.formatter; else defaultCardText\">\n <span [innerHTML]=\"col.formatter(item)\"></span>\n </ng-container>\n <ng-template #defaultCardText>\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n </ng-template>\n </span>\n </ng-container>\n\n <ng-template #readonlyCardCell>\n <span>\n <ng-container *ngIf=\"col.formatter; else defaultCardText2\">\n <span [innerHTML]=\"col.formatter(item)\"></span>\n </ng-container>\n <ng-template #defaultCardText2>\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n </ng-template>\n </span>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n\n </div>\n\n <div *ngIf=\"showOperations && actions.length > 0\" class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n <ng-container *ngIf=\"actionsMode === 'buttons'; else cardMenuTpl\">\n <ng-container *ngFor=\"let act of actions\">\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 </ng-container>\n </ng-container>\n\n <ng-template #cardMenuTpl>\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 </ng-template>\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}