commons-shared-web-ui 0.0.51 → 0.0.53

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 (215) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/documentation/alert.md +123 -0
  3. package/documentation/button-dropdown.md +126 -0
  4. package/documentation/button.md +184 -0
  5. package/documentation/cards-usage-guidelines.md +131 -0
  6. package/documentation/configurable-form.md +605 -0
  7. package/documentation/confirmation-modal.md +250 -0
  8. package/documentation/filter-sidebar.md +178 -0
  9. package/documentation/filter-table-selector.md +228 -0
  10. package/documentation/form-builder.md +599 -0
  11. package/documentation/form-components.md +384 -0
  12. package/documentation/form-field-configuration.md +250 -0
  13. package/documentation/nav.md +427 -0
  14. package/documentation/pagination.md +181 -0
  15. package/documentation/side-nav-documentation.md +169 -0
  16. package/documentation/smart-form.md +2532 -0
  17. package/documentation/smart-table.md +1221 -0
  18. package/documentation/snackbar.md +118 -0
  19. package/documentation/style-externalization.md +88 -0
  20. package/documentation/summary-card.md +279 -0
  21. package/documentation/table-column-configuration.md +221 -0
  22. package/ng-package.json +28 -0
  23. package/package.json +53 -34
  24. package/src/lib/modules/alert/alert.models.ts +6 -0
  25. package/src/lib/modules/alert/alert.module.ts +16 -0
  26. package/src/lib/modules/alert/components/alert/alert.component.html +27 -0
  27. package/src/lib/modules/alert/components/alert/alert.component.scss +92 -0
  28. package/src/lib/modules/alert/components/alert/alert.component.ts +81 -0
  29. package/src/lib/modules/button/button.models.ts +13 -0
  30. package/src/lib/modules/button/button.module.ts +16 -0
  31. package/src/lib/modules/button/components/button/button.component.html +22 -0
  32. package/src/lib/modules/button/components/button/button.component.scss +88 -0
  33. package/src/lib/modules/button/components/button/button.component.ts +67 -0
  34. package/src/lib/modules/button-dropdown/button-dropdown.models.ts +26 -0
  35. package/src/lib/modules/button-dropdown/button-dropdown.module.ts +22 -0
  36. package/src/lib/modules/button-dropdown/button-dropdown.theme.scss +87 -0
  37. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.html +41 -0
  38. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.scss +135 -0
  39. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.ts +160 -0
  40. package/src/lib/modules/configurable-form/component/configurable-form.component.html +294 -0
  41. package/src/lib/modules/configurable-form/component/configurable-form.component.scss +503 -0
  42. package/src/lib/modules/configurable-form/component/configurable-form.component.ts +628 -0
  43. package/src/lib/modules/configurable-form/configurable-form.examples.ts +154 -0
  44. package/src/lib/modules/configurable-form/configurable-form.model.ts +131 -0
  45. package/src/lib/modules/configurable-form/configurable-form.module.ts +19 -0
  46. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.html +77 -0
  47. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.scss +395 -0
  48. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.ts +266 -0
  49. package/src/lib/modules/confirmation-modal/confirmation-modal.models.ts +71 -0
  50. package/src/lib/modules/confirmation-modal/confirmation-modal.module.ts +20 -0
  51. package/src/lib/modules/filter/components/filter/filter.component.html +131 -0
  52. package/src/lib/modules/filter/components/filter/filter.component.scss +245 -0
  53. package/src/lib/modules/filter/components/filter/filter.component.ts +216 -0
  54. package/src/lib/modules/filter/filter.models.ts +88 -0
  55. package/src/lib/modules/filter/filter.module.ts +24 -0
  56. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.html +112 -0
  57. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.scss +186 -0
  58. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.ts +163 -0
  59. package/src/lib/modules/filter-sidebar/filter-sidebar.models.ts +95 -0
  60. package/src/lib/modules/filter-sidebar/filter-sidebar.module.ts +24 -0
  61. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.html +73 -0
  62. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.scss +321 -0
  63. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.ts +361 -0
  64. package/src/lib/modules/filter-table-selector/filter-table-selector.models.ts +91 -0
  65. package/src/lib/modules/filter-table-selector/filter-table-selector.module.ts +22 -0
  66. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.html +63 -0
  67. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.scss +496 -0
  68. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.ts +445 -0
  69. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.html +75 -0
  70. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.scss +210 -0
  71. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.ts +55 -0
  72. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.html +25 -0
  73. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.scss +82 -0
  74. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.ts +95 -0
  75. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.html +20 -0
  76. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.scss +37 -0
  77. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.ts +94 -0
  78. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.html +46 -0
  79. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.scss +102 -0
  80. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.ts +50 -0
  81. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.html +35 -0
  82. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.scss +67 -0
  83. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.ts +34 -0
  84. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.html +68 -0
  85. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.scss +113 -0
  86. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.ts +74 -0
  87. package/src/lib/modules/form-builder/configs/field-type-schema.map.ts +533 -0
  88. package/src/lib/modules/form-builder/form-builder.module.ts +36 -0
  89. package/src/lib/modules/form-builder/index.ts +9 -0
  90. package/src/lib/modules/form-builder/models/builder.models.ts +7 -0
  91. package/src/lib/modules/form-builder/models/field-configurator.models.ts +38 -0
  92. package/src/lib/modules/form-builder/models/field-selection.models.ts +51 -0
  93. package/src/lib/modules/form-builder/services/field-configurator.service.ts +258 -0
  94. package/src/lib/modules/form-builder/services/field-selection.service.ts +299 -0
  95. package/src/lib/modules/form-builder/services/form-schema-tree.service.ts +670 -0
  96. package/src/lib/modules/form-builder/tokens/builder.tokens.ts +10 -0
  97. package/src/lib/modules/form-builder/utils/constants.ts +43 -0
  98. package/src/lib/modules/form-components/components/checkbox/checkbox.component.html +29 -0
  99. package/src/lib/modules/form-components/components/checkbox/checkbox.component.scss +111 -0
  100. package/src/lib/modules/form-components/components/checkbox/checkbox.component.ts +207 -0
  101. package/src/lib/modules/form-components/components/checkbox/checkbox.models.ts +35 -0
  102. package/src/lib/modules/form-components/components/datepicker/datepicker.component.html +42 -0
  103. package/src/lib/modules/form-components/components/datepicker/datepicker.component.scss +115 -0
  104. package/src/lib/modules/form-components/components/datepicker/datepicker.component.ts +267 -0
  105. package/src/lib/modules/form-components/components/datepicker/datepicker.models.ts +45 -0
  106. package/src/lib/modules/form-components/components/dropdown/dropdown.component.html +74 -0
  107. package/src/lib/modules/form-components/components/dropdown/dropdown.component.scss +252 -0
  108. package/src/lib/modules/form-components/components/dropdown/dropdown.component.ts +377 -0
  109. package/src/lib/modules/form-components/components/dropdown/dropdown.models.ts +53 -0
  110. package/src/lib/modules/form-components/components/input/input.component.html +51 -0
  111. package/src/lib/modules/form-components/components/input/input.component.scss +128 -0
  112. package/src/lib/modules/form-components/components/input/input.component.ts +250 -0
  113. package/src/lib/modules/form-components/components/input/input.models.ts +55 -0
  114. package/src/lib/modules/form-components/components/radio/radio.component.html +22 -0
  115. package/src/lib/modules/form-components/components/radio/radio.component.scss +107 -0
  116. package/src/lib/modules/form-components/components/radio/radio.component.ts +181 -0
  117. package/src/lib/modules/form-components/components/radio/radio.models.ts +39 -0
  118. package/src/lib/modules/form-components/components/search/search.component.html +15 -0
  119. package/src/lib/modules/form-components/components/search/search.component.scss +87 -0
  120. package/src/lib/modules/form-components/components/search/search.component.ts +213 -0
  121. package/src/lib/modules/form-components/components/search/search.models.ts +40 -0
  122. package/src/lib/modules/form-components/components/toggle/toggle.component.html +15 -0
  123. package/src/lib/modules/form-components/components/toggle/toggle.component.scss +81 -0
  124. package/src/lib/modules/form-components/components/toggle/toggle.component.ts +166 -0
  125. package/src/lib/modules/form-components/components/toggle/toggle.models.ts +27 -0
  126. package/src/lib/modules/form-components/directives/click-outside.directive.ts +22 -0
  127. package/src/lib/modules/form-components/form-components.module.ts +41 -0
  128. package/src/lib/modules/form-field-configuration/components/_ffc-controls.scss +89 -0
  129. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.html +68 -0
  130. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.scss +73 -0
  131. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.ts +34 -0
  132. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.html +78 -0
  133. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.scss +83 -0
  134. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.ts +94 -0
  135. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.html +38 -0
  136. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.scss +42 -0
  137. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.ts +92 -0
  138. package/src/lib/modules/form-field-configuration/form-field-configuration.module.ts +23 -0
  139. package/src/lib/modules/form-field-configuration/index.ts +7 -0
  140. package/src/lib/modules/form-field-configuration/models/field-configuration.models.ts +62 -0
  141. package/src/lib/modules/form-field-configuration/services/config-schema-tree.service.ts +148 -0
  142. package/src/lib/modules/form-field-configuration/services/field-configuration.service.ts +228 -0
  143. package/src/lib/modules/material/material.module.ts +94 -0
  144. package/src/lib/modules/nav/components/nav/nav.component.html +34 -0
  145. package/src/lib/modules/nav/components/nav/nav.component.scss +171 -0
  146. package/src/lib/modules/nav/components/nav/nav.component.ts +82 -0
  147. package/src/lib/modules/nav/nav.models.ts +31 -0
  148. package/src/lib/modules/nav/nav.module.ts +17 -0
  149. package/src/lib/modules/pagination/components/pagination/pagination.component.html +52 -0
  150. package/src/lib/modules/pagination/components/pagination/pagination.component.scss +155 -0
  151. package/src/lib/modules/pagination/components/pagination/pagination.component.ts +109 -0
  152. package/src/lib/modules/pagination/pagination.module.ts +17 -0
  153. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.html +56 -0
  154. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.scss +342 -0
  155. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.ts +135 -0
  156. package/src/lib/modules/side-nav/side-nav.models.ts +38 -0
  157. package/src/lib/modules/side-nav/side-nav.module.ts +16 -0
  158. package/src/lib/modules/smart-form/components/form-field/form-field.component.html +1196 -0
  159. package/src/lib/modules/smart-form/components/form-field/form-field.component.scss +2014 -0
  160. package/src/lib/modules/smart-form/components/form-field/form-field.component.ts +2782 -0
  161. package/src/lib/modules/smart-form/components/form-section/form-section.component.html +65 -0
  162. package/src/lib/modules/smart-form/components/form-section/form-section.component.scss +209 -0
  163. package/src/lib/modules/smart-form/components/form-section/form-section.component.ts +131 -0
  164. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.html +253 -0
  165. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.scss +689 -0
  166. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.ts +1131 -0
  167. package/src/lib/modules/smart-form/index.ts +10 -0
  168. package/src/lib/modules/smart-form/models/form-schema.model.ts +749 -0
  169. package/src/lib/modules/smart-form/models/hierarchy-config.model.ts +21 -0
  170. package/src/lib/modules/smart-form/services/expression.service.ts +75 -0
  171. package/src/lib/modules/smart-form/services/smart-form-controller.service.ts +67 -0
  172. package/src/lib/modules/smart-form/smart-form.examples.ts +1324 -0
  173. package/src/lib/modules/smart-form/smart-form.module.ts +36 -0
  174. package/src/lib/modules/smart-form/utils/translation.utils.ts +82 -0
  175. package/src/lib/modules/smart-form/utils/trusted-url.pipe.ts +25 -0
  176. package/src/lib/modules/smart-form/utils/validation.utils.ts +98 -0
  177. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.html +283 -0
  178. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.scss +685 -0
  179. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.ts +1128 -0
  180. package/src/lib/modules/smart-table/models/table-config.model.ts +213 -0
  181. package/src/lib/modules/smart-table/smart-table.module.ts +30 -0
  182. package/src/lib/modules/smart-table/utils/safe-html.pipe.ts +28 -0
  183. package/src/lib/modules/smart-table/utils/smart-table.utils.ts +18 -0
  184. package/src/lib/modules/snackbar/components/snackbar.component.html +41 -0
  185. package/src/lib/modules/snackbar/components/snackbar.component.scss +99 -0
  186. package/src/lib/modules/snackbar/components/snackbar.component.ts +18 -0
  187. package/src/lib/modules/snackbar/models/snackbar.models.ts +10 -0
  188. package/src/lib/modules/snackbar/services/snackbar.service.ts +40 -0
  189. package/src/lib/modules/snackbar/snackbar.module.ts +11 -0
  190. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.html +47 -0
  191. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.scss +199 -0
  192. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.ts +126 -0
  193. package/src/lib/modules/summary-card/summary-card.module.ts +18 -0
  194. package/src/lib/modules/table-column-configuration/components/_tcc-controls.scss +53 -0
  195. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.html +47 -0
  196. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.scss +50 -0
  197. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.ts +33 -0
  198. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.html +30 -0
  199. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.scss +36 -0
  200. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.ts +78 -0
  201. package/src/lib/modules/table-column-configuration/index.ts +5 -0
  202. package/src/lib/modules/table-column-configuration/models/table-column-configuration.models.ts +20 -0
  203. package/src/lib/modules/table-column-configuration/services/table-column-configuration.service.ts +77 -0
  204. package/src/lib/modules/table-column-configuration/table-column-configuration.module.ts +21 -0
  205. package/src/lib/shared-ui.module.ts +50 -0
  206. package/src/lib/styles/utilities.scss +1 -0
  207. package/src/lib/utils/constants.ts +11 -0
  208. package/src/lib/utils/storage.utils.ts +37 -0
  209. package/src/lib/utils/string.utils.ts +23 -0
  210. package/src/lib/utils/translation.utils.ts +87 -0
  211. package/src/public-api.ts +121 -0
  212. package/tsconfig.lib.json +15 -0
  213. package/fesm2022/commons-shared-web-ui.mjs +0 -13828
  214. package/fesm2022/commons-shared-web-ui.mjs.map +0 -1
  215. package/index.d.ts +0 -4258
