commons-shared-web-ui 0.0.62 → 0.0.63
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/fesm2022/commons-shared-web-ui.mjs +16153 -0
- package/fesm2022/commons-shared-web-ui.mjs.map +1 -0
- package/index.d.ts +5033 -0
- package/package.json +34 -53
- package/.claude/settings.local.json +0 -10
- package/documentation/alert.md +0 -123
- package/documentation/button-dropdown.md +0 -126
- package/documentation/button.md +0 -184
- package/documentation/cards-usage-guidelines.md +0 -131
- package/documentation/configurable-form.md +0 -605
- package/documentation/confirmation-modal.md +0 -250
- package/documentation/filter-sidebar.md +0 -178
- package/documentation/filter-table-selector.md +0 -228
- package/documentation/form-builder.md +0 -599
- package/documentation/form-components.md +0 -384
- package/documentation/form-field-configuration.md +0 -250
- package/documentation/nav.md +0 -427
- package/documentation/pagination.md +0 -181
- package/documentation/side-nav-documentation.md +0 -169
- package/documentation/smart-form.md +0 -2819
- package/documentation/smart-table.md +0 -1297
- package/documentation/snackbar.md +0 -118
- package/documentation/style-externalization.md +0 -88
- package/documentation/summary-card.md +0 -279
- package/documentation/table-column-configuration.md +0 -221
- package/documentation/time-picker.md +0 -274
- package/ng-package.json +0 -30
- package/src/lib/modules/alert/alert.models.ts +0 -6
- package/src/lib/modules/alert/alert.module.ts +0 -16
- package/src/lib/modules/alert/components/alert/alert.component.html +0 -27
- package/src/lib/modules/alert/components/alert/alert.component.scss +0 -92
- package/src/lib/modules/alert/components/alert/alert.component.ts +0 -81
- package/src/lib/modules/button/button.models.ts +0 -13
- package/src/lib/modules/button/button.module.ts +0 -16
- package/src/lib/modules/button/components/button/button.component.html +0 -22
- package/src/lib/modules/button/components/button/button.component.scss +0 -92
- package/src/lib/modules/button/components/button/button.component.ts +0 -67
- package/src/lib/modules/button-dropdown/button-dropdown.models.ts +0 -26
- package/src/lib/modules/button-dropdown/button-dropdown.module.ts +0 -22
- package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.html +0 -41
- package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.scss +0 -135
- package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.ts +0 -160
- package/src/lib/modules/configurable-form/component/configurable-form.component.html +0 -294
- package/src/lib/modules/configurable-form/component/configurable-form.component.scss +0 -503
- package/src/lib/modules/configurable-form/component/configurable-form.component.ts +0 -628
- package/src/lib/modules/configurable-form/configurable-form.examples.ts +0 -154
- package/src/lib/modules/configurable-form/configurable-form.model.ts +0 -131
- package/src/lib/modules/configurable-form/configurable-form.module.ts +0 -19
- package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.html +0 -77
- package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.scss +0 -395
- package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.ts +0 -266
- package/src/lib/modules/confirmation-modal/confirmation-modal.models.ts +0 -71
- package/src/lib/modules/confirmation-modal/confirmation-modal.module.ts +0 -20
- package/src/lib/modules/filter/components/filter/filter.component.html +0 -131
- package/src/lib/modules/filter/components/filter/filter.component.scss +0 -245
- package/src/lib/modules/filter/components/filter/filter.component.ts +0 -216
- package/src/lib/modules/filter/filter.models.ts +0 -88
- package/src/lib/modules/filter/filter.module.ts +0 -24
- package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.html +0 -112
- package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.scss +0 -186
- package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.ts +0 -163
- package/src/lib/modules/filter-sidebar/filter-sidebar.models.ts +0 -95
- package/src/lib/modules/filter-sidebar/filter-sidebar.module.ts +0 -24
- package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.html +0 -73
- package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.scss +0 -321
- package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.ts +0 -361
- package/src/lib/modules/filter-table-selector/filter-table-selector.models.ts +0 -91
- package/src/lib/modules/filter-table-selector/filter-table-selector.module.ts +0 -22
- package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.html +0 -63
- package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.scss +0 -496
- package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.ts +0 -445
- package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.html +0 -75
- package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.scss +0 -210
- package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.ts +0 -55
- package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.html +0 -25
- package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.scss +0 -82
- package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.ts +0 -95
- package/src/lib/modules/form-builder/components/field-selection/field-selection.component.html +0 -20
- package/src/lib/modules/form-builder/components/field-selection/field-selection.component.scss +0 -37
- package/src/lib/modules/form-builder/components/field-selection/field-selection.component.ts +0 -94
- package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.html +0 -46
- package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.scss +0 -102
- package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.ts +0 -50
- package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.html +0 -35
- package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.scss +0 -67
- package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.ts +0 -34
- package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.html +0 -68
- package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.scss +0 -113
- package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.ts +0 -74
- package/src/lib/modules/form-builder/configs/field-type-schema.map.ts +0 -533
- package/src/lib/modules/form-builder/form-builder.module.ts +0 -36
- package/src/lib/modules/form-builder/index.ts +0 -9
- package/src/lib/modules/form-builder/models/builder.models.ts +0 -7
- package/src/lib/modules/form-builder/models/field-configurator.models.ts +0 -38
- package/src/lib/modules/form-builder/models/field-selection.models.ts +0 -51
- package/src/lib/modules/form-builder/services/field-configurator.service.ts +0 -258
- package/src/lib/modules/form-builder/services/field-selection.service.ts +0 -299
- package/src/lib/modules/form-builder/services/form-schema-tree.service.ts +0 -670
- package/src/lib/modules/form-builder/tokens/builder.tokens.ts +0 -10
- package/src/lib/modules/form-builder/utils/constants.ts +0 -43
- package/src/lib/modules/form-components/components/checkbox/checkbox.component.html +0 -29
- package/src/lib/modules/form-components/components/checkbox/checkbox.component.scss +0 -111
- package/src/lib/modules/form-components/components/checkbox/checkbox.component.ts +0 -207
- package/src/lib/modules/form-components/components/checkbox/checkbox.models.ts +0 -35
- package/src/lib/modules/form-components/components/datepicker/datepicker.component.html +0 -42
- package/src/lib/modules/form-components/components/datepicker/datepicker.component.scss +0 -115
- package/src/lib/modules/form-components/components/datepicker/datepicker.component.ts +0 -267
- package/src/lib/modules/form-components/components/datepicker/datepicker.models.ts +0 -45
- package/src/lib/modules/form-components/components/dropdown/dropdown.component.html +0 -74
- package/src/lib/modules/form-components/components/dropdown/dropdown.component.scss +0 -252
- package/src/lib/modules/form-components/components/dropdown/dropdown.component.ts +0 -377
- package/src/lib/modules/form-components/components/dropdown/dropdown.models.ts +0 -53
- package/src/lib/modules/form-components/components/input/input.component.html +0 -51
- package/src/lib/modules/form-components/components/input/input.component.scss +0 -128
- package/src/lib/modules/form-components/components/input/input.component.ts +0 -250
- package/src/lib/modules/form-components/components/input/input.models.ts +0 -55
- package/src/lib/modules/form-components/components/radio/radio.component.html +0 -22
- package/src/lib/modules/form-components/components/radio/radio.component.scss +0 -107
- package/src/lib/modules/form-components/components/radio/radio.component.ts +0 -181
- package/src/lib/modules/form-components/components/radio/radio.models.ts +0 -39
- package/src/lib/modules/form-components/components/search/search.component.html +0 -15
- package/src/lib/modules/form-components/components/search/search.component.scss +0 -87
- package/src/lib/modules/form-components/components/search/search.component.ts +0 -213
- package/src/lib/modules/form-components/components/search/search.models.ts +0 -40
- package/src/lib/modules/form-components/components/toggle/toggle.component.html +0 -15
- package/src/lib/modules/form-components/components/toggle/toggle.component.scss +0 -81
- package/src/lib/modules/form-components/components/toggle/toggle.component.ts +0 -166
- package/src/lib/modules/form-components/components/toggle/toggle.models.ts +0 -27
- package/src/lib/modules/form-components/directives/click-outside.directive.ts +0 -22
- package/src/lib/modules/form-components/form-components.module.ts +0 -42
- package/src/lib/modules/form-field-configuration/components/_ffc-controls.scss +0 -89
- package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.html +0 -68
- package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.scss +0 -73
- package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.ts +0 -34
- package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.html +0 -78
- package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.scss +0 -83
- package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.ts +0 -94
- package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.html +0 -38
- package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.scss +0 -42
- package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.ts +0 -92
- package/src/lib/modules/form-field-configuration/form-field-configuration.module.ts +0 -23
- package/src/lib/modules/form-field-configuration/index.ts +0 -7
- package/src/lib/modules/form-field-configuration/models/field-configuration.models.ts +0 -62
- package/src/lib/modules/form-field-configuration/services/config-schema-tree.service.ts +0 -159
- package/src/lib/modules/form-field-configuration/services/field-configuration.service.ts +0 -228
- package/src/lib/modules/material/material.module.ts +0 -94
- package/src/lib/modules/nav/components/nav/nav.component.html +0 -34
- package/src/lib/modules/nav/components/nav/nav.component.scss +0 -171
- package/src/lib/modules/nav/components/nav/nav.component.ts +0 -82
- package/src/lib/modules/nav/nav.models.ts +0 -31
- package/src/lib/modules/nav/nav.module.ts +0 -17
- package/src/lib/modules/pagination/components/pagination/pagination.component.html +0 -52
- package/src/lib/modules/pagination/components/pagination/pagination.component.scss +0 -155
- package/src/lib/modules/pagination/components/pagination/pagination.component.ts +0 -109
- package/src/lib/modules/pagination/pagination.module.ts +0 -17
- package/src/lib/modules/side-nav/components/side-nav/side-nav.component.html +0 -56
- package/src/lib/modules/side-nav/components/side-nav/side-nav.component.scss +0 -342
- package/src/lib/modules/side-nav/components/side-nav/side-nav.component.ts +0 -135
- package/src/lib/modules/side-nav/side-nav.models.ts +0 -38
- package/src/lib/modules/side-nav/side-nav.module.ts +0 -16
- package/src/lib/modules/smart-form/components/form-field/form-field.component.html +0 -1379
- package/src/lib/modules/smart-form/components/form-field/form-field.component.scss +0 -2255
- package/src/lib/modules/smart-form/components/form-field/form-field.component.ts +0 -3174
- package/src/lib/modules/smart-form/components/form-section/form-section.component.html +0 -67
- package/src/lib/modules/smart-form/components/form-section/form-section.component.scss +0 -209
- package/src/lib/modules/smart-form/components/form-section/form-section.component.ts +0 -142
- package/src/lib/modules/smart-form/components/smart-form/smart-form.component.html +0 -253
- package/src/lib/modules/smart-form/components/smart-form/smart-form.component.scss +0 -689
- package/src/lib/modules/smart-form/components/smart-form/smart-form.component.ts +0 -1134
- package/src/lib/modules/smart-form/index.ts +0 -10
- package/src/lib/modules/smart-form/models/form-schema.model.ts +0 -803
- package/src/lib/modules/smart-form/models/hierarchy-config.model.ts +0 -22
- package/src/lib/modules/smart-form/services/expression.service.ts +0 -75
- package/src/lib/modules/smart-form/services/smart-form-controller.service.ts +0 -67
- package/src/lib/modules/smart-form/smart-form.examples.ts +0 -1324
- package/src/lib/modules/smart-form/smart-form.module.ts +0 -40
- package/src/lib/modules/smart-form/utils/translation.utils.ts +0 -82
- package/src/lib/modules/smart-form/utils/trusted-url.pipe.ts +0 -25
- package/src/lib/modules/smart-form/utils/validation.utils.ts +0 -98
- package/src/lib/modules/smart-table/components/smart-table/smart-table.component.html +0 -283
- package/src/lib/modules/smart-table/components/smart-table/smart-table.component.scss +0 -685
- package/src/lib/modules/smart-table/components/smart-table/smart-table.component.ts +0 -1219
- package/src/lib/modules/smart-table/models/table-config.model.ts +0 -247
- package/src/lib/modules/smart-table/smart-table.module.ts +0 -30
- package/src/lib/modules/smart-table/utils/safe-html.pipe.ts +0 -28
- package/src/lib/modules/smart-table/utils/smart-table.utils.ts +0 -18
- package/src/lib/modules/snackbar/components/snackbar.component.html +0 -41
- package/src/lib/modules/snackbar/components/snackbar.component.scss +0 -99
- package/src/lib/modules/snackbar/components/snackbar.component.ts +0 -18
- package/src/lib/modules/snackbar/models/snackbar.models.ts +0 -10
- package/src/lib/modules/snackbar/services/snackbar.service.ts +0 -40
- package/src/lib/modules/snackbar/snackbar.module.ts +0 -11
- package/src/lib/modules/summary-card/components/summary-card/summary-card.component.html +0 -47
- package/src/lib/modules/summary-card/components/summary-card/summary-card.component.scss +0 -199
- package/src/lib/modules/summary-card/components/summary-card/summary-card.component.ts +0 -126
- package/src/lib/modules/summary-card/summary-card.module.ts +0 -18
- package/src/lib/modules/table-column-configuration/components/_tcc-controls.scss +0 -53
- package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.html +0 -47
- package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.scss +0 -50
- package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.ts +0 -33
- package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.html +0 -30
- package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.scss +0 -36
- package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.ts +0 -78
- package/src/lib/modules/table-column-configuration/index.ts +0 -5
- package/src/lib/modules/table-column-configuration/models/table-column-configuration.models.ts +0 -20
- package/src/lib/modules/table-column-configuration/services/table-column-configuration.service.ts +0 -77
- package/src/lib/modules/table-column-configuration/table-column-configuration.module.ts +0 -21
- package/src/lib/modules/time-picker/components/time-picker/time-picker.component.html +0 -37
- package/src/lib/modules/time-picker/components/time-picker/time-picker.component.scss +0 -102
- package/src/lib/modules/time-picker/components/time-picker/time-picker.component.ts +0 -178
- package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.html +0 -78
- package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.scss +0 -226
- package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.ts +0 -595
- package/src/lib/modules/time-picker/models/time-picker.models.ts +0 -49
- package/src/lib/modules/time-picker/time-picker.module.ts +0 -23
- package/src/lib/shared-ui.module.ts +0 -55
- package/src/lib/utils/constants.ts +0 -11
- package/src/lib/utils/storage.utils.ts +0 -37
- package/src/lib/utils/string.utils.ts +0 -23
- package/src/lib/utils/translation.utils.ts +0 -87
- package/src/public-api.ts +0 -127
- package/tsconfig.lib.json +0 -15
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
export interface TableOption {
|
|
2
|
-
label: string;
|
|
3
|
-
value: any;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface TableColumnSubField {
|
|
7
|
-
key: string;
|
|
8
|
-
label?: string;
|
|
9
|
-
dataType: 'text' | 'number' | 'email' | 'select' | 'date';
|
|
10
|
-
placeholder?: string;
|
|
11
|
-
editable?: boolean;
|
|
12
|
-
options?: TableOption[];
|
|
13
|
-
editConfig?: {
|
|
14
|
-
disabled?: boolean;
|
|
15
|
-
defaultValue?: any;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface TableColumn {
|
|
20
|
-
key: string;
|
|
21
|
-
label: string;
|
|
22
|
-
type: 'text' | 'number' | 'date' | 'custom' | 'html' | 'badge';
|
|
23
|
-
sortable?: boolean;
|
|
24
|
-
editable?: boolean;
|
|
25
|
-
dataType?: 'text' | 'number' | 'date' | 'email' | 'select';
|
|
26
|
-
options?: TableOption[]; // For select dataType
|
|
27
|
-
badgeConfig?: { [key: string]: 'success' | 'warning' | 'danger' | 'info' | 'neutral' }; // Map values to badge variants
|
|
28
|
-
width?: string;
|
|
29
|
-
cellClass?: string;
|
|
30
|
-
headerClass?: string;
|
|
31
|
-
sticky?: boolean;
|
|
32
|
-
labelPath?: string; // Path to fetch nested value (e.g. 'user.address.city')
|
|
33
|
-
emptyValue?: string; // Shown when the cell value is null, undefined, or empty string
|
|
34
|
-
dateFormat?: string; // Date format (e.g. 'short', 'medium', 'dd/MM/yyyy')
|
|
35
|
-
clickAction?: 'route' | 'callback';
|
|
36
|
-
clickRoute?: string; // Route pattern for redirection (e.g. '/users/:id')
|
|
37
|
-
subFields?: TableColumnSubField[]; // For columns displaying/editing multiple fields
|
|
38
|
-
editConfig?: {
|
|
39
|
-
disabled?: boolean;
|
|
40
|
-
defaultValue?: any;
|
|
41
|
-
};
|
|
42
|
-
/** Set to false to hide this column. Default: true. Driven by the column configurator. */
|
|
43
|
-
isEnabled?: boolean;
|
|
44
|
-
/** Backward-compatible visibility alias, kept in sync with isEnabled by the column configurator. */
|
|
45
|
-
visible?: boolean;
|
|
46
|
-
/** Configurator-only flag: when true the column can never be hidden (toggle is replaced by a lock). */
|
|
47
|
-
lockVisibility?: boolean;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface TableFilter {
|
|
51
|
-
key: string;
|
|
52
|
-
label: string;
|
|
53
|
-
type: 'select' | 'text' | 'date'; // Added type for future extension
|
|
54
|
-
options?: TableOption[];
|
|
55
|
-
apiUrl?: string;
|
|
56
|
-
apiMethod?: 'GET' | 'POST';
|
|
57
|
-
apiPayload?: any;
|
|
58
|
-
labelKey?: string;
|
|
59
|
-
valueKey?: string;
|
|
60
|
-
labelPath?: string;
|
|
61
|
-
valuePath?: string;
|
|
62
|
-
requestKey?: string;
|
|
63
|
-
dataPath?: string;
|
|
64
|
-
handling?: 'standard' | 'nested_string';
|
|
65
|
-
nestedStringConfig?: NestedStringConfig;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* A single condition evaluated against a row to decide action visibility.
|
|
70
|
-
*
|
|
71
|
-
* `field` is a path into the row (supports nesting + array index, e.g.
|
|
72
|
-
* 'status.code', 'subStatus.code', 'name[0].text'). When the resolved value is
|
|
73
|
-
* an object (e.g. `{ code, name, value }`), it is normalized to its `code`
|
|
74
|
-
* (then `name`, then `value`) so the SAME rule works whether the API returns
|
|
75
|
-
* `status: { code: 'ACTIVE' }` or `status: 'ACTIVE'`.
|
|
76
|
-
*
|
|
77
|
-
* String comparisons are case-insensitive.
|
|
78
|
-
*/
|
|
79
|
-
export interface VisibilityRule {
|
|
80
|
-
/** Path into the row, e.g. 'status.code' or just 'status'. */
|
|
81
|
-
field: string;
|
|
82
|
-
/** Comparison operator. Default: 'eq'. */
|
|
83
|
-
operator?: 'eq' | 'neq' | 'in' | 'nin' | 'truthy' | 'falsy';
|
|
84
|
-
/** Comparison value for 'eq' / 'neq'. */
|
|
85
|
-
value?: any;
|
|
86
|
-
/** Comparison list for 'in' / 'nin'. */
|
|
87
|
-
values?: any[];
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Row-aware visibility config shared by actions and action items.
|
|
92
|
-
* - `visibleWhen`: ALL rules must pass (AND) for the action to show.
|
|
93
|
-
* - `hiddenWhen`: if ANY rule passes (OR), the action is hidden.
|
|
94
|
-
* `hiddenWhen` takes precedence over `visibleWhen`. Either may be a single
|
|
95
|
-
* rule or an array of rules.
|
|
96
|
-
*/
|
|
97
|
-
export interface ActionVisibility {
|
|
98
|
-
visibleWhen?: VisibilityRule | VisibilityRule[];
|
|
99
|
-
hiddenWhen?: VisibilityRule | VisibilityRule[];
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export interface TableActionItem extends ActionVisibility {
|
|
103
|
-
label: string;
|
|
104
|
-
type: 'api' | 'callback' | 'route' | 'delete';
|
|
105
|
-
icon?: string;
|
|
106
|
-
apiUrl?: string;
|
|
107
|
-
apiMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
108
|
-
route?: string;
|
|
109
|
-
confirmationNeeded?: boolean;
|
|
110
|
-
confirmationMessage?: string;
|
|
111
|
-
callback?: (row: any) => void;
|
|
112
|
-
/** Set to false to hide this action item. Default: true */
|
|
113
|
-
isEnabled?: boolean;
|
|
114
|
-
/** Config for native 'delete' action type — drives the built-in confirmation modal */
|
|
115
|
-
deleteConfig?: {
|
|
116
|
-
apiUrl: string; // URL with :id placeholder e.g. 'gateway/service/api/v1/items/:id'
|
|
117
|
-
idField?: string; // Row field used as id (default: 'id')
|
|
118
|
-
modalTitle?: string;
|
|
119
|
-
modalMessage?: string;
|
|
120
|
-
confirmLabel?: string;
|
|
121
|
-
cancelLabel?: string;
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export interface TableAction extends ActionVisibility {
|
|
126
|
-
label: string;
|
|
127
|
-
type: 'api' | 'callback' | 'route' | 'edit' | 'dropdown';
|
|
128
|
-
icon?: string; // FontAwesome class or similar
|
|
129
|
-
btnVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline'; // utilizing button variants
|
|
130
|
-
apiUrl?: string;
|
|
131
|
-
apiMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
132
|
-
route?: string;
|
|
133
|
-
confirmationNeeded?: boolean;
|
|
134
|
-
confirmationMessage?: string;
|
|
135
|
-
callback?: (row: any) => void;
|
|
136
|
-
items?: TableActionItem[]; // For dropdown type
|
|
137
|
-
/** Set to false to hide this action. Default: true */
|
|
138
|
-
isEnabled?: boolean;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export interface PaginationConfig {
|
|
142
|
-
enabled: boolean;
|
|
143
|
-
pageSize: number;
|
|
144
|
-
pageSizeOptions: number[];
|
|
145
|
-
totalCountConfig?: {
|
|
146
|
-
source: 'same' | 'separate';
|
|
147
|
-
apiUrl?: string;
|
|
148
|
-
responsePath?: string;
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export interface TableTheme {
|
|
153
|
-
primaryColor?: string;
|
|
154
|
-
headerBg?: string;
|
|
155
|
-
headerColor?: string;
|
|
156
|
-
rowHoverBg?: string;
|
|
157
|
-
borderColor?: string;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export interface NestedStringConfig {
|
|
161
|
-
paramName: string;
|
|
162
|
-
baseValue?: string;
|
|
163
|
-
separator: string;
|
|
164
|
-
assignment: string;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export interface QueryParamsConfig {
|
|
168
|
-
pageKey?: string;
|
|
169
|
-
sizeKey?: string;
|
|
170
|
-
pageIndexOffset?: number; // e.g. -1 for 0-based index from 1-based UI
|
|
171
|
-
filterHandling?: 'standard' | 'nested_string';
|
|
172
|
-
nestedStringConfig?: NestedStringConfig;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
export interface TableConfig {
|
|
176
|
-
columns: TableColumn[];
|
|
177
|
-
apiUrl?: string; // Optional when tableData is provided externally
|
|
178
|
-
apiMethod?: 'GET' | 'POST';
|
|
179
|
-
apiPayload?: any;
|
|
180
|
-
dataResponsePath?: string;
|
|
181
|
-
filters?: TableFilter[];
|
|
182
|
-
filterData?: { [key: string]: any[] };
|
|
183
|
-
pagination?: PaginationConfig;
|
|
184
|
-
actions?: TableAction[]; // Row level actions
|
|
185
|
-
topBarButtons?: TableAction[]; // Buttons above the table
|
|
186
|
-
sortBy?: string;
|
|
187
|
-
orderBy?: 'ASC' | 'DESC';
|
|
188
|
-
theme?: TableTheme;
|
|
189
|
-
requestParams?: Function;
|
|
190
|
-
selectable?: boolean; // Checkbox selection
|
|
191
|
-
queryParamsConfig?: QueryParamsConfig;
|
|
192
|
-
labels?: TableLabels;
|
|
193
|
-
searchConfig?: SearchConfig;
|
|
194
|
-
maxHeight?: string;
|
|
195
|
-
stickyHeader?: boolean;
|
|
196
|
-
|
|
197
|
-
stickyColumnCount?: number;
|
|
198
|
-
token?: string; // Full token string (e.g. "Bearer ...")
|
|
199
|
-
tokenHeader?: string; // Header key (default: "Authorization")
|
|
200
|
-
editingRowClass?: string; // Optional CSS class to apply to rows being edited
|
|
201
|
-
/** Fallback text for any cell whose value is null, undefined, or empty string.
|
|
202
|
-
* Overridden per-column via TableColumn.emptyValue. Library default: '-' */
|
|
203
|
-
emptyValue?: string;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
export interface SearchConfig {
|
|
207
|
-
enabled: boolean;
|
|
208
|
-
searchKey?: string; // Query param key (default: 'search')
|
|
209
|
-
debounceTime?: number; // ms (default: 300)
|
|
210
|
-
handling?: 'standard' | 'nested_string'; // standard: ?search=term, nested_string: ?params=SEARCH_TERM=term
|
|
211
|
-
minimumCharacter?: number; // Min chars before the API is called (default: 3). Clearing the input always re-triggers.
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
export interface TableLabels {
|
|
215
|
-
searchPlaceholder?: string;
|
|
216
|
-
actionColumnHeader?: string;
|
|
217
|
-
noDataMessage?: string;
|
|
218
|
-
itemsPerPageLabel?: string;
|
|
219
|
-
defaultConfirmationMessage?: string;
|
|
220
|
-
saveLabel?: string;
|
|
221
|
-
cancelLabel?: string;
|
|
222
|
-
addLabel?: string;
|
|
223
|
-
/** Variant for the Add button (new row). Defaults to 'danger'. */
|
|
224
|
-
addButtonVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline';
|
|
225
|
-
/** Variant for the Save button (edit row). Defaults to 'primary'. */
|
|
226
|
-
saveButtonVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline';
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Emitted by the SmartTableComponent when operating in external-data mode
|
|
231
|
-
* (i.e. when [tableData] input is provided by the parent).
|
|
232
|
-
* The parent is responsible for fetching updated data based on this event
|
|
233
|
-
* and providing it back via [tableData] and [totalItemsCount].
|
|
234
|
-
*/
|
|
235
|
-
export interface TableDataChangeEvent {
|
|
236
|
-
page: number;
|
|
237
|
-
pageSize: number;
|
|
238
|
-
sortBy?: string;
|
|
239
|
-
orderBy?: 'ASC' | 'DESC';
|
|
240
|
-
searchTerm?: string;
|
|
241
|
-
filters?: { [key: string]: any };
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
export interface TableRowSaveEvent {
|
|
245
|
-
row: any;
|
|
246
|
-
isNew: boolean;
|
|
247
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { SmartTableComponent } from './components/smart-table/smart-table.component';
|
|
5
|
-
import { PaginationModule } from '../pagination/pagination.module';
|
|
6
|
-
import { ButtonModule } from '../button/button.module';
|
|
7
|
-
import { MaterialModule } from '../material/material.module';
|
|
8
|
-
import { ConfirmationModalModule } from '../confirmation-modal/confirmation-modal.module';
|
|
9
|
-
import { SafeHtmlPipe } from './utils/safe-html.pipe';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@NgModule({
|
|
13
|
-
declarations: [
|
|
14
|
-
SmartTableComponent,
|
|
15
|
-
SafeHtmlPipe
|
|
16
|
-
],
|
|
17
|
-
imports: [
|
|
18
|
-
CommonModule,
|
|
19
|
-
FormsModule,
|
|
20
|
-
PaginationModule,
|
|
21
|
-
ButtonModule,
|
|
22
|
-
MaterialModule,
|
|
23
|
-
ConfirmationModalModule
|
|
24
|
-
],
|
|
25
|
-
exports: [
|
|
26
|
-
SmartTableComponent
|
|
27
|
-
]
|
|
28
|
-
})
|
|
29
|
-
export class SmartTableModule { }
|
|
30
|
-
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Pipe, PipeTransform, SecurityContext } from '@angular/core';
|
|
2
|
-
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Marks rich-text HTML (e.g. from a smart-table "html" column, always sourced from this
|
|
6
|
-
* app's own rich-text editor output, never arbitrary external/user-supplied markup) as
|
|
7
|
-
* trusted so [innerHTML] renders it without Angular's default HTML sanitizer stripping it.
|
|
8
|
-
*
|
|
9
|
-
* Deliberately does NOT run the value through DomSanitizer.sanitize(SecurityContext.HTML, ...)
|
|
10
|
-
* first — that sanitizer strips `style` attributes entirely (they're not in its allowlist),
|
|
11
|
-
* which silently destroyed rich-text formatting like text color and highlight color while
|
|
12
|
-
* leaving semantic-tag formatting (bold/italic/underline) untouched, since only tags — not
|
|
13
|
-
* inline styles — survive that pass.
|
|
14
|
-
*/
|
|
15
|
-
@Pipe({
|
|
16
|
-
name: 'safeHtml',
|
|
17
|
-
standalone: false
|
|
18
|
-
})
|
|
19
|
-
export class SafeHtmlPipe implements PipeTransform {
|
|
20
|
-
constructor(private sanitizer: DomSanitizer) { }
|
|
21
|
-
|
|
22
|
-
transform(value: string): SafeHtml | null {
|
|
23
|
-
if (!value) {
|
|
24
|
-
return '';
|
|
25
|
-
}
|
|
26
|
-
return this.sanitizer.bypassSecurityTrustHtml(value);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export function appendBaseUrlRecursively(obj: any, baseURL: string): void {
|
|
2
|
-
if (obj && typeof obj === 'object') {
|
|
3
|
-
if (obj.apiUrl && typeof obj.apiUrl === 'string' && !obj.apiUrl.startsWith('http://') && !obj.apiUrl.startsWith('https://')) {
|
|
4
|
-
let finalApiUrl = obj.apiUrl;
|
|
5
|
-
if (baseURL.endsWith('/') && finalApiUrl.startsWith('/')) {
|
|
6
|
-
finalApiUrl = finalApiUrl.substring(1);
|
|
7
|
-
} else if (!baseURL.endsWith('/') && !finalApiUrl.startsWith('/')) {
|
|
8
|
-
finalApiUrl = '/' + finalApiUrl;
|
|
9
|
-
}
|
|
10
|
-
obj.apiUrl = baseURL + finalApiUrl;
|
|
11
|
-
}
|
|
12
|
-
for (const key in obj) {
|
|
13
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
14
|
-
appendBaseUrlRecursively(obj[key], baseURL);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
<div class="cc-snackbar-container" [ngClass]="variantClass">
|
|
2
|
-
<div class="cc-snackbar-icon">
|
|
3
|
-
<!-- Success Icon -->
|
|
4
|
-
<svg *ngIf="data.variant === 'success'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
5
|
-
<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path>
|
|
6
|
-
<polyline points="22 4 12 14.01 9 11.01"></polyline>
|
|
7
|
-
</svg>
|
|
8
|
-
|
|
9
|
-
<!-- Error Icon -->
|
|
10
|
-
<svg *ngIf="data.variant === 'error'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
11
|
-
<circle cx="12" cy="12" r="10"></circle>
|
|
12
|
-
<line x1="15" y1="9" x2="9" y2="15"></line>
|
|
13
|
-
<line x1="9" y1="9" x2="15" y2="15"></line>
|
|
14
|
-
</svg>
|
|
15
|
-
|
|
16
|
-
<!-- Warning Icon -->
|
|
17
|
-
<svg *ngIf="data.variant === 'warning'" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
18
|
-
<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path>
|
|
19
|
-
<line x1="12" y1="9" x2="12" y2="13"></line>
|
|
20
|
-
<line x1="12" y1="17" x2="12.01" y2="17"></line>
|
|
21
|
-
</svg>
|
|
22
|
-
|
|
23
|
-
<!-- Info Icon -->
|
|
24
|
-
<svg *ngIf="data.variant === 'info' || !data.variant" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
25
|
-
<circle cx="12" cy="12" r="10"></circle>
|
|
26
|
-
<line x1="12" y1="16" x2="12" y2="12"></line>
|
|
27
|
-
<line x1="12" y1="8" x2="12.01" y2="8"></line>
|
|
28
|
-
</svg>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<div class="cc-snackbar-message">
|
|
32
|
-
{{ data.message }}
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<button *ngIf="data.showCloseButton" class="cc-snackbar-close" (click)="snackBarRef.dismiss()">
|
|
36
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
37
|
-
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
38
|
-
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
39
|
-
</svg>
|
|
40
|
-
</button>
|
|
41
|
-
</div>
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
.cc-snackbar-container {
|
|
2
|
-
display: flex;
|
|
3
|
-
align-items: center;
|
|
4
|
-
gap: var(--cc-sb-gap, 12px);
|
|
5
|
-
padding: var(--cc-sb-padding, 12px 16px);
|
|
6
|
-
border-radius: var(--cc-sb-radius, 8px);
|
|
7
|
-
box-shadow: var(--cc-sb-shadow, 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06));
|
|
8
|
-
font-family: var(--cc-sb-font-family, 'Inter', sans-serif);
|
|
9
|
-
font-size: var(--cc-sb-font-size, 14px);
|
|
10
|
-
font-weight: var(--cc-sb-font-weight, 500);
|
|
11
|
-
background: var(--cc-sb-bg, #ffffff);
|
|
12
|
-
color: var(--cc-sb-color, #1f2937);
|
|
13
|
-
border: var(--cc-sb-border, 1px solid transparent);
|
|
14
|
-
min-width: var(--cc-sb-min-width, 300px);
|
|
15
|
-
|
|
16
|
-
&.snackbar-success {
|
|
17
|
-
background: var(--cc-sb-success-bg, #ecfdf5);
|
|
18
|
-
color: var(--cc-sb-success-color, #065f46);
|
|
19
|
-
border-color: var(--cc-sb-success-border, #a7f3d0);
|
|
20
|
-
.cc-snackbar-icon { color: var(--cc-sb-success-icon-color, #10b981); }
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
&.snackbar-error {
|
|
24
|
-
background: var(--cc-sb-error-bg, #fef2f2);
|
|
25
|
-
color: var(--cc-sb-error-color, #991b1b);
|
|
26
|
-
border-color: var(--cc-sb-error-border, #fecaca);
|
|
27
|
-
.cc-snackbar-icon { color: var(--cc-sb-error-icon-color, #ef4444); }
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
&.snackbar-warning {
|
|
31
|
-
background: var(--cc-sb-warning-bg, #fffbeb);
|
|
32
|
-
color: var(--cc-sb-warning-color, #92400e);
|
|
33
|
-
border-color: var(--cc-sb-warning-border, #fde68a);
|
|
34
|
-
.cc-snackbar-icon { color: var(--cc-sb-warning-icon-color, #f59e0b); }
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
&.snackbar-info {
|
|
38
|
-
background: var(--cc-sb-info-bg, #eff6ff);
|
|
39
|
-
color: var(--cc-sb-info-color, #1e40af);
|
|
40
|
-
border-color: var(--cc-sb-info-border, #bfdbfe);
|
|
41
|
-
.cc-snackbar-icon { color: var(--cc-sb-info-icon-color, #3b82f6); }
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.cc-snackbar-icon {
|
|
45
|
-
display: flex;
|
|
46
|
-
align-items: center;
|
|
47
|
-
justify-content: center;
|
|
48
|
-
flex-shrink: 0;
|
|
49
|
-
|
|
50
|
-
svg {
|
|
51
|
-
width: var(--cc-sb-icon-size, 20px);
|
|
52
|
-
height: var(--cc-sb-icon-size, 20px);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.cc-snackbar-message {
|
|
57
|
-
flex-grow: 1;
|
|
58
|
-
line-height: 1.4;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.cc-snackbar-close {
|
|
62
|
-
background: transparent;
|
|
63
|
-
border: none;
|
|
64
|
-
padding: 0;
|
|
65
|
-
margin: 0;
|
|
66
|
-
cursor: pointer;
|
|
67
|
-
display: flex;
|
|
68
|
-
align-items: center;
|
|
69
|
-
justify-content: center;
|
|
70
|
-
color: currentcolor;
|
|
71
|
-
opacity: 0.7;
|
|
72
|
-
transition: opacity 0.2s;
|
|
73
|
-
|
|
74
|
-
&:hover {
|
|
75
|
-
opacity: 1;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
svg {
|
|
79
|
-
width: var(--cc-sb-close-icon-size, 16px);
|
|
80
|
-
height: var(--cc-sb-close-icon-size, 16px);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Override Angular Material default snackbar surface
|
|
86
|
-
::ng-deep .cc-snackbar-panel {
|
|
87
|
-
.mdc-snackbar__surface {
|
|
88
|
-
background: transparent !important;
|
|
89
|
-
box-shadow: none !important;
|
|
90
|
-
padding: 0 !important;
|
|
91
|
-
border-radius: 0 !important;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
&.mat-snack-bar-container {
|
|
95
|
-
background: transparent !important;
|
|
96
|
-
box-shadow: none !important;
|
|
97
|
-
padding: 0 !important;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Component, inject } from '@angular/core';
|
|
2
|
-
import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';
|
|
3
|
-
import { SnackbarConfig } from '../models/snackbar.models';
|
|
4
|
-
|
|
5
|
-
@Component({
|
|
6
|
-
selector: 'lib-snackbar',
|
|
7
|
-
templateUrl: './snackbar.component.html',
|
|
8
|
-
styleUrls: ['./snackbar.component.scss'],
|
|
9
|
-
standalone: false
|
|
10
|
-
})
|
|
11
|
-
export class SnackbarComponent {
|
|
12
|
-
public data: SnackbarConfig = inject(MAT_SNACK_BAR_DATA);
|
|
13
|
-
public snackBarRef: MatSnackBarRef<SnackbarComponent> = inject(MatSnackBarRef);
|
|
14
|
-
|
|
15
|
-
get variantClass(): string {
|
|
16
|
-
return `snackbar-${this.data.variant || 'info'}`;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export type SnackbarVariant = 'success' | 'error' | 'warning' | 'info';
|
|
2
|
-
|
|
3
|
-
export interface SnackbarConfig {
|
|
4
|
-
message: string;
|
|
5
|
-
variant?: SnackbarVariant;
|
|
6
|
-
duration?: number;
|
|
7
|
-
horizontalPosition?: 'start' | 'center' | 'end' | 'left' | 'right';
|
|
8
|
-
verticalPosition?: 'top' | 'bottom';
|
|
9
|
-
showCloseButton?: boolean;
|
|
10
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
|
|
3
|
-
import { SnackbarConfig } from '../models/snackbar.models';
|
|
4
|
-
import { SnackbarComponent } from '../components/snackbar.component';
|
|
5
|
-
|
|
6
|
-
@Injectable({
|
|
7
|
-
providedIn: 'root'
|
|
8
|
-
})
|
|
9
|
-
export class SnackbarService {
|
|
10
|
-
|
|
11
|
-
constructor(private snackBar: MatSnackBar) {}
|
|
12
|
-
|
|
13
|
-
show(config: SnackbarConfig): void {
|
|
14
|
-
const matConfig: MatSnackBarConfig = {
|
|
15
|
-
duration: config.duration ?? 5000,
|
|
16
|
-
horizontalPosition: config.horizontalPosition ?? 'right',
|
|
17
|
-
verticalPosition: config.verticalPosition ?? 'top',
|
|
18
|
-
panelClass: ['cc-snackbar-panel', `cc-snackbar-${config.variant || 'info'}`],
|
|
19
|
-
data: config // Pass the entire config down to the component
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
this.snackBar.openFromComponent(SnackbarComponent, matConfig);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
success(message: string, duration?: number): void {
|
|
26
|
-
this.show({ message, variant: 'success', duration });
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
error(message: string, duration?: number): void {
|
|
30
|
-
this.show({ message, variant: 'error', duration });
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
warning(message: string, duration?: number): void {
|
|
34
|
-
this.show({ message, variant: 'warning', duration });
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
info(message: string, duration?: number): void {
|
|
38
|
-
this.show({ message, variant: 'info', duration });
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
|
4
|
-
import { SnackbarComponent } from './components/snackbar.component';
|
|
5
|
-
|
|
6
|
-
@NgModule({
|
|
7
|
-
declarations: [SnackbarComponent],
|
|
8
|
-
imports: [CommonModule, MatSnackBarModule],
|
|
9
|
-
exports: [SnackbarComponent]
|
|
10
|
-
})
|
|
11
|
-
export class SnackbarModule {}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
<div class="cc-summary-card" (click)="onCardClick()">
|
|
2
|
-
<!-- Icon Section (Left Side) -->
|
|
3
|
-
<div class="icon-section" *ngIf="config.icon || config.iconImage" [ngClass]="config.iconClass"
|
|
4
|
-
[ngStyle]="iconStyles">
|
|
5
|
-
<mat-icon *ngIf="config.icon">{{ config.icon }}</mat-icon>
|
|
6
|
-
<img *ngIf="!config.icon && config.iconImage" [src]="config.iconImage" [alt]="labels.iconAlt">
|
|
7
|
-
</div>
|
|
8
|
-
|
|
9
|
-
<!-- Right Section (Header + Value/Meta) -->
|
|
10
|
-
<div class="right-section">
|
|
11
|
-
<!-- Header (Full Width on Right) -->
|
|
12
|
-
<div class="header" [ngClass]="config.headerClass" [ngStyle]="headerStyles">
|
|
13
|
-
{{ config.header }}
|
|
14
|
-
</div>
|
|
15
|
-
|
|
16
|
-
<!-- Value and Meta Row -->
|
|
17
|
-
<div class="value-meta-row">
|
|
18
|
-
<!-- Content Section -->
|
|
19
|
-
<div class="content-section">
|
|
20
|
-
<!-- Value Row (with optional inline description) -->
|
|
21
|
-
<div class="value-row" [class.inline-layout]="isDescriptionInline">
|
|
22
|
-
<div class="value-container">
|
|
23
|
-
<div class="value" [ngClass]="config.valueClass" [ngStyle]="valueStyles">
|
|
24
|
-
{{ config.value }}
|
|
25
|
-
<span *ngIf="config.valueSubtext" class="value-subtext">{{ config.valueSubtext }}</span>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
<!-- Description (inline or bottom based on config) -->
|
|
30
|
-
<div class="description" *ngIf="config.description" [ngClass]="config.descriptionClass"
|
|
31
|
-
[ngStyle]="descriptionStyles">
|
|
32
|
-
{{ config.description }}
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<!-- Meta/Status Section (Aligned with Value) -->
|
|
38
|
-
<div class="meta-section" *ngIf="config.metaData && config.metaData.length > 0">
|
|
39
|
-
<div *ngFor="let meta of config.metaData" class="meta-item"
|
|
40
|
-
[ngClass]="[meta.type === 'pill' ? 'meta-pill' : 'meta-text', meta.cssClass || '']"
|
|
41
|
-
[ngStyle]="getMetaStyles(meta)">
|
|
42
|
-
{{ meta.text }}
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
</div>
|
|
47
|
-
</div>
|