commons-shared-web-ui 0.0.55 → 0.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/fesm2022/commons-shared-web-ui.mjs +15897 -0
  2. package/fesm2022/commons-shared-web-ui.mjs.map +1 -0
  3. package/index.d.ts +4916 -0
  4. package/package.json +34 -53
  5. package/src/lib/modules/button/button.theme.scss +4 -4
  6. package/.claude/settings.local.json +0 -10
  7. package/documentation/alert.md +0 -123
  8. package/documentation/button-dropdown.md +0 -126
  9. package/documentation/button.md +0 -184
  10. package/documentation/cards-usage-guidelines.md +0 -131
  11. package/documentation/configurable-form.md +0 -605
  12. package/documentation/confirmation-modal.md +0 -250
  13. package/documentation/filter-sidebar.md +0 -178
  14. package/documentation/filter-table-selector.md +0 -228
  15. package/documentation/form-builder.md +0 -599
  16. package/documentation/form-components.md +0 -384
  17. package/documentation/form-field-configuration.md +0 -250
  18. package/documentation/nav.md +0 -427
  19. package/documentation/pagination.md +0 -181
  20. package/documentation/side-nav-documentation.md +0 -169
  21. package/documentation/smart-form.md +0 -2765
  22. package/documentation/smart-table.md +0 -1221
  23. package/documentation/snackbar.md +0 -118
  24. package/documentation/style-externalization.md +0 -88
  25. package/documentation/summary-card.md +0 -279
  26. package/documentation/table-column-configuration.md +0 -221
  27. package/documentation/time-picker.md +0 -274
  28. package/ng-package.json +0 -30
  29. package/src/lib/modules/alert/alert.models.ts +0 -6
  30. package/src/lib/modules/alert/alert.module.ts +0 -16
  31. package/src/lib/modules/alert/components/alert/alert.component.html +0 -27
  32. package/src/lib/modules/alert/components/alert/alert.component.scss +0 -92
  33. package/src/lib/modules/alert/components/alert/alert.component.ts +0 -81
  34. package/src/lib/modules/button/button.models.ts +0 -13
  35. package/src/lib/modules/button/button.module.ts +0 -16
  36. package/src/lib/modules/button/components/button/button.component.html +0 -22
  37. package/src/lib/modules/button/components/button/button.component.scss +0 -88
  38. package/src/lib/modules/button/components/button/button.component.ts +0 -67
  39. package/src/lib/modules/button-dropdown/button-dropdown.models.ts +0 -26
  40. package/src/lib/modules/button-dropdown/button-dropdown.module.ts +0 -22
  41. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.html +0 -41
  42. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.scss +0 -135
  43. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.ts +0 -160
  44. package/src/lib/modules/configurable-form/component/configurable-form.component.html +0 -294
  45. package/src/lib/modules/configurable-form/component/configurable-form.component.scss +0 -503
  46. package/src/lib/modules/configurable-form/component/configurable-form.component.ts +0 -628
  47. package/src/lib/modules/configurable-form/configurable-form.examples.ts +0 -154
  48. package/src/lib/modules/configurable-form/configurable-form.model.ts +0 -131
  49. package/src/lib/modules/configurable-form/configurable-form.module.ts +0 -19
  50. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.html +0 -77
  51. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.scss +0 -395
  52. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.ts +0 -266
  53. package/src/lib/modules/confirmation-modal/confirmation-modal.models.ts +0 -71
  54. package/src/lib/modules/confirmation-modal/confirmation-modal.module.ts +0 -20
  55. package/src/lib/modules/filter/components/filter/filter.component.html +0 -131
  56. package/src/lib/modules/filter/components/filter/filter.component.scss +0 -245
  57. package/src/lib/modules/filter/components/filter/filter.component.ts +0 -216
  58. package/src/lib/modules/filter/filter.models.ts +0 -88
  59. package/src/lib/modules/filter/filter.module.ts +0 -24
  60. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.html +0 -112
  61. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.scss +0 -186
  62. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.ts +0 -163
  63. package/src/lib/modules/filter-sidebar/filter-sidebar.models.ts +0 -95
  64. package/src/lib/modules/filter-sidebar/filter-sidebar.module.ts +0 -24
  65. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.html +0 -73
  66. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.scss +0 -321
  67. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.ts +0 -361
  68. package/src/lib/modules/filter-table-selector/filter-table-selector.models.ts +0 -91
  69. package/src/lib/modules/filter-table-selector/filter-table-selector.module.ts +0 -22
  70. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.html +0 -63
  71. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.scss +0 -496
  72. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.ts +0 -445
  73. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.html +0 -75
  74. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.scss +0 -210
  75. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.ts +0 -55
  76. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.html +0 -25
  77. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.scss +0 -82
  78. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.ts +0 -95
  79. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.html +0 -20
  80. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.scss +0 -37
  81. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.ts +0 -94
  82. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.html +0 -46
  83. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.scss +0 -102
  84. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.ts +0 -50
  85. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.html +0 -35
  86. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.scss +0 -67
  87. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.ts +0 -34
  88. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.html +0 -68
  89. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.scss +0 -113
  90. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.ts +0 -74
  91. package/src/lib/modules/form-builder/configs/field-type-schema.map.ts +0 -533
  92. package/src/lib/modules/form-builder/form-builder.module.ts +0 -36
  93. package/src/lib/modules/form-builder/index.ts +0 -9
  94. package/src/lib/modules/form-builder/models/builder.models.ts +0 -7
  95. package/src/lib/modules/form-builder/models/field-configurator.models.ts +0 -38
  96. package/src/lib/modules/form-builder/models/field-selection.models.ts +0 -51
  97. package/src/lib/modules/form-builder/services/field-configurator.service.ts +0 -258
  98. package/src/lib/modules/form-builder/services/field-selection.service.ts +0 -299
  99. package/src/lib/modules/form-builder/services/form-schema-tree.service.ts +0 -670
  100. package/src/lib/modules/form-builder/tokens/builder.tokens.ts +0 -10
  101. package/src/lib/modules/form-builder/utils/constants.ts +0 -43
  102. package/src/lib/modules/form-components/components/checkbox/checkbox.component.html +0 -29
  103. package/src/lib/modules/form-components/components/checkbox/checkbox.component.scss +0 -111
  104. package/src/lib/modules/form-components/components/checkbox/checkbox.component.ts +0 -207
  105. package/src/lib/modules/form-components/components/checkbox/checkbox.models.ts +0 -35
  106. package/src/lib/modules/form-components/components/datepicker/datepicker.component.html +0 -42
  107. package/src/lib/modules/form-components/components/datepicker/datepicker.component.scss +0 -115
  108. package/src/lib/modules/form-components/components/datepicker/datepicker.component.ts +0 -267
  109. package/src/lib/modules/form-components/components/datepicker/datepicker.models.ts +0 -45
  110. package/src/lib/modules/form-components/components/dropdown/dropdown.component.html +0 -74
  111. package/src/lib/modules/form-components/components/dropdown/dropdown.component.scss +0 -252
  112. package/src/lib/modules/form-components/components/dropdown/dropdown.component.ts +0 -377
  113. package/src/lib/modules/form-components/components/dropdown/dropdown.models.ts +0 -53
  114. package/src/lib/modules/form-components/components/input/input.component.html +0 -51
  115. package/src/lib/modules/form-components/components/input/input.component.scss +0 -128
  116. package/src/lib/modules/form-components/components/input/input.component.ts +0 -250
  117. package/src/lib/modules/form-components/components/input/input.models.ts +0 -55
  118. package/src/lib/modules/form-components/components/radio/radio.component.html +0 -22
  119. package/src/lib/modules/form-components/components/radio/radio.component.scss +0 -107
  120. package/src/lib/modules/form-components/components/radio/radio.component.ts +0 -181
  121. package/src/lib/modules/form-components/components/radio/radio.models.ts +0 -39
  122. package/src/lib/modules/form-components/components/search/search.component.html +0 -15
  123. package/src/lib/modules/form-components/components/search/search.component.scss +0 -87
  124. package/src/lib/modules/form-components/components/search/search.component.ts +0 -213
  125. package/src/lib/modules/form-components/components/search/search.models.ts +0 -40
  126. package/src/lib/modules/form-components/components/toggle/toggle.component.html +0 -15
  127. package/src/lib/modules/form-components/components/toggle/toggle.component.scss +0 -81
  128. package/src/lib/modules/form-components/components/toggle/toggle.component.ts +0 -166
  129. package/src/lib/modules/form-components/components/toggle/toggle.models.ts +0 -27
  130. package/src/lib/modules/form-components/directives/click-outside.directive.ts +0 -22
  131. package/src/lib/modules/form-components/form-components.module.ts +0 -42
  132. package/src/lib/modules/form-field-configuration/components/_ffc-controls.scss +0 -89
  133. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.html +0 -68
  134. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.scss +0 -73
  135. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.ts +0 -34
  136. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.html +0 -78
  137. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.scss +0 -83
  138. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.ts +0 -94
  139. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.html +0 -38
  140. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.scss +0 -42
  141. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.ts +0 -92
  142. package/src/lib/modules/form-field-configuration/form-field-configuration.module.ts +0 -23
  143. package/src/lib/modules/form-field-configuration/index.ts +0 -7
  144. package/src/lib/modules/form-field-configuration/models/field-configuration.models.ts +0 -62
  145. package/src/lib/modules/form-field-configuration/services/config-schema-tree.service.ts +0 -159
  146. package/src/lib/modules/form-field-configuration/services/field-configuration.service.ts +0 -228
  147. package/src/lib/modules/material/material.module.ts +0 -94
  148. package/src/lib/modules/nav/components/nav/nav.component.html +0 -34
  149. package/src/lib/modules/nav/components/nav/nav.component.scss +0 -171
  150. package/src/lib/modules/nav/components/nav/nav.component.ts +0 -82
  151. package/src/lib/modules/nav/nav.models.ts +0 -31
  152. package/src/lib/modules/nav/nav.module.ts +0 -17
  153. package/src/lib/modules/pagination/components/pagination/pagination.component.html +0 -52
  154. package/src/lib/modules/pagination/components/pagination/pagination.component.scss +0 -155
  155. package/src/lib/modules/pagination/components/pagination/pagination.component.ts +0 -109
  156. package/src/lib/modules/pagination/pagination.module.ts +0 -17
  157. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.html +0 -56
  158. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.scss +0 -342
  159. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.ts +0 -135
  160. package/src/lib/modules/side-nav/side-nav.models.ts +0 -38
  161. package/src/lib/modules/side-nav/side-nav.module.ts +0 -16
  162. package/src/lib/modules/smart-form/components/form-field/form-field.component.html +0 -1330
  163. package/src/lib/modules/smart-form/components/form-field/form-field.component.scss +0 -2112
  164. package/src/lib/modules/smart-form/components/form-field/form-field.component.ts +0 -3006
  165. package/src/lib/modules/smart-form/components/form-section/form-section.component.html +0 -65
  166. package/src/lib/modules/smart-form/components/form-section/form-section.component.scss +0 -209
  167. package/src/lib/modules/smart-form/components/form-section/form-section.component.ts +0 -131
  168. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.html +0 -253
  169. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.scss +0 -689
  170. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.ts +0 -1131
  171. package/src/lib/modules/smart-form/index.ts +0 -10
  172. package/src/lib/modules/smart-form/models/form-schema.model.ts +0 -793
  173. package/src/lib/modules/smart-form/models/hierarchy-config.model.ts +0 -21
  174. package/src/lib/modules/smart-form/services/expression.service.ts +0 -75
  175. package/src/lib/modules/smart-form/services/smart-form-controller.service.ts +0 -67
  176. package/src/lib/modules/smart-form/smart-form.examples.ts +0 -1324
  177. package/src/lib/modules/smart-form/smart-form.module.ts +0 -38
  178. package/src/lib/modules/smart-form/utils/translation.utils.ts +0 -82
  179. package/src/lib/modules/smart-form/utils/trusted-url.pipe.ts +0 -25
  180. package/src/lib/modules/smart-form/utils/validation.utils.ts +0 -98
  181. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.html +0 -283
  182. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.scss +0 -685
  183. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.ts +0 -1128
  184. package/src/lib/modules/smart-table/models/table-config.model.ts +0 -213
  185. package/src/lib/modules/smart-table/smart-table.module.ts +0 -30
  186. package/src/lib/modules/smart-table/utils/safe-html.pipe.ts +0 -28
  187. package/src/lib/modules/smart-table/utils/smart-table.utils.ts +0 -18
  188. package/src/lib/modules/snackbar/components/snackbar.component.html +0 -41
  189. package/src/lib/modules/snackbar/components/snackbar.component.scss +0 -99
  190. package/src/lib/modules/snackbar/components/snackbar.component.ts +0 -18
  191. package/src/lib/modules/snackbar/models/snackbar.models.ts +0 -10
  192. package/src/lib/modules/snackbar/services/snackbar.service.ts +0 -40
  193. package/src/lib/modules/snackbar/snackbar.module.ts +0 -11
  194. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.html +0 -47
  195. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.scss +0 -199
  196. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.ts +0 -126
  197. package/src/lib/modules/summary-card/summary-card.module.ts +0 -18
  198. package/src/lib/modules/table-column-configuration/components/_tcc-controls.scss +0 -53
  199. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.html +0 -47
  200. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.scss +0 -50
  201. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.ts +0 -33
  202. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.html +0 -30
  203. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.scss +0 -36
  204. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.ts +0 -78
  205. package/src/lib/modules/table-column-configuration/index.ts +0 -5
  206. package/src/lib/modules/table-column-configuration/models/table-column-configuration.models.ts +0 -20
  207. package/src/lib/modules/table-column-configuration/services/table-column-configuration.service.ts +0 -77
  208. package/src/lib/modules/table-column-configuration/table-column-configuration.module.ts +0 -21
  209. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.html +0 -37
  210. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.scss +0 -102
  211. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.ts +0 -178
  212. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.html +0 -78
  213. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.scss +0 -226
  214. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.ts +0 -595
  215. package/src/lib/modules/time-picker/models/time-picker.models.ts +0 -49
  216. package/src/lib/modules/time-picker/time-picker.module.ts +0 -23
  217. package/src/lib/shared-ui.module.ts +0 -55
  218. package/src/lib/utils/constants.ts +0 -11
  219. package/src/lib/utils/storage.utils.ts +0 -37
  220. package/src/lib/utils/string.utils.ts +0 -23
  221. package/src/lib/utils/translation.utils.ts +0 -87
  222. package/src/public-api.ts +0 -127
  223. package/tsconfig.lib.json +0 -15