package/index.d.ts DELETED
@@ -1,4258 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { OnChanges, EventEmitter, SimpleChanges, ChangeDetectorRef, OnInit, OnDestroy, ElementRef, QueryList, PipeTransform, NgZone, AfterViewInit } from '@angular/core';
3
- import * as i2 from '@angular/material/snack-bar';
4
- import { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';
5
- import * as i2$1 from '@angular/common';
6
- import * as i3$1 from '@angular/forms';
7
- import { FormGroup, FormArray, FormControl, FormBuilder, ValidatorFn, ControlValueAccessor, AbstractControl, ValidationErrors } from '@angular/forms';
8
- import { HttpClient, HttpHeaders } from '@angular/common/http';
9
- import * as i3$2 from '@angular/router';
10
- import { Router, ActivatedRoute } from '@angular/router';
11
- import { BehaviorSubject, Subject, Observable } from 'rxjs';
12
- import { DomSanitizer, SafeResourceUrl, SafeHtml } from '@angular/platform-browser';
13
- import * as i1 from '@angular/material/card';
14
- import * as i3 from '@angular/material/checkbox';
15
- import * as i4 from '@angular/material/divider';
16
- import * as i5 from '@angular/material/select';
17
- import * as i6 from '@angular/material/radio';
18
- import * as i7 from '@angular/material/dialog';
19
- import * as i8 from '@angular/material/form-field';
20
- import * as i9 from '@angular/material/datepicker';
21
- import * as i10 from '@angular/material/core';
22
- import * as i11 from '@angular/material/input';
23
- import * as i12 from '@angular/material/icon';
24
- import * as i13 from '@angular/material/progress-spinner';
25
- import * as i14 from '@angular/material/tabs';
26
- import * as i15 from '@angular/material/button';
27
- import * as i16 from '@angular/material/menu';
28
- import * as i17 from '@angular/material/progress-bar';
29
- import * as i18 from '@angular/material/tooltip';
30
- import { TooltipPosition } from '@angular/material/tooltip';
31
- import * as i19 from '@angular/material/slider';
32
- import * as i20 from '@angular/material/list';
33
- import * as i21 from '@angular/material/chips';
34
- import * as i22 from '@angular/material/sort';
35
- import * as i23 from '@angular/material/autocomplete';
36
- import * as i24 from '@angular/material/slide-toggle';
37
- import * as i25 from '@angular/material/button-toggle';
38
- import * as i26 from '@angular/material/paginator';
39
- import * as i27 from '@angular/material/table';
40
- import * as i28 from '@angular/material/expansion';
41
- import * as i29 from '@angular/cdk/accordion';
42
- import * as i10$1 from 'ngx-quill';
43
- import * as i11$1 from '@angular/cdk/scrolling';
44
- import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
45
-
46
- type ButtonVariant = 'primary' | 'warning' | 'outline' | 'secondary' | 'success' | 'danger' | 'danger-outline' | 'text';
47
- interface ButtonLabels {
48
- iconAltText?: string;
49
- }
50
-
51
- interface FormSchema {
52
- entityType: string;
53
- label: string;
54
- formType: 'SECTION' | 'STEPPER';
55
- showTitle?: boolean;
56
- showDescription?: boolean;
57
- description?: string;
58
- metadata?: {
59
- [key: string]: any;
60
- };
61
- /**
62
- * When true, top-level GROUP children of sectionConfig are rendered as
63
- * a horizontal stepper at the top, showing one section at a time.
64
- * Navigate between sections via the Next/Previous buttons in the host app.
65
- */
66
- sectionStepper?: boolean;
67
- sectionConfig?: SectionConfig;
68
- stepperConfig?: StepperConfig;
69
- submitConfig?: SubmitConfig;
70
- /**
71
- * Configures the action bar shown at the bottom of the form.
72
- * Supports Cancel, Save as Draft, and Submit buttons with flexible layout.
73
- * If omitted, the default Submit (and stepper Prev/Next) behaviour is unchanged.
74
- */
75
- actionBarConfig?: ActionBarConfig;
76
- showActions?: boolean;
77
- /** Full token string passed to all library API calls (e.g. "Bearer eyJ…") */
78
- token?: string;
79
- /** HTTP header name to use for the token (default: "Authorization") */
80
- tokenHeader?: string;
81
- /** Custom label keys for form actions */
82
- labels?: FormLabels;
83
- /** Config for form editing (GET to load, PATCH/PUT to submit) */
84
- editConfig?: EditConfig;
85
- }
86
- interface FormLabels {
87
- nextLabel?: string;
88
- submitLabel?: string;
89
- previousLabel?: string;
90
- addLabel?: string;
91
- removeLabel?: string;
92
- /** File upload error messages. Supports placeholders: {fileName}, {maxSizeMB}, {maxFiles} */
93
- fileTypeError?: string;
94
- fileSizeError?: string;
95
- maxFilesError?: string;
96
- fileUploadFailed?: string;
97
- fileDeleteFailed?: string;
98
- }
99
- interface SubmitConfig {
100
- apiUrl: string;
101
- method?: 'POST' | 'PUT' | 'PATCH';
102
- successMessage?: string;
103
- errorMessage?: string;
104
- redirectUrl?: string;
105
- extraPayload?: {
106
- [key: string]: any;
107
- };
108
- snackbarConfig?: {
109
- duration?: number;
110
- horizontalPosition?: 'start' | 'center' | 'end' | 'left' | 'right';
111
- verticalPosition?: 'top' | 'bottom';
112
- showCloseButton?: boolean;
113
- };
114
- }
115
- /**
116
- * Describes what happens when an action bar button is clicked.
117
- * One ActionConfig shape works for every button.
118
- */
119
- interface ActionConfig {
120
- /**
121
- * Action kind.
122
- * 'submit' -> Validates and submits form using submitConfig/editConfig.
123
- * 'draft' -> Saves form data without full validation.
124
- * 'navigate' -> Navigates to redirectUrl.
125
- * 'api' -> Fires an API call then optionally navigates.
126
- * 'emit' -> Emits actionClick event for custom handling.
127
- * 'next' -> Advances to next step (stepper only).
128
- * 'prev' -> Goes back to previous step (stepper only).
129
- */
130
- kind: 'submit' | 'draft' | 'navigate' | 'api' | 'emit' | 'next' | 'prev';
131
- /** URL for 'navigate' or 'api' callbacks. */
132
- redirectUrl?: string;
133
- /** API endpoint for 'api' actions. */
134
- apiUrl?: string;
135
- /** HTTP method for 'api' actions. @default 'POST' */
136
- method?: 'POST' | 'PUT' | 'PATCH' | 'DELETE';
137
- /** Static extra payload merged into 'api' or 'draft' requests. */
138
- extraPayload?: {
139
- [key: string]: any;
140
- };
141
- /** Snackbar messages for 'api' or 'submit'/'draft' actions. */
142
- successMessage?: string;
143
- errorMessage?: string;
144
- snackbarConfig?: {
145
- duration?: number;
146
- horizontalPosition?: 'start' | 'center' | 'end' | 'left' | 'right';
147
- verticalPosition?: 'top' | 'bottom';
148
- showCloseButton?: boolean;
149
- };
150
- }
151
- /**
152
- * Button configuration focusing on visuals and layout.
153
- * All logic is delegated to the 'action' property.
154
- */
155
- interface ActionButtonConfig {
156
- /** Unique identifier for the button. */
157
- id: string;
158
- /** Label (i18n key or text). */
159
- label?: string;
160
- /** Button style variant. */
161
- variant?: ButtonVariant | string;
162
- /** Bar alignment. @default 'right' */
163
- alignment?: 'left' | 'right';
164
- /** Display order (lower = first). */
165
- order?: number;
166
- /** Visibility. @default false */
167
- hidden?: boolean;
168
- /** State. @default false */
169
- disabled?: boolean;
170
- /**
171
- * When true and sectionStepper is active, this button is only visible
172
- * on the last step. Use this for Submit buttons that should not appear
173
- * on intermediate steps.
174
- */
175
- showOnLastStepOnly?: boolean;
176
- /** Action logic. */
177
- action: ActionConfig;
178
- }
179
- /**
180
- * Action bar configuration.
181
- */
182
- interface ActionBarConfig {
183
- /** Flexibly ordered list of action buttons. */
184
- buttons: ActionButtonConfig[];
185
- }
186
- interface EditConfig {
187
- loadApiUrl: string;
188
- submitApiUrl: string;
189
- submitMethod?: 'PATCH' | 'PUT' | 'POST';
190
- successMessage?: string;
191
- errorMessage?: string;
192
- redirectUrl?: string;
193
- extraPayload?: {
194
- [key: string]: any;
195
- };
196
- snackbarConfig?: {
197
- duration?: number;
198
- horizontalPosition?: 'start' | 'center' | 'end' | 'left' | 'right';
199
- verticalPosition?: 'top' | 'bottom';
200
- showCloseButton?: boolean;
201
- };
202
- }
203
- interface SectionConfig {
204
- children: FieldConfig[];
205
- allowMulti?: boolean;
206
- name?: string;
207
- label?: string;
208
- /** Configuration for the card-based multi-save UI (FAQ style) */
209
- multiSaveConfig?: MultiSaveConfig;
210
- isEnabled?: boolean;
211
- }
212
- interface MultiSaveConfig {
213
- /** If TRUE, enable the Save/Cancel card-based flow for this repeater */
214
- active?: boolean;
215
- /**
216
- * The name of the field to show as the main 'heading' in the collapsed card.
217
- * Typically matches the question or name.
218
- */
219
- summaryField?: string;
220
- /**
221
- * Optional name of the field to show as the sub-text in the collapsed card.
222
- * Typically matches the answer or description.
223
- */
224
- descriptionField?: string;
225
- /**
226
- * Custom label key for the 'Add' button. If omitted, defaults to
227
- * '+ Add a [label]'.
228
- */
229
- addLabel?: string;
230
- }
231
- interface StepperConfig {
232
- children: FieldConfig[];
233
- showStep?: boolean;
234
- isHorizontal?: boolean;
235
- }
236
- /**
237
- * Describes a clickable action icon rendered as a suffix inside a TEXT_INPUT
238
- * or NUMBER_INPUT field. Multiple icons can be shown side-by-side.
239
- * When clicked, the field name and actionId are emitted via the
240
- * SmartFormComponent's `suffixActionClick` output.
241
- */
242
- interface SuffixActionIcon {
243
- /** Material icon name (e.g. 'edit', 'refresh', 'check', 'lock') */
244
- icon: string;
245
- /** Unique action identifier emitted on click (e.g. 'enable_edit', 'reset_code') */
246
- actionId: string;
247
- /** Optional tooltip shown on hover */
248
- tooltip?: string;
249
- /** Optional custom color override (e.g. '#16A34A' for a green check icon) */
250
- color?: string;
251
- }
252
- interface FieldConfig {
253
- name?: string;
254
- label?: string;
255
- type: string;
256
- subType?: string;
257
- visible?: boolean;
258
- visibilityExpression?: string;
259
- isEnabled?: boolean;
260
- required?: boolean;
261
- disabled?: boolean;
262
- defaultValue?: any;
263
- placeholder?: string;
264
- hint?: string;
265
- /** Dot-notation path for nested payload mapping (e.g., 'status.code') */
266
- payloadPath?: string;
267
- /**
268
- * Column span in a 12-column grid (1–12).
269
- * Use this on any field or ROW to control its width.
270
- * Examples: 3 = 25%, 4 = 33%, 6 = 50%, 12 = 100% (default).
271
- * When a field is inside a ROW, the ROW children share space via colSpan.
272
- * When a field is a direct section child (not inside a ROW), colSpan wraps
273
- * it in the section-level 12-col grid automatically.
274
- */
275
- colSpan?: number;
276
- /** Custom CSS class for the field container */
277
- className?: string;
278
- /** Unit or symbol shown before the input */
279
- prefix?: string;
280
- /** Unit or symbol shown after the input (e.g. "%", "Students") */
281
- suffix?: string;
282
- /** Whether the field is read-only (shows lock icon) */
283
- readonly?: boolean;
284
- /**
285
- * Clickable action icons rendered as suffixes inside the input.
286
- * Ignored when `readonly` is true (the built-in lock icon takes precedence).
287
- * Each icon emits a `suffixActionClick` event with `{ fieldName, actionId }`.
288
- */
289
- suffixActionIcons?: SuffixActionIcon[];
290
- sectionConfig?: SectionConfig;
291
- /**
292
- * Cross-field validation config for SUBFIELDS groups.
293
- * Applied as a group-level validator on the nested FormGroup.
294
- */
295
- onChange?: string;
296
- onValidate?: string;
297
- errorMessage?: string;
298
- textConfig?: TextConfig;
299
- emailConfig?: EmailConfig;
300
- phoneConfig?: PhoneConfig;
301
- numberConfig?: NumberConfig;
302
- dateConfig?: DateConfig;
303
- timeConfig?: TimeConfig;
304
- optionConfig?: OptionConfig$1;
305
- autocompleteConfig?: AutocompleteConfig;
306
- generatedConfig?: GeneratedConfig;
307
- rangeConfig?: RangeConfig;
308
- attachmentConfig?: AttachmentConfig;
309
- locationConfig?: LocationConfig;
310
- ratingConfig?: RatingConfig;
311
- richTextConfig?: RichTextConfig;
312
- children?: FieldConfig[];
313
- }
314
- interface TextConfig {
315
- length?: LengthConstraint;
316
- pattern?: string;
317
- patternMessage?: string;
318
- inputType?: string;
319
- /**
320
- * Name of another field in the same FormGroup whose value must equal this
321
- * field's value (e.g. "password" on a confirmPassword field).
322
- * Validation runs bi-directionally: whichever field changes last triggers
323
- * the check on the field that carries matchField config.
324
- */
325
- matchField?: string;
326
- showCharCount?: boolean;
327
- }
328
- interface LengthConstraint {
329
- min?: number;
330
- max?: number;
331
- }
332
- interface NumberConfig {
333
- min?: number;
334
- max?: number;
335
- precision?: number;
336
- step?: number;
337
- }
338
- interface DateConfig {
339
- allowFuture?: boolean;
340
- /** When false, dates before today are disabled (today is the minimum). When true (default), all past dates are allowed. */
341
- allowPast?: boolean;
342
- minDate?: string;
343
- maxDate?: string;
344
- /** When true, the text input is readonly (picker-only, no keyboard entry). */
345
- inputReadonly?: boolean;
346
- /** Name of a sibling field whose value is used as the dynamic minimum date. */
347
- minDateField?: string;
348
- }
349
- interface TimeConfig {
350
- /** Explicit minimum time in "HH:mm" 24-hour format (e.g. "09:00"). */
351
- minTime?: string;
352
- /** Explicit maximum time in "HH:mm" 24-hour format (e.g. "18:00"). */
353
- maxTime?: string;
354
- /** When true, the input is readonly. */
355
- inputReadonly?: boolean;
356
- /**
357
- * Name of a sibling TIME field whose value is used as the dynamic minimum time.
358
- * When the sibling changes, this field's minimum updates and any now-invalid
359
- * value (earlier than the new minimum) is cleared. Mirrors DateConfig.minDateField.
360
- */
361
- minTimeField?: string;
362
- }
363
- /**
364
- * Configuration for enabling search functionality inside DROPDOWN fields.
365
- * Supports both client-side (local) and server-side (remote GET) filtering.
366
- */
367
- interface DropdownSearchConfig {
368
- /** Whether to display a search input inside the dropdown panel. */
369
- enabled: boolean;
370
- /** Filtering mode. 'local' filters client-side (default). 'server' queries the API on typing via GET. */
371
- mode?: 'local' | 'server';
372
- /** Query parameter key for the search term sent to the API (default: 'search'). Only used in 'server' mode. */
373
- searchKey?: string;
374
- /** Minimum characters required before triggering a server-side search (default: 3). Only used in 'server' mode. */
375
- minSearchLength?: number;
376
- /** Debounce delay in milliseconds before firing search (default: 300). */
377
- debounceTime?: number;
378
- }
379
- interface OptionConfig$1 {
380
- optionClass?: string;
381
- optionUrl?: string;
382
- apiUrl?: string;
383
- apiUrls?: string[];
384
- dataPath?: string;
385
- labelPath?: string;
386
- valuePath?: string;
387
- dependencies?: {
388
- [queryParam: string]: string;
389
- };
390
- sortBy?: string;
391
- sortDirection?: 'ASC' | 'DESC';
392
- layout?: 'row' | 'column';
393
- optionList?: OptionItem[];
394
- /** Configuration for enabling search functionality inside the dropdown panel. */
395
- searchConfig?: DropdownSearchConfig;
396
- /** When true, renders a 'Select All' checkbox at the top of a MULTIPLE select dropdown. */
397
- showSelectAll?: boolean;
398
- }
399
- interface AutocompleteDisplayField {
400
- /** Dot-notation path to the value in the API response item (e.g. 'login', 'contact.phone'). */
401
- path: string;
402
- /**
403
- * How to render the value.
404
- * Built-in: 'text' | 'email' | 'phone' | 'image'.
405
- * Can be any string for custom logic/styling.
406
- */
407
- type?: 'text' | 'email' | 'phone' | 'image' | string;
408
- /** Optional Material Icon name to show (e.g. 'location_on', 'calendar_today', 'person'). */
409
- icon?: string;
410
- /** Optional label prefix shown before the value (e.g. 'Email: '). */
411
- label?: string;
412
- /** Custom CSS class to apply to this display item. */
413
- className?: string;
414
- }
415
- /**
416
- * Configuration specific to the AUTOCOMPLETE field type.
417
- * For detailed documentation and examples, see documentation/smart-form.md.
418
- */
419
- interface AutocompleteConfig {
420
- /** HTTP method for the options API. Defaults to 'GET'. */
421
- method?: 'GET' | 'POST' | 'PUT' | 'PATCH';
422
- /** Static request body sent with POST/PUT/PATCH requests. */
423
- body?: any;
424
- /** Static query parameters to append to the API URL on every request. */
425
- queryParams?: {
426
- [key: string]: any;
427
- };
428
- /** Custom HTTP headers to send with the API request (e.g. Authorization, X-TENANT). */
429
- headers?: {
430
- [key: string]: string;
431
- };
432
- /**
433
- * Template string for building a composite label from multiple fields.
434
- * Use {fieldName} placeholders. E.g. '{firstName} {lastName} ({login})'.
435
- * Takes precedence over optionConfig.labelPath if both are set.
436
- */
437
- labelTemplate?: string;
438
- /**
439
- * One or more extra fields to render below the main label inside each dropdown option.
440
- *
441
- * Accepts:
442
- * - A plain string → treated as a single dot-notation path rendered as 'text'.
443
- * Backward-compatible with the old `displayPath` string.
444
- * - An array of AutocompleteDisplayField objects → full control over icon,
445
- * type (text | email | phone | image), and optional label prefix.
446
- *
447
- * Examples:
448
- * "displayFields": "login"
449
- * "displayFields": [
450
- * { "path": "login", "type": "email" },
451
- * { "path": "phone", "type": "phone" },
452
- * { "path": "photoUrl", "type": "image" }
453
- * ]
454
- */
455
- displayFields?: string | AutocompleteDisplayField[];
456
- /** Query parameter key appended to the URL when the user types (e.g. 'searchTerm', 'q'). */
457
- searchParam?: string;
458
- /** Alias for 'searchParam'. */
459
- searchKey?: string;
460
- /** Minimum characters to type before a server request fires (default: 1). */
461
- searchMinLength?: number;
462
- /** Debounce delay in ms before firing the search request (default: 300ms server-side, 150ms local). */
463
- searchDebounce?: number;
464
- }
465
- interface EmailConfig {
466
- defaultDomain?: string;
467
- allowedDomains?: string[];
468
- blockedDomains?: string[];
469
- }
470
- interface PhoneConfig {
471
- prefixCountryCode?: boolean;
472
- defaultCountryCode?: string;
473
- supportedCountryCodeLocale?: string[];
474
- }
475
- interface OptionItem {
476
- label: string;
477
- code: any;
478
- value?: any;
479
- hint?: string;
480
- colSpan?: number;
481
- }
482
- interface GeneratedConfig {
483
- formula: string;
484
- variables?: string[];
485
- }
486
- interface RangeConfig {
487
- min?: number;
488
- max?: number;
489
- step?: number;
490
- minDate?: string;
491
- maxDate?: string;
492
- }
493
- /**
494
- * Describes a single query-parameter for a parameterised API URL.
495
- * Supports static values (baked into the JSON config) and dynamic values
496
- * resolved at runtime from a context object via dot-notation `sourcePath`.
497
- *
498
- * Used inside `LibraryUploadConfig.params` to declaratively list all
499
- * query params the library-image sync API needs.
500
- */
501
- interface ApiQueryParam {
502
- /** The query-param key sent to the backend (e.g. 'entityType', 'completeUrl'). */
503
- key: string;
504
- /**
505
- * A static value baked into the JSON config
506
- * (e.g. 'ENTITY_TYPE.OPPORTUNITY_GALLERY').
507
- * Leave unset when the value must be resolved dynamically at runtime.
508
- */
509
- staticValue?: string;
510
- /**
511
- * A dot-notation path resolved against a runtime context object
512
- * (e.g. 'libraryItem.url'). Takes precedence over `staticValue`
513
- * when the context provides a non-null value.
514
- */
515
- sourcePath?: string;
516
- /**
517
- * When true the HTTP request is aborted if this param cannot be resolved
518
- * to a non-empty value.
519
- */
520
- required?: boolean;
521
- }
522
- /**
523
- * Structured config for the library-image sync POST API.
524
- * Declare each query param as an `ApiQueryParam` so the set can grow
525
- * without any code changes.
526
- *
527
- * Example:
528
- * {
529
- * "baseUrl": "gateway/commons-opportunity-service/api/v1/attachments/upload-url",
530
- * "params": [
531
- * { "key": "entityType", "staticValue": "ENTITY_TYPE.OPPORTUNITY_GALLERY", "required": true },
532
- * { "key": "completeUrl", "sourcePath": "libraryItem.url", "required": true }
533
- * ]
534
- * }
535
- */
536
- interface LibraryUploadConfig {
537
- /** Base URL without any query string. */
538
- baseUrl: string;
539
- /**
540
- * Declared query params. Static values are embedded in the config;
541
- * dynamic values (e.g. `completeUrl`) are resolved at call time from
542
- * a runtime context object using `sourcePath`.
543
- */
544
- params?: ApiQueryParam[];
545
- }
546
- /**
547
- * All library-image picker settings grouped under one roof.
548
- * Used as the `libraryConfig` key inside `AttachmentConfig`.
549
- *
550
- * Example:
551
- * {
552
- * "apiUrl": "gateway/.../attachments/bulk/public?entityIds=1&entityType=...",
553
- * "dataPath": "data",
554
- * "urlPath": "completeURL",
555
- * "idPath": "id",
556
- * "uploadConfig": {
557
- * "baseUrl": "gateway/.../attachments/upload-url",
558
- * "params": [
559
- * { "key": "entityType", "staticValue": "ENTITY_TYPE.OPPORTUNITY_GALLERY", "required": true },
560
- * { "key": "completeUrl", "sourcePath": "libraryItem.url", "required": true }
561
- * ]
562
- * }
563
- * }
564
- */
565
- interface LibraryConfig {
566
- /** API endpoint (GET) to load the library image list. */
567
- apiUrl: string;
568
- /** Dot-notation path to the image array in the API response (e.g. 'data.items'). */
569
- dataPath?: string;
570
- /** Dot-notation path to the image URL within each item (e.g. 'completeURL'). */
571
- urlPath?: string;
572
- /** Dot-notation path to the image ID within each item (e.g. 'id'). */
573
- idPath?: string;
574
- /**
575
- * Structured config for the library-image sync POST API.
576
- * Declare each query param as an `ApiQueryParam` so the set can
577
- * grow without any code changes.
578
- */
579
- uploadConfig?: LibraryUploadConfig;
580
- }
581
- /**
582
- * Unified attachment / file-upload configuration.
583
- * Used by FILE_UPLOAD fields for any kind of upload — images, documents, PDFs, etc.
584
- */
585
- interface AttachmentConfig {
586
- /** Allow multiple file selection (default: false) */
587
- multiple?: boolean;
588
- /** Max number of files when multiple=true (default: 10) */
589
- maxFiles?: number;
590
- /** Max file size per file in MB (default: 10) */
591
- maxSizeMB?: number;
592
- /** Accepted MIME types or extensions, e.g. '.pdf,.jpg,image/*' */
593
- accept?: string;
594
- /** Human-readable hint shown in the drop zone, e.g. 'JPG, PNG, PDF (max 5 MB)' */
595
- acceptLabel?: string;
596
- /** Legacy: explicit list of allowed extensions (e.g. ['.pdf', '.jpg']) */
597
- allowedExtensions?: string[];
598
- /**
599
- * API endpoint to upload the file to. When provided, the file is POSTed as
600
- * multipart/form-data and the returned URL is stored as dataUrl instead of
601
- * the base64 data URL produced by FileReader.
602
- */
603
- uploadUrl?: string;
604
- /**
605
- * Entity type sent along with the upload request (e.g. 'ENTITY_TYPE.SESSION').
606
- * Only relevant when uploadUrl is set.
607
- */
608
- entityType?: string;
609
- /**
610
- * API endpoint to delete the file. Called when an uploaded file with an ID != 0 is removed.
611
- */
612
- deleteUrl?: string;
613
- /**
614
- * All library-image picker settings (API, response paths, sync upload).
615
- * Replaces the former flat `libraryApiUrl`, `libraryDataPath`,
616
- * `libraryUrlPath`, `libraryIdPath`, and `libraryUploadConfig` fields.
617
- */
618
- libraryConfig?: LibraryConfig;
619
- /** Optional description shown in the left info panel for media upload */
620
- description?: string;
621
- /** Optional bullet-point feature lines shown in the left info panel for media upload */
622
- features?: string[];
623
- }
624
- interface LocationConfig {
625
- /** Default active tab (e.g. 'VENUE', 'ONLINE', 'TBA'). Defaults to 'VENUE' when not provided. */
626
- defaultTab?: string;
627
- /** Allow multiple locations. Replaces the need for maxLocations. */
628
- allowMulti?: boolean;
629
- /** Maximum number of venue locations allowed. Defaults to 5 if allowMulti is true. */
630
- maxLocations?: number;
631
- /** Placeholder for the venue search input */
632
- venuePlaceholder?: string;
633
- /** Google Maps API Key – required for map rendering and autocomplete */
634
- googleMapsApiKey?: string;
635
- /** Height of the embedded Google Map. Defaults to '300px'. */
636
- mapHeight?: string;
637
- /** Default map center latitude when no locations are added (e.g., India: 20.5937) */
638
- defaultLat?: number;
639
- /** Default map center longitude when no locations are added (e.g., India: 78.9629) */
640
- defaultLng?: number;
641
- /** Default zoom level when no locations are added (e.g., 4) */
642
- defaultZoom?: number;
643
- /** Placeholder for the online event URL input */
644
- onlinePlaceholder?: string;
645
- /** Show map preview after locations are added (default: true) */
646
- showMap?: boolean;
647
- /** Whether the current location button is enabled inside venue tab */
648
- enableCurrentLocation?: boolean;
649
- /** @deprecated Use showMap instead */
650
- enableMapPicker?: boolean;
651
- }
652
- /** A single venue location picked from Google Places autocomplete. */
653
- interface LocationItem {
654
- uuid?: string;
655
- isActive?: boolean;
656
- id?: number;
657
- locationCode?: string;
658
- latitude?: number;
659
- longitude?: number;
660
- address?: string;
661
- name?: string;
662
- cityLabel?: string;
663
- stateLabel?: string;
664
- countryLabel?: string;
665
- placeId?: string;
666
- type?: string;
667
- /** Legacy field for UI binding */
668
- description?: string;
669
- }
670
- /**
671
- * Value shape stored in the FormControl for a LOCATION field.
672
- * `tab` indicates which mode is active.
673
- */
674
- interface LocationFieldValue {
675
- /** Active location tab (e.g. 'VENUE', 'ONLINE', 'TBA'). Defaults to 'VENUE'. */
676
- tab: string;
677
- /** Array of venue locations (only valid when tab === 'VENUE') */
678
- venues?: LocationItem[];
679
- /** Event URL (only valid when tab === 'ONLINE') */
680
- onlineUrl?: string;
681
- }
682
- interface RatingConfig {
683
- maxRating?: number;
684
- allowHalf?: boolean;
685
- }
686
- interface RichTextConfig {
687
- height?: string;
688
- placeholder?: string;
689
- maxLength?: number;
690
- showCharCount?: boolean;
691
- /**
692
- * List of toolbar items to show, in order. Supported tokens:
693
- * 'bold' | 'italic' | 'underline' | 'strike' | 'blockquote' | 'code' |
694
- * 'font' | 'size' | 'color' | 'background' | 'align' |
695
- * 'header1' | 'header2' | 'orderedList' | 'bulletList' |
696
- * 'subscript' | 'superscript' | 'indentMinus' | 'indentPlus' |
697
- * 'link' | 'image' | 'video' | 'clean'.
698
- * Defaults to: ['bold', 'italic', 'underline', 'font', 'size', 'color', 'link', 'image', 'video']
699
- */
700
- headerConfig?: string[];
701
- }
702
- interface ValidationResult {
703
- isValid: boolean;
704
- errorMessage?: string;
705
- fieldErrors?: {
706
- [key: string]: string;
707
- };
708
- }
709
- /**
710
- * A single media item stored in the MEDIA_UPLOAD field value array.
711
- * Can represent an uploaded image (from device or library) or a YouTube video.
712
- */
713
- interface MediaItem {
714
- /** Server-assigned ID (for pre-filled items) */
715
- id?: number;
716
- /** Media type (e.g. 'image', 'youtube'). Defaults to 'image'. */
717
- mediaType: string;
718
- /** Remote URL of the image returned by the upload API, or the YouTube embed URL */
719
- url: string;
720
- /** Thumbnail URL (for YouTube previews) */
721
- thumbnailUrl?: string;
722
- /** MIME type returned by the upload API (e.g. 'image/png') */
723
- mimeType?: string;
724
- /** File name returned by the upload API */
725
- fileName?: string;
726
- /** True while the file is being uploaded */
727
- isUploading?: boolean;
728
- }
729
-
730
- /**
731
- * Wraps a FieldConfig leaf with selection metadata for the UI tree.
732
- */
733
- interface SelectionFieldNode {
734
- /** Reference back to the original FieldConfig */
735
- fieldConfig: FieldConfig;
736
- /** Whether this field is selected (checkbox state) */
737
- selected: boolean;
738
- /** If true, the field cannot be deselected by the user */
739
- isLocked: boolean;
740
- }
741
- /**
742
- * Wraps a section (SUBFIELDS / nested sectionConfig) with toggle + tree metadata.
743
- * Sections can recursively contain child sections.
744
- */
745
- interface SelectionSectionNode {
746
- /** Section label */
747
- label: string;
748
- /** The original sectionConfig reference (if applicable) */
749
- sectionConfig: SectionConfig | null;
750
- /** The parent FieldConfig that owns this sectionConfig (type GROUP/SUBFIELDS) */
751
- parentFieldConfig: FieldConfig | null;
752
- /** Whether the section toggle is ON */
753
- enabled: boolean;
754
- /** Whether the section is visually expanded in the tree */
755
- expanded: boolean;
756
- /** Leaf fields inside this section */
757
- fields: SelectionFieldNode[];
758
- /** Recursive child sections */
759
- subsections: SelectionSectionNode[];
760
- }
761
- /**
762
- * Top-level group node (maps to a GROUP field in stepperConfig.children
763
- * or a top-level sectionConfig in a SECTION form).
764
- */
765
- interface SelectionGroupNode {
766
- /** Group label */
767
- label: string;
768
- /** The original FieldConfig of type GROUP (stepper forms) or null (section form) */
769
- groupFieldConfig: FieldConfig | null;
770
- /** Whether the entire group toggle is ON */
771
- enabled: boolean;
772
- /** Whether the group is visually expanded */
773
- expanded: boolean;
774
- /** Sections inside this group */
775
- sections: SelectionSectionNode[];
776
- }
777
-
778
- /**
779
- * Signal-based service for the field-selection component.
780
- * Manages group/section/field enable/disable toggles.
781
- */
782
- declare class FieldSelectionService {
783
- private readonly _state;
784
- private readonly treeService;
785
- readonly groups: i0.Signal<SelectionGroupNode[]>;
786
- readonly originalSchema: i0.Signal<FormSchema>;
787
- readonly totalFieldCount: i0.Signal<number>;
788
- readonly selectedFieldCount: i0.Signal<number>;
789
- /**
790
- * Initialize the store from a FormSchema.
791
- */
792
- loadSchema(schema: FormSchema): void;
793
- /**
794
- * Load a schema while preserving the expanded/collapsed state of sections and groups.
795
- * Used when the schema structure hasn't changed but field selections have.
796
- * This prevents the UI from unexpectedly collapsing sections when the user toggles a field.
797
- */
798
- loadSchemaPreservingExpanded(schema: FormSchema): void;
799
- /**
800
- * Toggle a group's enabled state. Disabling cascades to all sections + fields.
801
- * When enabling, all fields are selected (unless locked).
802
- */
803
- toggleGroup(groupIndex: number): void;
804
- /**
805
- * Toggle a section's enabled state.
806
- * Disabling cascades to all child fields (and subsections).
807
- */
808
- toggleSection(groupIndex: number, sectionPath: number[]): void;
809
- /**
810
- * Toggle a section's expanded (collapsed/expanded) state.
811
- */
812
- toggleSectionExpanded(groupIndex: number, sectionPath: number[]): void;
813
- /**
814
- * Toggle a group's expanded (collapsed/expanded) state.
815
- */
816
- toggleGroupExpanded(groupIndex: number): void;
817
- /**
818
- * Toggle a field's selected (checkbox) state.
819
- */
820
- toggleField(groupIndex: number, sectionPath: number[], fieldIndex: number): void;
821
- /**
822
- * Build and return the updated FormSchema with selection changes applied.
823
- */
824
- buildUpdatedSchema(): FormSchema | null;
825
- private _disableAllSections;
826
- /**
827
- * Enable all sections and their fields (except locked ones).
828
- * Used when toggling a section/group back ON to restore field selections.
829
- */
830
- private _enableAllSections;
831
- private _toggleSectionAtPath;
832
- private _toggleExpandedAtPath;
833
- private _toggleFieldAtPath;
834
- /**
835
- * Recursively merge expansion state from old sections into new sections.
836
- * Preserves which sections were expanded/collapsed by the user.
837
- */
838
- private _mergeExpandedSections;
839
- static ɵfac: i0.ɵɵFactoryDeclaration<FieldSelectionService, never>;
840
- static ɵprov: i0.ɵɵInjectableDeclaration<FieldSelectionService>;
841
- }
842
-
843
- declare class FieldSelectionComponent implements OnChanges {
844
- schema: FormSchema;
845
- schemaChange: EventEmitter<FormSchema>;
846
- /**
847
- * When true, the enable/disable toggle is hidden for option-driven field types
848
- * (DROPDOWN, RADIO, MULTI_SELECT, etc.).
849
- * Useful for business-user-facing form configurators where developers
850
- * pre-fill the option data and these fields should always be included.
851
- * Defaults to false (show toggle for all fields).
852
- */
853
- hideToggleForOptionTypes: boolean;
854
- protected readonly store: FieldSelectionService;
855
- /**
856
- * Flag to track if the next schema change is from internal toggles.
857
- * When true, we'll use loadSchemaPreservingExpanded() to keep user's expansion state.
858
- */
859
- private _isInternalChange;
860
- ngOnChanges(changes: SimpleChanges): void;
861
- onToggleGroup(groupIndex: number): void;
862
- onToggleGroupExpanded(groupIndex: number): void;
863
- onToggleSection(groupIndex: number, sectionPath: number[]): void;
864
- onToggleSectionExpanded(groupIndex: number, sectionPath: number[]): void;
865
- onToggleField(groupIndex: number, sectionPath: number[], fieldIndex: number): void;
866
- trackByGroupIndex(index: number): number;
867
- private _emitChange;
868
- static ɵfac: i0.ɵɵFactoryDeclaration<FieldSelectionComponent, never>;
869
- static ɵcmp: i0.ɵɵComponentDeclaration<FieldSelectionComponent, "lib-field-selection", never, { "schema": { "alias": "schema"; "required": true; }; "hideToggleForOptionTypes": { "alias": "hideToggleForOptionTypes"; "required": false; }; }, { "schemaChange": "schemaChange"; }, never, never, false, never>;
870
- }
871
-
872
- /**
873
- * Metadata about the currently selected field in the configurator.
874
- */
875
- interface ConfiguratorFieldInfo {
876
- /** Reference to the FieldConfig being edited */
877
- fieldConfig: FieldConfig;
878
- /** Display label of the parent group */
879
- groupLabel: string;
880
- /** Display label of the parent section */
881
- sectionLabel: string;
882
- /** Index path used to locate this field inside the FormSchema tree */
883
- path: number[];
884
- }
885
- /**
886
- * A node in the configurator left-panel tree.
887
- * Represents either a group, section, or field.
888
- */
889
- type ConfiguratorNodeType = 'group' | 'section' | 'field';
890
- interface ConfiguratorTreeNode {
891
- /** Unique identifier (name or generated index-based key) */
892
- id: string;
893
- /** Node display label */
894
- label: string;
895
- /** Node type */
896
- type: ConfiguratorNodeType;
897
- /** Whether the node is expanded (for groups/sections) */
898
- expanded: boolean;
899
- /** Reference to the FieldConfig (only for field nodes) */
900
- fieldConfig: FieldConfig | null;
901
- /** Index path to this node in FormSchema */
902
- path: number[];
903
- /** Child nodes */
904
- children: ConfiguratorTreeNode[];
905
- }
906
-
907
- /**
908
- * Signal-based service for the field-configurator component.
909
- * Manages the tree + selected field + config panel state.
910
- */
911
- declare class FieldConfiguratorService {
912
- private readonly _state;
913
- private readonly treeService;
914
- readonly tree: i0.Signal<ConfiguratorTreeNode[]>;
915
- readonly schema: i0.Signal<FormSchema>;
916
- readonly selectedFieldPath: i0.Signal<number[]>;
917
- readonly selectedField: i0.Signal<FieldConfig>;
918
- readonly selectedFieldInfo: i0.Signal<ConfiguratorFieldInfo>;
919
- /**
920
- * Returns the builder-compatible field type string for the currently selected field.
921
- * Used to look up the config schema from field-type-schema.map.ts.
922
- */
923
- readonly selectedFieldBuilderType: i0.Signal<string>;
924
- /**
925
- * Initialize the store from a FormSchema.
926
- */
927
- loadSchema(schema: FormSchema, preserveSelection?: boolean): void;
928
- /**
929
- * Select a field by its path. Pass null to deselect.
930
- */
931
- selectField(path: number[] | null): void;
932
- /**
933
- * Toggle a tree node's expanded state.
934
- */
935
- toggleNodeExpanded(nodeId: string): void;
936
- /**
937
- * Apply a config patch to the currently selected field.
938
- * Rebuilds the schema and tree nodes immutably.
939
- */
940
- patchSelectedField(patch: Partial<FieldConfig>): void;
941
- /**
942
- * Change the type (and optionally subType) of the currently selected field.
943
- * Mapping goes from builderType keys (e.g. 'richText') → {type, subType?}.
944
- * DROPDOWN fields cannot be changed and are guarded here as well.
945
- */
946
- changeFieldType(builderType: string): void;
947
- /**
948
- * Get the current schema (with all applied modifications).
949
- */
950
- getCurrentSchema(): FormSchema | null;
951
- private _toggleExpanded;
952
- private _restoreExpandedStates;
953
- private _getParentLabels;
954
- private _pathsEqual;
955
- static ɵfac: i0.ɵɵFactoryDeclaration<FieldConfiguratorService, never>;
956
- static ɵprov: i0.ɵɵInjectableDeclaration<FieldConfiguratorService>;
957
- }
958
-
959
- declare class FieldConfiguratorComponent implements OnChanges {
960
- schema: FormSchema;
961
- schemaChange: EventEmitter<FormSchema>;
962
- /**
963
- * When false, the optionConfig section (apiUrl, dataPath, etc.) is hidden
964
- * from the configurator panel. Useful for business-user-facing configurators
965
- * where option URLs are pre-filled by the developer.
966
- * Defaults to true (show everything).
967
- */
968
- showOptionConfig: boolean;
969
- /**
970
- * Field names that must always remain enabled and cannot be toggled off.
971
- * When a locked field is selected, the IS ENABLED / READ ONLY / DISABLED
972
- * controls are hidden so the user cannot accidentally disable the field.
973
- */
974
- lockedFieldNames: string[];
975
- readonly store: FieldConfiguratorService;
976
- private readonly cdr;
977
- private readonly schemaMapOverride;
978
- /**
979
- * Merged field-type → config-schema map (defaults + optional overrides).
980
- * Memoized to avoid triggering ngOnChanges in children due to new object references.
981
- */
982
- finalFieldTypeSchemaMap: Record<string, FormSchema>;
983
- private _isInternalChange;
984
- ngOnChanges(changes: SimpleChanges): void;
985
- onFieldSelected(path: number[]): void;
986
- onNodeToggleExpanded(nodeId: string): void;
987
- onConfigChange(patch: Record<string, unknown>): void;
988
- onTypeChange(builderType: string): void;
989
- private _emitChange;
990
- static ɵfac: i0.ɵɵFactoryDeclaration<FieldConfiguratorComponent, never>;
991
- static ɵcmp: i0.ɵɵComponentDeclaration<FieldConfiguratorComponent, "lib-field-configurator", never, { "schema": { "alias": "schema"; "required": true; }; "showOptionConfig": { "alias": "showOptionConfig"; "required": false; }; "lockedFieldNames": { "alias": "lockedFieldNames"; "required": false; }; }, { "schemaChange": "schemaChange"; }, never, never, false, never>;
992
- }
993
-
994
- declare class GroupNodeComponent {
995
- group: SelectionGroupNode;
996
- groupIndex: number;
997
- /** Propagated from FieldSelectionComponent — see SelectionFieldNodeComponent for details. */
998
- hideToggleForOptionTypes: boolean;
999
- toggleEnabled: EventEmitter<void>;
1000
- toggleExpanded: EventEmitter<void>;
1001
- sectionToggleEnabled: EventEmitter<number[]>;
1002
- sectionToggleExpanded: EventEmitter<number[]>;
1003
- fieldToggle: EventEmitter<{
1004
- sectionPath: number[];
1005
- fieldIndex: number;
1006
- }>;
1007
- onSectionToggleEnabled(sectionIndex: number, subPath: number[]): void;
1008
- onSectionToggleExpanded(sectionIndex: number, subPath: number[]): void;
1009
- onFieldToggle(sectionIndex: number, payload: {
1010
- sectionPath: number[];
1011
- fieldIndex: number;
1012
- }): void;
1013
- trackBySectionIndex(index: number): number;
1014
- static ɵfac: i0.ɵɵFactoryDeclaration<GroupNodeComponent, never>;
1015
- static ɵcmp: i0.ɵɵComponentDeclaration<GroupNodeComponent, "lib-group-node", never, { "group": { "alias": "group"; "required": true; }; "groupIndex": { "alias": "groupIndex"; "required": true; }; "hideToggleForOptionTypes": { "alias": "hideToggleForOptionTypes"; "required": false; }; }, { "toggleEnabled": "toggleEnabled"; "toggleExpanded": "toggleExpanded"; "sectionToggleEnabled": "sectionToggleEnabled"; "sectionToggleExpanded": "sectionToggleExpanded"; "fieldToggle": "fieldToggle"; }, never, never, false, never>;
1016
- }
1017
-
1018
- declare class SelectionSectionNodeComponent {
1019
- section: SelectionSectionNode;
1020
- sectionIndex: number;
1021
- depth: number;
1022
- /** Propagated from FieldSelectionComponent — see SelectionFieldNodeComponent for details. */
1023
- hideToggleForOptionTypes: boolean;
1024
- /** Emits the sub-path from this node downward (empty [] for self) */
1025
- toggleEnabled: EventEmitter<number[]>;
1026
- toggleExpanded: EventEmitter<number[]>;
1027
- fieldToggle: EventEmitter<{
1028
- sectionPath: number[];
1029
- fieldIndex: number;
1030
- }>;
1031
- onToggleEnabled(): void;
1032
- onToggleExpanded(): void;
1033
- onSubsectionToggleEnabled(subIndex: number, subPath: number[]): void;
1034
- onSubsectionToggleExpanded(subIndex: number, subPath: number[]): void;
1035
- onFieldToggle(fieldIndex: number): void;
1036
- onSubsectionFieldToggle(subIndex: number, payload: {
1037
- sectionPath: number[];
1038
- fieldIndex: number;
1039
- }): void;
1040
- get selectedCount(): number;
1041
- get isLocked(): boolean;
1042
- trackByFieldIndex(index: number): number;
1043
- trackBySubsectionIndex(index: number): number;
1044
- static ɵfac: i0.ɵɵFactoryDeclaration<SelectionSectionNodeComponent, never>;
1045
- static ɵcmp: i0.ɵɵComponentDeclaration<SelectionSectionNodeComponent, "lib-selection-section-node", never, { "section": { "alias": "section"; "required": true; }; "sectionIndex": { "alias": "sectionIndex"; "required": true; }; "depth": { "alias": "depth"; "required": false; }; "hideToggleForOptionTypes": { "alias": "hideToggleForOptionTypes"; "required": false; }; }, { "toggleEnabled": "toggleEnabled"; "toggleExpanded": "toggleExpanded"; "fieldToggle": "fieldToggle"; }, never, never, false, never>;
1046
- }
1047
-
1048
- declare class SelectionFieldNodeComponent {
1049
- field: SelectionFieldNode;
1050
- toggleSelected: EventEmitter<void>;
1051
- /**
1052
- * When true, the enable/disable toggle is hidden for option-driven field types
1053
- * (DROPDOWN, RADIO, MULTI_SELECT, etc.). These types have their options
1054
- * pre-configured by the developer and shouldn't be toggled by business users.
1055
- */
1056
- hideToggleForOptionTypes: boolean;
1057
- get isOptionDrivenType(): boolean;
1058
- static ɵfac: i0.ɵɵFactoryDeclaration<SelectionFieldNodeComponent, never>;
1059
- static ɵcmp: i0.ɵɵComponentDeclaration<SelectionFieldNodeComponent, "lib-selection-field-node", never, { "field": { "alias": "field"; "required": true; }; "hideToggleForOptionTypes": { "alias": "hideToggleForOptionTypes"; "required": false; }; }, { "toggleSelected": "toggleSelected"; }, never, never, false, never>;
1060
- }
1061
-
1062
- declare class ConfiguratorTreeComponent {
1063
- tree: ConfiguratorTreeNode[];
1064
- selectedFieldPath: number[] | null;
1065
- selectField: EventEmitter<number[]>;
1066
- toggleExpanded: EventEmitter<string>;
1067
- onNodeClick(node: ConfiguratorTreeNode): void;
1068
- onFieldSelect(node: ConfiguratorTreeNode): void;
1069
- onToggleExpand(node: ConfiguratorTreeNode, event: Event): void;
1070
- isSelected(node: ConfiguratorTreeNode): boolean;
1071
- trackByNodeId(_index: number, node: ConfiguratorTreeNode): string;
1072
- private pathsEqual;
1073
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfiguratorTreeComponent, never>;
1074
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfiguratorTreeComponent, "lib-configurator-tree", never, { "tree": { "alias": "tree"; "required": false; }; "selectedFieldPath": { "alias": "selectedFieldPath"; "required": false; }; }, { "selectField": "selectField"; "toggleExpanded": "toggleExpanded"; }, never, never, false, never>;
1075
- }
1076
-
1077
- type SnackbarVariant = 'success' | 'error' | 'warning' | 'info';
1078
- interface SnackbarConfig {
1079
- message: string;
1080
- variant?: SnackbarVariant;
1081
- duration?: number;
1082
- horizontalPosition?: 'start' | 'center' | 'end' | 'left' | 'right';
1083
- verticalPosition?: 'top' | 'bottom';
1084
- showCloseButton?: boolean;
1085
- }
1086
-
1087
- declare class SnackbarService {
1088
- private snackBar;
1089
- constructor(snackBar: MatSnackBar);
1090
- show(config: SnackbarConfig): void;
1091
- success(message: string, duration?: number): void;
1092
- error(message: string, duration?: number): void;
1093
- warning(message: string, duration?: number): void;
1094
- info(message: string, duration?: number): void;
1095
- static ɵfac: i0.ɵɵFactoryDeclaration<SnackbarService, never>;
1096
- static ɵprov: i0.ɵɵInjectableDeclaration<SnackbarService>;
1097
- }
1098
-
1099
- declare class ConfiguratorConfigPanelComponent implements OnChanges {
1100
- private cdr;
1101
- private snackbarService;
1102
- constructor(cdr: ChangeDetectorRef, snackbarService: SnackbarService);
1103
- selectedField: FieldConfig | null;
1104
- selectedFieldInfo: ConfiguratorFieldInfo | null;
1105
- builderFieldType: string | null;
1106
- fieldTypeSchemaMap: Record<string, FormSchema>;
1107
- configChange: EventEmitter<Record<string, unknown>>;
1108
- typeChange: EventEmitter<string>;
1109
- /**
1110
- * When false, all `optionConfig.*` fields (apiUrl, dataPath, labelPath, etc.)
1111
- * are hidden from the config panel. Business users don't need to configure
1112
- * option URLs — these are pre-filled by the developer in the master JSON.
1113
- */
1114
- showOptionConfig: boolean;
1115
- /**
1116
- * Field names that are mandatory and cannot be disabled.
1117
- * When the currently selected field is in this list, IS ENABLED / READ ONLY /
1118
- * DISABLED controls are hidden from the Field State step.
1119
- */
1120
- lockedFieldNames: string[];
1121
- /** Exposed to the template for the native type-switcher select */
1122
- readonly switchableFieldTypes: {
1123
- label: string;
1124
- value: string;
1125
- }[];
1126
- configFormJson: string;
1127
- configInitialValues: Record<string, unknown>;
1128
- showConfigForm: boolean;
1129
- /**
1130
- * The type currently being PREVIEWED in the config form.
1131
- * Starts equal to builderFieldType; changes as user picks a new type.
1132
- * Emitted to the parent on Apply.
1133
- */
1134
- currentBuilderType: string | null;
1135
- /** Identity key of the currently rendered field — used to detect real field switches. */
1136
- private _currentFieldKey;
1137
- /** True when the current field type is DROPDOWN — type switching is disabled for these fields. */
1138
- get isDropdownType(): boolean;
1139
- ngOnChanges(changes: SimpleChanges): void;
1140
- /**
1141
- * Called when the user picks a new type from the native select in the header.
1142
- * Immediately rebuilds the config form to show fields for the new type.
1143
- * The actual field-level type change is only committed when Apply is clicked.
1144
- */
1145
- onTypeSelectChange(event: Event): void;
1146
- onActionClick(event: {
1147
- id: string;
1148
- formData: Record<string, unknown>;
1149
- }): void;
1150
- /**
1151
- * Rebuild the SmartForm for the given builder type key.
1152
- * Uses a destroy/recreate cycle (showConfigForm toggle + setTimeout) to
1153
- * guarantee a completely fresh SmartForm instance is mounted.
1154
- */
1155
- private _buildConfigFormForType;
1156
- /**
1157
- * Deep-clones the schema and removes any field whose `name` matches developer-only fields.
1158
- * This prevents end users from modifying system-level configurations like:
1159
- * - optionConfig.* (API URLs, data paths, etc.)
1160
- * - payloadPath (payload mapping)
1161
- * - className (CSS styling)
1162
- * - name (system identifier)
1163
- *
1164
- * Also removes entire sections that become empty after filtering.
1165
- */
1166
- private _filterSchemaForOptionConfig;
1167
- /**
1168
- * Remove IS ENABLED, READ ONLY, and DISABLED controls from the config schema
1169
- * when the selected field is a mandatory/locked field.
1170
- */
1171
- private _filterSchemaForLockedField;
1172
- private _extractInitialValuesFromField;
1173
- private _buildPatchFromFormData;
1174
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfiguratorConfigPanelComponent, never>;
1175
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfiguratorConfigPanelComponent, "lib-configurator-config-panel", never, { "selectedField": { "alias": "selectedField"; "required": false; }; "selectedFieldInfo": { "alias": "selectedFieldInfo"; "required": false; }; "builderFieldType": { "alias": "builderFieldType"; "required": false; }; "fieldTypeSchemaMap": { "alias": "fieldTypeSchemaMap"; "required": false; }; "showOptionConfig": { "alias": "showOptionConfig"; "required": false; }; "lockedFieldNames": { "alias": "lockedFieldNames"; "required": false; }; }, { "configChange": "configChange"; "typeChange": "typeChange"; }, never, never, false, never>;
1176
- }
1177
-
1178
- declare class SmartFormController {
1179
- private formData;
1180
- /** Auth token sourced from the FormSchema configJSON (e.g. "Bearer eyJ…") */
1181
- token?: string;
1182
- /** HTTP header name for the token (default: "Authorization") */
1183
- tokenHeader?: string;
1184
- /** Flat map of translated i18n labels passed from SmartFormComponent */
1185
- labels: any;
1186
- /** Custom label keys for form actions (Next, Submit, Add, etc.) */
1187
- actionLabels?: FormLabels;
1188
- fieldSubjects: Map<string, BehaviorSubject<any>>;
1189
- fileAdded$: Subject<any>;
1190
- fileUploadFinished$: Subject<any>;
1191
- fileRemoved$: Subject<any>;
1192
- /** Emitted when a suffixActionIcon is clicked inside a form field */
1193
- suffixActionClick$: Subject<{
1194
- fieldName: string;
1195
- actionId: string;
1196
- }>;
1197
- initialize(initialData: {
1198
- [key: string]: any;
1199
- }): void;
1200
- updateField(name: string, value: any): void;
1201
- getFieldValue(name: string): any;
1202
- getFieldObservable(name: string): Observable<any>;
1203
- getAllData(): {
1204
- [key: string]: any;
1205
- };
1206
- reset(): void;
1207
- destroy(): void;
1208
- static ɵfac: i0.ɵɵFactoryDeclaration<SmartFormController, never>;
1209
- static ɵprov: i0.ɵɵInjectableDeclaration<SmartFormController>;
1210
- }
1211
-
1212
- declare class ExpressionService {
1213
- private loadedFunctions;
1214
- evaluate(expression: string, context: {
1215
- [key: string]: any;
1216
- }, variables?: string[]): any;
1217
- evaluateCondition(expression: string, context: {
1218
- [key: string]: any;
1219
- }): boolean;
1220
- evaluateFormula(formula: string, functionName: string, context: {
1221
- [key: string]: any;
1222
- }, variables?: string[]): any;
1223
- extractVariables(expression: string): string[];
1224
- static ɵfac: i0.ɵɵFactoryDeclaration<ExpressionService, never>;
1225
- static ɵprov: i0.ɵɵInjectableDeclaration<ExpressionService>;
1226
- }
1227
-
1228
- interface ConfirmationModalConfig {
1229
- title: string;
1230
- headerTheme?: 'light' | 'dark';
1231
- icon?: string | {
1232
- type: 'material' | 'custom';
1233
- value: string;
1234
- color?: string;
1235
- };
1236
- width?: string;
1237
- size?: 'sm' | 'md' | 'lg' | 'xl';
1238
- customClass?: string;
1239
- type?: 'modal' | 'side-panel';
1240
- panelPosition?: 'left' | 'right' | 'top' | 'bottom';
1241
- panelSpacing?: string;
1242
- panelWidth?: string;
1243
- panelHeight?: string;
1244
- backgroundColor?: string;
1245
- borderRadius?: string;
1246
- borderTopLeftRadius?: string;
1247
- borderTopRightRadius?: string;
1248
- borderBottomLeftRadius?: string;
1249
- borderBottomRightRadius?: string;
1250
- padding?: string;
1251
- headerBackgroundColor?: string;
1252
- headerTextColor?: string;
1253
- headerBorderBottom?: string;
1254
- bodyTextColor?: string;
1255
- footerBackgroundColor?: string;
1256
- footerBorderTop?: string;
1257
- confirmButton: {
1258
- label: string;
1259
- type: 'primary' | 'danger' | 'warning';
1260
- disabled?: boolean;
1261
- loading?: boolean;
1262
- };
1263
- cancelButton?: {
1264
- label?: string;
1265
- show?: boolean;
1266
- };
1267
- customFooter?: boolean;
1268
- formMode?: boolean;
1269
- closeOnBackdrop?: boolean;
1270
- closeOnEsc?: boolean;
1271
- showCloseButton?: boolean;
1272
- showCodeSnippetButton?: boolean;
1273
- ariaLabel?: string;
1274
- ariaDescribedBy?: string;
1275
- labels?: {
1276
- closeAriaLabel?: string;
1277
- codeSnippetAriaLabel?: string;
1278
- codeSnippetTitle?: string;
1279
- iconAltText?: string;
1280
- };
1281
- }
1282
-
1283
- declare class FormFieldComponent implements OnInit, OnDestroy {
1284
- private fb;
1285
- private expressionService;
1286
- private http;
1287
- config: FieldConfig;
1288
- controller: SmartFormController;
1289
- /**
1290
- * The FormGroup that THIS field's control should be registered in.
1291
- * For repeater instances this is the instance's own isolated FormGroup.
1292
- * For flat (non-repeater) fields this is the root formGroup.
1293
- */
1294
- formGroup: FormGroup;
1295
- /**
1296
- * Set to TRUE when this field is part of a repeatable group (config.sectionConfig.allowMulti = true).
1297
- * When true, the field does NOT sync with the global controller to prevent data collision
1298
- * between different instances of the same repeater row.
1299
- */
1300
- allowMulti: boolean;
1301
- /**
1302
- * The repeater's FormArray, set only when this field instance lives inside an
1303
- * allowMulti section (see FormSectionComponent). Lets a single-select DROPDOWN
1304
- * exclude values already chosen by sibling instances — e.g. picking "English" in
1305
- * Language Details #1 removes it from Language Details #2's options — without any
1306
- * schema-level config (see displayOptionList/displayLocalOptionList below).
1307
- */
1308
- siblingFormArray: FormArray | null;
1309
- /** This instance's own index within siblingFormArray — excluded from the "taken values" set. */
1310
- siblingIndex: number | null;
1311
- value: any;
1312
- isVisible: boolean;
1313
- showPassword: boolean;
1314
- dynamicMinDate: string | null;
1315
- dynamicMinTime: string | null;
1316
- /**
1317
- * Effective minimum date for the datepicker.
1318
- * Priority: dynamic (sibling field) → explicit minDate → today (when allowPast is false).
1319
- * When allowPast is not false, past dates stay allowed unless an explicit min is set.
1320
- */
1321
- get effectiveMinDate(): string | null;
1322
- /**
1323
- * Effective minimum time for the time input.
1324
- * Priority: dynamic (sibling field) → explicit minTime.
1325
- * Mirrors {@link effectiveMinDate} for TIME fields.
1326
- */
1327
- get effectiveMinTime(): string | null;
1328
- /** Effective maximum time for the time input (explicit maxTime only). */
1329
- get effectiveMaxTime(): string | null;
1330
- isMultiDropdownOpen: boolean;
1331
- isSingleDropdownOpen: boolean;
1332
- searchText: string;
1333
- filteredOptionList: any[];
1334
- dropdownSearch$: Subject<string>;
1335
- isDragOver: boolean;
1336
- fileUploadError: string;
1337
- multiSaveError: string;
1338
- private destroy$;
1339
- mediaDeviceInput: ElementRef<HTMLInputElement>;
1340
- /** Host div for the library picker — always in DOM, moved to body to escape parent transforms */
1341
- libraryModalRef: ElementRef<HTMLDivElement>;
1342
- showMediaMenu: boolean;
1343
- showYoutubeInput: boolean;
1344
- youtubeUrlInput: string;
1345
- youtubeUrlError: string;
1346
- mediaCarouselIndex: number;
1347
- showLibraryModal: boolean;
1348
- libraryImages: any[];
1349
- librarySelectedIds: Set<any>;
1350
- libraryLoading: boolean;
1351
- libraryError: string;
1352
- mediaUploadError: string;
1353
- /** Active tab: any string, e.g. 'VENUE', 'ONLINE', 'TBA'. Defaults to 'VENUE'. */
1354
- locationActiveTab: string;
1355
- /** Current text in the venue search box */
1356
- locationSearchText: string;
1357
- /** Google Places autocomplete suggestions */
1358
- locationSuggestions: any[];
1359
- /** Show the suggestions dropdown */
1360
- locationShowSuggestions: boolean;
1361
- /** Cached Google AutocompleteService instance */
1362
- private _googleAcService;
1363
- /** Whether Google Maps is loaded */
1364
- locationMapLoaded: boolean;
1365
- /** Map instance */
1366
- private _googleMap;
1367
- /** Map markers */
1368
- private _mapMarkers;
1369
- /** FormControl used ONLY for the autocomplete text-input display value */
1370
- autocompleteInputCtrl: FormControl<string>;
1371
- /** Filtered option list shown in the mat-autocomplete panel */
1372
- filteredOptions: {
1373
- label: string;
1374
- code: any;
1375
- }[];
1376
- /**
1377
- * Component-local option list for DROPDOWN/RADIO/CHECKBOX/CHIP fields.
1378
- * Using a local copy prevents shared-config mutation when the same field config
1379
- * object is reused across multiple allowMulti repeater instances.
1380
- */
1381
- localOptionList: any[];
1382
- /** Cache of the latest dependency parameters for server-side autocomplete filtering */
1383
- private _latestDependencyValues;
1384
- /** For GROUP fields with allowMulti = true */
1385
- groupFormArray: FormArray;
1386
- /** For GROUP fields with allowMulti = false — single nested FormGroup */
1387
- groupFormGroup: FormGroup;
1388
- /**
1389
- * Tracked list of repeater instances.
1390
- * Using a separate array (not FormArray.controls) + trackBy(id) ensures
1391
- * Angular creates FRESH child components for every new row, preventing
1392
- * cached values from bleeding into new instances.
1393
- *
1394
- * Enhanced with isEditing and isSaved flags for the 'multiSave' card UI.
1395
- * Each instance gets its own rowController so cascading dropdowns work
1396
- * independently within each repeater row.
1397
- */
1398
- instanceList: {
1399
- id: number;
1400
- fg: FormGroup;
1401
- initialValue?: any;
1402
- isEditing?: boolean;
1403
- isSaved?: boolean;
1404
- isExpanded?: boolean;
1405
- rowController: SmartFormController;
1406
- }[];
1407
- private _nextInstanceId;
1408
- /** Tracks open accordion panels for standard (non-multiSave) GROUP repeaters. */
1409
- expandedGroupInstances: Set<number>;
1410
- /**
1411
- * Key used to register the GROUP control on the parent formGroup.
1412
- * Priority: sectionConfig.name > field.name > camelCase(label) > '__group__'
1413
- */
1414
- get groupKey(): string;
1415
- constructor(fb: FormBuilder, expressionService: ExpressionService, http: HttpClient);
1416
- ngOnInit(): void;
1417
- get addMultiLabel(): string;
1418
- /** Getter for Select placeholder label */
1419
- get selectPlaceholderLabel(): string;
1420
- /** Getter for No options available label */
1421
- get noOptionsAvailableLabel(): string;
1422
- /** Getter for expand less icon name */
1423
- get expandLessLabel(): string;
1424
- /** Getter for expand more icon name */
1425
- get expandMoreLabel(): string;
1426
- /** Getter for dropdown search placeholder label */
1427
- get searchPlaceholderLabel(): string;
1428
- /** Getter for Select All label */
1429
- get selectAllLabel(): string;
1430
- /** Getter for No matching options label */
1431
- get noMatchingOptionsLabel(): string;
1432
- /** Returns the label of the currently selected option for single-select custom dropdowns */
1433
- get singleSelectedLabel(): string;
1434
- /** Whether the dropdown search feature is enabled for this field */
1435
- get isSearchableDropdown(): boolean;
1436
- private initGroupField;
1437
- /**
1438
- * Sets up cross-field validation based on the `onValidate` formula.
1439
- * Watches all variables mentioned in the formula and updates the field's
1440
- * validity whenever any of them change.
1441
- */
1442
- private setupFormulaValidation;
1443
- addGroupInstance(initialData?: any): void;
1444
- saveGroupInstance(index: number): void;
1445
- /**
1446
- * Re-opens any repeater instance (multiSave card or standard accordion panel)
1447
- * whose nested FormGroup is invalid, so errors hidden by a collapsed card/panel
1448
- * become visible. Called by the root form when a submit attempt is blocked.
1449
- * Returns true if at least one invalid instance was revealed.
1450
- */
1451
- revealInvalidInstances(): boolean;
1452
- cancelGroupInstance(index: number): void;
1453
- editGroupInstance(index: number): void;
1454
- toggleExpandGroupInstance(index: number): void;
1455
- removeGroupInstance(index: number, force?: boolean): void;
1456
- toggleGroupAccordion(index: number): void;
1457
- isGroupExpanded(index: number): boolean;
1458
- trackByInstanceId(_: number, item: {
1459
- id: number;
1460
- fg: FormGroup;
1461
- }): number;
1462
- ngAfterViewInit(): void;
1463
- /** Handles click on a suffix action icon and emits via the controller */
1464
- onSuffixActionClick(actionId: string): void;
1465
- ngOnDestroy(): void;
1466
- registerControl(): void;
1467
- getValidators(): ValidatorFn[];
1468
- /**
1469
- * When `textConfig.matchField` is configured, subscribes to value changes on
1470
- * BOTH this control and the referenced control so the mismatch error updates
1471
- * instantly whichever field the user edits last.
1472
- *
1473
- * - Values differ → sets `{ passwordMismatch: true }` on THIS control.
1474
- * - Values match → clears `passwordMismatch` from THIS control.
1475
- */
1476
- setupMatchValidation(): void;
1477
- setupVisibility(): void;
1478
- setupMinDateField(): void;
1479
- /**
1480
- * Wires up a dynamic minimum for a TIME field from a sibling TIME field
1481
- * (config.timeConfig.minTimeField). When the source changes, this field's
1482
- * minimum updates and any now-invalid value (earlier than the new minimum)
1483
- * is cleared. Mirrors {@link setupMinDateField} for TIME fields.
1484
- */
1485
- setupMinTimeField(): void;
1486
- setupGeneratedField(): void;
1487
- evaluateFormula(context: {
1488
- [key: string]: any;
1489
- }): any;
1490
- extractFunctionName(formula: string): string | null;
1491
- setupDependencies(): void;
1492
- loadDropdownOptions(dynamicParams?: {
1493
- [key: string]: any;
1494
- }): void;
1495
- private getValueByPath;
1496
- /**
1497
- * Replaces `{placeholder}` tokens in a URL with values resolved from the
1498
- * current form data (supports dot / array-index paths via getValueByPath).
1499
- * Returns the interpolated URL plus whether EVERY token was resolved.
1500
- *
1501
- * Used by the delete flows: when a required id (e.g. `{entityId}`) is missing
1502
- * — as in CREATE mode before the entity exists — `resolved` is false and the
1503
- * caller skips the server delete and just removes the item from the form.
1504
- */
1505
- private resolveUrlPlaceholders;
1506
- /** Builds HttpHeaders using the token stored in the SmartFormController (sourced from configJSON)
1507
- * merged with any custom headers declared in optionConfig.headers.
1508
- */
1509
- private _fileLabel;
1510
- private getHeaders;
1511
- updateValue(newValue: any): void;
1512
- onCheckboxListChange(code: string, checked: boolean): void;
1513
- isChecked(code: string): boolean;
1514
- get errorMessage(): string;
1515
- get showCharCount(): boolean;
1516
- get remainingCharacters(): number | null;
1517
- private static readonly RICH_TEXT_TOKEN_MAP;
1518
- private static readonly DEFAULT_RICH_TEXT_HEADER;
1519
- /**
1520
- * Builds the ngx-quill `modules.toolbar` config from `richTextConfig.headerConfig`
1521
- * (a flat list of tokens) falling back to a curated default set.
1522
- * Consecutive simple (button) tokens are grouped together; dropdown-style
1523
- * tokens (font/size/color/...) each get their own group, matching Quill's
1524
- * expected toolbar shape.
1525
- */
1526
- get richTextModules(): any;
1527
- toggleMultiDropdown(event: MouseEvent): void;
1528
- toggleSingleDropdown(event: MouseEvent): void;
1529
- selectSingleOption(option: any): void;
1530
- onDocumentClick(): void;
1531
- onEscapeKey(): void;
1532
- get multiSelectedCount(): number;
1533
- /** True when this is a single-select DROPDOWN living inside an allowMulti repeater. */
1534
- private get _excludesSiblingValues();
1535
- /** Values currently chosen for this field name by OTHER instances in the repeater. */
1536
- private get _siblingTakenValues();
1537
- private _excludeTaken;
1538
- /** Options for the custom single-select dropdown, with sibling-taken values hidden. */
1539
- get displayOptionList(): any[];
1540
- /** Options for the native <select>/radio rendering, with sibling-taken values hidden. */
1541
- get displayLocalOptionList(): any[];
1542
- /** Initialise the RxJS search stream for dropdown filtering. */
1543
- private initDropdownSearch;
1544
- /** Execute client-side or server-side dropdown search. */
1545
- private executeDropdownSearch;
1546
- /** Resets the dropdown search text and filtered list. */
1547
- resetDropdownSearch(): void;
1548
- /** Returns true if every option in the current filtered list is selected. */
1549
- isAllSelected(): boolean;
1550
- /** Returns true if some (but not all) filtered options are selected — for indeterminate state. */
1551
- isSomeSelected(): boolean;
1552
- /** Toggles selection of all filtered options. */
1553
- toggleSelectAll(checked: boolean): void;
1554
- get isTextField(): boolean;
1555
- get isNumberField(): boolean;
1556
- get isDateField(): boolean;
1557
- get isTimeField(): boolean;
1558
- get isDropdown(): boolean;
1559
- get isAutocomplete(): boolean;
1560
- get isFileUpload(): boolean;
1561
- get isMediaUpload(): boolean;
1562
- get isRadio(): boolean;
1563
- get isCheckbox(): boolean;
1564
- get isChip(): boolean;
1565
- get isSwitch(): boolean;
1566
- get isRating(): boolean;
1567
- get isRichText(): boolean;
1568
- get isGenerated(): boolean;
1569
- get isRow(): boolean;
1570
- get isGroup(): boolean;
1571
- get isLocation(): boolean;
1572
- /**
1573
- * Initialise the separate display-control that drives the mat-autocomplete
1574
- * text input. The real form control always stores the *code* value.
1575
- */
1576
- private initAutocomplete;
1577
- /** Filter options by the user's search text (matches label or code). */
1578
- private _filterOptions;
1579
- /** Put the human-readable label into the display control based on the stored code. */
1580
- private _syncAutocompleteDisplayValue;
1581
- /** Called when user picks an option from the mat-autocomplete panel. */
1582
- onAutocompleteSelected(option: {
1583
- label: string;
1584
- code: any;
1585
- }): void;
1586
- /** Called when the input loses focus — clear display & value if text was manually deleted. */
1587
- onAutocompleteClear(): void;
1588
- /**
1589
- * Returns the effective grid column span for a child inside a ROW.
1590
- * If the child declares an explicit colSpan, use it.
1591
- * Otherwise divide 12 equally among all children (floor, min 1).
1592
- */
1593
- getChildColSpan(child: FieldConfig): number;
1594
- getOptionColSpan(option: any): number;
1595
- onRatingChange(star: number, event?: MouseEvent): void;
1596
- getStarArray(): number[];
1597
- isStarHalf(star: number): boolean;
1598
- isStarFilled(star: number): boolean;
1599
- onDragOver(event: DragEvent): void;
1600
- onDragLeave(event: DragEvent): void;
1601
- onFileDrop(event: DragEvent): void;
1602
- onFileSelected(event: Event): void;
1603
- private processFiles;
1604
- removeUploadedFile(index: number): void;
1605
- getFileIcon(mimeType: string): string;
1606
- formatFileSize(bytes: number): string;
1607
- get addLabel(): string;
1608
- get removeLabel(): string;
1609
- get mediaItems(): MediaItem[];
1610
- /** Number of active items (used to clamp carousel index) */
1611
- get mediaCount(): number;
1612
- /** The currently visible carousel item */
1613
- get activeMediaItem(): MediaItem | null;
1614
- /** Thumbnail strip items */
1615
- get mediaThumbnails(): MediaItem[];
1616
- mediaCarouselPrev(): void;
1617
- mediaCarouselNext(): void;
1618
- mediaGoTo(index: number): void;
1619
- onMediaMenuVideo(): void;
1620
- addYoutubeMedia(): void;
1621
- private _extractYoutubeId;
1622
- onMediaMenuDevice(): void;
1623
- onMediaFileSelected(event: Event): void;
1624
- /**
1625
- * Resolves the library-image sync POST endpoint from `attachmentConfig.libraryConfig.uploadConfig`.
1626
- * Returns `null` when not configured; the caller skips the API call.
1627
- */
1628
- private buildLibraryUploadRequest;
1629
- /** Config object for the cc-confirmation-modal used as the library picker. */
1630
- get libraryModalConfig(): ConfirmationModalConfig;
1631
- onMediaMenuLibrary(): void;
1632
- private _loadLibraryImages;
1633
- getLibraryItemUrl(item: any): string;
1634
- getLibraryItemId(item: any): any;
1635
- isLibraryItemSelected(item: any): boolean;
1636
- toggleLibraryItem(item: any): void;
1637
- closeLibraryModal(): void;
1638
- confirmLibrarySelection(): void;
1639
- removeMediaItem(index: number): void;
1640
- private _appendMediaItem;
1641
- private showMediaError;
1642
- private initLocationField;
1643
- private _ensureGoogleMapsScript;
1644
- onLocationTabChange(tab: string): void;
1645
- get locationValue(): LocationFieldValue;
1646
- get locationVenues(): LocationItem[];
1647
- get locationOnlineUrl(): string;
1648
- get locationMaxReached(): boolean;
1649
- handleLocationSearchInput(event: Event): void;
1650
- onLocationSuggestionSelect(prediction: any): void;
1651
- private _addVenueAndUpdate;
1652
- removeLocationVenue(index: number): void;
1653
- onLocationUrlChange(url: string): void;
1654
- hideLocationSuggestions(): void;
1655
- getLocationMapEmbedUrl(): string;
1656
- private _renderMap;
1657
- static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldComponent, never>;
1658
- static ɵcmp: i0.ɵɵComponentDeclaration<FormFieldComponent, "lib-form-field", never, { "config": { "alias": "config"; "required": false; }; "controller": { "alias": "controller"; "required": false; }; "formGroup": { "alias": "formGroup"; "required": false; }; "allowMulti": { "alias": "allowMulti"; "required": false; }; "siblingFormArray": { "alias": "siblingFormArray"; "required": false; }; "siblingIndex": { "alias": "siblingIndex"; "required": false; }; }, {}, never, never, false, never>;
1659
- }
1660
-
1661
- declare class SmartFormComponent implements OnInit, OnChanges, OnDestroy {
1662
- private fb;
1663
- controller: SmartFormController;
1664
- private expressionService;
1665
- private http;
1666
- private snackbarService;
1667
- private router;
1668
- private cdr;
1669
- formFieldComponents: QueryList<FormFieldComponent>;
1670
- private destroy$;
1671
- formJson: string;
1672
- initialValues?: {
1673
- [key: string]: any;
1674
- };
1675
- enableDraftAutoSave: boolean;
1676
- /** Flat i18n labels map passed by the consuming app.
1677
- * After JSON parse the schema is walked and every string value that
1678
- * matches a key in this map is replaced with the translated value.
1679
- * Mirrors the pattern used by ConfigurableFormComponent + translateConfig.
1680
- */
1681
- labels: any;
1682
- mode: 'CREATE' | 'EDIT';
1683
- /** When true, all form fields are disabled and the action bar is hidden (preview/read-only mode). */
1684
- readOnly: boolean;
1685
- submit: EventEmitter<{
1686
- [key: string]: any;
1687
- }>;
1688
- draftSave: EventEmitter<string>;
1689
- /**
1690
- * Emitted when a button with a custom `type` (not 'cancel', 'draft', or
1691
- * 'submit') is clicked. Payload contains the button `id` and the current
1692
- * form data snapshot.
1693
- */
1694
- actionClick: EventEmitter<{
1695
- id: string;
1696
- formData: {
1697
- [key: string]: any;
1698
- };
1699
- }>;
1700
- valueChange: EventEmitter<{
1701
- [key: string]: any;
1702
- }>;
1703
- fileAdded: EventEmitter<any>;
1704
- fileUploadFinished: EventEmitter<any>;
1705
- fileRemoved: EventEmitter<any>;
1706
- /** Emitted when a suffixActionIcon is clicked. Payload: { fieldName, actionId } */
1707
- suffixActionClick: EventEmitter<{
1708
- fieldName: string;
1709
- actionId: string;
1710
- }>;
1711
- /** Emitted whenever the active section step changes. Carries current state so the
1712
- * host can show/hide Previous/Next/Submit buttons in its own footer. */
1713
- stepChange: EventEmitter<{
1714
- currentStep: number;
1715
- totalSteps: number;
1716
- isFirst: boolean;
1717
- isLast: boolean;
1718
- stepLabel: string;
1719
- }>;
1720
- formSchema: FormSchema;
1721
- formGroup: FormGroup;
1722
- fieldList: FieldConfig[];
1723
- isStepper: boolean;
1724
- currentStep: number;
1725
- isLoading: boolean;
1726
- isDraftLoading: boolean;
1727
- /** True when sectionStepper mode is active (SECTION form with top-level GROUPs as steps). */
1728
- isSectionStepper: boolean;
1729
- /** Index of the currently visible section step. */
1730
- currentSectionStep: number;
1731
- /** Flat list of top-level GROUP FieldConfigs that become the stepper steps. */
1732
- sectionSteps: FieldConfig[];
1733
- /** Validation state per section step — drives badge colour/icon. */
1734
- stepValidationStates: ('untouched' | 'valid' | 'warning')[];
1735
- /** Flat field-name lists per step used for targeted validation. */
1736
- private stepFieldNames;
1737
- /** Controls skeleton visibility. Stays false until schema is parsed AND
1738
- * any EDIT-mode data fetch completes, but always shows for at least
1739
- * SKELETON_MIN_MS so the animation is visible even on fast loads. */
1740
- isFormReady: boolean;
1741
- private readonly SKELETON_MIN_MS;
1742
- private _skeletonStart;
1743
- constructor(fb: FormBuilder, controller: SmartFormController, expressionService: ExpressionService, http: HttpClient, snackbarService: SnackbarService, router: Router, cdr: ChangeDetectorRef);
1744
- ngOnInit(): void;
1745
- loadEditData(): void;
1746
- /** Flips isFormReady=true after the skeleton has been visible for at least SKELETON_MIN_MS. */
1747
- private _markReady;
1748
- ngOnChanges(changes: SimpleChanges): void;
1749
- ngOnDestroy(): void;
1750
- /** Public backward-compatible entry point — delegates to _startForm. */
1751
- parseFormJson(): void;
1752
- private _startForm;
1753
- private _applySchema;
1754
- initializeForm(): void;
1755
- collectFields(fields: FieldConfig[]): void;
1756
- handleSubmit(): void;
1757
- /**
1758
- * Universal action handler for any button click.
1759
- * One handler decides how to process based on action.kind.
1760
- */
1761
- handleButtonClick(btn: ActionButtonConfig): void;
1762
- private fireActionApiCall;
1763
- /**
1764
- * Constructs nested payload by checking field properties on form controls.
1765
- */
1766
- collectFormData(): {
1767
- [key: string]: any;
1768
- };
1769
- /**
1770
- * Deep merges the source object (e.g. extraPayload) into the target object (e.g. form payload).
1771
- */
1772
- private deepMerge;
1773
- private buildNestedPayload;
1774
- private setNestedValue;
1775
- private extractGroupValue;
1776
- validate(): boolean;
1777
- scrollToFirstInvalidControl(): void;
1778
- submitToApi(formData: any, actionType?: 'submit' | 'draft', btn?: ActionButtonConfig): void;
1779
- showAlert(type: 'success' | 'error' | 'warning' | 'info', message: string, customConfig?: any): void;
1780
- /** Builds HttpHeaders from the token stored in the controller (sourced from configJSON). */
1781
- getHeaders(): HttpHeaders;
1782
- nextStep(): void;
1783
- previousStep(): void;
1784
- get canGoNext(): boolean;
1785
- get canGoPrevious(): boolean;
1786
- get currentStepConfig(): FieldConfig | undefined;
1787
- /** Advance to the next section step. Called by the host footer "Next" button.
1788
- * Validates the current step first — marks it valid (green) or warning (orange). */
1789
- navigateToNext(): void;
1790
- /** Go back to the previous section step. Called by the host footer "Previous" button. */
1791
- navigateToPrevious(): void;
1792
- /** Jump directly to a specific section step by index.
1793
- * Validates the step being left so the badge state updates correctly. */
1794
- goToSectionStep(index: number): void;
1795
- get isSectionStepFirst(): boolean;
1796
- get isSectionStepLast(): boolean;
1797
- /** Returns the SectionConfig for a given step — passed to lib-form-section.
1798
- * The outer label is intentionally omitted because the stepper nav already
1799
- * displays it; showing it again inside the content would be redundant. */
1800
- getSectionStepConfig(step: FieldConfig): any;
1801
- private _emitStepChange;
1802
- /** Marks all controls in the given step as touched, records valid/warning state,
1803
- * and returns whether the step had any invalid control. */
1804
- private _validateStep;
1805
- /** Public hard-validation check for the host app: does the CURRENT step have any
1806
- * invalid required field? navigateToNext()/goToSectionStep() only mark a step's badge
1807
- * as a soft "warning" and still advance regardless — hosts that need to actually BLOCK
1808
- * navigation until required fields are filled (e.g. the beneficiary add/edit wizard)
1809
- * should call this before invoking navigateToNext(). Also marks the step's controls as
1810
- * touched so the field-level error states render immediately. */
1811
- isCurrentStepValid(): boolean;
1812
- /** Recursively collects all leaf field names from a set of FieldConfigs. */
1813
- private _collectFieldNames;
1814
- get nextLabel(): string;
1815
- get submitLabel(): string;
1816
- get previousLabel(): string;
1817
- get actionBarConfig(): ActionBarConfig | undefined;
1818
- /**
1819
- * Returns buttons for a given alignment, sorted by `order` (stable).
1820
- */
1821
- getButtonsForAlignment(alignment: 'left' | 'right'): ActionButtonConfig[];
1822
- getButtonLabel(btn: ActionButtonConfig): string;
1823
- isButtonDisabled(btn: ActionButtonConfig): boolean;
1824
- private getButtonByActionKind;
1825
- private navigateTo;
1826
- private _hasHierarchyDynamic;
1827
- private _expandHierarchyNodes;
1828
- private _expandNodeRecursive;
1829
- private _expandSingleNode;
1830
- private _normalizeHierarchyCfg;
1831
- private _fetchHierarchyTemplate;
1832
- private _buildHierarchyFields;
1833
- private _getPathValue;
1834
- private _codeToFieldName;
1835
- private _codeToLabel;
1836
- static ɵfac: i0.ɵɵFactoryDeclaration<SmartFormComponent, never>;
1837
- static ɵcmp: i0.ɵɵComponentDeclaration<SmartFormComponent, "lib-smart-form", never, { "formJson": { "alias": "formJson"; "required": false; }; "initialValues": { "alias": "initialValues"; "required": false; }; "enableDraftAutoSave": { "alias": "enableDraftAutoSave"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; }, { "submit": "submit"; "draftSave": "draftSave"; "actionClick": "actionClick"; "valueChange": "valueChange"; "fileAdded": "fileAdded"; "fileUploadFinished": "fileUploadFinished"; "fileRemoved": "fileRemoved"; "suffixActionClick": "suffixActionClick"; "stepChange": "stepChange"; }, never, never, false, never>;
1838
- }
1839
-
1840
- declare class FormSectionComponent implements OnInit, OnDestroy {
1841
- private fb;
1842
- config: SectionConfig;
1843
- controller: SmartFormController;
1844
- formGroup: FormGroup;
1845
- /**
1846
- * For allowMulti sections: the FormArray registered on the root formGroup.
1847
- * Each element is a FormGroup representing one repeater instance.
1848
- */
1849
- repeaterFormArray: FormArray;
1850
- /** Tracks which accordion panels are open (by index). New instances start expanded. */
1851
- expandedInstances: Set<number>;
1852
- /**
1853
- * The key under which the FormArray is registered in the root formGroup.
1854
- * Falls back to config.name or a generated key.
1855
- */
1856
- get arrayKey(): string;
1857
- constructor(fb: FormBuilder);
1858
- ngOnInit(): void;
1859
- ngOnDestroy(): void;
1860
- /** Creates a fresh FormGroup for one repeater instance */
1861
- private createInstanceGroup;
1862
- addInstance(): void;
1863
- removeInstance(index: number): void;
1864
- toggleInstance(index: number): void;
1865
- isExpanded(index: number): boolean;
1866
- getInstanceGroup(index: number): FormGroup;
1867
- get instanceGroups(): FormGroup[];
1868
- /** For non-allowMulti sections we simply pass the root formGroup down */
1869
- get flatFormGroup(): FormGroup;
1870
- /** Flatten a field tree to get all leaf fields (for ROW children etc.) */
1871
- getFlatFields(fields: FieldConfig[]): FieldConfig[];
1872
- static ɵfac: i0.ɵɵFactoryDeclaration<FormSectionComponent, never>;
1873
- static ɵcmp: i0.ɵɵComponentDeclaration<FormSectionComponent, "lib-form-section", never, { "config": { "alias": "config"; "required": false; }; "controller": { "alias": "controller"; "required": false; }; "formGroup": { "alias": "formGroup"; "required": false; }; }, {}, never, never, false, never>;
1874
- }
1875
-
1876
- /**
1877
- * Bypasses Angular's DomSanitizer for resource URLs (e.g. YouTube embed iframes).
1878
- * Used only for trusted URLs such as YouTube embed links derived from user-provided video IDs.
1879
- */
1880
- declare class TrustedUrlPipe implements PipeTransform {
1881
- private sanitizer;
1882
- constructor(sanitizer: DomSanitizer);
1883
- transform(url: string): SafeResourceUrl | null;
1884
- static ɵfac: i0.ɵɵFactoryDeclaration<TrustedUrlPipe, never>;
1885
- static ɵpipe: i0.ɵɵPipeDeclaration<TrustedUrlPipe, "trustedUrl", false>;
1886
- }
1887
-
1888
- declare class MaterialModule {
1889
- static ɵfac: i0.ɵɵFactoryDeclaration<MaterialModule, never>;
1890
- static ɵmod: i0.ɵɵNgModuleDeclaration<MaterialModule, never, [typeof i1.MatCardModule, typeof i2.MatSnackBarModule, typeof i3.MatCheckboxModule, typeof i4.MatDividerModule, typeof i5.MatSelectModule, typeof i6.MatRadioModule, typeof i7.MatDialogModule, typeof i8.MatFormFieldModule, typeof i9.MatDatepickerModule, typeof i10.MatNativeDateModule, typeof i11.MatInputModule, typeof i12.MatIconModule, typeof i13.MatProgressSpinnerModule, typeof i14.MatTabsModule, typeof i15.MatButtonModule, typeof i16.MatMenuModule, typeof i14.MatTabsModule, typeof i17.MatProgressBarModule, typeof i18.MatTooltipModule, typeof i19.MatSliderModule, typeof i20.MatListModule, typeof i21.MatChipsModule, typeof i22.MatSortModule, typeof i23.MatAutocompleteModule, typeof i24.MatSlideToggleModule, typeof i25.MatButtonToggleModule], [typeof i1.MatCardModule, typeof i2.MatSnackBarModule, typeof i3.MatCheckboxModule, typeof i4.MatDividerModule, typeof i5.MatSelectModule, typeof i6.MatRadioModule, typeof i7.MatDialogModule, typeof i8.MatFormFieldModule, typeof i9.MatDatepickerModule, typeof i10.MatNativeDateModule, typeof i11.MatInputModule, typeof i12.MatIconModule, typeof i13.MatProgressSpinnerModule, typeof i14.MatTabsModule, typeof i15.MatButtonModule, typeof i16.MatMenuModule, typeof i14.MatTabsModule, typeof i17.MatProgressBarModule, typeof i18.MatTooltipModule, typeof i19.MatSliderModule, typeof i20.MatListModule, typeof i21.MatChipsModule, typeof i26.MatPaginatorModule, typeof i27.MatTableModule, typeof i28.MatExpansionModule, typeof i29.CdkAccordionModule, typeof i22.MatSortModule, typeof i23.MatAutocompleteModule, typeof i24.MatSlideToggleModule, typeof i25.MatButtonToggleModule]>;
1891
- static ɵinj: i0.ɵɵInjectorDeclaration<MaterialModule>;
1892
- }
1893
-
1894
- declare class ButtonComponent implements OnInit {
1895
- variant: ButtonVariant;
1896
- type: 'button' | 'submit' | 'reset';
1897
- disabled: boolean;
1898
- get pointerEvents(): string;
1899
- width?: string;
1900
- height?: string;
1901
- borderRadius?: string;
1902
- fontSize?: string;
1903
- fontWeight?: string;
1904
- backgroundColor?: string;
1905
- color?: string;
1906
- border?: string;
1907
- icon: boolean | string | {
1908
- type: 'material' | 'fontawesome' | 'img';
1909
- value: string;
1910
- };
1911
- labels?: ButtonLabels;
1912
- constructor();
1913
- ngOnInit(): void;
1914
- get isDefaultIcon(): boolean;
1915
- get isStringIcon(): boolean;
1916
- get isImgIcon(): boolean;
1917
- get isObjectIcon(): boolean;
1918
- get iconString(): string;
1919
- get iconObject(): {
1920
- type: string;
1921
- value: string;
1922
- };
1923
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
1924
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "lib-button", never, { "variant": { "alias": "variant"; "required": false; }; "type": { "alias": "type"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "color": { "alias": "color"; "required": false; }; "border": { "alias": "border"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; }, {}, never, ["*"], false, never>;
1925
- }
1926
-
1927
- declare class ButtonModule {
1928
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonModule, never>;
1929
- static ɵmod: i0.ɵɵNgModuleDeclaration<ButtonModule, [typeof ButtonComponent], [typeof i2$1.CommonModule], [typeof ButtonComponent]>;
1930
- static ɵinj: i0.ɵɵInjectorDeclaration<ButtonModule>;
1931
- }
1932
-
1933
- type AlertVariant = 'info' | 'warning' | 'warning-shadow' | 'success' | 'error';
1934
- type IconInput = boolean | string | {
1935
- type: 'material' | 'fontawesome' | 'img';
1936
- value: string;
1937
- };
1938
- interface AlertLabels {
1939
- iconAltText?: string;
1940
- }
1941
-
1942
- declare class AlertComponent implements OnInit {
1943
- variant: AlertVariant;
1944
- title: string;
1945
- message: string;
1946
- icon: IconInput;
1947
- customIcon: string;
1948
- labels?: AlertLabels;
1949
- width?: string;
1950
- height?: string;
1951
- borderRadius?: string;
1952
- padding?: string;
1953
- gap?: string;
1954
- backgroundColor?: string;
1955
- color?: string;
1956
- borderColor?: string;
1957
- fontSize?: string;
1958
- fontWeight?: string;
1959
- boxShadow?: string;
1960
- borderTopLeftRadius?: string;
1961
- borderTopRightRadius?: string;
1962
- borderBottomLeftRadius?: string;
1963
- borderBottomRightRadius?: string;
1964
- constructor();
1965
- ngOnInit(): void;
1966
- get isDefaultIcon(): boolean;
1967
- get isStringIcon(): boolean;
1968
- get isObjectIcon(): boolean;
1969
- get iconString(): string;
1970
- get isImgIcon(): boolean;
1971
- get iconObject(): {
1972
- type: string;
1973
- value: string;
1974
- };
1975
- get defaultIconClass(): string;
1976
- static ɵfac: i0.ɵɵFactoryDeclaration<AlertComponent, never>;
1977
- static ɵcmp: i0.ɵɵComponentDeclaration<AlertComponent, "lib-alert", never, { "variant": { "alias": "variant"; "required": false; }; "title": { "alias": "title"; "required": false; }; "message": { "alias": "message"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "customIcon": { "alias": "customIcon"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "color": { "alias": "color"; "required": false; }; "borderColor": { "alias": "borderColor"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "boxShadow": { "alias": "boxShadow"; "required": false; }; "borderTopLeftRadius": { "alias": "borderTopLeftRadius"; "required": false; }; "borderTopRightRadius": { "alias": "borderTopRightRadius"; "required": false; }; "borderBottomLeftRadius": { "alias": "borderBottomLeftRadius"; "required": false; }; "borderBottomRightRadius": { "alias": "borderBottomRightRadius"; "required": false; }; }, {}, never, ["*"], false, never>;
1978
- }
1979
-
1980
- declare class AlertModule {
1981
- static ɵfac: i0.ɵɵFactoryDeclaration<AlertModule, never>;
1982
- static ɵmod: i0.ɵɵNgModuleDeclaration<AlertModule, [typeof AlertComponent], [typeof i2$1.CommonModule], [typeof AlertComponent]>;
1983
- static ɵinj: i0.ɵɵInjectorDeclaration<AlertModule>;
1984
- }
1985
-
1986
- declare class SmartFormModule {
1987
- static ɵfac: i0.ɵɵFactoryDeclaration<SmartFormModule, never>;
1988
- static ɵmod: i0.ɵɵNgModuleDeclaration<SmartFormModule, [typeof SmartFormComponent, typeof FormSectionComponent, typeof FormFieldComponent, typeof TrustedUrlPipe], [typeof i2$1.CommonModule, typeof i3$1.ReactiveFormsModule, typeof i3$1.FormsModule, typeof MaterialModule, typeof ButtonModule, typeof AlertModule, typeof i10$1.QuillModule], [typeof SmartFormComponent]>;
1989
- static ɵinj: i0.ɵɵInjectorDeclaration<SmartFormModule>;
1990
- }
1991
-
1992
- type InputType = 'text' | 'number' | 'email' | 'password' | 'tel' | 'url' | 'textarea';
1993
- interface InputLabels {
1994
- label?: string;
1995
- placeholder?: string;
1996
- errorMessage?: string;
1997
- helperText?: string;
1998
- requiredMarker?: string;
1999
- passwordToggleAriaLabel?: string;
2000
- prefixAltText?: string;
2001
- suffixAltText?: string;
2002
- }
2003
- interface InputConfig {
2004
- type?: InputType;
2005
- label?: string;
2006
- placeholder?: string;
2007
- value?: any;
2008
- disabled?: boolean;
2009
- required?: boolean;
2010
- readonly?: boolean;
2011
- maxLength?: number;
2012
- minLength?: number;
2013
- min?: number;
2014
- max?: number;
2015
- pattern?: string;
2016
- errorMessage?: string;
2017
- helperText?: string;
2018
- rows?: number;
2019
- prefixIcon?: string | {
2020
- type: 'material' | 'fontawesome' | 'img';
2021
- value: string;
2022
- };
2023
- suffixIcon?: string | {
2024
- type: 'material' | 'fontawesome' | 'img';
2025
- value: string;
2026
- };
2027
- width?: string;
2028
- height?: string;
2029
- borderRadius?: string;
2030
- fontSize?: string;
2031
- gap?: string;
2032
- fontFamily?: string;
2033
- labelColor?: string;
2034
- labelFontSize?: string;
2035
- labelFontWeight?: string;
2036
- backgroundColor?: string;
2037
- borderColor?: string;
2038
- borderWidth?: string;
2039
- padding?: string;
2040
- fontWeight?: string;
2041
- color?: string;
2042
- placeholderColor?: string;
2043
- focusBorderColor?: string;
2044
- errorColor?: string;
2045
- disabledBackgroundColor?: string;
2046
- disabledColor?: string;
2047
- boxShadow?: string;
2048
- }
2049
-
2050
- declare class InputComponent implements ControlValueAccessor, OnInit, OnChanges {
2051
- config?: InputConfig;
2052
- labels?: InputLabels;
2053
- type: InputType;
2054
- label: string;
2055
- placeholder: string;
2056
- disabled: boolean;
2057
- required: boolean;
2058
- readonly: boolean;
2059
- clearable: boolean;
2060
- maxLength?: number;
2061
- minLength?: number;
2062
- min?: number | string;
2063
- max?: number | string;
2064
- pattern?: string;
2065
- errorMessage: string;
2066
- helperText: string;
2067
- rows: number;
2068
- prefixIcon?: any;
2069
- suffixIcon?: any;
2070
- value: any;
2071
- width?: string;
2072
- height?: string;
2073
- borderRadius?: string;
2074
- fontSize?: string;
2075
- gap?: string;
2076
- fontFamily?: string;
2077
- labelColor?: string;
2078
- labelFontSize?: string;
2079
- labelFontWeight?: string;
2080
- backgroundColor?: string;
2081
- borderColor?: string;
2082
- borderWidth?: string;
2083
- padding?: string;
2084
- fontWeight?: string;
2085
- color?: string;
2086
- placeholderColor?: string;
2087
- focusBorderColor?: string;
2088
- errorColor?: string;
2089
- disabledBackgroundColor?: string;
2090
- disabledColor?: string;
2091
- boxShadow?: string;
2092
- valueChange: EventEmitter<any>;
2093
- inputBlur: EventEmitter<void>;
2094
- inputFocus: EventEmitter<void>;
2095
- showPassword: boolean;
2096
- focused: boolean;
2097
- onChange: (value: any) => void;
2098
- onTouched: () => void;
2099
- ngOnInit(): void;
2100
- ngOnChanges(changes: SimpleChanges): void;
2101
- private updateFromConfig;
2102
- private updateFromLabels;
2103
- get requiredMarker(): string;
2104
- writeValue(value: any): void;
2105
- registerOnChange(fn: any): void;
2106
- registerOnTouched(fn: any): void;
2107
- setDisabledState(isDisabled: boolean): void;
2108
- onInputChange(event: any): void;
2109
- onBlur(): void;
2110
- onFocus(): void;
2111
- togglePasswordVisibility(): void;
2112
- getIconType(icon: any): 'material' | 'fontawesome' | 'img' | 'none';
2113
- getIconValue(icon: any): string;
2114
- get inputType(): string;
2115
- private getStyleValue;
2116
- get wrapperStyles(): {
2117
- [key: string]: string | undefined;
2118
- };
2119
- get labelStyles(): {
2120
- [key: string]: string | undefined;
2121
- };
2122
- get fieldStyles(): {
2123
- [key: string]: string | undefined;
2124
- };
2125
- static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
2126
- static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "lib-input", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "type": { "alias": "type"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "maxLength": { "alias": "maxLength"; "required": false; }; "minLength": { "alias": "minLength"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "helperText": { "alias": "helperText"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "value": { "alias": "value"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "fontFamily": { "alias": "fontFamily"; "required": false; }; "labelColor": { "alias": "labelColor"; "required": false; }; "labelFontSize": { "alias": "labelFontSize"; "required": false; }; "labelFontWeight": { "alias": "labelFontWeight"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "borderColor": { "alias": "borderColor"; "required": false; }; "borderWidth": { "alias": "borderWidth"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "color": { "alias": "color"; "required": false; }; "placeholderColor": { "alias": "placeholderColor"; "required": false; }; "focusBorderColor": { "alias": "focusBorderColor"; "required": false; }; "errorColor": { "alias": "errorColor"; "required": false; }; "disabledBackgroundColor": { "alias": "disabledBackgroundColor"; "required": false; }; "disabledColor": { "alias": "disabledColor"; "required": false; }; "boxShadow": { "alias": "boxShadow"; "required": false; }; }, { "valueChange": "valueChange"; "inputBlur": "inputBlur"; "inputFocus": "inputFocus"; }, never, never, false, never>;
2127
- }
2128
-
2129
- interface DropdownOption {
2130
- value: any;
2131
- label: string;
2132
- disabled?: boolean;
2133
- icon?: string | {
2134
- type: 'material' | 'fontawesome' | 'img';
2135
- value: string;
2136
- };
2137
- }
2138
- interface DropdownLabels {
2139
- label?: string;
2140
- placeholder?: string;
2141
- searchPlaceholder?: string;
2142
- errorMessage?: string;
2143
- selectedSuffix?: string;
2144
- clearAriaLabel?: string;
2145
- noResultsFound?: string;
2146
- requiredMarker?: string;
2147
- }
2148
- interface DropdownConfig {
2149
- options: DropdownOption[];
2150
- placeholder?: string;
2151
- label?: string;
2152
- multiple?: boolean;
2153
- searchable?: boolean;
2154
- clearable?: boolean;
2155
- disabled?: boolean;
2156
- required?: boolean;
2157
- errorMessage?: string;
2158
- width?: string;
2159
- height?: string;
2160
- borderRadius?: string;
2161
- fontSize?: string;
2162
- gap?: string;
2163
- fontFamily?: string;
2164
- labelColor?: string;
2165
- labelFontSize?: string;
2166
- labelFontWeight?: string;
2167
- backgroundColor?: string;
2168
- borderColor?: string;
2169
- borderWidth?: string;
2170
- padding?: string;
2171
- fontWeight?: string;
2172
- color?: string;
2173
- placeholderColor?: string;
2174
- focusBorderColor?: string;
2175
- errorColor?: string;
2176
- disabledBackgroundColor?: string;
2177
- disabledColor?: string;
2178
- boxShadow?: string;
2179
- }
2180
-
2181
- declare class DropdownComponent implements ControlValueAccessor, OnInit, OnChanges {
2182
- private el;
2183
- config?: DropdownConfig;
2184
- labels?: DropdownLabels;
2185
- options: DropdownOption[];
2186
- selectedValue?: any;
2187
- placeholder: string;
2188
- label: string;
2189
- multiple: boolean;
2190
- searchable: boolean;
2191
- clearable: boolean;
2192
- disabled: boolean;
2193
- required: boolean;
2194
- errorMessage: string;
2195
- width?: string;
2196
- height?: string;
2197
- borderRadius?: string;
2198
- fontSize?: string;
2199
- gap?: string;
2200
- fontFamily?: string;
2201
- labelColor?: string;
2202
- labelFontSize?: string;
2203
- labelFontWeight?: string;
2204
- backgroundColor?: string;
2205
- borderColor?: string;
2206
- borderWidth?: string;
2207
- padding?: string;
2208
- fontWeight?: string;
2209
- color?: string;
2210
- placeholderColor?: string;
2211
- focusBorderColor?: string;
2212
- errorColor?: string;
2213
- disabledBackgroundColor?: string;
2214
- disabledColor?: string;
2215
- boxShadow?: string;
2216
- selectionChange: EventEmitter<any>;
2217
- viewport?: CdkVirtualScrollViewport;
2218
- searchInput?: ElementRef;
2219
- triggerEl?: ElementRef;
2220
- filteredOptions: DropdownOption[];
2221
- searchTerm: string;
2222
- value: any;
2223
- isOpen: boolean;
2224
- focusedIndex: number;
2225
- menuPosition: {
2226
- top: number;
2227
- left: number;
2228
- width: number;
2229
- };
2230
- onChange: (value: any) => void;
2231
- onTouched: () => void;
2232
- constructor(el: ElementRef);
2233
- ngOnInit(): void;
2234
- ngOnChanges(changes: SimpleChanges): void;
2235
- private get validOptions();
2236
- private updateFromConfig;
2237
- private updateFromLabels;
2238
- get resolvedLabels(): {
2239
- requiredMarker: string;
2240
- searchPlaceholder: string;
2241
- selectedSuffix: string;
2242
- clearAriaLabel: string;
2243
- noResultsFound: string;
2244
- };
2245
- writeValue(value: any): void;
2246
- registerOnChange(fn: any): void;
2247
- registerOnTouched(fn: any): void;
2248
- setDisabledState(isDisabled: boolean): void;
2249
- toggle(): void;
2250
- close(): void;
2251
- selectOption(option: DropdownOption): void;
2252
- isSelected(option: DropdownOption): boolean;
2253
- onSearch(term: string): void;
2254
- clearSelection(event?: Event): void;
2255
- getIconType(icon: any): 'material' | 'fontawesome' | 'img' | 'none';
2256
- getIconValue(icon: any): string;
2257
- getSelectedLabel(): string;
2258
- hasValue(): boolean;
2259
- handleKeyboardEvent(event: KeyboardEvent): void;
2260
- scrollToIndex(index: number): void;
2261
- private getStyleValue;
2262
- get wrapperStyles(): {
2263
- [key: string]: string | undefined;
2264
- };
2265
- get labelStyles(): {
2266
- [key: string]: string | undefined;
2267
- };
2268
- get fieldStyles(): {
2269
- [key: string]: string | undefined;
2270
- };
2271
- static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, never>;
2272
- static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "lib-dropdown", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "options": { "alias": "options"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "label": { "alias": "label"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "fontFamily": { "alias": "fontFamily"; "required": false; }; "labelColor": { "alias": "labelColor"; "required": false; }; "labelFontSize": { "alias": "labelFontSize"; "required": false; }; "labelFontWeight": { "alias": "labelFontWeight"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "borderColor": { "alias": "borderColor"; "required": false; }; "borderWidth": { "alias": "borderWidth"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "color": { "alias": "color"; "required": false; }; "placeholderColor": { "alias": "placeholderColor"; "required": false; }; "focusBorderColor": { "alias": "focusBorderColor"; "required": false; }; "errorColor": { "alias": "errorColor"; "required": false; }; "disabledBackgroundColor": { "alias": "disabledBackgroundColor"; "required": false; }; "disabledColor": { "alias": "disabledColor"; "required": false; }; "boxShadow": { "alias": "boxShadow"; "required": false; }; }, { "selectionChange": "selectionChange"; }, never, never, false, never>;
2273
- }
2274
-
2275
- interface CheckboxOption {
2276
- value: any;
2277
- label: string;
2278
- disabled?: boolean;
2279
- checked?: boolean;
2280
- }
2281
- interface CheckboxLabels {
2282
- label?: string;
2283
- requiredMarker?: string;
2284
- }
2285
- interface CheckboxConfig {
2286
- label?: string;
2287
- checked?: boolean;
2288
- disabled?: boolean;
2289
- required?: boolean;
2290
- indeterminate?: boolean;
2291
- options?: CheckboxOption[];
2292
- labelPosition?: 'before' | 'after';
2293
- color?: 'primary' | 'accent' | 'warn';
2294
- borderRadius?: string;
2295
- size?: string;
2296
- checkedColor?: string;
2297
- uncheckedColor?: string;
2298
- groupLabelColor?: string;
2299
- groupLabelFontSize?: string;
2300
- groupLabelFontWeight?: string;
2301
- labelFontSize?: string;
2302
- labelFontWeight?: string;
2303
- labelColor?: string;
2304
- gap?: string;
2305
- fontFamily?: string;
2306
- }
2307
-
2308
- declare class CheckboxComponent implements ControlValueAccessor, OnInit, OnChanges {
2309
- config: CheckboxConfig;
2310
- labels?: CheckboxLabels;
2311
- label: string;
2312
- checked: boolean;
2313
- disabled: boolean;
2314
- required: boolean;
2315
- indeterminate: boolean;
2316
- options: CheckboxOption[];
2317
- labelPosition: 'before' | 'after';
2318
- color: string;
2319
- borderRadius: string;
2320
- value: any;
2321
- errorMessage: string;
2322
- width?: string;
2323
- height?: string;
2324
- fontSize?: string;
2325
- fontWeight?: string;
2326
- labelColor?: string;
2327
- labelFontSize?: string;
2328
- labelFontWeight?: string;
2329
- gap?: string;
2330
- fontFamily?: string;
2331
- backgroundColor?: string;
2332
- borderColor?: string;
2333
- borderWidth?: string;
2334
- padding?: string;
2335
- placeholderColor?: string;
2336
- focusBorderColor?: string;
2337
- errorColor?: string;
2338
- disabledBackgroundColor?: string;
2339
- disabledColor?: string;
2340
- boxShadow?: string;
2341
- size?: string;
2342
- checkedColor?: string;
2343
- uncheckedColor?: string;
2344
- groupLabelColor?: string;
2345
- groupLabelFontSize?: string;
2346
- groupLabelFontWeight?: string;
2347
- checkedChange: EventEmitter<any>;
2348
- onChange: (value: any) => void;
2349
- onTouched: () => void;
2350
- ngOnInit(): void;
2351
- ngOnChanges(changes: SimpleChanges): void;
2352
- private updateFromConfig;
2353
- private updateFromLabels;
2354
- get isGroup(): boolean;
2355
- get visibleOptions(): CheckboxOption[];
2356
- get requiredMarker(): string;
2357
- writeValue(value: any): void;
2358
- registerOnChange(fn: any): void;
2359
- registerOnTouched(fn: any): void;
2360
- setDisabledState(isDisabled: boolean): void;
2361
- onCheckboxChange(event: any): void;
2362
- onGroupCheckboxChange(option: CheckboxOption, event: any): void;
2363
- private getStyleValue;
2364
- get wrapperStyles(): {
2365
- [key: string]: string | undefined;
2366
- };
2367
- static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
2368
- static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "lib-checkbox", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "label": { "alias": "label"; "required": false; }; "checked": { "alias": "checked"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "indeterminate": { "alias": "indeterminate"; "required": false; }; "options": { "alias": "options"; "required": false; }; "labelPosition": { "alias": "labelPosition"; "required": false; }; "color": { "alias": "color"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "labelColor": { "alias": "labelColor"; "required": false; }; "labelFontSize": { "alias": "labelFontSize"; "required": false; }; "labelFontWeight": { "alias": "labelFontWeight"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "fontFamily": { "alias": "fontFamily"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "borderColor": { "alias": "borderColor"; "required": false; }; "borderWidth": { "alias": "borderWidth"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "placeholderColor": { "alias": "placeholderColor"; "required": false; }; "focusBorderColor": { "alias": "focusBorderColor"; "required": false; }; "errorColor": { "alias": "errorColor"; "required": false; }; "disabledBackgroundColor": { "alias": "disabledBackgroundColor"; "required": false; }; "disabledColor": { "alias": "disabledColor"; "required": false; }; "boxShadow": { "alias": "boxShadow"; "required": false; }; "size": { "alias": "size"; "required": false; }; "checkedColor": { "alias": "checkedColor"; "required": false; }; "uncheckedColor": { "alias": "uncheckedColor"; "required": false; }; "groupLabelColor": { "alias": "groupLabelColor"; "required": false; }; "groupLabelFontSize": { "alias": "groupLabelFontSize"; "required": false; }; "groupLabelFontWeight": { "alias": "groupLabelFontWeight"; "required": false; }; }, { "checkedChange": "checkedChange"; }, never, never, false, never>;
2369
- }
2370
-
2371
- interface RadioOption {
2372
- value: any;
2373
- label: string;
2374
- disabled?: boolean;
2375
- }
2376
- interface RadioLabels {
2377
- label?: string;
2378
- requiredMarker?: string;
2379
- }
2380
- interface RadioConfig {
2381
- label?: string;
2382
- options: RadioOption[];
2383
- value?: any;
2384
- disabled?: boolean;
2385
- required?: boolean;
2386
- labelPosition?: 'before' | 'after';
2387
- color?: 'primary' | 'warning' | 'danger' | 'success' | 'accent' | 'warn' | string;
2388
- layout?: 'vertical' | 'horizontal';
2389
- gap?: string;
2390
- labelColor?: string;
2391
- checkedColor?: string;
2392
- uncheckedColor?: string;
2393
- fontSize?: string;
2394
- fontWeight?: string;
2395
- fontFamily?: string;
2396
- groupLabelColor?: string;
2397
- groupLabelFontSize?: string;
2398
- groupLabelFontWeight?: string;
2399
- disabledColor?: string;
2400
- errorColor?: string;
2401
- size?: string;
2402
- borderRadius?: string;
2403
- labelFontSize?: string;
2404
- labelFontWeight?: string;
2405
- }
2406
-
2407
- declare class RadioComponent implements ControlValueAccessor, OnInit {
2408
- config?: RadioConfig;
2409
- label: string;
2410
- options: RadioOption[];
2411
- disabled: boolean;
2412
- required: boolean;
2413
- labelPosition: 'before' | 'after';
2414
- color: 'primary' | 'warning' | 'danger' | 'success' | 'accent' | 'warn' | string;
2415
- layout: 'vertical' | 'horizontal';
2416
- labels: RadioLabels;
2417
- gap?: string;
2418
- labelColor?: string;
2419
- checkedColor?: string;
2420
- uncheckedColor?: string;
2421
- fontSize?: string;
2422
- fontWeight?: string;
2423
- fontFamily?: string;
2424
- groupLabelColor?: string;
2425
- groupLabelFontSize?: string;
2426
- groupLabelFontWeight?: string;
2427
- disabledColor?: string;
2428
- errorColor?: string;
2429
- size?: string;
2430
- borderRadius?: string;
2431
- labelFontSize?: string;
2432
- labelFontWeight?: string;
2433
- selectionChange: EventEmitter<any>;
2434
- value: any;
2435
- uuid: string;
2436
- private onChange;
2437
- private onTouched;
2438
- ngOnInit(): void;
2439
- ngOnChanges(changes: any): void;
2440
- private updateFromConfig;
2441
- get requiredMarker(): string;
2442
- get visibleOptions(): RadioOption[];
2443
- writeValue(value: any): void;
2444
- registerOnChange(fn: any): void;
2445
- registerOnTouched(fn: any): void;
2446
- setDisabledState(isDisabled: boolean): void;
2447
- onRadioChange(option: RadioOption): void;
2448
- private getStyleValue;
2449
- private getThemeColor;
2450
- get wrapperStyles(): {
2451
- [key: string]: string | undefined;
2452
- };
2453
- static ɵfac: i0.ɵɵFactoryDeclaration<RadioComponent, never>;
2454
- static ɵcmp: i0.ɵɵComponentDeclaration<RadioComponent, "lib-radio", never, { "config": { "alias": "config"; "required": false; }; "label": { "alias": "label"; "required": false; }; "options": { "alias": "options"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "labelPosition": { "alias": "labelPosition"; "required": false; }; "color": { "alias": "color"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "labelColor": { "alias": "labelColor"; "required": false; }; "checkedColor": { "alias": "checkedColor"; "required": false; }; "uncheckedColor": { "alias": "uncheckedColor"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "fontFamily": { "alias": "fontFamily"; "required": false; }; "groupLabelColor": { "alias": "groupLabelColor"; "required": false; }; "groupLabelFontSize": { "alias": "groupLabelFontSize"; "required": false; }; "groupLabelFontWeight": { "alias": "groupLabelFontWeight"; "required": false; }; "disabledColor": { "alias": "disabledColor"; "required": false; }; "errorColor": { "alias": "errorColor"; "required": false; }; "size": { "alias": "size"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "labelFontSize": { "alias": "labelFontSize"; "required": false; }; "labelFontWeight": { "alias": "labelFontWeight"; "required": false; }; }, { "selectionChange": "selectionChange"; }, never, never, false, never>;
2455
- }
2456
-
2457
- interface ToggleLabels {
2458
- label?: string;
2459
- }
2460
- interface ToggleConfig {
2461
- label?: string;
2462
- checked?: boolean;
2463
- disabled?: boolean;
2464
- required?: boolean;
2465
- labelPosition?: 'before' | 'after';
2466
- color?: 'primary' | 'warning' | 'danger' | 'success' | string;
2467
- uncheckedColor?: string;
2468
- checkedColor?: string;
2469
- thumbColor?: string;
2470
- checkedThumbColor?: string;
2471
- fontSize?: string;
2472
- fontWeight?: string;
2473
- toggleWidth?: string;
2474
- toggleHeight?: string;
2475
- gap?: string;
2476
- fontFamily?: string;
2477
- labelColor?: string;
2478
- labelFontSize?: string;
2479
- labelFontWeight?: string;
2480
- }
2481
-
2482
- declare class ToggleComponent implements ControlValueAccessor, OnInit, OnChanges {
2483
- config?: ToggleConfig;
2484
- labels?: ToggleLabels;
2485
- label: string;
2486
- checked: boolean;
2487
- disabled: boolean;
2488
- required: boolean;
2489
- labelPosition: 'before' | 'after';
2490
- color: string;
2491
- labelColor?: string;
2492
- uncheckedColor?: string;
2493
- checkedColor?: string;
2494
- thumbColor?: string;
2495
- checkedThumbColor?: string;
2496
- fontSize?: string;
2497
- fontWeight?: string;
2498
- fontFamily?: string;
2499
- toggleWidth?: string;
2500
- toggleHeight?: string;
2501
- gap?: string;
2502
- sliderColor?: string;
2503
- labelFontSize?: string;
2504
- labelFontWeight?: string;
2505
- disabledColor?: string;
2506
- toggleChange: EventEmitter<boolean>;
2507
- value: boolean;
2508
- private onChange;
2509
- private onTouched;
2510
- ngOnInit(): void;
2511
- ngOnChanges(changes: SimpleChanges): void;
2512
- private updateFromConfig;
2513
- private updateFromLabels;
2514
- writeValue(value: any): void;
2515
- registerOnChange(fn: any): void;
2516
- registerOnTouched(fn: any): void;
2517
- setDisabledState(isDisabled: boolean): void;
2518
- onToggleChange(event: any): void;
2519
- private getStyleValue;
2520
- private getThemeColor;
2521
- get wrapperStyles(): {
2522
- [key: string]: string | undefined;
2523
- };
2524
- static ɵfac: i0.ɵɵFactoryDeclaration<ToggleComponent, never>;
2525
- static ɵcmp: i0.ɵɵComponentDeclaration<ToggleComponent, "lib-toggle", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "label": { "alias": "label"; "required": false; }; "checked": { "alias": "checked"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "labelPosition": { "alias": "labelPosition"; "required": false; }; "color": { "alias": "color"; "required": false; }; "labelColor": { "alias": "labelColor"; "required": false; }; "uncheckedColor": { "alias": "uncheckedColor"; "required": false; }; "checkedColor": { "alias": "checkedColor"; "required": false; }; "thumbColor": { "alias": "thumbColor"; "required": false; }; "checkedThumbColor": { "alias": "checkedThumbColor"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "fontFamily": { "alias": "fontFamily"; "required": false; }; "toggleWidth": { "alias": "toggleWidth"; "required": false; }; "toggleHeight": { "alias": "toggleHeight"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "sliderColor": { "alias": "sliderColor"; "required": false; }; "labelFontSize": { "alias": "labelFontSize"; "required": false; }; "labelFontWeight": { "alias": "labelFontWeight"; "required": false; }; "disabledColor": { "alias": "disabledColor"; "required": false; }; }, { "toggleChange": "toggleChange"; }, never, never, false, never>;
2526
- }
2527
-
2528
- interface DatepickerLabels {
2529
- label?: string;
2530
- placeholder?: string;
2531
- startDateLabel?: string;
2532
- endDateLabel?: string;
2533
- requiredMarker?: string;
2534
- }
2535
- interface DatePickerConfig {
2536
- label?: string;
2537
- placeholder?: string;
2538
- value?: Date;
2539
- disabled?: boolean;
2540
- required?: boolean;
2541
- minDate?: Date;
2542
- maxDate?: Date;
2543
- startView?: 'month' | 'year' | 'multi-year';
2544
- isRange?: boolean;
2545
- startDate?: Date;
2546
- endDate?: Date;
2547
- width?: string;
2548
- borderRadius?: string;
2549
- fontSize?: string;
2550
- errorMessage?: string;
2551
- gap?: string;
2552
- fontFamily?: string;
2553
- labelColor?: string;
2554
- labelFontSize?: string;
2555
- labelFontWeight?: string;
2556
- backgroundColor?: string;
2557
- borderColor?: string;
2558
- borderWidth?: string;
2559
- padding?: string;
2560
- fontWeight?: string;
2561
- color?: string;
2562
- placeholderColor?: string;
2563
- focusBorderColor?: string;
2564
- errorColor?: string;
2565
- disabledBackgroundColor?: string;
2566
- disabledColor?: string;
2567
- boxShadow?: string;
2568
- height?: string;
2569
- }
2570
-
2571
- declare class DatepickerComponent implements ControlValueAccessor, OnInit, OnChanges {
2572
- config?: DatePickerConfig;
2573
- labels?: DatepickerLabels;
2574
- label: string;
2575
- placeholder: string;
2576
- disabled: boolean;
2577
- required: boolean;
2578
- minDate?: string | Date;
2579
- maxDate?: string | Date;
2580
- isRange: boolean;
2581
- startView: 'month' | 'year' | 'multi-year';
2582
- value: any;
2583
- startDate?: string | Date;
2584
- endDate?: string | Date;
2585
- errorMessage: string;
2586
- width?: string;
2587
- height?: string;
2588
- borderRadius?: string;
2589
- fontSize?: string;
2590
- gap?: string;
2591
- fontFamily?: string;
2592
- labelColor?: string;
2593
- labelFontSize?: string;
2594
- labelFontWeight?: string;
2595
- backgroundColor?: string;
2596
- borderColor?: string;
2597
- borderWidth?: string;
2598
- padding?: string;
2599
- fontWeight?: string;
2600
- color?: string;
2601
- placeholderColor?: string;
2602
- focusBorderColor?: string;
2603
- errorColor?: string;
2604
- disabledBackgroundColor?: string;
2605
- disabledColor?: string;
2606
- boxShadow?: string;
2607
- dateChange: EventEmitter<any>;
2608
- onChange: (value: any) => void;
2609
- onTouched: () => void;
2610
- focused: boolean;
2611
- ngOnInit(): void;
2612
- ngOnChanges(changes: SimpleChanges): void;
2613
- private updateFromConfig;
2614
- private updateFromLabels;
2615
- get requiredMarker(): string;
2616
- get startDateLabel(): string;
2617
- get endDateLabel(): string;
2618
- private formatDate;
2619
- get formattedValue(): string;
2620
- get formattedStartDate(): string;
2621
- get formattedEndDate(): string;
2622
- get formattedMin(): string;
2623
- get formattedMax(): string;
2624
- writeValue(value: any): void;
2625
- registerOnChange(fn: any): void;
2626
- registerOnTouched(fn: any): void;
2627
- setDisabledState(isDisabled: boolean): void;
2628
- onDateInput(event: any): void;
2629
- onBlur(): void;
2630
- onFocus(): void;
2631
- onRangeStartInput(event: any): void;
2632
- onRangeEndInput(event: any): void;
2633
- private updateRangeValue;
2634
- private getStyleValue;
2635
- get wrapperStyles(): {
2636
- [key: string]: string | undefined;
2637
- };
2638
- get labelStyles(): {
2639
- [key: string]: string | undefined;
2640
- };
2641
- get fieldStyles(): {
2642
- [key: string]: string | undefined;
2643
- };
2644
- static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerComponent, never>;
2645
- static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "lib-datepicker", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "startView": { "alias": "startView"; "required": false; }; "value": { "alias": "value"; "required": false; }; "startDate": { "alias": "startDate"; "required": false; }; "endDate": { "alias": "endDate"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "fontFamily": { "alias": "fontFamily"; "required": false; }; "labelColor": { "alias": "labelColor"; "required": false; }; "labelFontSize": { "alias": "labelFontSize"; "required": false; }; "labelFontWeight": { "alias": "labelFontWeight"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "borderColor": { "alias": "borderColor"; "required": false; }; "borderWidth": { "alias": "borderWidth"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "color": { "alias": "color"; "required": false; }; "placeholderColor": { "alias": "placeholderColor"; "required": false; }; "focusBorderColor": { "alias": "focusBorderColor"; "required": false; }; "errorColor": { "alias": "errorColor"; "required": false; }; "disabledBackgroundColor": { "alias": "disabledBackgroundColor"; "required": false; }; "disabledColor": { "alias": "disabledColor"; "required": false; }; "boxShadow": { "alias": "boxShadow"; "required": false; }; }, { "dateChange": "dateChange"; }, never, never, false, never>;
2646
- }
2647
-
2648
- interface SearchLabels {
2649
- label?: string;
2650
- placeholder?: string;
2651
- clearAriaLabel?: string;
2652
- }
2653
- interface FilterSearchConfig {
2654
- placeholder?: string;
2655
- label?: string;
2656
- value?: string;
2657
- disabled?: boolean;
2658
- debounceTime?: number;
2659
- clearable?: boolean;
2660
- width?: string;
2661
- height?: string;
2662
- borderRadius?: string;
2663
- fontSize?: string;
2664
- gap?: string;
2665
- fontFamily?: string;
2666
- labelColor?: string;
2667
- labelFontSize?: string;
2668
- labelFontWeight?: string;
2669
- backgroundColor?: string;
2670
- borderColor?: string;
2671
- borderWidth?: string;
2672
- border?: string;
2673
- padding?: string;
2674
- fontWeight?: string;
2675
- color?: string;
2676
- textColor?: string;
2677
- iconColor?: string;
2678
- placeholderColor?: string;
2679
- focusBorderColor?: string;
2680
- errorColor?: string;
2681
- disabledBackgroundColor?: string;
2682
- disabledColor?: string;
2683
- boxShadow?: string;
2684
- }
2685
-
2686
- declare class SearchComponent implements ControlValueAccessor, OnInit, OnDestroy, OnChanges {
2687
- config?: FilterSearchConfig;
2688
- labels?: SearchLabels;
2689
- placeholder: string;
2690
- label: string;
2691
- disabled: boolean;
2692
- debounceMs: number;
2693
- clearable: boolean;
2694
- value: any;
2695
- width?: string;
2696
- height?: string;
2697
- borderRadius?: string;
2698
- fontSize?: string;
2699
- gap?: string;
2700
- fontFamily?: string;
2701
- labelColor?: string;
2702
- labelFontSize?: string;
2703
- labelFontWeight?: string;
2704
- backgroundColor?: string;
2705
- borderColor?: string;
2706
- borderWidth?: string;
2707
- border?: string;
2708
- padding?: string;
2709
- fontWeight?: string;
2710
- color?: string;
2711
- textColor?: string;
2712
- iconColor?: string;
2713
- placeholderColor?: string;
2714
- focusBorderColor?: string;
2715
- disabledBackgroundColor?: string;
2716
- disabledColor?: string;
2717
- boxShadow?: string;
2718
- search: EventEmitter<string>;
2719
- clear: EventEmitter<void>;
2720
- private searchSubject;
2721
- focused: boolean;
2722
- onChange: (value: any) => void;
2723
- onTouched: () => void;
2724
- ngOnInit(): void;
2725
- ngOnChanges(changes: SimpleChanges): void;
2726
- private updateFromConfig;
2727
- private updateFromLabels;
2728
- ngOnDestroy(): void;
2729
- get clearAriaLabel(): string;
2730
- writeValue(value: any): void;
2731
- registerOnChange(fn: any): void;
2732
- registerOnTouched(fn: any): void;
2733
- setDisabledState(isDisabled: boolean): void;
2734
- onInputChange(event: any): void;
2735
- onClear(): void;
2736
- onBlur(): void;
2737
- onFocus(): void;
2738
- private getStyleValue;
2739
- get wrapperStyles(): {
2740
- [key: string]: string | undefined;
2741
- };
2742
- get labelStyles(): {
2743
- [key: string]: string | undefined;
2744
- };
2745
- get fieldStyles(): {
2746
- [key: string]: string | undefined;
2747
- };
2748
- static ɵfac: i0.ɵɵFactoryDeclaration<SearchComponent, never>;
2749
- static ɵcmp: i0.ɵɵComponentDeclaration<SearchComponent, "lib-search", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "label": { "alias": "label"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "debounceMs": { "alias": "debounceMs"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "value": { "alias": "value"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "borderRadius": { "alias": "borderRadius"; "required": false; }; "fontSize": { "alias": "fontSize"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "fontFamily": { "alias": "fontFamily"; "required": false; }; "labelColor": { "alias": "labelColor"; "required": false; }; "labelFontSize": { "alias": "labelFontSize"; "required": false; }; "labelFontWeight": { "alias": "labelFontWeight"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "borderColor": { "alias": "borderColor"; "required": false; }; "borderWidth": { "alias": "borderWidth"; "required": false; }; "border": { "alias": "border"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "fontWeight": { "alias": "fontWeight"; "required": false; }; "color": { "alias": "color"; "required": false; }; "textColor": { "alias": "textColor"; "required": false; }; "iconColor": { "alias": "iconColor"; "required": false; }; "placeholderColor": { "alias": "placeholderColor"; "required": false; }; "focusBorderColor": { "alias": "focusBorderColor"; "required": false; }; "disabledBackgroundColor": { "alias": "disabledBackgroundColor"; "required": false; }; "disabledColor": { "alias": "disabledColor"; "required": false; }; "boxShadow": { "alias": "boxShadow"; "required": false; }; }, { "search": "search"; "clear": "clear"; }, never, never, false, never>;
2750
- }
2751
-
2752
- declare class ClickOutsideDirective {
2753
- private elementRef;
2754
- libClickOutside: EventEmitter<void>;
2755
- constructor(elementRef: ElementRef);
2756
- onClick(target: any): void;
2757
- static ɵfac: i0.ɵɵFactoryDeclaration<ClickOutsideDirective, never>;
2758
- static ɵdir: i0.ɵɵDirectiveDeclaration<ClickOutsideDirective, "[libClickOutside]", never, {}, { "libClickOutside": "libClickOutside"; }, never, never, false, never>;
2759
- }
2760
-
2761
- declare class FormComponentsModule {
2762
- static ɵfac: i0.ɵɵFactoryDeclaration<FormComponentsModule, never>;
2763
- static ɵmod: i0.ɵɵNgModuleDeclaration<FormComponentsModule, [typeof InputComponent, typeof DropdownComponent, typeof CheckboxComponent, typeof RadioComponent, typeof ToggleComponent, typeof DatepickerComponent, typeof SearchComponent, typeof ClickOutsideDirective], [typeof i2$1.CommonModule, typeof i3$1.ReactiveFormsModule, typeof i3$1.FormsModule, typeof i11$1.ScrollingModule], [typeof InputComponent, typeof DropdownComponent, typeof CheckboxComponent, typeof RadioComponent, typeof ToggleComponent, typeof DatepickerComponent, typeof SearchComponent]>;
2764
- static ɵinj: i0.ɵɵInjectorDeclaration<FormComponentsModule>;
2765
- }
2766
-
2767
- declare class FormBuilderModule {
2768
- static ɵfac: i0.ɵɵFactoryDeclaration<FormBuilderModule, never>;
2769
- static ɵmod: i0.ɵɵNgModuleDeclaration<FormBuilderModule, [typeof FieldSelectionComponent, typeof FieldConfiguratorComponent, typeof GroupNodeComponent, typeof SelectionSectionNodeComponent, typeof SelectionFieldNodeComponent, typeof ConfiguratorTreeComponent, typeof ConfiguratorConfigPanelComponent], [typeof i2$1.CommonModule, typeof SmartFormModule, typeof FormComponentsModule], [typeof FieldSelectionComponent, typeof FieldConfiguratorComponent]>;
2770
- static ɵinj: i0.ɵɵInjectorDeclaration<FormBuilderModule>;
2771
- }
2772
-
2773
- interface DropdownAction {
2774
- label: string;
2775
- type: 'api' | 'route' | 'callback';
2776
- icon?: string;
2777
- color?: string;
2778
- variant?: ButtonVariant;
2779
- route?: string;
2780
- apiUrl?: string;
2781
- apiMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
2782
- apiPayload?: any;
2783
- callback?: (data: any) => void;
2784
- disabled?: boolean;
2785
- confirmationNeeded?: boolean;
2786
- confirmationMessage?: string;
2787
- confirmationTitle?: string;
2788
- }
2789
-
2790
- declare class ButtonDropdownComponent {
2791
- private elementRef;
2792
- private router;
2793
- private http;
2794
- label: string;
2795
- variant: ButtonVariant;
2796
- menuTheme: 'light' | 'dark';
2797
- icon: string;
2798
- actions: DropdownAction[];
2799
- data: any;
2800
- disabled: boolean;
2801
- apiActionStart: EventEmitter<DropdownAction>;
2802
- apiActionSuccess: EventEmitter<{
2803
- action: DropdownAction;
2804
- response: any;
2805
- }>;
2806
- apiActionError: EventEmitter<{
2807
- action: DropdownAction;
2808
- error: any;
2809
- }>;
2810
- actionClick: EventEmitter<{
2811
- action: DropdownAction;
2812
- data: any;
2813
- }>;
2814
- isOpen: boolean;
2815
- isConfirmModalOpen: boolean;
2816
- pendingAction: DropdownAction | null;
2817
- confirmConfig: ConfirmationModalConfig | null;
2818
- confirmMessage: string;
2819
- constructor(elementRef: ElementRef, router: Router, http: HttpClient);
2820
- onClickOutside(event: Event): void;
2821
- toggleDropdown(event: Event): void;
2822
- onActionItemClick(action: DropdownAction, event: Event): void;
2823
- private executeAction;
2824
- private navigateToRoute;
2825
- private executeApiCall;
2826
- invokePendingAction(): void;
2827
- closeConfirmModal(): void;
2828
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonDropdownComponent, never>;
2829
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonDropdownComponent, "lib-button-dropdown", never, { "label": { "alias": "label"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "menuTheme": { "alias": "menuTheme"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "data": { "alias": "data"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "apiActionStart": "apiActionStart"; "apiActionSuccess": "apiActionSuccess"; "apiActionError": "apiActionError"; "actionClick": "actionClick"; }, never, never, false, never>;
2830
- }
2831
-
2832
- declare class ConfirmationModalComponent implements OnInit, OnDestroy {
2833
- config: ConfirmationModalConfig;
2834
- isOpen: boolean;
2835
- confirmDisabled: boolean;
2836
- confirmLoading: boolean;
2837
- confirm: EventEmitter<void>;
2838
- cancel: EventEmitter<void>;
2839
- close: EventEmitter<void>;
2840
- showCodeSnippet: EventEmitter<void>;
2841
- private defaultConfig;
2842
- mergedConfig: ConfirmationModalConfig;
2843
- private previousActiveElement;
2844
- private isSubmitting;
2845
- private _resetSubmittingTimer?;
2846
- ngOnInit(): void;
2847
- ngOnChanges(): void;
2848
- private updateConfig;
2849
- ngOnDestroy(): void;
2850
- private toggleBodyScroll;
2851
- handleEscape(event: KeyboardEvent): void;
2852
- onBackdropClick(event: MouseEvent): void;
2853
- onConfirm(): void;
2854
- onCancel(): void;
2855
- onClose(): void;
2856
- onShowCodeSnippet(): void;
2857
- getModalWidth(): string;
2858
- getModalStyles(): any;
2859
- getConfirmButtonClass(): string;
2860
- getHeaderClass(): string;
2861
- resolveIconType(icon: any): 'material' | 'custom' | 'img';
2862
- getIconValue(icon: any): string;
2863
- getIconColor(icon: any): string | undefined;
2864
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationModalComponent, never>;
2865
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmationModalComponent, "cc-confirmation-modal", never, { "config": { "alias": "config"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "confirmDisabled": { "alias": "confirmDisabled"; "required": false; }; "confirmLoading": { "alias": "confirmLoading"; "required": false; }; }, { "confirm": "confirm"; "cancel": "cancel"; "close": "close"; "showCodeSnippet": "showCodeSnippet"; }, never, ["*", "[cc-modal-footer]"], false, never>;
2866
- }
2867
-
2868
- declare class ConfirmationModalModule {
2869
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationModalModule, never>;
2870
- static ɵmod: i0.ɵɵNgModuleDeclaration<ConfirmationModalModule, [typeof ConfirmationModalComponent], [typeof i2$1.CommonModule, typeof i12.MatIconModule, typeof i3$1.FormsModule], [typeof ConfirmationModalComponent]>;
2871
- static ɵinj: i0.ɵɵInjectorDeclaration<ConfirmationModalModule>;
2872
- }
2873
-
2874
- declare class ButtonDropdownModule {
2875
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonDropdownModule, never>;
2876
- static ɵmod: i0.ɵɵNgModuleDeclaration<ButtonDropdownModule, [typeof ButtonDropdownComponent], [typeof i2$1.CommonModule, typeof i3$2.RouterModule, typeof ButtonModule, typeof ConfirmationModalModule], [typeof ButtonDropdownComponent]>;
2877
- static ɵinj: i0.ɵɵInjectorDeclaration<ButtonDropdownModule>;
2878
- }
2879
-
2880
- type FilterItemType = 'input' | 'dropdown' | 'checkbox' | 'radio' | 'toggle' | 'datepicker' | 'active-search' | 'group' | 'custom' | 'divider';
2881
- interface FilterItem {
2882
- key?: string;
2883
- type: FilterItemType;
2884
- label?: string;
2885
- visible?: boolean;
2886
- inputConfig?: InputConfig;
2887
- dropdownConfig?: DropdownConfig;
2888
- checkboxConfig?: CheckboxConfig;
2889
- radioConfig?: RadioConfig;
2890
- toggleConfig?: ToggleConfig;
2891
- datepickerConfig?: DatePickerConfig;
2892
- searchConfig?: FilterSearchConfig;
2893
- children?: FilterItem[];
2894
- expanded?: boolean;
2895
- styles?: {
2896
- [key: string]: string;
2897
- };
2898
- }
2899
- interface FilterSidebarConfig {
2900
- items: FilterItem[];
2901
- styles?: {
2902
- width?: string;
2903
- padding?: string;
2904
- gap?: string;
2905
- backgroundColor?: string;
2906
- headerHeight?: string;
2907
- borderRadius?: string;
2908
- };
2909
- header?: {
2910
- title?: string;
2911
- icon?: string;
2912
- visible?: boolean;
2913
- showClose?: boolean;
2914
- };
2915
- footer?: {
2916
- visible?: boolean;
2917
- applyButton?: {
2918
- label?: string;
2919
- visible?: boolean;
2920
- disabled?: boolean;
2921
- };
2922
- clearButton?: {
2923
- label?: string;
2924
- visible?: boolean;
2925
- };
2926
- };
2927
- settings?: {
2928
- collapsible?: boolean;
2929
- persistent?: boolean;
2930
- showCodeSnippet?: boolean;
2931
- };
2932
- labels?: {
2933
- collapseAriaLabel?: string;
2934
- expandAriaLabel?: string;
2935
- closeAriaLabel?: string;
2936
- codeSnippetAriaLabel?: string;
2937
- };
2938
- }
2939
- interface FilterSidebarOutput {
2940
- [key: string]: any;
2941
- }
2942
- interface FilterSidebarChangeEvent {
2943
- key: string;
2944
- value: any;
2945
- allFilters: FilterSidebarOutput;
2946
- }
2947
- type FilterConfig = FilterSidebarConfig;
2948
- type FilterChangeEvent = FilterSidebarChangeEvent;
2949
- type FilterOutput = FilterSidebarOutput;
2950
-
2951
- declare class FilterSidebarComponent implements OnInit, ControlValueAccessor {
2952
- private router;
2953
- private route;
2954
- config: FilterSidebarConfig;
2955
- initialFilters: FilterSidebarOutput;
2956
- filterChange: EventEmitter<FilterSidebarChangeEvent>;
2957
- filterApply: EventEmitter<FilterSidebarOutput>;
2958
- filterClear: EventEmitter<void>;
2959
- showCodeSnippet: EventEmitter<void>;
2960
- close: EventEmitter<void>;
2961
- filters: FilterSidebarOutput;
2962
- onChange: any;
2963
- onTouched: any;
2964
- isCollapsed: boolean;
2965
- toggleCollapse(): void;
2966
- constructor(router: Router, route: ActivatedRoute);
2967
- ngOnInit(): void;
2968
- writeValue(value: any): void;
2969
- registerOnChange(fn: any): void;
2970
- registerOnTouched(fn: any): void;
2971
- onValueChange(key: string | undefined, value: any): void;
2972
- private notifyChanges;
2973
- private updateUrl;
2974
- applyFilters(): void;
2975
- clearFilters(): void;
2976
- onClose(): void;
2977
- onShowCodeSnippet(): void;
2978
- get sidebarStyles(): {
2979
- [key: string]: string;
2980
- };
2981
- trackByFn(index: number, item: FilterItem): any;
2982
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterSidebarComponent, never>;
2983
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterSidebarComponent, "lib-filter-sidebar", never, { "config": { "alias": "config"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, { "filterChange": "filterChange"; "filterApply": "filterApply"; "filterClear": "filterClear"; "showCodeSnippet": "showCodeSnippet"; "close": "close"; }, never, ["[header-actions]"], false, never>;
2984
- }
2985
-
2986
- declare class FilterSidebarModule {
2987
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterSidebarModule, never>;
2988
- static ɵmod: i0.ɵɵNgModuleDeclaration<FilterSidebarModule, [typeof FilterSidebarComponent], [typeof i2$1.CommonModule, typeof i3$1.FormsModule, typeof i3$1.ReactiveFormsModule, typeof FormComponentsModule, typeof ButtonModule], [typeof FilterSidebarComponent]>;
2989
- static ɵinj: i0.ɵɵInjectorDeclaration<FilterSidebarModule>;
2990
- }
2991
-
2992
- interface TableFilterItem {
2993
- key?: string;
2994
- type: FilterItemType;
2995
- label?: string;
2996
- visible?: boolean;
2997
- inputConfig?: InputConfig;
2998
- dropdownConfig?: DropdownConfig;
2999
- checkboxConfig?: CheckboxConfig;
3000
- radioConfig?: RadioConfig;
3001
- toggleConfig?: ToggleConfig;
3002
- datepickerConfig?: DatePickerConfig;
3003
- searchConfig?: FilterSearchConfig;
3004
- children?: TableFilterItem[];
3005
- expanded?: boolean;
3006
- styles?: {
3007
- [key: string]: string;
3008
- };
3009
- }
3010
- interface TableFilterConfig {
3011
- items: TableFilterItem[];
3012
- styles?: {
3013
- width?: string;
3014
- padding?: string;
3015
- gap?: string;
3016
- backgroundColor?: string;
3017
- borderRadius?: string;
3018
- headerHeight?: string;
3019
- };
3020
- columns?: TableFilterColumn[];
3021
- settings?: {
3022
- persistent?: boolean;
3023
- collapsible?: boolean;
3024
- };
3025
- actions?: {
3026
- clear?: {
3027
- visible?: boolean;
3028
- label?: string;
3029
- };
3030
- apply?: {
3031
- visible?: boolean;
3032
- label?: string;
3033
- };
3034
- };
3035
- }
3036
- interface TableFilterColumn {
3037
- id: string;
3038
- label: string;
3039
- visible: boolean;
3040
- filterable?: boolean;
3041
- filterOptions?: any[];
3042
- }
3043
- interface TableFilterLabels {
3044
- filterBtn: string;
3045
- clear: string;
3046
- apply: string;
3047
- search: string;
3048
- columns: string;
3049
- showAll: string;
3050
- hideAll: string;
3051
- items?: string;
3052
- }
3053
- interface TableFilterOutput {
3054
- [key: string]: any;
3055
- }
3056
- interface TableFilterChangeEvent {
3057
- key: string;
3058
- value: any;
3059
- allFilters: TableFilterOutput;
3060
- }
3061
-
3062
- declare class FilterComponent implements OnInit {
3063
- private elementRef;
3064
- private router;
3065
- private route;
3066
- config: TableFilterConfig;
3067
- activeFilters: TableFilterOutput;
3068
- columns: TableFilterColumn[];
3069
- labels: TableFilterLabels;
3070
- theme: string;
3071
- filterChange: EventEmitter<TableFilterOutput>;
3072
- columnChange: EventEmitter<TableFilterColumn[]>;
3073
- toggle: EventEmitter<boolean>;
3074
- isOpen: boolean;
3075
- activeTab: 'filters' | 'columns';
3076
- tempFilters: TableFilterOutput;
3077
- tempColumns: TableFilterColumn[];
3078
- constructor(elementRef: ElementRef, router: Router, route: ActivatedRoute);
3079
- ngOnInit(): void;
3080
- private initFromUrl;
3081
- onClickOutside(event: Event): void;
3082
- togglePanel(): void;
3083
- setActiveTab(tab: 'filters' | 'columns'): void;
3084
- onFilterChange(key: string | undefined, value: any): void;
3085
- toggleColumn(columnId: string): void;
3086
- toggleAllColumns(visible: boolean): void;
3087
- clearAll(): void;
3088
- apply(): void;
3089
- private updateUrl;
3090
- activeFilterCountValue(): number;
3091
- get activeFilterCount(): number;
3092
- private syncTempState;
3093
- get containerStyles(): {
3094
- [key: string]: string;
3095
- };
3096
- trackByFn(index: number, item: any): any;
3097
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterComponent, never>;
3098
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterComponent, "lib-filter", never, { "config": { "alias": "config"; "required": false; }; "activeFilters": { "alias": "activeFilters"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; }, { "filterChange": "filterChange"; "columnChange": "columnChange"; "toggle": "toggle"; }, never, never, false, never>;
3099
- }
3100
-
3101
- declare class FilterModule {
3102
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterModule, never>;
3103
- static ɵmod: i0.ɵɵNgModuleDeclaration<FilterModule, [typeof FilterComponent], [typeof i2$1.CommonModule, typeof i3$1.FormsModule, typeof i3$1.ReactiveFormsModule, typeof ButtonModule, typeof FormComponentsModule], [typeof FilterComponent]>;
3104
- static ɵinj: i0.ɵɵInjectorDeclaration<FilterModule>;
3105
- }
3106
-
3107
- interface SummaryCardConfig {
3108
- header: string;
3109
- value: string;
3110
- description?: string;
3111
- icon?: string;
3112
- iconImage?: string;
3113
- descriptionPosition?: 'bottom' | 'inline';
3114
- valueSubtext?: string;
3115
- metaData?: SummaryCardMeta[];
3116
- valueColor?: string;
3117
- headerColor?: string;
3118
- descriptionColor?: string;
3119
- iconColor?: string;
3120
- iconBackgroundColor?: string;
3121
- iconClass?: string;
3122
- valueClass?: string;
3123
- headerClass?: string;
3124
- descriptionClass?: string;
3125
- isDisabled?: boolean;
3126
- isClickable?: boolean;
3127
- }
3128
- interface SummaryCardMeta {
3129
- text: string;
3130
- type?: 'text' | 'pill';
3131
- color?: string;
3132
- backgroundColor?: string;
3133
- cssClass?: string;
3134
- }
3135
- interface SummaryCardLabels {
3136
- iconAlt: string;
3137
- }
3138
- declare class SummaryCardComponent {
3139
- config: SummaryCardConfig;
3140
- theme?: 'theme-1' | 'theme-2';
3141
- labels: any;
3142
- cardClick: EventEmitter<void>;
3143
- constructor();
3144
- onCardClick(): void;
3145
- get cardClasses(): {
3146
- [key: string]: boolean;
3147
- };
3148
- get iconStyles(): {
3149
- [key: string]: string;
3150
- };
3151
- get headerStyles(): {
3152
- [key: string]: string;
3153
- };
3154
- get valueStyles(): {
3155
- [key: string]: string;
3156
- };
3157
- get descriptionStyles(): {
3158
- [key: string]: string;
3159
- };
3160
- get isDescriptionInline(): boolean;
3161
- getMetaStyles(meta: SummaryCardMeta): {
3162
- [key: string]: string;
3163
- };
3164
- static ɵfac: i0.ɵɵFactoryDeclaration<SummaryCardComponent, never>;
3165
- static ɵcmp: i0.ɵɵComponentDeclaration<SummaryCardComponent, "lib-summary-card", never, { "config": { "alias": "config"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; }, { "cardClick": "cardClick"; }, never, never, false, never>;
3166
- }
3167
-
3168
- declare class SummaryCardModule {
3169
- static ɵfac: i0.ɵɵFactoryDeclaration<SummaryCardModule, never>;
3170
- static ɵmod: i0.ɵɵNgModuleDeclaration<SummaryCardModule, [typeof SummaryCardComponent], [typeof i2$1.CommonModule, typeof i12.MatIconModule], [typeof SummaryCardComponent]>;
3171
- static ɵinj: i0.ɵɵInjectorDeclaration<SummaryCardModule>;
3172
- }
3173
-
3174
- type FieldType = 'text' | 'number' | 'email' | 'tel' | 'password' | 'select' | 'radio' | 'textarea' | 'date' | 'composite' | 'file' | 'dropdown' | 'url';
3175
- type KeyType = 'KEY_TYPE.UI_INPUT' | 'KEY_TYPE.NESTED_REF_JSON' | 'KEY_TYPE.REF_JSON';
3176
- type UIType = 'UI_TYPE.TEXT' | 'UI_TYPE.DROP_DOWN' | 'UI_TYPE.RADIO' | 'UI_TYPE.DATE' | 'UI_TYPE.FILE' | 'UI_TYPE.TEXTAREA';
3177
- type UISubType = 'UI_SUBTYPE.SHORT_TEXT' | 'UI_SUBTYPE.LONG_TEXT' | 'UI_SUBTYPE.NUMBER' | 'UI_SUBTYPE.EMAIL' | 'UI_SUBTYPE.PHONE' | 'UI_SUBTYPE.URL';
3178
- type OptionDTO = 'OPTION_DTO.REF_DATA' | 'OPTION_DTO.STATIC';
3179
- interface FormOption {
3180
- label: string;
3181
- value: any;
3182
- code?: string;
3183
- name?: string;
3184
- }
3185
- interface OptionConfig {
3186
- optionDTO: OptionDTO;
3187
- class?: string;
3188
- url?: string;
3189
- labelKey?: string;
3190
- requestKey?: string;
3191
- valueKey?: string;
3192
- staticOptions?: FormOption[];
3193
- }
3194
- interface UIConfig {
3195
- type: UIType;
3196
- subType?: UISubType;
3197
- dependent?: string[];
3198
- optionConfigs?: OptionConfig;
3199
- minCharacters?: number;
3200
- maxCharacters?: number;
3201
- }
3202
- interface ValidationRules {
3203
- isMandatory?: boolean;
3204
- isRequired?: boolean;
3205
- minLength?: number;
3206
- maxLength?: number;
3207
- pattern?: string;
3208
- min?: number;
3209
- max?: number;
3210
- }
3211
- interface UploadedFile {
3212
- name: string;
3213
- size: number;
3214
- type: string;
3215
- url?: string;
3216
- file?: File;
3217
- }
3218
- interface FormField {
3219
- type?: FieldType;
3220
- name: string;
3221
- label?: string;
3222
- jsonKey?: string;
3223
- sequence?: number;
3224
- keyType?: KeyType;
3225
- uiConfig?: UIConfig;
3226
- validationRules?: ValidationRules;
3227
- placeholder?: string;
3228
- hint?: string;
3229
- helpText?: string;
3230
- options?: FormOption[];
3231
- required?: boolean;
3232
- mandatory?: boolean;
3233
- disabled?: boolean;
3234
- visible?: boolean;
3235
- class?: string;
3236
- value?: any;
3237
- icon?: string;
3238
- suffixIcon?: string;
3239
- prefixIcon?: string;
3240
- suffixText?: string;
3241
- readonly?: boolean;
3242
- subFields?: FormField[];
3243
- separator?: string;
3244
- dependsOn?: string;
3245
- dependent?: string[];
3246
- accept?: string;
3247
- multiple?: boolean;
3248
- uploadedFiles?: UploadedFile[];
3249
- optionConfigs?: OptionConfig;
3250
- loadedOptions?: FormOption[];
3251
- compositeValidationRule?: 'minTotal' | 'percentageTotal' | 'minMax';
3252
- }
3253
- interface FormSection {
3254
- sectionTitle?: string;
3255
- fields: FormField[];
3256
- isRepeater?: boolean;
3257
- addLabel?: string;
3258
- removeLabel?: string;
3259
- repeaterItemLabel?: string;
3260
- formArrayName?: string;
3261
- noCardLayout?: boolean;
3262
- collapsible?: boolean;
3263
- collapsed?: boolean;
3264
- minItems?: number;
3265
- maxItems?: number;
3266
- class?: string;
3267
- }
3268
- interface FormConfig {
3269
- sections: FormSection[];
3270
- entityType?: string;
3271
- }
3272
- interface JsonFieldConfig {
3273
- jsonKey: string;
3274
- sequence: number;
3275
- label: string;
3276
- keyType: KeyType;
3277
- validationRules?: ValidationRules;
3278
- uiConfig: UIConfig;
3279
- }
3280
- interface JsonFormConfig {
3281
- entityType: string;
3282
- label: string;
3283
- jsonConfig: JsonFieldConfig[];
3284
- }
3285
-
3286
- declare class ConfigurableFormComponent implements OnInit, OnChanges {
3287
- private fb;
3288
- private snackBar;
3289
- private http;
3290
- config: FormConfig;
3291
- jsonConfig: JsonFormConfig;
3292
- data: any;
3293
- baseApiUrl: string;
3294
- labels: any;
3295
- optionsLoad: EventEmitter<any>;
3296
- form: FormGroup;
3297
- processedConfig: FormConfig;
3298
- fieldVisibilityMap: Map<string, boolean>;
3299
- passwordFieldState: Map<string, boolean>;
3300
- constructor(fb: FormBuilder, snackBar: MatSnackBar, http: HttpClient);
3301
- ngOnInit(): void;
3302
- ngOnChanges(changes: SimpleChanges): void;
3303
- initializeForm(): void;
3304
- transformJsonConfig(jsonConfig: JsonFormConfig): FormConfig;
3305
- transformJsonField(jsonField: JsonFieldConfig): FormField;
3306
- mapUISubTypeToFieldType(subType?: string): FieldType;
3307
- normalizeFields(): void;
3308
- initializeFieldVisibility(): void;
3309
- buildForm(): void;
3310
- createCompositeValidator(field: FormField): (control: AbstractControl) => {
3311
- [x: string]: boolean;
3312
- };
3313
- createControl(field: FormField): FormControl;
3314
- createGroup(fields: FormField[]): FormGroup;
3315
- getFormArray(name: string): FormArray;
3316
- addRepeaterItem(section: FormSection): void;
3317
- removeRepeaterItem(sectionName: string, index: number): void;
3318
- validate(): boolean;
3319
- scrollToFirstInvalidControl(): void;
3320
- setupDependencies(): void;
3321
- onFieldValueChange(field: FormField, value: any): void;
3322
- loadFieldOptions(field: FormField, parentValues?: any): void;
3323
- extractOptions(data: any[], config: any): FormOption[];
3324
- getFieldOptions(field: FormField): FormOption[];
3325
- isFieldVisible(field: FormField): boolean;
3326
- toggleFieldVisibility(field: FormField, visible: boolean): void;
3327
- updateControlValidators(control: AbstractControl, field: FormField): void;
3328
- onFileChange(event: any, field: FormField): void;
3329
- removeFile(field: FormField, index: number): void;
3330
- updateFileControlValue(field: FormField): void;
3331
- getCharacterCount(fieldName: string): number;
3332
- toggleSection(section: FormSection): void;
3333
- private findFieldByName;
3334
- get sections(): FormSection[];
3335
- togglePassword(fieldName: string): void;
3336
- isPasswordVisible(fieldName: string): boolean;
3337
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfigurableFormComponent, never>;
3338
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfigurableFormComponent, "lib-configurable-form", never, { "config": { "alias": "config"; "required": false; }; "jsonConfig": { "alias": "jsonConfig"; "required": false; }; "data": { "alias": "data"; "required": false; }; "baseApiUrl": { "alias": "baseApiUrl"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; }, { "optionsLoad": "optionsLoad"; }, never, never, true, never>;
3339
- }
3340
-
3341
- declare class ConfigurableFormModule {
3342
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfigurableFormModule, never>;
3343
- static ɵmod: i0.ɵɵNgModuleDeclaration<ConfigurableFormModule, never, [typeof i2$1.CommonModule, typeof i3$1.ReactiveFormsModule, typeof MaterialModule, typeof ConfigurableFormComponent], [typeof ConfigurableFormComponent]>;
3344
- static ɵinj: i0.ɵɵInjectorDeclaration<ConfigurableFormModule>;
3345
- }
3346
-
3347
- interface SideNavItem {
3348
- id: string;
3349
- label: string;
3350
- icon?: string;
3351
- route?: string;
3352
- roles?: string[];
3353
- disabled?: boolean;
3354
- showArrow?: boolean;
3355
- tooltip?: string;
3356
- }
3357
- interface SideNavStyleConfig {
3358
- bg?: string;
3359
- width?: string;
3360
- collapsedWidth?: string;
3361
- fontFamily?: string;
3362
- headingColor?: string;
3363
- itemColor?: string;
3364
- itemHoverBg?: string;
3365
- activeBg?: string;
3366
- activeColor?: string;
3367
- activeHoverBg?: string;
3368
- toggleBg?: string;
3369
- toggleBorderColor?: string;
3370
- tooltipBg?: string;
3371
- tooltipColor?: string;
3372
- tooltipFontWeight?: string;
3373
- tooltipLetterSpacing?: string;
3374
- tooltipOffset?: string;
3375
- tooltipShadow?: string;
3376
- }
3377
- interface SideNavSection {
3378
- heading?: string;
3379
- items: SideNavItem[];
3380
- }
3381
-
3382
- declare class SideNavComponent implements OnChanges {
3383
- sections: SideNavSection[];
3384
- userRoles?: string[];
3385
- activeId?: string;
3386
- styleConfig?: SideNavStyleConfig;
3387
- /** Control whether the nav is collapsed externally (two-way bindable) */
3388
- collapsed: boolean;
3389
- /** Width of the nav when expanded. Overrides the CSS variable default. */
3390
- width?: string;
3391
- /** Width of the nav when collapsed (icons only). Overrides the CSS variable default. */
3392
- collapsedWidth?: string;
3393
- /** Whether to show the collapse toggle button */
3394
- showCollapseToggle: boolean;
3395
- /** Whether to hide icons when the side nav is expanded */
3396
- hideIconsWhenExpanded: boolean;
3397
- /** Whether to show tooltips on nav items */
3398
- showTooltips: boolean;
3399
- /** Position of the tooltip */
3400
- tooltipPosition: TooltipPosition;
3401
- /** Optional dictionary for label translation */
3402
- labels?: {
3403
- [key: string]: string;
3404
- };
3405
- itemClicked: EventEmitter<SideNavItem>;
3406
- /** Emits whenever the collapsed state changes (supports two-way binding via [(collapsed)]) */
3407
- collapsedChange: EventEmitter<boolean>;
3408
- /** Applies collapsed class to :host for the width CSS transition */
3409
- get isHostCollapsed(): boolean;
3410
- filteredSections: SideNavSection[];
3411
- ngOnChanges(changes: SimpleChanges): void;
3412
- private filterAndMapSections;
3413
- onItemClick(item: SideNavItem, event: Event): void;
3414
- toggleCollapse(): void;
3415
- get customStyles(): {
3416
- [key: string]: string;
3417
- };
3418
- static ɵfac: i0.ɵɵFactoryDeclaration<SideNavComponent, never>;
3419
- static ɵcmp: i0.ɵɵComponentDeclaration<SideNavComponent, "lib-side-nav", never, { "sections": { "alias": "sections"; "required": false; }; "userRoles": { "alias": "userRoles"; "required": false; }; "activeId": { "alias": "activeId"; "required": false; }; "styleConfig": { "alias": "styleConfig"; "required": false; }; "collapsed": { "alias": "collapsed"; "required": false; }; "width": { "alias": "width"; "required": false; }; "collapsedWidth": { "alias": "collapsedWidth"; "required": false; }; "showCollapseToggle": { "alias": "showCollapseToggle"; "required": false; }; "hideIconsWhenExpanded": { "alias": "hideIconsWhenExpanded"; "required": false; }; "showTooltips": { "alias": "showTooltips"; "required": false; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; }, { "itemClicked": "itemClicked"; "collapsedChange": "collapsedChange"; }, never, never, false, never>;
3420
- }
3421
-
3422
- declare class SideNavModule {
3423
- static ɵfac: i0.ɵɵFactoryDeclaration<SideNavModule, never>;
3424
- static ɵmod: i0.ɵɵNgModuleDeclaration<SideNavModule, [typeof SideNavComponent], [typeof i2$1.CommonModule, typeof i3$2.RouterModule, typeof MaterialModule], [typeof SideNavComponent]>;
3425
- static ɵinj: i0.ɵɵInjectorDeclaration<SideNavModule>;
3426
- }
3427
-
3428
- interface TableOption {
3429
- label: string;
3430
- value: any;
3431
- }
3432
- interface TableColumnSubField {
3433
- key: string;
3434
- label?: string;
3435
- dataType: 'text' | 'number' | 'email' | 'select' | 'date';
3436
- placeholder?: string;
3437
- editable?: boolean;
3438
- options?: TableOption[];
3439
- editConfig?: {
3440
- disabled?: boolean;
3441
- defaultValue?: any;
3442
- };
3443
- }
3444
- interface TableColumn {
3445
- key: string;
3446
- label: string;
3447
- type: 'text' | 'number' | 'date' | 'custom' | 'html' | 'badge';
3448
- sortable?: boolean;
3449
- editable?: boolean;
3450
- dataType?: 'text' | 'number' | 'date' | 'email' | 'select';
3451
- options?: TableOption[];
3452
- badgeConfig?: {
3453
- [key: string]: 'success' | 'warning' | 'danger' | 'info' | 'neutral';
3454
- };
3455
- width?: string;
3456
- cellClass?: string;
3457
- headerClass?: string;
3458
- sticky?: boolean;
3459
- labelPath?: string;
3460
- emptyValue?: string;
3461
- dateFormat?: string;
3462
- clickAction?: 'route' | 'callback';
3463
- clickRoute?: string;
3464
- subFields?: TableColumnSubField[];
3465
- editConfig?: {
3466
- disabled?: boolean;
3467
- defaultValue?: any;
3468
- };
3469
- }
3470
- interface TableFilter {
3471
- key: string;
3472
- label: string;
3473
- type: 'select' | 'text' | 'date';
3474
- options?: TableOption[];
3475
- apiUrl?: string;
3476
- apiMethod?: 'GET' | 'POST';
3477
- apiPayload?: any;
3478
- labelKey?: string;
3479
- valueKey?: string;
3480
- labelPath?: string;
3481
- valuePath?: string;
3482
- requestKey?: string;
3483
- dataPath?: string;
3484
- handling?: 'standard' | 'nested_string';
3485
- nestedStringConfig?: NestedStringConfig;
3486
- }
3487
- interface TableActionItem {
3488
- label: string;
3489
- type: 'api' | 'callback' | 'route' | 'delete';
3490
- icon?: string;
3491
- apiUrl?: string;
3492
- apiMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
3493
- route?: string;
3494
- confirmationNeeded?: boolean;
3495
- confirmationMessage?: string;
3496
- callback?: (row: any) => void;
3497
- /** Set to false to hide this action item. Default: true */
3498
- isEnabled?: boolean;
3499
- /** Config for native 'delete' action type — drives the built-in confirmation modal */
3500
- deleteConfig?: {
3501
- apiUrl: string;
3502
- idField?: string;
3503
- modalTitle?: string;
3504
- modalMessage?: string;
3505
- confirmLabel?: string;
3506
- cancelLabel?: string;
3507
- };
3508
- }
3509
- interface TableAction {
3510
- label: string;
3511
- type: 'api' | 'callback' | 'route' | 'edit' | 'dropdown';
3512
- icon?: string;
3513
- btnVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline';
3514
- apiUrl?: string;
3515
- apiMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
3516
- route?: string;
3517
- confirmationNeeded?: boolean;
3518
- confirmationMessage?: string;
3519
- callback?: (row: any) => void;
3520
- items?: TableActionItem[];
3521
- /** Set to false to hide this action. Default: true */
3522
- isEnabled?: boolean;
3523
- }
3524
- interface PaginationConfig {
3525
- enabled: boolean;
3526
- pageSize: number;
3527
- pageSizeOptions: number[];
3528
- totalCountConfig?: {
3529
- source: 'same' | 'separate';
3530
- apiUrl?: string;
3531
- responsePath?: string;
3532
- };
3533
- }
3534
- interface TableTheme {
3535
- primaryColor?: string;
3536
- headerBg?: string;
3537
- headerColor?: string;
3538
- rowHoverBg?: string;
3539
- borderColor?: string;
3540
- }
3541
- interface NestedStringConfig {
3542
- paramName: string;
3543
- baseValue?: string;
3544
- separator: string;
3545
- assignment: string;
3546
- }
3547
- interface QueryParamsConfig {
3548
- pageKey?: string;
3549
- sizeKey?: string;
3550
- pageIndexOffset?: number;
3551
- filterHandling?: 'standard' | 'nested_string';
3552
- nestedStringConfig?: NestedStringConfig;
3553
- }
3554
- interface TableConfig {
3555
- columns: TableColumn[];
3556
- apiUrl?: string;
3557
- apiMethod?: 'GET' | 'POST';
3558
- apiPayload?: any;
3559
- dataResponsePath?: string;
3560
- filters?: TableFilter[];
3561
- filterData?: {
3562
- [key: string]: any[];
3563
- };
3564
- pagination?: PaginationConfig;
3565
- actions?: TableAction[];
3566
- topBarButtons?: TableAction[];
3567
- sortBy?: string;
3568
- orderBy?: 'ASC' | 'DESC';
3569
- theme?: TableTheme;
3570
- requestParams?: Function;
3571
- selectable?: boolean;
3572
- queryParamsConfig?: QueryParamsConfig;
3573
- labels?: TableLabels;
3574
- searchConfig?: SearchConfig;
3575
- maxHeight?: string;
3576
- stickyHeader?: boolean;
3577
- stickyColumnCount?: number;
3578
- token?: string;
3579
- tokenHeader?: string;
3580
- editingRowClass?: string;
3581
- /** Fallback text for any cell whose value is null, undefined, or empty string.
3582
- * Overridden per-column via TableColumn.emptyValue. Library default: '-' */
3583
- emptyValue?: string;
3584
- }
3585
- interface SearchConfig {
3586
- enabled: boolean;
3587
- searchKey?: string;
3588
- debounceTime?: number;
3589
- handling?: 'standard' | 'nested_string';
3590
- minimumCharacter?: number;
3591
- }
3592
- interface TableLabels {
3593
- searchPlaceholder?: string;
3594
- actionColumnHeader?: string;
3595
- noDataMessage?: string;
3596
- itemsPerPageLabel?: string;
3597
- defaultConfirmationMessage?: string;
3598
- saveLabel?: string;
3599
- cancelLabel?: string;
3600
- addLabel?: string;
3601
- /** Variant for the Add button (new row). Defaults to 'danger'. */
3602
- addButtonVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline';
3603
- /** Variant for the Save button (edit row). Defaults to 'primary'. */
3604
- saveButtonVariant?: 'primary' | 'secondary' | 'outline' | 'danger' | 'warning' | 'success' | 'danger-outline';
3605
- }
3606
- /**
3607
- * Emitted by the SmartTableComponent when operating in external-data mode
3608
- * (i.e. when [tableData] input is provided by the parent).
3609
- * The parent is responsible for fetching updated data based on this event
3610
- * and providing it back via [tableData] and [totalItemsCount].
3611
- */
3612
- interface TableDataChangeEvent {
3613
- page: number;
3614
- pageSize: number;
3615
- sortBy?: string;
3616
- orderBy?: 'ASC' | 'DESC';
3617
- searchTerm?: string;
3618
- filters?: {
3619
- [key: string]: any;
3620
- };
3621
- }
3622
- interface TableRowSaveEvent {
3623
- row: any;
3624
- isNew: boolean;
3625
- }
3626
-
3627
- /**
3628
- * Maps a SmartForm field name to its corresponding API query-param key.
3629
- */
3630
- interface FilterParamMap {
3631
- /** Field name as declared in sectionConfig.children (e.g. "country") */
3632
- formFieldName: string;
3633
- /** Actual query-param key sent to the table API (e.g. "currentCountryCode") */
3634
- apiParamKey: string;
3635
- }
3636
- /**
3637
- * Configuration for the left-hand filter panel (powered by SmartForm).
3638
- */
3639
- interface FilterPanelConfig {
3640
- /** Full SmartForm JSON schema (entityType, sectionConfig, actionBarConfig, etc.) */
3641
- smartFormConfig: FormSchema;
3642
- /** Maps each form field to the API query-param that the table expects */
3643
- filterParamMapping: FilterParamMap[];
3644
- /**
3645
- * Optional default values pre-filled when the component opens AND restored on Clear Filter.
3646
- * Key = formFieldName, Value = the field value.
3647
- * When provided, the initial table load will include these params.
3648
- */
3649
- defaultValues?: Record<string, any>;
3650
- /**
3651
- * List of field names that should be rendered as disabled/read-only.
3652
- * The values are still used when building API params, but users cannot change them.
3653
- * Their values are preserved when Clear Filter is triggered.
3654
- */
3655
- disabledFields?: string[];
3656
- /**
3657
- * i18n key or literal text for the "Clear Filter" button.
3658
- * Defaults to 'COMMON.FILTER_TABLE.CLEAR_FILTER'.
3659
- */
3660
- clearFilterLabel?: string;
3661
- /**
3662
- * i18n key or literal text for the "Apply Filter" button.
3663
- * Defaults to 'COMMON.FILTER_TABLE.APPLY_FILTER'.
3664
- */
3665
- applyFilterLabel?: string;
3666
- }
3667
- /**
3668
- * Controls selection behaviour and bottom action bar labels.
3669
- */
3670
- interface SelectionConfig {
3671
- /** Allow selecting multiple rows (true = checkbox per row, false = radio). */
3672
- multiSelect: boolean;
3673
- /**
3674
- * i18n token for the "X of Y users Selected" counter.
3675
- * Use placeholders {selected} and {total}.
3676
- * Example: "COMMON.FILTER_TABLE.SELECTION_COUNT"
3677
- */
3678
- selectionCountLabel: string;
3679
- /** i18n token (or literal text) for the primary submit button. */
3680
- submitButtonLabel: string;
3681
- /** i18n token (or literal text) for the secondary cancel/back button. */
3682
- cancelButtonLabel: string;
3683
- }
3684
- /**
3685
- * Top-level configuration object for FilterTableSelectorComponent.
3686
- */
3687
- interface FilterTableSelectorConfig {
3688
- /** Dialog / modal heading. */
3689
- title?: string;
3690
- /** Left-panel filter form configuration. */
3691
- filterConfig: FilterPanelConfig;
3692
- /**
3693
- * Right-panel table configuration.
3694
- * Extends the standard SmartTable config; `selectable` should be true.
3695
- * `multiSelect` is controlled via selectionConfig.multiSelect.
3696
- */
3697
- tableConfig: FilterTableConfig;
3698
- /** Selection behaviour and bottom action bar labels. */
3699
- selectionConfig: SelectionConfig;
3700
- }
3701
- /**
3702
- * Extended TableConfig for FilterTableSelector — adds multiSelect support.
3703
- */
3704
- interface FilterTableConfig extends TableConfig {
3705
- /**
3706
- * When true (and selectable=true), multiple rows can be selected simultaneously.
3707
- * When false, only one row can be selected at a time (radio behaviour).
3708
- */
3709
- multiSelect?: boolean;
3710
- }
3711
-
3712
- declare class FilterTableSelectorComponent implements OnInit, OnChanges, OnDestroy {
3713
- private cdr;
3714
- private ngZone;
3715
- /** Full config object driven by consuming MFE JSON. */
3716
- config: FilterTableSelectorConfig;
3717
- /**
3718
- * Flat i18n labels map from the consuming MFE.
3719
- * Mirrors the pattern used by SmartFormComponent.
3720
- */
3721
- labels: Record<string, string>;
3722
- /**
3723
- * Pre-selected row identifiers.
3724
- * When provided, matching rows are pre-checked on first load and
3725
- * re-checked after each page navigation.
3726
- * Must be an array of row objects (the same shape returned by the API).
3727
- */
3728
- preSelectedRows: any[];
3729
- /** Emits the array of currently selected row objects on "Add / Submit". */
3730
- onSubmit: EventEmitter<any[]>;
3731
- /** Emits void on "Back / Cancel". */
3732
- onCancel: EventEmitter<void>;
3733
- /** A deep-copy of tableConfig with the current filter params baked-in. */
3734
- resolvedTableConfig: FilterTableConfig;
3735
- /** Current active filter params (merged from form submission). */
3736
- activeFilterParams: Record<string, string>;
3737
- /** The base API URL without any filter query params. */
3738
- private baseApiUrl;
3739
- /** All rows selected so far, tracked across pagination pages. */
3740
- selectedRows: any[];
3741
- /** Total rows currently loaded in the table (reported by SmartTable rowSelect). */
3742
- totalTableItems: number;
3743
- /** Serialised SmartForm JSON (with labels translated + disabled fields applied). */
3744
- resolvedFormJson: string;
3745
- /**
3746
- * Default values to prefill the SmartForm.
3747
- * Updated on each initialize() call and reset to config defaults on Clear Filter.
3748
- */
3749
- resolvedInitialValues: Record<string, any>;
3750
- /**
3751
- * Version counter — bumping this forces *ngIf to re-create the SmartForm
3752
- * component with fresh initial values (used by Clear Filter).
3753
- */
3754
- formVersion: number;
3755
- /** Whether the filter panel is visible (toggled on mobile, always visible on desktop). */
3756
- filterPanelVisible: boolean;
3757
- /**
3758
- * Tracks the live form values as the user changes fields.
3759
- * Updated via SmartForm's (valueChange) output.
3760
- * Used when the user clicks the "Apply Filter" button in the component.
3761
- */
3762
- currentFormValues: Record<string, any>;
3763
- private destroy$;
3764
- constructor(cdr: ChangeDetectorRef, ngZone: NgZone);
3765
- ngOnInit(): void;
3766
- ngOnChanges(changes: SimpleChanges): void;
3767
- ngOnDestroy(): void;
3768
- private initialize;
3769
- /**
3770
- * Serialises the SmartForm config JSON.
3771
- * Applies disabledFields from filterPanelConfig.
3772
- */
3773
- private buildFormJson;
3774
- /**
3775
- * Rebuilds resolvedTableConfig with the current activeFilterParams appended
3776
- * to the base API URL.
3777
- */
3778
- private applyFilterParamsToTable;
3779
- /**
3780
- * Converts a flat form-value map to API param key/value pairs
3781
- * using the configured filterParamMapping.
3782
- */
3783
- private buildFilterParams;
3784
- /**
3785
- * Called every time a form field value changes (SmartForm valueChange output).
3786
- * We track the current values so the component-level "Apply Filter" button
3787
- * can read them without relying on a form submit button inside the JSON config.
3788
- */
3789
- onFormValueChange(values: Record<string, any>): void;
3790
- /**
3791
- * Called when the user clicks the "Apply Filter" button rendered by the component.
3792
- * Builds API params from the tracked form values and reloads the table.
3793
- */
3794
- applyCurrentFilter(): void;
3795
- /**
3796
- * Clear Filter: resets form to default values (preserving disabled-field values),
3797
- * reloads the table with default params.
3798
- * The form is re-created via formVersion bump so SmartForm gets fresh initialValues.
3799
- */
3800
- onClearFilter(): void;
3801
- /**
3802
- * Called by SmartTable's (rowSelect) output.
3803
- * Merges page-level selection with the cross-page tracking set.
3804
- */
3805
- onRowSelect(globalSelection: any[]): void;
3806
- /**
3807
- * Syncs preSelectedRows into the local selectedRows (called when input changes).
3808
- */
3809
- private syncPreselection;
3810
- handleSubmit(): void;
3811
- handleCancel(): void;
3812
- translate(key: string): string;
3813
- get titleLabel(): string;
3814
- get submitButtonLabel(): string;
3815
- get cancelButtonLabel(): string;
3816
- get clearFilterButtonLabel(): string;
3817
- get applyFilterButtonLabel(): string;
3818
- get selectionCountText(): string;
3819
- get hasActiveFilters(): boolean;
3820
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterTableSelectorComponent, never>;
3821
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterTableSelectorComponent, "lib-filter-table-selector", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "preSelectedRows": { "alias": "preSelectedRows"; "required": false; }; }, { "onSubmit": "onSubmit"; "onCancel": "onCancel"; }, never, never, false, never>;
3822
- }
3823
-
3824
- declare class SmartTableComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {
3825
- private http;
3826
- private router;
3827
- private cdr;
3828
- private ngZone;
3829
- config: TableConfig;
3830
- /**
3831
- * External data mode: pass table rows directly from the parent.
3832
- * When this input is provided, the component will NOT make any internal API calls.
3833
- * Instead, it emits sortChange / pageChange / searchChange / filterChange events
3834
- * so the parent can fetch and supply updated data.
3835
- */
3836
- tableData?: any[];
3837
- /**
3838
- * Total number of items — used by the pagination component when operating in
3839
- * external-data mode. Must be kept in sync by the parent.
3840
- */
3841
- totalItemsCount?: number;
3842
- action: EventEmitter<{
3843
- action: TableAction;
3844
- row: any;
3845
- }>;
3846
- topAction: EventEmitter<TableAction>;
3847
- filterChange: EventEmitter<{
3848
- key: string;
3849
- value: any;
3850
- }>;
3851
- rowSelect: EventEmitter<any[]>;
3852
- columnClick: EventEmitter<{
3853
- row: any;
3854
- column: string;
3855
- }>;
3856
- /**
3857
- * Pre-selected row objects. These are tracked across pages.
3858
- * Matching incoming data rows (via rowIdField) will be checked automatically.
3859
- */
3860
- selectedRows: any[];
3861
- /** Emitted in external-data mode when the user changes the sort column/direction. */
3862
- sortChange: EventEmitter<TableDataChangeEvent>;
3863
- /** Emitted in external-data mode when the user changes the page or page size. */
3864
- pageChange: EventEmitter<TableDataChangeEvent>;
3865
- /** Emitted in external-data mode when the user types in the search box. */
3866
- searchChange: EventEmitter<TableDataChangeEvent>;
3867
- /** Emitted when an inline-edited or inline-added row is saved. */
3868
- rowSave: EventEmitter<TableRowSaveEvent>;
3869
- data: any[];
3870
- totalItems: number;
3871
- currentPage: number;
3872
- loading: boolean;
3873
- originalRowsCache: Map<any, any>;
3874
- activeSort: {
3875
- key: string;
3876
- direction: 'ASC' | 'DESC';
3877
- };
3878
- private isSortActive;
3879
- activeFilters: {
3880
- [key: string]: any;
3881
- };
3882
- searchTerm: string;
3883
- stickyColumnStyles: {
3884
- [key: string]: any;
3885
- };
3886
- hasStickyColumns: boolean;
3887
- openDropdownId: string | null;
3888
- /** Viewport-relative position used to render the dropdown as position:fixed. */
3889
- dropdownPosition: {
3890
- top: number;
3891
- right: number;
3892
- };
3893
- /** Items and row for the currently open dropdown — rendered in a portal outside the table. */
3894
- activeDropdownItems: any[] | null;
3895
- activeDropdownRow: any;
3896
- openFilterKey: string | null;
3897
- activeFilterLabels: {
3898
- [key: string]: string;
3899
- };
3900
- /** Viewport-relative position used to render the filter panel as position:fixed. */
3901
- filterPosition: {
3902
- top: number;
3903
- left: number;
3904
- };
3905
- /** The filter config for the currently open filter panel. */
3906
- activeFilterData: any | null;
3907
- deleteModalOpen: boolean;
3908
- deleteModalConfig: any;
3909
- private pendingDeleteAction;
3910
- searchSubject: Subject<string>;
3911
- stickyHeaders: QueryList<ElementRef>;
3912
- private resizeObserver;
3913
- private locale;
3914
- constructor(http: HttpClient, router: Router, cdr: ChangeDetectorRef, ngZone: NgZone);
3915
- ngOnInit(): void;
3916
- ngOnChanges(changes: SimpleChanges): void;
3917
- ngAfterViewInit(): void;
3918
- ngOnDestroy(): void;
3919
- private setupResizeObserver;
3920
- private observeHeaders;
3921
- loadData(): void;
3922
- /**
3923
- * Syncs the locally loaded data set with the externally provided selectedRows.
3924
- * Marks 'selected' property on row objects to reflect checkbox state.
3925
- */
3926
- private syncSelection;
3927
- onPageChange(page: number): void;
3928
- onPageSizeChange(size: number): void;
3929
- onSort(col: TableColumn): void;
3930
- onSearch(event: Event): void;
3931
- onFilterChange(key: string, event: Event): void;
3932
- private applyFilter;
3933
- toggleFilter(key: string, event: Event): void;
3934
- selectFilterOption(filter: any, opt: {
3935
- label: string;
3936
- value: any;
3937
- } | null): void;
3938
- getFilterDisplay(filter: any): string;
3939
- getValidFilterOptions(filter: any): any[];
3940
- isFilterActive(filter: any): boolean;
3941
- /**
3942
- * Assembles the current table state into a `TableDataChangeEvent` object.
3943
- * Emitted to the parent in external-data mode so it can fetch and supply new data.
3944
- */
3945
- private buildChangeEvent;
3946
- onAction(action: TableAction, row: any): void;
3947
- onActionItemClick(item: any, row: any, event: Event): void;
3948
- private openDeleteConfirmModal;
3949
- deleteModalMessage: string;
3950
- onDeleteConfirm(): void;
3951
- onDeleteCancel(): void;
3952
- onTopAction(action: TableAction): void;
3953
- private executeApiAction;
3954
- onSelectAll(event: Event): void;
3955
- onRowSelect(row: any): void;
3956
- updateSelectedRows(): void;
3957
- getCellValue(row: any, col: TableColumn): any;
3958
- getBadgeClass(row: any, col: TableColumn): string;
3959
- getAscOpacity(key: string): number;
3960
- getDescOpacity(key: string): number;
3961
- private replaceParams;
3962
- private loadFilterOptions;
3963
- private getValueByPath;
3964
- private calculateStickyPositions;
3965
- private toTitleCase;
3966
- get columnCount(): number;
3967
- /** Filters out actions/action-items explicitly disabled via `isEnabled: false`. */
3968
- getVisibleActions<T extends {
3969
- isEnabled?: boolean;
3970
- }>(actions?: T[] | null): T[];
3971
- get showPagination(): boolean;
3972
- private applyPaginationDefaults;
3973
- onColumnClick(row: any, col: TableColumn): void;
3974
- private getHeaders;
3975
- toggleDropdown(id: string, event: Event, items: any[], row: any): void;
3976
- closeDropdown(): void;
3977
- onCancelRow(row: any, index: number): void;
3978
- onSaveRow(row: any): void;
3979
- /** Convert any parseable date value to a native Date object for mat-datepicker binding. */
3980
- private toDateObject;
3981
- /** Pre-process all date columns on a row before entering edit mode. */
3982
- private prepareDateFieldsForEdit;
3983
- /** Normalize Date objects back to ISO strings before sending payloads. */
3984
- private normalizeDateFieldsForSave;
3985
- static ɵfac: i0.ɵɵFactoryDeclaration<SmartTableComponent, never>;
3986
- static ɵcmp: i0.ɵɵComponentDeclaration<SmartTableComponent, "lib-smart-table", never, { "config": { "alias": "config"; "required": false; }; "tableData": { "alias": "tableData"; "required": false; }; "totalItemsCount": { "alias": "totalItemsCount"; "required": false; }; "selectedRows": { "alias": "selectedRows"; "required": false; }; }, { "action": "action"; "topAction": "topAction"; "filterChange": "filterChange"; "rowSelect": "rowSelect"; "columnClick": "columnClick"; "sortChange": "sortChange"; "pageChange": "pageChange"; "searchChange": "searchChange"; "rowSave": "rowSave"; }, never, never, false, never>;
3987
- }
3988
-
3989
- /**
3990
- * Marks rich-text HTML (e.g. from a smart-table "html" column, always sourced from this
3991
- * app's own rich-text editor output, never arbitrary external/user-supplied markup) as
3992
- * trusted so [innerHTML] renders it without Angular's default HTML sanitizer stripping it.
3993
- *
3994
- * Deliberately does NOT run the value through DomSanitizer.sanitize(SecurityContext.HTML, ...)
3995
- * first — that sanitizer strips `style` attributes entirely (they're not in its allowlist),
3996
- * which silently destroyed rich-text formatting like text color and highlight color while
3997
- * leaving semantic-tag formatting (bold/italic/underline) untouched, since only tags — not
3998
- * inline styles — survive that pass.
3999
- */
4000
- declare class SafeHtmlPipe implements PipeTransform {
4001
- private sanitizer;
4002
- constructor(sanitizer: DomSanitizer);
4003
- transform(value: string): SafeHtml | null;
4004
- static ɵfac: i0.ɵɵFactoryDeclaration<SafeHtmlPipe, never>;
4005
- static ɵpipe: i0.ɵɵPipeDeclaration<SafeHtmlPipe, "safeHtml", false>;
4006
- }
4007
-
4008
- interface PaginationLabels {
4009
- items: string;
4010
- of: string;
4011
- perPage: string;
4012
- }
4013
- declare class PaginationComponent implements OnInit, OnChanges {
4014
- totalItems: number;
4015
- itemsPerPage: number;
4016
- currentPage: number;
4017
- pageSizeOptions: number[];
4018
- theme: 'theme-1' | 'theme-2';
4019
- labels: PaginationLabels;
4020
- pageChange: EventEmitter<number>;
4021
- itemsPerPageChange: EventEmitter<number>;
4022
- totalPages: number;
4023
- pages: (number | string)[];
4024
- startItem: number;
4025
- endItem: number;
4026
- constructor();
4027
- ngOnInit(): void;
4028
- ngOnChanges(changes: SimpleChanges): void;
4029
- calculatePagination(): void;
4030
- getVisiblePages(current: number, total: number): (number | string)[];
4031
- onPageChange(page: number | string): void;
4032
- onItemsPerPageChange(event: Event): void;
4033
- nextPage(): void;
4034
- prevPage(): void;
4035
- static ɵfac: i0.ɵɵFactoryDeclaration<PaginationComponent, never>;
4036
- static ɵcmp: i0.ɵɵComponentDeclaration<PaginationComponent, "lib-pagination", never, { "totalItems": { "alias": "totalItems"; "required": false; }; "itemsPerPage": { "alias": "itemsPerPage"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; }, { "pageChange": "pageChange"; "itemsPerPageChange": "itemsPerPageChange"; }, never, never, false, never>;
4037
- }
4038
-
4039
- declare class PaginationModule {
4040
- static ɵfac: i0.ɵɵFactoryDeclaration<PaginationModule, never>;
4041
- static ɵmod: i0.ɵɵNgModuleDeclaration<PaginationModule, [typeof PaginationComponent], [typeof i2$1.CommonModule], [typeof PaginationComponent]>;
4042
- static ɵinj: i0.ɵɵInjectorDeclaration<PaginationModule>;
4043
- }
4044
-
4045
- declare class SmartTableModule {
4046
- static ɵfac: i0.ɵɵFactoryDeclaration<SmartTableModule, never>;
4047
- static ɵmod: i0.ɵɵNgModuleDeclaration<SmartTableModule, [typeof SmartTableComponent, typeof SafeHtmlPipe], [typeof i2$1.CommonModule, typeof i3$1.FormsModule, typeof PaginationModule, typeof ButtonModule, typeof MaterialModule, typeof ConfirmationModalModule], [typeof SmartTableComponent]>;
4048
- static ɵinj: i0.ɵɵInjectorDeclaration<SmartTableModule>;
4049
- }
4050
-
4051
- declare class FilterTableSelectorModule {
4052
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterTableSelectorModule, never>;
4053
- static ɵmod: i0.ɵɵNgModuleDeclaration<FilterTableSelectorModule, [typeof FilterTableSelectorComponent], [typeof i2$1.CommonModule, typeof SmartFormModule, typeof SmartTableModule, typeof ButtonModule], [typeof FilterTableSelectorComponent]>;
4054
- static ɵinj: i0.ɵɵInjectorDeclaration<FilterTableSelectorModule>;
4055
- }
4056
-
4057
- declare class SharedUiModule {
4058
- static ɵfac: i0.ɵɵFactoryDeclaration<SharedUiModule, never>;
4059
- static ɵmod: i0.ɵɵNgModuleDeclaration<SharedUiModule, never, [typeof i2$1.CommonModule, typeof MaterialModule, typeof AlertModule, typeof ButtonModule, typeof ButtonDropdownModule, typeof ConfirmationModalModule, typeof FilterSidebarModule, typeof FilterModule, typeof SummaryCardModule, typeof ConfigurableFormModule, typeof FormComponentsModule, typeof SmartFormModule, typeof SideNavModule, typeof FormBuilderModule, typeof FilterTableSelectorModule], [typeof MaterialModule, typeof AlertModule, typeof ButtonModule, typeof ButtonDropdownModule, typeof ConfirmationModalModule, typeof FilterSidebarModule, typeof FilterModule, typeof SummaryCardModule, typeof ConfigurableFormModule, typeof FormComponentsModule, typeof SmartFormModule, typeof SideNavModule, typeof FormBuilderModule, typeof FilterTableSelectorModule]>;
4060
- static ɵinj: i0.ɵɵInjectorDeclaration<SharedUiModule>;
4061
- }
4062
-
4063
- /**
4064
- * Utility functions for LocalStorage operations
4065
- */
4066
- declare const getLocalStorageItem: (key: string) => string | null;
4067
- declare const setLocalStorageItem: (key: string, value: string) => void;
4068
- declare const removeLocalStorageItem: (key: string) => void;
4069
- declare const clearLocalStorage: () => void;
4070
- /**
4071
- * Utility functions for SessionStorage operations
4072
- */
4073
- declare const getSessionStorageItem: (key: string) => string | null;
4074
- declare const setSessionStorageItem: (key: string, value: string) => void;
4075
- declare const removeSessionStorageItem: (key: string) => void;
4076
- declare const clearSessionStorage: () => void;
4077
-
4078
- /**
4079
- * Utility functions for string manipulation
4080
- */
4081
- declare class StringUtils {
4082
- /**
4083
- * Converts a string to camelCase.
4084
- * Example: "First Name" -> "firstName", "Profile Picture" -> "profilePicture"
4085
- */
4086
- static toCamelCase(str?: string): string;
4087
- }
4088
-
4089
- /**
4090
- * Recursively translates the Configuration object using the provided labels map.
4091
- * This function processes:
4092
- * - Section Titles
4093
- * - Field Labels
4094
- * - Placeholders
4095
- * - Help Texts
4096
- * - Option Labels (for static options)
4097
- * - Repeater Labels (addLabel, repeaterItemLabel)
4098
- *
4099
- * @param config The FormConfig object to translate
4100
- * @param labelsMap A map of key-value pairs for translation (Flattened JSON)
4101
- * @returns A new FormConfig object with translated strings
4102
- */
4103
- declare function translateConfig(config: any, labelsMap: any): any;
4104
-
4105
- /**
4106
- * Example: Basic Form Configuration
4107
- * This is a generic example for testing and demonstration purposes.
4108
- */
4109
- declare const EXAMPLE_FORM_CONFIG: FormConfig;
4110
- /**
4111
- * Example: Target Group Configuration
4112
- * Demonstrates composite fields for Age Group and Gender Split
4113
- */
4114
- declare const TARGET_GROUP_CONFIG: FormConfig;
4115
-
4116
- declare const configurableForm_examples_d_EXAMPLE_FORM_CONFIG: typeof EXAMPLE_FORM_CONFIG;
4117
- declare const configurableForm_examples_d_TARGET_GROUP_CONFIG: typeof TARGET_GROUP_CONFIG;
4118
- declare namespace configurableForm_examples_d {
4119
- export {
4120
- configurableForm_examples_d_EXAMPLE_FORM_CONFIG as EXAMPLE_FORM_CONFIG,
4121
- configurableForm_examples_d_TARGET_GROUP_CONFIG as TARGET_GROUP_CONFIG,
4122
- };
4123
- }
4124
-
4125
- interface NavStyleConfig {
4126
- width?: string;
4127
- backgroundColor?: string;
4128
- borderRadius?: string;
4129
- border?: string;
4130
- padding?: string;
4131
- gap?: string;
4132
- boxShadow?: string;
4133
- itemColor?: string;
4134
- itemRadius?: string;
4135
- itemPadding?: string;
4136
- fontSize?: string;
4137
- fontWeight?: string;
4138
- activeItemBg?: string;
4139
- activeItemColor?: string;
4140
- activeItemFontWeight?: string;
4141
- activeItemBorderColor?: string;
4142
- hoverItemBg?: string;
4143
- hoverItemColor?: string;
4144
- badgeBg?: string;
4145
- badgeColor?: string;
4146
- }
4147
-
4148
- interface NavItem {
4149
- id: string | number;
4150
- label: string;
4151
- icon?: string;
4152
- badge?: string | number;
4153
- disabled?: boolean;
4154
- }
4155
- declare class NavComponent implements OnChanges {
4156
- items: NavItem[];
4157
- activeId: string | number | null;
4158
- variant: 'filled' | 'underline' | 'pills';
4159
- orientation: 'horizontal' | 'vertical';
4160
- styleConfig: NavStyleConfig;
4161
- selectionChange: EventEmitter<NavItem>;
4162
- ngOnChanges(changes: SimpleChanges): void;
4163
- get computedStyles(): {
4164
- [key: string]: string | undefined;
4165
- };
4166
- onItemClick(item: NavItem): void;
4167
- trackById(index: number, item: NavItem): string | number;
4168
- static ɵfac: i0.ɵɵFactoryDeclaration<NavComponent, never>;
4169
- static ɵcmp: i0.ɵɵComponentDeclaration<NavComponent, "lib-nav", never, { "items": { "alias": "items"; "required": false; }; "activeId": { "alias": "activeId"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; "styleConfig": { "alias": "styleConfig"; "required": false; }; }, { "selectionChange": "selectionChange"; }, never, never, false, never>;
4170
- }
4171
-
4172
- declare class NavModule {
4173
- static ɵfac: i0.ɵɵFactoryDeclaration<NavModule, never>;
4174
- static ɵmod: i0.ɵɵNgModuleDeclaration<NavModule, [typeof NavComponent], [typeof i2$1.CommonModule], [typeof NavComponent]>;
4175
- static ɵinj: i0.ɵɵInjectorDeclaration<NavModule>;
4176
- }
4177
-
4178
- declare const DEFAULT_ITEMS_PER_PAGE = 10;
4179
- declare const DEFAULT_PAGE_SIZE_OPTIONS: number[];
4180
- declare const PAGINATION_THEME_DEFAULT = "theme-1";
4181
- declare const PAGINATION_THEME_DARK = "theme-2";
4182
- declare const NAV_VARIANT_DEFAULT: 'filled' | 'underline' | 'pills';
4183
- declare const NAV_ORIENTATION_DEFAULT: 'horizontal' | 'vertical';
4184
- declare const DEFAULT_SIDE_NAV_TOOLTIP_POSITION = "right";
4185
-
4186
- declare function appendBaseUrlRecursively(obj: any, baseURL: string): void;
4187
-
4188
- interface HierarchyCfg {
4189
- templateApiUrl: string;
4190
- templateListPath: string | null;
4191
- templateSelect: 'default' | 'first' | 'byCode';
4192
- templateSelectField: string;
4193
- templateSelectCode?: string;
4194
- rootCodePath: string;
4195
- templateCodePath: string;
4196
- hierarchyListPath: string;
4197
- parentField: string;
4198
- childField: string;
4199
- dataApiUrl: string;
4200
- dataPath: string;
4201
- labelPath: string;
4202
- valuePath: string;
4203
- colSpan: number;
4204
- payloadPrefix: string;
4205
- dependencyParam: string;
4206
- nodes: Record<string, any>;
4207
- branchSubType: string;
4208
- }
4209
-
4210
- declare class ValidationUtils {
4211
- static email(): ValidatorFn;
4212
- static phone(): ValidatorFn;
4213
- static url(): ValidatorFn;
4214
- static minLength(min: number): ValidatorFn;
4215
- static maxLength(max: number): ValidatorFn;
4216
- static pattern(pattern: string, message?: string): ValidatorFn;
4217
- static numberRange(min?: number, max?: number): ValidatorFn;
4218
- static dateRange(minDate?: string, maxDate?: string): ValidatorFn;
4219
- static getErrorMessage(errors: ValidationErrors | null): string;
4220
- }
4221
-
4222
- declare const SAMPLE_FORMS: {
4223
- contactForm: string;
4224
- registrationForm: string;
4225
- surveyForm: string;
4226
- jobApplicationForm: string;
4227
- donorForm: string;
4228
- userBasicDetailsForm: string;
4229
- documentUploadForm: string;
4230
- demandDefinitionForm: string;
4231
- projectInfoForm: string;
4232
- faqForm: string;
4233
- locationForm: string;
4234
- };
4235
-
4236
- declare const smartForm_examples_d_SAMPLE_FORMS: typeof SAMPLE_FORMS;
4237
- declare namespace smartForm_examples_d {
4238
- export {
4239
- smartForm_examples_d_SAMPLE_FORMS as SAMPLE_FORMS,
4240
- };
4241
- }
4242
-
4243
- declare class SnackbarComponent {
4244
- data: SnackbarConfig;
4245
- snackBarRef: MatSnackBarRef<SnackbarComponent>;
4246
- get variantClass(): string;
4247
- static ɵfac: i0.ɵɵFactoryDeclaration<SnackbarComponent, never>;
4248
- static ɵcmp: i0.ɵɵComponentDeclaration<SnackbarComponent, "lib-snackbar", never, {}, {}, never, never, false, never>;
4249
- }
4250
-
4251
- declare class SnackbarModule {
4252
- static ɵfac: i0.ɵɵFactoryDeclaration<SnackbarModule, never>;
4253
- static ɵmod: i0.ɵɵNgModuleDeclaration<SnackbarModule, [typeof SnackbarComponent], [typeof i2$1.CommonModule, typeof i2.MatSnackBarModule], [typeof SnackbarComponent]>;
4254
- static ɵinj: i0.ɵɵInjectorDeclaration<SnackbarModule>;
4255
- }
4256
-
4257
- export { AlertComponent, AlertModule, ButtonComponent, ButtonDropdownComponent, ButtonDropdownModule, ButtonModule, CheckboxComponent, ConfigurableFormComponent, configurableForm_examples_d as ConfigurableFormExamples, ConfigurableFormModule, ConfirmationModalComponent, ConfirmationModalModule, DEFAULT_ITEMS_PER_PAGE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_SIDE_NAV_TOOLTIP_POSITION, DatepickerComponent, DropdownComponent, ExpressionService, FieldConfiguratorComponent, FieldSelectionComponent, FilterComponent, FilterModule, FilterSidebarComponent, FilterSidebarModule, FilterTableSelectorComponent, FilterTableSelectorModule, FormBuilderModule, FormComponentsModule, InputComponent, MaterialModule, NAV_ORIENTATION_DEFAULT, NAV_VARIANT_DEFAULT, NavComponent, NavModule, PAGINATION_THEME_DARK, PAGINATION_THEME_DEFAULT, PaginationComponent, PaginationModule, RadioComponent, SearchComponent, SharedUiModule, SideNavComponent, SideNavModule, SmartFormComponent, SmartFormController, smartForm_examples_d as SmartFormExamples, SmartFormModule, SmartTableComponent, SmartTableModule, SnackbarComponent, SnackbarModule, SnackbarService, StringUtils, SummaryCardComponent, SummaryCardModule, ToggleComponent, ValidationUtils, appendBaseUrlRecursively, clearLocalStorage, clearSessionStorage, getLocalStorageItem, getSessionStorageItem, removeLocalStorageItem, removeSessionStorageItem, setLocalStorageItem, setSessionStorageItem, translateConfig };
4258
- export type { AlertLabels, AlertVariant, AttachmentConfig, ButtonLabels, ButtonVariant, CheckboxConfig, CheckboxLabels, CheckboxOption, ConfirmationModalConfig, DateConfig, DatePickerConfig, DatepickerLabels, DropdownAction, DropdownConfig, DropdownLabels, DropdownOption, EmailConfig, FieldConfig, FieldType, FilterChangeEvent, FilterConfig, FilterItem, FilterItemType, FilterOutput, FilterPanelConfig, FilterParamMap, FilterSearchConfig, FilterSidebarChangeEvent, FilterSidebarConfig, FilterSidebarOutput, FilterTableConfig, FilterTableSelectorConfig, FormConfig, FormField, FormOption, FormSchema, FormSection, GeneratedConfig, HierarchyCfg, IconInput, InputConfig, InputLabels, InputType, JsonFieldConfig, JsonFormConfig, KeyType, LengthConstraint, LocationConfig, NavItem, NavStyleConfig, NestedStringConfig, NumberConfig, OptionConfig, OptionDTO, OptionItem, PaginationConfig, PaginationLabels, PhoneConfig, QueryParamsConfig, RadioConfig, RadioLabels, RadioOption, RangeConfig, RatingConfig, SearchConfig, SearchLabels, SectionConfig, SelectionConfig, SideNavItem, SideNavSection, SideNavStyleConfig, SnackbarConfig, SnackbarVariant, StepperConfig, SubmitConfig, SuffixActionIcon, SummaryCardConfig, SummaryCardLabels, SummaryCardMeta, TableAction, TableActionItem, TableColumn, TableColumnSubField, TableConfig, TableDataChangeEvent, TableFilter, TableFilterChangeEvent, TableFilterColumn, TableFilterConfig, TableFilterItem, TableFilterLabels, TableFilterOutput, TableLabels, TableOption, TableRowSaveEvent, TableTheme, TextConfig, ToggleConfig, ToggleLabels, UIConfig, UISubType, UIType, UploadedFile, ValidationResult, ValidationRules };