commons-shared-web-ui 0.0.55 → 0.0.57

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 (223) hide show
  1. package/fesm2022/commons-shared-web-ui.mjs +15897 -0
  2. package/fesm2022/commons-shared-web-ui.mjs.map +1 -0
  3. package/index.d.ts +4916 -0
  4. package/package.json +34 -53
  5. package/src/lib/modules/button/button.theme.scss +4 -4
  6. package/.claude/settings.local.json +0 -10
  7. package/documentation/alert.md +0 -123
  8. package/documentation/button-dropdown.md +0 -126
  9. package/documentation/button.md +0 -184
  10. package/documentation/cards-usage-guidelines.md +0 -131
  11. package/documentation/configurable-form.md +0 -605
  12. package/documentation/confirmation-modal.md +0 -250
  13. package/documentation/filter-sidebar.md +0 -178
  14. package/documentation/filter-table-selector.md +0 -228
  15. package/documentation/form-builder.md +0 -599
  16. package/documentation/form-components.md +0 -384
  17. package/documentation/form-field-configuration.md +0 -250
  18. package/documentation/nav.md +0 -427
  19. package/documentation/pagination.md +0 -181
  20. package/documentation/side-nav-documentation.md +0 -169
  21. package/documentation/smart-form.md +0 -2765
  22. package/documentation/smart-table.md +0 -1221
  23. package/documentation/snackbar.md +0 -118
  24. package/documentation/style-externalization.md +0 -88
  25. package/documentation/summary-card.md +0 -279
  26. package/documentation/table-column-configuration.md +0 -221
  27. package/documentation/time-picker.md +0 -274
  28. package/ng-package.json +0 -30
  29. package/src/lib/modules/alert/alert.models.ts +0 -6
  30. package/src/lib/modules/alert/alert.module.ts +0 -16
  31. package/src/lib/modules/alert/components/alert/alert.component.html +0 -27
  32. package/src/lib/modules/alert/components/alert/alert.component.scss +0 -92
  33. package/src/lib/modules/alert/components/alert/alert.component.ts +0 -81
  34. package/src/lib/modules/button/button.models.ts +0 -13
  35. package/src/lib/modules/button/button.module.ts +0 -16
  36. package/src/lib/modules/button/components/button/button.component.html +0 -22
  37. package/src/lib/modules/button/components/button/button.component.scss +0 -88
  38. package/src/lib/modules/button/components/button/button.component.ts +0 -67
  39. package/src/lib/modules/button-dropdown/button-dropdown.models.ts +0 -26
  40. package/src/lib/modules/button-dropdown/button-dropdown.module.ts +0 -22
  41. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.html +0 -41
  42. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.scss +0 -135
  43. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.ts +0 -160
  44. package/src/lib/modules/configurable-form/component/configurable-form.component.html +0 -294
  45. package/src/lib/modules/configurable-form/component/configurable-form.component.scss +0 -503
  46. package/src/lib/modules/configurable-form/component/configurable-form.component.ts +0 -628
  47. package/src/lib/modules/configurable-form/configurable-form.examples.ts +0 -154
  48. package/src/lib/modules/configurable-form/configurable-form.model.ts +0 -131
  49. package/src/lib/modules/configurable-form/configurable-form.module.ts +0 -19
  50. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.html +0 -77
  51. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.scss +0 -395
  52. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.ts +0 -266
  53. package/src/lib/modules/confirmation-modal/confirmation-modal.models.ts +0 -71
  54. package/src/lib/modules/confirmation-modal/confirmation-modal.module.ts +0 -20
  55. package/src/lib/modules/filter/components/filter/filter.component.html +0 -131
  56. package/src/lib/modules/filter/components/filter/filter.component.scss +0 -245
  57. package/src/lib/modules/filter/components/filter/filter.component.ts +0 -216
  58. package/src/lib/modules/filter/filter.models.ts +0 -88
  59. package/src/lib/modules/filter/filter.module.ts +0 -24
  60. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.html +0 -112
  61. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.scss +0 -186
  62. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.ts +0 -163
  63. package/src/lib/modules/filter-sidebar/filter-sidebar.models.ts +0 -95
  64. package/src/lib/modules/filter-sidebar/filter-sidebar.module.ts +0 -24
  65. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.html +0 -73
  66. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.scss +0 -321
  67. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.ts +0 -361
  68. package/src/lib/modules/filter-table-selector/filter-table-selector.models.ts +0 -91
  69. package/src/lib/modules/filter-table-selector/filter-table-selector.module.ts +0 -22
  70. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.html +0 -63
  71. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.scss +0 -496
  72. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.ts +0 -445
  73. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.html +0 -75
  74. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.scss +0 -210
  75. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.ts +0 -55
  76. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.html +0 -25
  77. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.scss +0 -82
  78. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.ts +0 -95
  79. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.html +0 -20
  80. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.scss +0 -37
  81. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.ts +0 -94
  82. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.html +0 -46
  83. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.scss +0 -102
  84. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.ts +0 -50
  85. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.html +0 -35
  86. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.scss +0 -67
  87. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.ts +0 -34
  88. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.html +0 -68
  89. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.scss +0 -113
  90. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.ts +0 -74
  91. package/src/lib/modules/form-builder/configs/field-type-schema.map.ts +0 -533
  92. package/src/lib/modules/form-builder/form-builder.module.ts +0 -36
  93. package/src/lib/modules/form-builder/index.ts +0 -9
  94. package/src/lib/modules/form-builder/models/builder.models.ts +0 -7
  95. package/src/lib/modules/form-builder/models/field-configurator.models.ts +0 -38
  96. package/src/lib/modules/form-builder/models/field-selection.models.ts +0 -51
  97. package/src/lib/modules/form-builder/services/field-configurator.service.ts +0 -258
  98. package/src/lib/modules/form-builder/services/field-selection.service.ts +0 -299
  99. package/src/lib/modules/form-builder/services/form-schema-tree.service.ts +0 -670
  100. package/src/lib/modules/form-builder/tokens/builder.tokens.ts +0 -10
  101. package/src/lib/modules/form-builder/utils/constants.ts +0 -43
  102. package/src/lib/modules/form-components/components/checkbox/checkbox.component.html +0 -29
  103. package/src/lib/modules/form-components/components/checkbox/checkbox.component.scss +0 -111
  104. package/src/lib/modules/form-components/components/checkbox/checkbox.component.ts +0 -207
  105. package/src/lib/modules/form-components/components/checkbox/checkbox.models.ts +0 -35
  106. package/src/lib/modules/form-components/components/datepicker/datepicker.component.html +0 -42
  107. package/src/lib/modules/form-components/components/datepicker/datepicker.component.scss +0 -115
  108. package/src/lib/modules/form-components/components/datepicker/datepicker.component.ts +0 -267
  109. package/src/lib/modules/form-components/components/datepicker/datepicker.models.ts +0 -45
  110. package/src/lib/modules/form-components/components/dropdown/dropdown.component.html +0 -74
  111. package/src/lib/modules/form-components/components/dropdown/dropdown.component.scss +0 -252
  112. package/src/lib/modules/form-components/components/dropdown/dropdown.component.ts +0 -377
  113. package/src/lib/modules/form-components/components/dropdown/dropdown.models.ts +0 -53
  114. package/src/lib/modules/form-components/components/input/input.component.html +0 -51
  115. package/src/lib/modules/form-components/components/input/input.component.scss +0 -128
  116. package/src/lib/modules/form-components/components/input/input.component.ts +0 -250
  117. package/src/lib/modules/form-components/components/input/input.models.ts +0 -55
  118. package/src/lib/modules/form-components/components/radio/radio.component.html +0 -22
  119. package/src/lib/modules/form-components/components/radio/radio.component.scss +0 -107
  120. package/src/lib/modules/form-components/components/radio/radio.component.ts +0 -181
  121. package/src/lib/modules/form-components/components/radio/radio.models.ts +0 -39
  122. package/src/lib/modules/form-components/components/search/search.component.html +0 -15
  123. package/src/lib/modules/form-components/components/search/search.component.scss +0 -87
  124. package/src/lib/modules/form-components/components/search/search.component.ts +0 -213
  125. package/src/lib/modules/form-components/components/search/search.models.ts +0 -40
  126. package/src/lib/modules/form-components/components/toggle/toggle.component.html +0 -15
  127. package/src/lib/modules/form-components/components/toggle/toggle.component.scss +0 -81
  128. package/src/lib/modules/form-components/components/toggle/toggle.component.ts +0 -166
  129. package/src/lib/modules/form-components/components/toggle/toggle.models.ts +0 -27
  130. package/src/lib/modules/form-components/directives/click-outside.directive.ts +0 -22
  131. package/src/lib/modules/form-components/form-components.module.ts +0 -42
  132. package/src/lib/modules/form-field-configuration/components/_ffc-controls.scss +0 -89
  133. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.html +0 -68
  134. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.scss +0 -73
  135. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.ts +0 -34
  136. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.html +0 -78
  137. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.scss +0 -83
  138. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.ts +0 -94
  139. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.html +0 -38
  140. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.scss +0 -42
  141. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.ts +0 -92
  142. package/src/lib/modules/form-field-configuration/form-field-configuration.module.ts +0 -23
  143. package/src/lib/modules/form-field-configuration/index.ts +0 -7
  144. package/src/lib/modules/form-field-configuration/models/field-configuration.models.ts +0 -62
  145. package/src/lib/modules/form-field-configuration/services/config-schema-tree.service.ts +0 -159
  146. package/src/lib/modules/form-field-configuration/services/field-configuration.service.ts +0 -228
  147. package/src/lib/modules/material/material.module.ts +0 -94
  148. package/src/lib/modules/nav/components/nav/nav.component.html +0 -34
  149. package/src/lib/modules/nav/components/nav/nav.component.scss +0 -171
  150. package/src/lib/modules/nav/components/nav/nav.component.ts +0 -82
  151. package/src/lib/modules/nav/nav.models.ts +0 -31
  152. package/src/lib/modules/nav/nav.module.ts +0 -17
  153. package/src/lib/modules/pagination/components/pagination/pagination.component.html +0 -52
  154. package/src/lib/modules/pagination/components/pagination/pagination.component.scss +0 -155
  155. package/src/lib/modules/pagination/components/pagination/pagination.component.ts +0 -109
  156. package/src/lib/modules/pagination/pagination.module.ts +0 -17
  157. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.html +0 -56
  158. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.scss +0 -342
  159. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.ts +0 -135
  160. package/src/lib/modules/side-nav/side-nav.models.ts +0 -38
  161. package/src/lib/modules/side-nav/side-nav.module.ts +0 -16
  162. package/src/lib/modules/smart-form/components/form-field/form-field.component.html +0 -1330
  163. package/src/lib/modules/smart-form/components/form-field/form-field.component.scss +0 -2112
  164. package/src/lib/modules/smart-form/components/form-field/form-field.component.ts +0 -3006
  165. package/src/lib/modules/smart-form/components/form-section/form-section.component.html +0 -65
  166. package/src/lib/modules/smart-form/components/form-section/form-section.component.scss +0 -209
  167. package/src/lib/modules/smart-form/components/form-section/form-section.component.ts +0 -131
  168. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.html +0 -253
  169. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.scss +0 -689
  170. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.ts +0 -1131
  171. package/src/lib/modules/smart-form/index.ts +0 -10
  172. package/src/lib/modules/smart-form/models/form-schema.model.ts +0 -793
  173. package/src/lib/modules/smart-form/models/hierarchy-config.model.ts +0 -21
  174. package/src/lib/modules/smart-form/services/expression.service.ts +0 -75
  175. package/src/lib/modules/smart-form/services/smart-form-controller.service.ts +0 -67
  176. package/src/lib/modules/smart-form/smart-form.examples.ts +0 -1324
  177. package/src/lib/modules/smart-form/smart-form.module.ts +0 -38
  178. package/src/lib/modules/smart-form/utils/translation.utils.ts +0 -82
  179. package/src/lib/modules/smart-form/utils/trusted-url.pipe.ts +0 -25
  180. package/src/lib/modules/smart-form/utils/validation.utils.ts +0 -98
  181. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.html +0 -283
  182. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.scss +0 -685
  183. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.ts +0 -1128
  184. package/src/lib/modules/smart-table/models/table-config.model.ts +0 -213
  185. package/src/lib/modules/smart-table/smart-table.module.ts +0 -30
  186. package/src/lib/modules/smart-table/utils/safe-html.pipe.ts +0 -28
  187. package/src/lib/modules/smart-table/utils/smart-table.utils.ts +0 -18
  188. package/src/lib/modules/snackbar/components/snackbar.component.html +0 -41
  189. package/src/lib/modules/snackbar/components/snackbar.component.scss +0 -99
  190. package/src/lib/modules/snackbar/components/snackbar.component.ts +0 -18
  191. package/src/lib/modules/snackbar/models/snackbar.models.ts +0 -10
  192. package/src/lib/modules/snackbar/services/snackbar.service.ts +0 -40
  193. package/src/lib/modules/snackbar/snackbar.module.ts +0 -11
  194. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.html +0 -47
  195. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.scss +0 -199
  196. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.ts +0 -126
  197. package/src/lib/modules/summary-card/summary-card.module.ts +0 -18
  198. package/src/lib/modules/table-column-configuration/components/_tcc-controls.scss +0 -53
  199. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.html +0 -47
  200. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.scss +0 -50
  201. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.ts +0 -33
  202. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.html +0 -30
  203. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.scss +0 -36
  204. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.ts +0 -78
  205. package/src/lib/modules/table-column-configuration/index.ts +0 -5
  206. package/src/lib/modules/table-column-configuration/models/table-column-configuration.models.ts +0 -20
  207. package/src/lib/modules/table-column-configuration/services/table-column-configuration.service.ts +0 -77
  208. package/src/lib/modules/table-column-configuration/table-column-configuration.module.ts +0 -21
  209. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.html +0 -37
  210. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.scss +0 -102
  211. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.ts +0 -178
  212. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.html +0 -78
  213. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.scss +0 -226
  214. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.ts +0 -595
  215. package/src/lib/modules/time-picker/models/time-picker.models.ts +0 -49
  216. package/src/lib/modules/time-picker/time-picker.module.ts +0 -23
  217. package/src/lib/shared-ui.module.ts +0 -55
  218. package/src/lib/utils/constants.ts +0 -11
  219. package/src/lib/utils/storage.utils.ts +0 -37
  220. package/src/lib/utils/string.utils.ts +0 -23
  221. package/src/lib/utils/translation.utils.ts +0 -87
  222. package/src/public-api.ts +0 -127
  223. package/tsconfig.lib.json +0 -15