@@ -1,210 +0,0 @@
1
- :host {
2
- display: flex;
3
- flex-direction: column;
4
- height: 100%;
5
- overflow: hidden; /* Critical: prevent host from growing beyond sidebar bounds */
6
- }
7
-
8
- .fb-cfg-tree {
9
- display: flex;
10
- flex-direction: column;
11
- height: 100%;
12
- overflow: hidden; /* prevent the wrapper from growing */
13
-
14
- &__header {
15
- padding: 16px 20px;
16
- border-bottom: 1px solid var(--fb-fc-border, #e5e7eb);
17
- background: var(--fb-fc-tree-header-bg, #ffffff);
18
- flex-shrink: 0; /* IMPORTANT: header never grows or shrinks */
19
-
20
- @media (max-width: 768px) {
21
- padding: 12px 16px;
22
- }
23
-
24
- @media (max-width: 640px) {
25
- padding: 10px 12px;
26
- }
27
- }
28
-
29
- &__title {
30
- margin: 0;
31
- font-size: 14px;
32
- font-weight: 700;
33
- color: var(--fb-fc-tree-title-color, #111827);
34
-
35
- @media (max-width: 640px) {
36
- font-size: 13px;
37
- }
38
- }
39
-
40
- &__subtitle {
41
- margin: 4px 0 0;
42
- font-size: 11px;
43
- color: var(--fb-fc-tree-subtitle-color, #6b7280);
44
- letter-spacing: 0.02em;
45
-
46
- @media (max-width: 640px) {
47
- font-size: 10px;
48
- }
49
- }
50
-
51
- &__scrollable {
52
- flex: 1; /* takes remaining height after header */
53
- min-height: 0; /* CRITICAL: allows flex child to shrink below content size */
54
- overflow-y: auto; /* enables vertical scrolling */
55
- overflow-x: hidden;
56
- padding: 16px;
57
-
58
- @media (max-width: 768px) {
59
- padding: 12px;
60
- }
61
-
62
- @media (max-width: 640px) {
63
- padding: 8px;
64
- }
65
- }
66
-
67
- &__empty {
68
- padding: 32px 16px;
69
- text-align: center;
70
- color: var(--fb-fc-empty-color, #9ca3af);
71
- font-size: 13px;
72
-
73
- @media (max-width: 640px) {
74
- padding: 24px 12px;
75
- font-size: 12px;
76
- }
77
- }
78
-
79
- /* Remove the old __body and __node selectors — replaced by __scrollable */
80
- }
81
-
82
- .fb-cfg-tree-section {
83
- margin-bottom: 16px;
84
-
85
- @media (max-width: 768px) {
86
- margin-bottom: 12px;
87
- }
88
-
89
- @media (max-width: 640px) {
90
- margin-bottom: 8px;
91
- }
92
-
93
- &__header {
94
- display: flex;
95
- align-items: center;
96
- justify-content: space-between;
97
- padding: 4px 8px 8px;
98
- border-bottom: 1px solid var(--fb-fc-section-divider, #f3f4f6);
99
- margin-bottom: 8px;
100
- cursor: pointer;
101
-
102
- @media (max-width: 640px) {
103
- padding: 3px 6px 6px;
104
- margin-bottom: 6px;
105
- }
106
-
107
- &:hover {
108
- background: var(--fb-fc-section-hover, #f9fafb);
109
- border-radius: 6px;
110
- }
111
- }
112
-
113
- &__title-group {
114
- display: flex;
115
- align-items: center;
116
- gap: 6px;
117
-
118
- @media (max-width: 640px) {
119
- gap: 4px;
120
- }
121
- }
122
-
123
- &__chevron {
124
- display: flex;
125
- color: var(--fb-fc-chevron-color, #9ca3af);
126
- transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
127
-
128
- &--expanded {
129
- transform: rotate(90deg);
130
- }
131
- }
132
-
133
- &__label {
134
- font-size: 13px;
135
- font-weight: 700;
136
- color: var(--fb-fc-section-label-color, #111827);
137
- text-transform: uppercase;
138
- letter-spacing: 0.05em;
139
-
140
- @media (max-width: 640px) {
141
- font-size: 12px;
142
- letter-spacing: 0.02em;
143
- }
144
- }
145
-
146
- &__children {
147
- display: flex;
148
- flex-direction: column;
149
- gap: 8px;
150
-
151
- @media (max-width: 640px) {
152
- gap: 6px;
153
- }
154
- }
155
- }
156
-
157
-
158
- .fb-cfg-tree-item {
159
- display: flex;
160
- align-items: center;
161
- padding: 12px;
162
- background: var(--fb-fc-item-bg, #ffffff);
163
- border: 1px solid var(--fb-fc-item-border, #e5e7eb);
164
- border-radius: 10px;
165
- cursor: pointer;
166
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
167
-
168
- &:hover {
169
- border-color: var(--fb-fc-item-hover-border, #3b82f6);
170
- box-shadow: 0 2px 8px rgba(59, 130, 246, 0.08);
171
- }
172
-
173
- &--active {
174
- border-color: var(--fb-fc-item-active-border, #3b82f6);
175
- background: var(--fb-fc-item-active-bg, #f0f7ff);
176
- box-shadow: 0 0 0 1px var(--fb-fc-item-active-border, #3b82f6);
177
- }
178
-
179
- &__drag {
180
- color: var(--fb-fc-drag-color, #d1d5db);
181
- cursor: grab;
182
- margin-right: 8px;
183
- display: flex;
184
- }
185
-
186
- &__content {
187
- flex: 1;
188
- min-width: 0;
189
- display: flex;
190
- flex-direction: column;
191
- gap: 2px;
192
- }
193
-
194
- &__label {
195
- font-size: 13px;
196
- font-weight: 600;
197
- color: var(--fb-fc-item-label-color, #111827);
198
- white-space: nowrap;
199
- overflow: hidden;
200
- text-overflow: ellipsis;
201
- }
202
-
203
- &__type {
204
- font-size: 10px;
205
- color: var(--fb-fc-item-type-color, #6b7280);
206
- text-transform: uppercase;
207
- letter-spacing: 0.05em;
208
- font-weight: 500;
209
- }
210
- }
@@ -1,55 +0,0 @@
1
- import {
2
- Component,
3
- ChangeDetectionStrategy,
4
- Input,
5
- Output,
6
- EventEmitter,
7
- } from '@angular/core';
8
- import { CommonModule } from '@angular/common';
9
- import { ConfiguratorTreeNode } from '../../../models/field-configurator.models';
10
-
11
- @Component({
12
- selector: 'lib-configurator-tree',
13
- standalone: false,
14
- templateUrl: './configurator-tree.component.html',
15
- styleUrls: ['./configurator-tree.component.scss'],
16
- changeDetection: ChangeDetectionStrategy.OnPush,
17
- })
18
- export class ConfiguratorTreeComponent {
19
- @Input() tree: ConfiguratorTreeNode[] = [];
20
- @Input() selectedFieldPath: number[] | null = null;
21
-
22
- @Output() selectField = new EventEmitter<number[]>();
23
- @Output() toggleExpanded = new EventEmitter<string>();
24
-
25
- onNodeClick(node: ConfiguratorTreeNode): void {
26
- if (node.type === 'field') {
27
- this.selectField.emit(node.path);
28
- } else {
29
- this.toggleExpanded.emit(node.id);
30
- }
31
- }
32
-
33
- onFieldSelect(node: ConfiguratorTreeNode): void {
34
- this.selectField.emit(node.path);
35
- }
36
-
37
- onToggleExpand(node: ConfiguratorTreeNode, event: Event): void {
38
- event.stopPropagation();
39
- this.toggleExpanded.emit(node.id);
40
- }
41
-
42
- isSelected(node: ConfiguratorTreeNode): boolean {
43
- if (!this.selectedFieldPath || !node.path) return false;
44
- return this.pathsEqual(node.path, this.selectedFieldPath);
45
- }
46
-
47
- trackByNodeId(_index: number, node: ConfiguratorTreeNode): string {
48
- return node.id;
49
- }
50
-
51
- private pathsEqual(a: number[], b: number[]): boolean {
52
- if (a.length !== b.length) return false;
53
- return a.every((v, i) => v === b[i]);
54
- }
55
- }
@@ -1,25 +0,0 @@
1
- <div class="fb-configurator">
2
- <div class="fb-configurator__layout">
3
- <div class="fb-configurator__sidebar">
4
- <lib-configurator-tree
5
- [tree]="store.tree()"
6
- [selectedFieldPath]="store.selectedFieldPath()"
7
- (selectField)="onFieldSelected($event)"
8
- (toggleExpanded)="onNodeToggleExpanded($event)"
9
- />
10
- </div>
11
-
12
- <div class="fb-configurator__main">
13
- <lib-configurator-config-panel
14
- [selectedField]="store.selectedField()"
15
- [selectedFieldInfo]="store.selectedFieldInfo()"
16
- [builderFieldType]="store.selectedFieldBuilderType()"
17
- [fieldTypeSchemaMap]="finalFieldTypeSchemaMap"
18
- [showOptionConfig]="showOptionConfig"
19
- [lockedFieldNames]="lockedFieldNames"
20
- (configChange)="onConfigChange($event)"
21
- (typeChange)="onTypeChange($event)"
22
- />
23
- </div>
24
- </div>
25
- </div>
@@ -1,82 +0,0 @@
1
- .fb-configurator {
2
- display: flex;
3
- flex-direction: column;
4
- height: 100%;
5
- width: 100%;
6
- background: var(--fb-fc-bg, #ffffff);
7
- font-family: var(--fb-font-family, 'Inter', sans-serif);
8
-
9
- &__layout {
10
- flex: 1;
11
- display: flex;
12
- overflow: hidden;
13
- width: 100%;
14
-
15
- // Stack layout vertically when space is tight
16
- @media (max-width: 768px) {
17
- flex-direction: column;
18
- }
19
- }
20
-
21
- &__sidebar {
22
- /**
23
- * Desktop: Fixed minimum width (280px) to ensure tree readability
24
- * Grows/shrinks based on available space, but never below 280px
25
- * When combined with side nav collapse, this adapts naturally
26
- */
27
- flex: 0 0 280px;
28
- border-right: 1px solid var(--fb-fc-border, #e5e7eb);
29
- background: var(--fb-fc-sidebar-bg, #f9fafb);
30
- display: flex;
31
- flex-direction: column;
32
- overflow: hidden;
33
- min-width: 0;
34
-
35
- // Medium screens: Slightly narrower
36
- @media (max-width: 1024px) {
37
- flex: 0 0 250px;
38
- }
39
-
40
- // Larger monitors: More space for tree
41
- @media (min-width: 1440px) {
42
- flex: 0 0 300px;
43
- }
44
-
45
- // Small screens: Stack vertically
46
- @media (max-width: 768px) {
47
- flex: 0 0 auto;
48
- width: 100%;
49
- border-right: none;
50
- border-bottom: 1px solid var(--fb-fc-border, #e5e7eb);
51
- max-height: 40vh; /* Use viewport-relative sizing */
52
- }
53
-
54
- // Mobile: Further optimize
55
- @media (max-width: 640px) {
56
- max-height: 35vh;
57
- }
58
- }
59
-
60
- &__main {
61
- /**
62
- * Takes all remaining horizontal space after sidebar
63
- * min-width: 0 is CRITICAL - allows flex container to shrink below content size
64
- * This prevents overflow and enables proper scrolling
65
- */
66
- flex: 1;
67
- min-width: 0;
68
- overflow-y: auto;
69
- overflow-x: hidden;
70
- background: var(--fb-fc-main-bg, #ffffff);
71
- display: flex;
72
- flex-direction: column;
73
-
74
- // Mobile: Stack and take full width
75
- @media (max-width: 768px) {
76
- width: 100%;
77
- flex: 1;
78
- min-height: 0;
79
- }
80
- }
81
- }
82
-
@@ -1,95 +0,0 @@
1
- import {
2
- Component,
3
- ChangeDetectionStrategy,
4
- ChangeDetectorRef,
5
- Input,
6
- Output,
7
- EventEmitter,
8
- OnChanges,
9
- SimpleChanges,
10
- inject,
11
- } from '@angular/core';
12
- import { CommonModule } from '@angular/common';
13
- import { FormSchema } from '../../../smart-form/models/form-schema.model';
14
- import { SmartFormModule } from '../../../smart-form/smart-form.module';
15
- import { FieldConfiguratorService } from '../../services/field-configurator.service';
16
- import { ConfiguratorTreeComponent } from './configurator-tree/configurator-tree.component';
17
- import { ConfiguratorConfigPanelComponent } from './configurator-config-panel/configurator-config-panel.component';
18
- import { BUILDER_FIELD_TYPE_SCHEMA_MAP } from '../../tokens/builder.tokens';
19
- import { DEFAULT_FIELD_TYPE_SCHEMA_MAP } from '../../configs/field-type-schema.map';
20
-
21
- @Component({
22
- selector: 'lib-field-configurator',
23
- standalone: false,
24
- providers: [FieldConfiguratorService],
25
- templateUrl: './field-configurator.component.html',
26
- styleUrls: ['./field-configurator.component.scss'],
27
- changeDetection: ChangeDetectionStrategy.OnPush,
28
- })
29
- export class FieldConfiguratorComponent implements OnChanges {
30
- @Input({ required: true }) schema!: FormSchema;
31
- @Output() schemaChange = new EventEmitter<FormSchema>();
32
-
33
- /**
34
- * When false, the optionConfig section (apiUrl, dataPath, etc.) is hidden
35
- * from the configurator panel. Useful for business-user-facing configurators
36
- * where option URLs are pre-filled by the developer.
37
- * Defaults to true (show everything).
38
- */
39
- @Input() showOptionConfig: boolean = true;
40
-
41
- /**
42
- * Field names that must always remain enabled and cannot be toggled off.
43
- * When a locked field is selected, the IS ENABLED / READ ONLY / DISABLED
44
- * controls are hidden so the user cannot accidentally disable the field.
45
- */
46
- @Input() lockedFieldNames: string[] = [];
47
-
48
- readonly store = inject(FieldConfiguratorService);
49
- private readonly cdr = inject(ChangeDetectorRef);
50
- private readonly schemaMapOverride = inject(BUILDER_FIELD_TYPE_SCHEMA_MAP, { optional: true });
51
-
52
- /**
53
- * Merged field-type → config-schema map (defaults + optional overrides).
54
- * Memoized to avoid triggering ngOnChanges in children due to new object references.
55
- */
56
- finalFieldTypeSchemaMap: Record<string, FormSchema> = { ...DEFAULT_FIELD_TYPE_SCHEMA_MAP, ...(this.schemaMapOverride ?? {}) } as any;
57
-
58
- private _isInternalChange = false;
59
-
60
- ngOnChanges(changes: SimpleChanges): void {
61
- if (changes['schema'] && this.schema) {
62
- this.store.loadSchema(this.schema, this._isInternalChange);
63
- this._isInternalChange = false;
64
- }
65
- }
66
-
67
- onFieldSelected(path: number[]): void {
68
- this.store.selectField(path);
69
- this.cdr.markForCheck();
70
- }
71
-
72
- onNodeToggleExpanded(nodeId: string): void {
73
- this.store.toggleNodeExpanded(nodeId);
74
- this.cdr.markForCheck();
75
- }
76
-
77
- onConfigChange(patch: Record<string, unknown>): void {
78
- this._isInternalChange = true;
79
- this.store.patchSelectedField(patch as any);
80
- this._emitChange();
81
- }
82
-
83
- onTypeChange(builderType: string): void {
84
- this._isInternalChange = true;
85
- this.store.changeFieldType(builderType);
86
- this._emitChange();
87
- }
88
-
89
- private _emitChange(): void {
90
- const updated = this.store.getCurrentSchema();
91
- if (updated) {
92
- this.schemaChange.emit(updated);
93
- }
94
- }
95
- }
@@ -1,20 +0,0 @@
1
- <div class="fb-field-selection">
2
- @for (group of store.groups(); track trackByGroupIndex($index); let gi = $index) {
3
- <lib-group-node
4
- [group]="group"
5
- [groupIndex]="gi"
6
- [hideToggleForOptionTypes]="hideToggleForOptionTypes"
7
- (toggleEnabled)="onToggleGroup(gi)"
8
- (toggleExpanded)="onToggleGroupExpanded(gi)"
9
- (sectionToggleEnabled)="onToggleSection(gi, $event)"
10
- (sectionToggleExpanded)="onToggleSectionExpanded(gi, $event)"
11
- (fieldToggle)="onToggleField(gi, $event.sectionPath, $event.fieldIndex)"
12
- />
13
- }
14
-
15
- @if (store.groups().length === 0) {
16
- <div class="fb-field-selection__empty">
17
- <p>No groups or fields found in the schema.</p>
18
- </div>
19
- }
20
- </div>
@@ -1,37 +0,0 @@
1
- .fb-field-selection {
2
- display: flex;
3
- flex-direction: column;
4
- gap: var(--fb-fs-group-gap, 16px);
5
- padding: var(--fb-fs-padding, 16px);
6
- font-family: var(--fb-font-family, 'Inter', sans-serif);
7
-
8
- @media (max-width: 768px) {
9
- gap: 12px;
10
- padding: 12px;
11
- }
12
-
13
- @media (max-width: 640px) {
14
- gap: 8px;
15
- padding: 8px;
16
- }
17
-
18
- &__empty {
19
- display: flex;
20
- align-items: center;
21
- justify-content: center;
22
- padding: 48px 24px;
23
- color: var(--fb-fs-empty-color, #9ca3af);
24
- font-size: 14px;
25
- text-align: center;
26
-
27
- @media (max-width: 1024px) {
28
- padding: 32px 16px;
29
- font-size: 13px;
30
- }
31
-
32
- @media (max-width: 640px) {
33
- padding: 24px 12px;
34
- font-size: 12px;
35
- }
36
- }
37
- }
@@ -1,94 +0,0 @@
1
- import {
2
- Component,
3
- ChangeDetectionStrategy,
4
- Input,
5
- Output,
6
- EventEmitter,
7
- OnChanges,
8
- SimpleChanges,
9
- inject,
10
- } from '@angular/core';
11
- import { CommonModule } from '@angular/common';
12
- import { FormSchema } from '../../../smart-form/models/form-schema.model';
13
- import { FieldSelectionService } from '../../services/field-selection.service';
14
- import { GroupNodeComponent } from './group-node/group-node.component';
15
-
16
- @Component({
17
- selector: 'lib-field-selection',
18
- standalone: false,
19
- providers: [FieldSelectionService],
20
- templateUrl: './field-selection.component.html',
21
- styleUrls: ['./field-selection.component.scss'],
22
- changeDetection: ChangeDetectionStrategy.OnPush,
23
- })
24
- export class FieldSelectionComponent implements OnChanges {
25
- @Input({ required: true }) schema!: FormSchema;
26
- @Output() schemaChange = new EventEmitter<FormSchema>();
27
-
28
- /**
29
- * When true, the enable/disable toggle is hidden for option-driven field types
30
- * (DROPDOWN, RADIO, MULTI_SELECT, etc.).
31
- * Useful for business-user-facing form configurators where developers
32
- * pre-fill the option data and these fields should always be included.
33
- * Defaults to false (show toggle for all fields).
34
- */
35
- @Input() hideToggleForOptionTypes: boolean = false;
36
-
37
- protected readonly store = inject(FieldSelectionService);
38
-
39
- /**
40
- * Flag to track if the next schema change is from internal toggles.
41
- * When true, we'll use loadSchemaPreservingExpanded() to keep user's expansion state.
42
- */
43
- private _isInternalChange = false;
44
-
45
- ngOnChanges(changes: SimpleChanges): void {
46
- if (changes['schema'] && this.schema) {
47
- // If schema changed from our internal toggles, preserve expansion state
48
- // Otherwise, treat it as external schema change and reload fully
49
- if (this._isInternalChange) {
50
- this.store.loadSchemaPreservingExpanded(this.schema);
51
- this._isInternalChange = false;
52
- } else {
53
- this.store.loadSchema(this.schema);
54
- }
55
- }
56
- }
57
-
58
- onToggleGroup(groupIndex: number): void {
59
- this.store.toggleGroup(groupIndex);
60
- this._emitChange();
61
- }
62
-
63
- onToggleGroupExpanded(groupIndex: number): void {
64
- this.store.toggleGroupExpanded(groupIndex);
65
- }
66
-
67
- onToggleSection(groupIndex: number, sectionPath: number[]): void {
68
- this.store.toggleSection(groupIndex, sectionPath);
69
- this._emitChange();
70
- }
71
-
72
- onToggleSectionExpanded(groupIndex: number, sectionPath: number[]): void {
73
- this.store.toggleSectionExpanded(groupIndex, sectionPath);
74
- }
75
-
76
- onToggleField(groupIndex: number, sectionPath: number[], fieldIndex: number): void {
77
- this.store.toggleField(groupIndex, sectionPath, fieldIndex);
78
- this._emitChange();
79
- }
80
-
81
- trackByGroupIndex(index: number): number {
82
- return index;
83
- }
84
-
85
- private _emitChange(): void {
86
- const updated = this.store.buildUpdatedSchema();
87
- if (updated) {
88
- // Mark that the next schema change is from internal toggles
89
- // This prevents expansion state from being reset
90
- this._isInternalChange = true;
91
- this.schemaChange.emit(updated);
92
- }
93
- }
94
- }
@@ -1,46 +0,0 @@
1
- <div class="fb-group-node" [class.fb-group-node--disabled]="!group.enabled">
2
- <div class="fb-group-node__header">
3
- <button
4
- class="fb-group-node__expand-btn"
5
- (click)="toggleExpanded.emit()"
6
- [attr.aria-expanded]="group.expanded"
7
- type="button"
8
- >
9
- <svg
10
- class="fb-group-node__chevron"
11
- [class.fb-group-node__chevron--open]="group.expanded"
12
- width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"
13
- >
14
- <polyline points="6 9 12 15 18 9" stroke="currentColor" stroke-width="2"
15
- stroke-linecap="round" stroke-linejoin="round"/>
16
- </svg>
17
- </button>
18
-
19
- <div class="fb-group-node__meta">
20
- <span class="fb-group-node__label">{{ group.label }}</span>
21
- </div>
22
-
23
- <lib-toggle
24
- [checked]="group.enabled"
25
- [disabled]="false"
26
- [attr.aria-label]="'Enable ' + group.label"
27
- (toggleChange)="toggleEnabled.emit()"
28
- />
29
- </div>
30
-
31
- @if (group.expanded) {
32
- <div class="fb-group-node__body">
33
- @for (section of group.sections; track trackBySectionIndex($index); let si = $index) {
34
- <lib-selection-section-node
35
- [section]="section"
36
- [sectionIndex]="si"
37
- [depth]="0"
38
- [hideToggleForOptionTypes]="hideToggleForOptionTypes"
39
- (toggleEnabled)="onSectionToggleEnabled(si, $event)"
40
- (toggleExpanded)="onSectionToggleExpanded(si, $event)"
41
- (fieldToggle)="onFieldToggle(si, $event)"
42
- />
43
- }
44
- </div>
45
- }
46
- </div>