@elite.framework/ng.core 1.0.65 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -22
- package/directives/README.md +3 -0
- package/fesm2022/{elite.framework-ng.core-src-lib-directives.mjs → elite.framework-ng.core-directives.mjs} +7 -7
- package/fesm2022/elite.framework-ng.core-directives.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-models.mjs +47 -0
- package/fesm2022/elite.framework-ng.core-models.mjs.map +1 -0
- package/fesm2022/{elite.framework-ng.core-src-lib-pipes.mjs → elite.framework-ng.core-pipes.mjs} +7 -7
- package/fesm2022/elite.framework-ng.core-pipes.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-providers.mjs +18 -0
- package/fesm2022/elite.framework-ng.core-providers.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-services.mjs +509 -0
- package/fesm2022/elite.framework-ng.core-services.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-tokens.mjs +17 -0
- package/fesm2022/elite.framework-ng.core-tokens.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core.mjs +7 -2239
- package/fesm2022/elite.framework-ng.core.mjs.map +1 -1
- package/index.d.ts +4 -648
- package/models/README.md +3 -0
- package/models/index.d.ts +135 -0
- package/package.json +26 -170
- package/pipes/README.md +3 -0
- package/providers/README.md +3 -0
- package/providers/index.d.ts +6 -0
- package/services/README.md +3 -0
- package/services/index.d.ts +250 -0
- package/tokens/README.md +3 -0
- package/tokens/index.d.ts +15 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs +0 -204
- package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs +0 -132
- package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs +0 -76
- package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs +0 -172
- package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs +0 -794
- package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs +0 -110
- package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs +0 -130
- package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs +0 -50
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs +0 -154
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs +0 -24
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs +0 -100
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs +0 -78
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs +0 -167
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs +0 -62
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs +0 -50
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs +0 -76
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs +0 -163
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs +0 -133
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs +0 -214
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs +0 -385
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs +0 -23
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs +0 -53
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs +0 -23
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs +0 -85
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs +0 -430
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs +0 -216
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs +0 -18
- package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs +0 -195
- package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs +0 -94
- package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs +0 -55
- package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs +0 -112
- package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs +0 -297
- package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs +0 -135
- package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs +0 -40
- package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs +0 -41
- package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs +0 -45
- package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs +0 -192
- package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs +0 -44
- package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs +0 -174
- package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-directives.mjs.map +0 -1
- package/fesm2022/elite.framework-ng.core-src-lib-pipes.mjs.map +0 -1
- package/src/lib/components/attachments/index.d.ts +0 -31
- package/src/lib/components/breadcrumb/index.d.ts +0 -10
- package/src/lib/components/color-picker/index.d.ts +0 -9
- package/src/lib/components/column-settings-popover/index.d.ts +0 -39
- package/src/lib/components/condition-editor/index.d.ts +0 -73
- package/src/lib/components/custom-switch/index.d.ts +0 -12
- package/src/lib/components/deactivation-reason/index.d.ts +0 -24
- package/src/lib/components/form-button/index.d.ts +0 -10
- package/src/lib/components/form-field/index.d.ts +0 -30
- package/src/lib/components/form-template/index.d.ts +0 -9
- package/src/lib/components/formly-avatar-image/index.d.ts +0 -11
- package/src/lib/components/formly-avatar-label/index.d.ts +0 -29
- package/src/lib/components/formly-button/index.d.ts +0 -13
- package/src/lib/components/formly-button-selector/index.d.ts +0 -28
- package/src/lib/components/formly-split-button/index.d.ts +0 -16
- package/src/lib/components/formly-username-with-domain/index.d.ts +0 -12
- package/src/lib/components/generic-autocomplete/index.d.ts +0 -34
- package/src/lib/components/generic-button/index.d.ts +0 -35
- package/src/lib/components/generic-card/index.d.ts +0 -90
- package/src/lib/components/generic-crud-table/index.d.ts +0 -120
- package/src/lib/components/generic-errormessage/index.d.ts +0 -10
- package/src/lib/components/generic-formly-fields/index.d.ts +0 -22
- package/src/lib/components/generic-loadingspinner/index.d.ts +0 -9
- package/src/lib/components/generic-search/index.d.ts +0 -29
- package/src/lib/components/generic-selector/index.d.ts +0 -66
- package/src/lib/components/generic-table/index.d.ts +0 -60
- package/src/lib/components/header-wrapper/index.d.ts +0 -8
- package/src/lib/components/icon-picker/index.d.ts +0 -23
- package/src/lib/components/input-switch/index.d.ts +0 -9
- package/src/lib/components/input-with-icon/index.d.ts +0 -10
- package/src/lib/components/label-type/index.d.ts +0 -19
- package/src/lib/components/odata-query-builder/index.d.ts +0 -81
- package/src/lib/components/repeat/index.d.ts +0 -17
- package/src/lib/components/sidebar-cards/index.d.ts +0 -18
- package/src/lib/components/sidebar-toggles/index.d.ts +0 -18
- package/src/lib/components/tabs/index.d.ts +0 -10
- package/src/lib/components/tag-type/index.d.ts +0 -27
- package/src/lib/components/text-editor/index.d.ts +0 -9
- package/src/lib/components/wrappers/index.d.ts +0 -24
- /package/{src/lib/directives → directives}/index.d.ts +0 -0
- /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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"}
|