@@ -1,213 +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
- export interface TableActionItem {
69
- label: string;
70
- type: 'api' | 'callback' | 'route' | 'delete';
71
- icon?: string;
72
- apiUrl?: string;
73
- apiMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
74
- route?: string;
75
- confirmationNeeded?: boolean;
76
- confirmationMessage?: string;
77
- callback?: (row: any) => void;
78
- /** Set to false to hide this action item. Default: true */
79
- isEnabled?: boolean;
80
- /** Config for native 'delete' action type — drives the built-in confirmation modal */
81
- deleteConfig?: {
82
- apiUrl: string; // URL with :id placeholder e.g. 'gateway/service/api/v1/items/:id'
83
- idField?: string; // Row field used as id (default: 'id')
84
- modalTitle?: string;
85
- modalMessage?: string;
86
- confirmLabel?: string;
87
- cancelLabel?: string;
88
- };
89
- }
90
-
91
- export interface TableAction {
92
- label: string;
93
- type: 'api' | 'callback' | 'route' | 'edit' | 'dropdown';
94
- icon?: string; // FontAwesome class or similar
95
- btnVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline'; // utilizing button variants
96
- apiUrl?: string;
97
- apiMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
98
- route?: string;
99
- confirmationNeeded?: boolean;
100
- confirmationMessage?: string;
101
- callback?: (row: any) => void;
102
- items?: TableActionItem[]; // For dropdown type
103
- /** Set to false to hide this action. Default: true */
104
- isEnabled?: boolean;
105
- }
106
-
107
- export interface PaginationConfig {
108
- enabled: boolean;
109
- pageSize: number;
110
- pageSizeOptions: number[];
111
- totalCountConfig?: {
112
- source: 'same' | 'separate';
113
- apiUrl?: string;
114
- responsePath?: string;
115
- };
116
- }
117
-
118
- export interface TableTheme {
119
- primaryColor?: string;
120
- headerBg?: string;
121
- headerColor?: string;
122
- rowHoverBg?: string;
123
- borderColor?: string;
124
- }
125
-
126
- export interface NestedStringConfig {
127
- paramName: string;
128
- baseValue?: string;
129
- separator: string;
130
- assignment: string;
131
- }
132
-
133
- export interface QueryParamsConfig {
134
- pageKey?: string;
135
- sizeKey?: string;
136
- pageIndexOffset?: number; // e.g. -1 for 0-based index from 1-based UI
137
- filterHandling?: 'standard' | 'nested_string';
138
- nestedStringConfig?: NestedStringConfig;
139
- }
140
-
141
- export interface TableConfig {
142
- columns: TableColumn[];
143
- apiUrl?: string; // Optional when tableData is provided externally
144
- apiMethod?: 'GET' | 'POST';
145
- apiPayload?: any;
146
- dataResponsePath?: string;
147
- filters?: TableFilter[];
148
- filterData?: { [key: string]: any[] };
149
- pagination?: PaginationConfig;
150
- actions?: TableAction[]; // Row level actions
151
- topBarButtons?: TableAction[]; // Buttons above the table
152
- sortBy?: string;
153
- orderBy?: 'ASC' | 'DESC';
154
- theme?: TableTheme;
155
- requestParams?: Function;
156
- selectable?: boolean; // Checkbox selection
157
- queryParamsConfig?: QueryParamsConfig;
158
- labels?: TableLabels;
159
- searchConfig?: SearchConfig;
160
- maxHeight?: string;
161
- stickyHeader?: boolean;
162
-
163
- stickyColumnCount?: number;
164
- token?: string; // Full token string (e.g. "Bearer ...")
165
- tokenHeader?: string; // Header key (default: "Authorization")
166
- editingRowClass?: string; // Optional CSS class to apply to rows being edited
167
- /** Fallback text for any cell whose value is null, undefined, or empty string.
168
- * Overridden per-column via TableColumn.emptyValue. Library default: '-' */
169
- emptyValue?: string;
170
- }
171
-
172
- export interface SearchConfig {
173
- enabled: boolean;
174
- searchKey?: string; // Query param key (default: 'search')
175
- debounceTime?: number; // ms (default: 300)
176
- handling?: 'standard' | 'nested_string'; // standard: ?search=term, nested_string: ?params=SEARCH_TERM=term
177
- minimumCharacter?: number; // Min chars before the API is called (default: 3). Clearing the input always re-triggers.
178
- }
179
-
180
- export interface TableLabels {
181
- searchPlaceholder?: string;
182
- actionColumnHeader?: string;
183
- noDataMessage?: string;
184
- itemsPerPageLabel?: string;
185
- defaultConfirmationMessage?: string;
186
- saveLabel?: string;
187
- cancelLabel?: string;
188
- addLabel?: string;
189
- /** Variant for the Add button (new row). Defaults to 'danger'. */
190
- addButtonVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline';
191
- /** Variant for the Save button (edit row). Defaults to 'primary'. */
192
- saveButtonVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline';
193
- }
194
-
195
- /**
196
- * Emitted by the SmartTableComponent when operating in external-data mode
197
- * (i.e. when [tableData] input is provided by the parent).
198
- * The parent is responsible for fetching updated data based on this event
199
- * and providing it back via [tableData] and [totalItemsCount].
200
- */
201
- export interface TableDataChangeEvent {
202
- page: number;
203
- pageSize: number;
204
- sortBy?: string;
205
- orderBy?: 'ASC' | 'DESC';
206
- searchTerm?: string;
207
- filters?: { [key: string]: any };
208
- }
209
-
210
- export interface TableRowSaveEvent {
211
- row: any;
212
- isNew: boolean;
213
- }
@@ -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>