commons-shared-web-ui 0.0.62 → 0.0.64

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 (222) hide show
  1. package/fesm2022/commons-shared-web-ui.mjs +16368 -0
  2. package/fesm2022/commons-shared-web-ui.mjs.map +1 -0
  3. package/index.d.ts +5077 -0
  4. package/package.json +34 -53
  5. package/.claude/settings.local.json +0 -10
  6. package/documentation/alert.md +0 -123
  7. package/documentation/button-dropdown.md +0 -126
  8. package/documentation/button.md +0 -184
  9. package/documentation/cards-usage-guidelines.md +0 -131
  10. package/documentation/configurable-form.md +0 -605
  11. package/documentation/confirmation-modal.md +0 -250
  12. package/documentation/filter-sidebar.md +0 -178
  13. package/documentation/filter-table-selector.md +0 -228
  14. package/documentation/form-builder.md +0 -599
  15. package/documentation/form-components.md +0 -384
  16. package/documentation/form-field-configuration.md +0 -250
  17. package/documentation/nav.md +0 -427
  18. package/documentation/pagination.md +0 -181
  19. package/documentation/side-nav-documentation.md +0 -169
  20. package/documentation/smart-form.md +0 -2819
  21. package/documentation/smart-table.md +0 -1297
  22. package/documentation/snackbar.md +0 -118
  23. package/documentation/style-externalization.md +0 -88
  24. package/documentation/summary-card.md +0 -279
  25. package/documentation/table-column-configuration.md +0 -221
  26. package/documentation/time-picker.md +0 -274
  27. package/ng-package.json +0 -30
  28. package/src/lib/modules/alert/alert.models.ts +0 -6
  29. package/src/lib/modules/alert/alert.module.ts +0 -16
  30. package/src/lib/modules/alert/components/alert/alert.component.html +0 -27
  31. package/src/lib/modules/alert/components/alert/alert.component.scss +0 -92
  32. package/src/lib/modules/alert/components/alert/alert.component.ts +0 -81
  33. package/src/lib/modules/button/button.models.ts +0 -13
  34. package/src/lib/modules/button/button.module.ts +0 -16
  35. package/src/lib/modules/button/components/button/button.component.html +0 -22
  36. package/src/lib/modules/button/components/button/button.component.scss +0 -92
  37. package/src/lib/modules/button/components/button/button.component.ts +0 -67
  38. package/src/lib/modules/button-dropdown/button-dropdown.models.ts +0 -26
  39. package/src/lib/modules/button-dropdown/button-dropdown.module.ts +0 -22
  40. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.html +0 -41
  41. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.scss +0 -135
  42. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.ts +0 -160
  43. package/src/lib/modules/configurable-form/component/configurable-form.component.html +0 -294
  44. package/src/lib/modules/configurable-form/component/configurable-form.component.scss +0 -503
  45. package/src/lib/modules/configurable-form/component/configurable-form.component.ts +0 -628
  46. package/src/lib/modules/configurable-form/configurable-form.examples.ts +0 -154
  47. package/src/lib/modules/configurable-form/configurable-form.model.ts +0 -131
  48. package/src/lib/modules/configurable-form/configurable-form.module.ts +0 -19
  49. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.html +0 -77
  50. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.scss +0 -395
  51. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.ts +0 -266
  52. package/src/lib/modules/confirmation-modal/confirmation-modal.models.ts +0 -71
  53. package/src/lib/modules/confirmation-modal/confirmation-modal.module.ts +0 -20
  54. package/src/lib/modules/filter/components/filter/filter.component.html +0 -131
  55. package/src/lib/modules/filter/components/filter/filter.component.scss +0 -245
  56. package/src/lib/modules/filter/components/filter/filter.component.ts +0 -216
  57. package/src/lib/modules/filter/filter.models.ts +0 -88
  58. package/src/lib/modules/filter/filter.module.ts +0 -24
  59. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.html +0 -112
  60. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.scss +0 -186
  61. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.ts +0 -163
  62. package/src/lib/modules/filter-sidebar/filter-sidebar.models.ts +0 -95
  63. package/src/lib/modules/filter-sidebar/filter-sidebar.module.ts +0 -24
  64. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.html +0 -73
  65. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.scss +0 -321
  66. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.ts +0 -361
  67. package/src/lib/modules/filter-table-selector/filter-table-selector.models.ts +0 -91
  68. package/src/lib/modules/filter-table-selector/filter-table-selector.module.ts +0 -22
  69. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.html +0 -63
  70. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.scss +0 -496
  71. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.ts +0 -445
  72. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.html +0 -75
  73. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.scss +0 -210
  74. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.ts +0 -55
  75. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.html +0 -25
  76. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.scss +0 -82
  77. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.ts +0 -95
  78. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.html +0 -20
  79. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.scss +0 -37
  80. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.ts +0 -94
  81. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.html +0 -46
  82. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.scss +0 -102
  83. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.ts +0 -50
  84. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.html +0 -35
  85. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.scss +0 -67
  86. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.ts +0 -34
  87. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.html +0 -68
  88. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.scss +0 -113
  89. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.ts +0 -74
  90. package/src/lib/modules/form-builder/configs/field-type-schema.map.ts +0 -533
  91. package/src/lib/modules/form-builder/form-builder.module.ts +0 -36
  92. package/src/lib/modules/form-builder/index.ts +0 -9
  93. package/src/lib/modules/form-builder/models/builder.models.ts +0 -7
  94. package/src/lib/modules/form-builder/models/field-configurator.models.ts +0 -38
  95. package/src/lib/modules/form-builder/models/field-selection.models.ts +0 -51
  96. package/src/lib/modules/form-builder/services/field-configurator.service.ts +0 -258
  97. package/src/lib/modules/form-builder/services/field-selection.service.ts +0 -299
  98. package/src/lib/modules/form-builder/services/form-schema-tree.service.ts +0 -670
  99. package/src/lib/modules/form-builder/tokens/builder.tokens.ts +0 -10
  100. package/src/lib/modules/form-builder/utils/constants.ts +0 -43
  101. package/src/lib/modules/form-components/components/checkbox/checkbox.component.html +0 -29
  102. package/src/lib/modules/form-components/components/checkbox/checkbox.component.scss +0 -111
  103. package/src/lib/modules/form-components/components/checkbox/checkbox.component.ts +0 -207
  104. package/src/lib/modules/form-components/components/checkbox/checkbox.models.ts +0 -35
  105. package/src/lib/modules/form-components/components/datepicker/datepicker.component.html +0 -42
  106. package/src/lib/modules/form-components/components/datepicker/datepicker.component.scss +0 -115
  107. package/src/lib/modules/form-components/components/datepicker/datepicker.component.ts +0 -267
  108. package/src/lib/modules/form-components/components/datepicker/datepicker.models.ts +0 -45
  109. package/src/lib/modules/form-components/components/dropdown/dropdown.component.html +0 -74
  110. package/src/lib/modules/form-components/components/dropdown/dropdown.component.scss +0 -252
  111. package/src/lib/modules/form-components/components/dropdown/dropdown.component.ts +0 -377
  112. package/src/lib/modules/form-components/components/dropdown/dropdown.models.ts +0 -53
  113. package/src/lib/modules/form-components/components/input/input.component.html +0 -51
  114. package/src/lib/modules/form-components/components/input/input.component.scss +0 -128
  115. package/src/lib/modules/form-components/components/input/input.component.ts +0 -250
  116. package/src/lib/modules/form-components/components/input/input.models.ts +0 -55
  117. package/src/lib/modules/form-components/components/radio/radio.component.html +0 -22
  118. package/src/lib/modules/form-components/components/radio/radio.component.scss +0 -107
  119. package/src/lib/modules/form-components/components/radio/radio.component.ts +0 -181
  120. package/src/lib/modules/form-components/components/radio/radio.models.ts +0 -39
  121. package/src/lib/modules/form-components/components/search/search.component.html +0 -15
  122. package/src/lib/modules/form-components/components/search/search.component.scss +0 -87
  123. package/src/lib/modules/form-components/components/search/search.component.ts +0 -213
  124. package/src/lib/modules/form-components/components/search/search.models.ts +0 -40
  125. package/src/lib/modules/form-components/components/toggle/toggle.component.html +0 -15
  126. package/src/lib/modules/form-components/components/toggle/toggle.component.scss +0 -81
  127. package/src/lib/modules/form-components/components/toggle/toggle.component.ts +0 -166
  128. package/src/lib/modules/form-components/components/toggle/toggle.models.ts +0 -27
  129. package/src/lib/modules/form-components/directives/click-outside.directive.ts +0 -22
  130. package/src/lib/modules/form-components/form-components.module.ts +0 -42
  131. package/src/lib/modules/form-field-configuration/components/_ffc-controls.scss +0 -89
  132. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.html +0 -68
  133. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.scss +0 -73
  134. package/src/lib/modules/form-field-configuration/components/config-field-node/config-field-node.component.ts +0 -34
  135. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.html +0 -78
  136. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.scss +0 -83
  137. package/src/lib/modules/form-field-configuration/components/config-section-node/config-section-node.component.ts +0 -94
  138. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.html +0 -38
  139. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.scss +0 -42
  140. package/src/lib/modules/form-field-configuration/components/form-field-configuration/form-field-configuration.component.ts +0 -92
  141. package/src/lib/modules/form-field-configuration/form-field-configuration.module.ts +0 -23
  142. package/src/lib/modules/form-field-configuration/index.ts +0 -7
  143. package/src/lib/modules/form-field-configuration/models/field-configuration.models.ts +0 -62
  144. package/src/lib/modules/form-field-configuration/services/config-schema-tree.service.ts +0 -159
  145. package/src/lib/modules/form-field-configuration/services/field-configuration.service.ts +0 -228
  146. package/src/lib/modules/material/material.module.ts +0 -94
  147. package/src/lib/modules/nav/components/nav/nav.component.html +0 -34
  148. package/src/lib/modules/nav/components/nav/nav.component.scss +0 -171
  149. package/src/lib/modules/nav/components/nav/nav.component.ts +0 -82
  150. package/src/lib/modules/nav/nav.models.ts +0 -31
  151. package/src/lib/modules/nav/nav.module.ts +0 -17
  152. package/src/lib/modules/pagination/components/pagination/pagination.component.html +0 -52
  153. package/src/lib/modules/pagination/components/pagination/pagination.component.scss +0 -155
  154. package/src/lib/modules/pagination/components/pagination/pagination.component.ts +0 -109
  155. package/src/lib/modules/pagination/pagination.module.ts +0 -17
  156. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.html +0 -56
  157. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.scss +0 -342
  158. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.ts +0 -135
  159. package/src/lib/modules/side-nav/side-nav.models.ts +0 -38
  160. package/src/lib/modules/side-nav/side-nav.module.ts +0 -16
  161. package/src/lib/modules/smart-form/components/form-field/form-field.component.html +0 -1379
  162. package/src/lib/modules/smart-form/components/form-field/form-field.component.scss +0 -2255
  163. package/src/lib/modules/smart-form/components/form-field/form-field.component.ts +0 -3174
  164. package/src/lib/modules/smart-form/components/form-section/form-section.component.html +0 -67
  165. package/src/lib/modules/smart-form/components/form-section/form-section.component.scss +0 -209
  166. package/src/lib/modules/smart-form/components/form-section/form-section.component.ts +0 -142
  167. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.html +0 -253
  168. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.scss +0 -689
  169. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.ts +0 -1134
  170. package/src/lib/modules/smart-form/index.ts +0 -10
  171. package/src/lib/modules/smart-form/models/form-schema.model.ts +0 -803
  172. package/src/lib/modules/smart-form/models/hierarchy-config.model.ts +0 -22
  173. package/src/lib/modules/smart-form/services/expression.service.ts +0 -75
  174. package/src/lib/modules/smart-form/services/smart-form-controller.service.ts +0 -67
  175. package/src/lib/modules/smart-form/smart-form.examples.ts +0 -1324
  176. package/src/lib/modules/smart-form/smart-form.module.ts +0 -40
  177. package/src/lib/modules/smart-form/utils/translation.utils.ts +0 -82
  178. package/src/lib/modules/smart-form/utils/trusted-url.pipe.ts +0 -25
  179. package/src/lib/modules/smart-form/utils/validation.utils.ts +0 -98
  180. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.html +0 -283
  181. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.scss +0 -685
  182. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.ts +0 -1219
  183. package/src/lib/modules/smart-table/models/table-config.model.ts +0 -247
  184. package/src/lib/modules/smart-table/smart-table.module.ts +0 -30
  185. package/src/lib/modules/smart-table/utils/safe-html.pipe.ts +0 -28
  186. package/src/lib/modules/smart-table/utils/smart-table.utils.ts +0 -18
  187. package/src/lib/modules/snackbar/components/snackbar.component.html +0 -41
  188. package/src/lib/modules/snackbar/components/snackbar.component.scss +0 -99
  189. package/src/lib/modules/snackbar/components/snackbar.component.ts +0 -18
  190. package/src/lib/modules/snackbar/models/snackbar.models.ts +0 -10
  191. package/src/lib/modules/snackbar/services/snackbar.service.ts +0 -40
  192. package/src/lib/modules/snackbar/snackbar.module.ts +0 -11
  193. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.html +0 -47
  194. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.scss +0 -199
  195. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.ts +0 -126
  196. package/src/lib/modules/summary-card/summary-card.module.ts +0 -18
  197. package/src/lib/modules/table-column-configuration/components/_tcc-controls.scss +0 -53
  198. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.html +0 -47
  199. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.scss +0 -50
  200. package/src/lib/modules/table-column-configuration/components/config-column-node/config-column-node.component.ts +0 -33
  201. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.html +0 -30
  202. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.scss +0 -36
  203. package/src/lib/modules/table-column-configuration/components/table-column-configuration/table-column-configuration.component.ts +0 -78
  204. package/src/lib/modules/table-column-configuration/index.ts +0 -5
  205. package/src/lib/modules/table-column-configuration/models/table-column-configuration.models.ts +0 -20
  206. package/src/lib/modules/table-column-configuration/services/table-column-configuration.service.ts +0 -77
  207. package/src/lib/modules/table-column-configuration/table-column-configuration.module.ts +0 -21
  208. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.html +0 -37
  209. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.scss +0 -102
  210. package/src/lib/modules/time-picker/components/time-picker/time-picker.component.ts +0 -178
  211. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.html +0 -78
  212. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.scss +0 -226
  213. package/src/lib/modules/time-picker/components/time-wheel-panel/time-wheel-panel.component.ts +0 -595
  214. package/src/lib/modules/time-picker/models/time-picker.models.ts +0 -49
  215. package/src/lib/modules/time-picker/time-picker.module.ts +0 -23
  216. package/src/lib/shared-ui.module.ts +0 -55
  217. package/src/lib/utils/constants.ts +0 -11
  218. package/src/lib/utils/storage.utils.ts +0 -37
  219. package/src/lib/utils/string.utils.ts +0 -23
  220. package/src/lib/utils/translation.utils.ts +0 -87
  221. package/src/public-api.ts +0 -127
  222. package/tsconfig.lib.json +0 -15
@@ -1,2255 +0,0 @@
1
- @import '../../../../styles/utilities.scss';
2
-
3
- .form-field {
4
- font-family: var(--cc-sf-font-family, 'Poppins', sans-serif) !important;
5
- }
6
-
7
- // Generated (formula) values such as the donor short code can be a single long
8
- // token with no spaces (e.g. SAI_VENKATESH_...), which overflows the box. Force
9
- // it to wrap within the container.
10
- .generated-value {
11
- word-break: break-all;
12
- }
13
-
14
- /* Base Variable Fallbacks (mapping to global.scss tokens) */
15
- :host {
16
- --cc-sf-input-border: #D1D5DB;
17
- --cc-sf-input-bg: #ffffff;
18
- --cc-sf-input-radius: 9px;
19
- --cc-sf-input-height: 44px;
20
- --cc-sf-label-color: #111827;
21
- --cc-sf-hint-color: #9CA3AF;
22
- --cc-sf-error-border: #EF4444;
23
- --cc-sf-error-bg: #FFF5F5;
24
- /* Indigo accent for focus rings */
25
- --cc-sf-accent-color: #6366F1;
26
- --cc-sf-input-focus-border: #6366F1;
27
- --cc-sf-input-hover-border: #A5B4FC;
28
- --cc-sf-input-placeholder: #C4C9D4;
29
- --cc-sf-input-disabled-bg: #F8F9FB;
30
- --cc-sf-input-disabled-border: #E5E7EB;
31
- --cc-sf-switch-track-on: #6366F1;
32
- --cc-sf-switch-track-off: #D1D5DB;
33
- --cc-sf-switch-thumb: #ffffff;
34
- --cc-sf-selected-color: #6366F1;
35
- }
36
-
37
- .form-row {
38
- gap: var(--cc-sf-grid-gap, 16px);
39
-
40
- &.horizontal {
41
- display: flex;
42
- flex-direction: row;
43
-
44
- >* {
45
- flex: 1;
46
- }
47
- }
48
-
49
- &:not(.horizontal) {
50
- flex-direction: column;
51
- }
52
-
53
- &.grid-row {
54
- display: grid;
55
- grid-template-columns: repeat(12, 1fr);
56
- gap: var(--cc-sf-grid-gap, 16px);
57
- align-items: start;
58
-
59
- @media (max-width: 640px) {
60
- grid-template-columns: 1fr;
61
-
62
- .row-field {
63
- grid-column: span 12 !important;
64
- }
65
- }
66
- }
67
- }
68
-
69
- .field-label {
70
- font-size: 0.8rem !important;
71
- font-weight: 600 !important;
72
- line-height: 1.2;
73
- letter-spacing: .04em;
74
- text-transform: uppercase !important;
75
- color: #202124 !important;
76
- margin-bottom: var(--cc-sf-label-mb, 0px) !important;
77
- }
78
-
79
- .field-input,
80
- input.matInput,
81
- .mat-mdc-input-element {
82
- display: block;
83
- width: 100%;
84
- height: var(--cc-sf-input-height) !important;
85
- padding: 0 14px !important;
86
- font-family: inherit;
87
- font-size: 0.9rem;
88
- color: var(--cc-sf-label-color);
89
- background-color: var(--cc-sf-input-bg) !important;
90
- border: 1.5px solid var(--cc-sf-input-border) !important;
91
- border-radius: var(--cc-sf-input-radius) !important;
92
- box-sizing: border-box;
93
- box-shadow: 0 1px 2px rgba(0, 0, 0, .04) !important;
94
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
95
-
96
- &::placeholder {
97
- font-weight: 400;
98
- font-size: 14px;
99
- color: var(--cc-sf-input-placeholder);
100
- }
101
- }
102
-
103
- .field-input {
104
- opacity: var(--cc-sf-input-opacity, 1);
105
- line-height: var(--cc-sf-input-line-height, 1.5);
106
- transition: var(--cc-sf-input-transition, all 0.2s ease);
107
-
108
- &::placeholder {
109
- font-weight: var(--cc-sf-placeholder-weight, 400);
110
- font-size: var(--cc-sf-placeholder-size, 14px);
111
- line-height: var(--cc-sf-placeholder-line-height, 100%);
112
- color: var(--cc-sf-input-placeholder);
113
- }
114
-
115
- &:hover:not(:disabled):not([readonly]) {
116
- border-color: var(--cc-sf-input-hover-border) !important;
117
- box-shadow: 0 1px 4px rgba(99, 102, 241, .08) !important;
118
- }
119
-
120
- &:focus {
121
- outline: none;
122
- border-color: var(--cc-sf-input-focus-border) !important;
123
- box-shadow:
124
- 0 0 0 3px rgba(99, 102, 241, .14),
125
- 0 1px 4px rgba(99, 102, 241, .1) !important;
126
- background-color: #FEFEFF !important;
127
- }
128
-
129
- &:disabled,
130
- &[readonly] {
131
- background-color: var(--cc-sf-input-disabled-bg) !important;
132
- color: #9CA3AF !important;
133
- cursor: not-allowed;
134
- border-color: var(--cc-sf-input-disabled-border) !important;
135
- box-shadow: none !important;
136
- }
137
-
138
- &.is-invalid {
139
- border-color: var(--cc-sf-error-border) !important;
140
- background-color: var(--cc-sf-error-bg) !important;
141
-
142
- &:focus {
143
- box-shadow:
144
- 0 0 0 3px rgba(239, 68, 68, .12),
145
- 0 1px 4px rgba(239, 68, 68, .1) !important;
146
- }
147
- }
148
-
149
- &.textarea {
150
- resize: vertical;
151
- min-height: 100px;
152
- height: auto;
153
- padding: 12px 16px !important;
154
- }
155
- }
156
-
157
- input[type="time"].time-input {
158
- cursor: pointer;
159
-
160
- &::-webkit-calendar-picker-indicator {
161
- cursor: pointer;
162
- opacity: 0.7;
163
- filter: invert(30%);
164
-
165
- &:hover {
166
- opacity: 1;
167
- }
168
- }
169
- }
170
-
171
- select.field-input {
172
- appearance: none;
173
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3E%3C/svg%3E");
174
- background-position: right 0.5rem center;
175
- background-repeat: no-repeat;
176
- background-size: 1.5em 1.5em;
177
- padding-right: 2.5rem;
178
- cursor: pointer;
179
-
180
- &:disabled {
181
- cursor: not-allowed;
182
- }
183
- }
184
-
185
- // ── Shared dropdown search input ────────────────────────────────────────────
186
- .dropdown-search-wrapper {
187
- display: flex;
188
- align-items: center;
189
- gap: 8px;
190
- padding: 8px 12px;
191
- border-bottom: 1px solid var(--cc-sf-input-border, #E5E7EB);
192
- background: var(--cc-sf-input-bg, #ffffff);
193
-
194
- .dropdown-search-icon {
195
- font-size: 18px;
196
- width: 18px;
197
- height: 18px;
198
- color: var(--cc-sf-input-placeholder, #9CA3AF);
199
- flex-shrink: 0;
200
- }
201
-
202
- .dropdown-search-input {
203
- flex: 1;
204
- border: none;
205
- outline: none;
206
- background: transparent;
207
- font-size: 0.875rem;
208
- color: var(--cc-sf-label-color, #111827);
209
- font-family: inherit;
210
-
211
- &::placeholder {
212
- color: var(--cc-sf-input-placeholder, #C4C9D4);
213
- }
214
- }
215
-
216
- .dropdown-search-clear {
217
- font-size: 18px;
218
- width: 18px;
219
- height: 18px;
220
- color: var(--cc-sf-input-placeholder, #9CA3AF);
221
- flex-shrink: 0;
222
- transition: color 0.15s;
223
-
224
- &:hover {
225
- color: var(--cc-sf-label-color, #111827);
226
- }
227
- }
228
- }
229
-
230
- // ── Multiple-select custom dropdown ─────────────────────────────────────────
231
- .multi-select-wrapper {
232
- position: relative;
233
-
234
- .multi-select-trigger {
235
- min-height: var(--cc-sf-input-height, 44px);
236
- height: auto;
237
- user-select: none;
238
-
239
- &.ms-open {
240
- border-color: var(--cc-sf-input-focus-border, #6366F1) !important;
241
- box-shadow: 0 0 0 3px rgba(99, 102, 241, .14), 0 1px 4px rgba(99, 102, 241, .1) !important;
242
- }
243
-
244
- .multi-select-value {
245
- flex: 1;
246
- color: var(--cc-sf-label-color, #111827);
247
- white-space: nowrap;
248
- overflow: hidden;
249
- text-overflow: ellipsis;
250
- }
251
-
252
- .multi-select-placeholder {
253
- flex: 1;
254
- font-weight: 400;
255
- font-size: 14px;
256
- color: var(--cc-sf-input-placeholder, #C4C9D4);
257
- }
258
-
259
- .multi-select-arrow {
260
- font-size: 20px;
261
- width: 20px;
262
- height: 20px;
263
- line-height: 20px;
264
- color: var(--cc-sf-label-color, #6B7280);
265
- flex-shrink: 0;
266
- }
267
- }
268
-
269
- .multi-select-panel {
270
- position: absolute;
271
- top: calc(100% + 4px);
272
- left: 0;
273
- right: 0;
274
- background: var(--cc-sf-input-bg, #ffffff);
275
- border: 1.5px solid var(--cc-sf-input-border, #D1D5DB);
276
- border-radius: var(--cc-sf-input-radius, 9px);
277
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.06);
278
- z-index: 1050;
279
- display: flex;
280
- flex-direction: column;
281
- overflow: hidden;
282
- max-height: 320px;
283
- }
284
-
285
- .multi-select-options-list {
286
- flex: 1;
287
- overflow-y: auto;
288
- max-height: 240px;
289
-
290
- &::-webkit-scrollbar { width: 4px; }
291
- &::-webkit-scrollbar-thumb {
292
- background: var(--cc-sf-input-border, #D1D5DB);
293
- border-radius: 2px;
294
- }
295
- }
296
-
297
- .multi-select-option {
298
- padding: 8px 12px;
299
- border-bottom: 1px solid var(--cc-sf-input-border, #F3F4F6);
300
- transition: background 0.1s;
301
-
302
- &:last-of-type { border-bottom: none; }
303
-
304
- &:hover { background: var(--cc-sf-input-hover-bg, #F9FAFB); }
305
-
306
- input[type='checkbox'] {
307
- flex-shrink: 0;
308
- cursor: pointer;
309
- accent-color: var(--cc-sf-selected-color, #6366F1);
310
- width: 15px;
311
- height: 15px;
312
- }
313
-
314
- &.multi-select-all {
315
- border-bottom: 1px solid var(--cc-sf-input-border, #E5E7EB);
316
- background: var(--cc-sf-input-bg, #FAFBFC);
317
- }
318
- }
319
-
320
- .multi-select-empty {
321
- padding: 12px;
322
- text-align: center;
323
- }
324
-
325
- &.is-invalid .multi-select-trigger {
326
- border-color: var(--cc-sf-error-border, #EF4444) !important;
327
- background-color: var(--cc-sf-error-bg, #FFF5F5) !important;
328
- }
329
- }
330
-
331
- // ── Single-select searchable custom dropdown ────────────────────────────────
332
- .single-select-wrapper {
333
- position: relative;
334
-
335
- .single-select-trigger {
336
- min-height: var(--cc-sf-input-height, 44px);
337
- height: auto;
338
- user-select: none;
339
-
340
- &.ss-open {
341
- border-color: var(--cc-sf-input-focus-border, #6366F1) !important;
342
- box-shadow: 0 0 0 3px rgba(99, 102, 241, .14), 0 1px 4px rgba(99, 102, 241, .1) !important;
343
- }
344
-
345
- .single-select-value {
346
- flex: 1;
347
- color: var(--cc-sf-label-color, #111827);
348
- white-space: nowrap;
349
- overflow: hidden;
350
- text-overflow: ellipsis;
351
- }
352
-
353
- .single-select-placeholder {
354
- flex: 1;
355
- font-weight: 400;
356
- font-size: 14px;
357
- color: var(--cc-sf-input-placeholder, #C4C9D4);
358
- }
359
-
360
- .single-select-arrow {
361
- font-size: 20px;
362
- width: 20px;
363
- height: 20px;
364
- line-height: 20px;
365
- color: var(--cc-sf-label-color, #6B7280);
366
- flex-shrink: 0;
367
- }
368
- }
369
-
370
- .single-select-panel {
371
- position: absolute;
372
- top: calc(100% + 4px);
373
- left: 0;
374
- right: 0;
375
- background: var(--cc-sf-input-bg, #ffffff);
376
- border: 1.5px solid var(--cc-sf-input-border, #D1D5DB);
377
- border-radius: var(--cc-sf-input-radius, 9px);
378
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.06);
379
- z-index: 1050;
380
- display: flex;
381
- flex-direction: column;
382
- overflow: hidden;
383
- max-height: 320px;
384
- }
385
-
386
- .single-select-options-list {
387
- flex: 1;
388
- overflow-y: auto;
389
- max-height: 240px;
390
-
391
- &::-webkit-scrollbar { width: 4px; }
392
- &::-webkit-scrollbar-thumb {
393
- background: var(--cc-sf-input-border, #D1D5DB);
394
- border-radius: 2px;
395
- }
396
- }
397
-
398
- .single-select-option {
399
- padding: 8px 12px;
400
- border-bottom: 1px solid var(--cc-sf-input-border, #F3F4F6);
401
- transition: background 0.1s;
402
- justify-content: space-between;
403
-
404
- &:last-of-type { border-bottom: none; }
405
-
406
- &:hover { background: var(--cc-sf-input-hover-bg, #F9FAFB); }
407
-
408
- &.selected {
409
- background: var(--cc-sf-input-hover-bg, #F0F5FF);
410
- color: var(--cc-sf-selected-color, #6366F1);
411
- }
412
-
413
- .single-select-check {
414
- font-size: 18px;
415
- width: 18px;
416
- height: 18px;
417
- color: var(--cc-sf-selected-color, #6366F1);
418
- }
419
- }
420
-
421
- &.is-invalid .single-select-trigger {
422
- border-color: var(--cc-sf-error-border, #EF4444) !important;
423
- background-color: var(--cc-sf-error-bg, #FFF5F5) !important;
424
- }
425
- }
426
-
427
- // ── Custom dropdown panels (rendered in a CDK connected overlay) ─────────────
428
- // The multi/single select panels are projected into a body-level CDK overlay so
429
- // they are never clipped by a scrollable modal body (cc-confirmation-modal) and
430
- // close on outside click. Because they no longer sit inside their *-wrapper in
431
- // the DOM, these styles live at the top level (still component-scoped via view
432
- // encapsulation). The CDK overlay pane handles positioning and width.
433
- .multi-select-panel,
434
- .single-select-panel {
435
- width: 100%;
436
- background: var(--cc-sf-input-bg, #ffffff);
437
- border: 1.5px solid var(--cc-sf-input-border, #D1D5DB);
438
- border-radius: var(--cc-sf-input-radius, 9px);
439
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.06);
440
- display: flex;
441
- flex-direction: column;
442
- overflow: hidden;
443
- max-height: 320px;
444
- }
445
-
446
- .multi-select-options-list,
447
- .single-select-options-list {
448
- flex: 1;
449
- overflow-y: auto;
450
- max-height: 240px;
451
-
452
- &::-webkit-scrollbar { width: 4px; }
453
- &::-webkit-scrollbar-thumb {
454
- background: var(--cc-sf-input-border, #D1D5DB);
455
- border-radius: 2px;
456
- }
457
- }
458
-
459
- .multi-select-option,
460
- .single-select-option {
461
- display: flex;
462
- align-items: center;
463
- gap: 8px;
464
- cursor: pointer;
465
- padding: 8px 12px;
466
- border-bottom: 1px solid var(--cc-sf-input-border, #F3F4F6);
467
- transition: background 0.1s;
468
-
469
- &:last-of-type { border-bottom: none; }
470
- &:hover { background: var(--cc-sf-input-hover-bg, #F9FAFB); }
471
-
472
- input[type='checkbox'] {
473
- flex-shrink: 0;
474
- cursor: pointer;
475
- accent-color: var(--cc-sf-selected-color, #6366F1);
476
- width: 15px;
477
- height: 15px;
478
- }
479
- }
480
-
481
- .multi-select-option.multi-select-all {
482
- border-bottom: 1px solid var(--cc-sf-input-border, #E5E7EB);
483
- background: var(--cc-sf-input-bg, #FAFBFC);
484
- }
485
-
486
- .single-select-option {
487
- justify-content: space-between;
488
-
489
- &.selected {
490
- background: var(--cc-sf-input-hover-bg, #F0F5FF);
491
- color: var(--cc-sf-selected-color, #6366F1);
492
- }
493
-
494
- .single-select-check {
495
- font-size: 18px;
496
- width: 18px;
497
- height: 18px;
498
- color: var(--cc-sf-selected-color, #6366F1);
499
- }
500
- }
501
-
502
- .multi-select-empty {
503
- padding: 12px;
504
- text-align: center;
505
- }
506
-
507
- // CDK overlays (our dropdown panels) must render above cc-confirmation-modal,
508
- // whose backdrop/container sit at z-index 1000/1001.
509
- ::ng-deep .cdk-overlay-container {
510
- z-index: 1100;
511
- }
512
-
513
- .char-count-hint {
514
- font-style: normal;
515
- line-height: 100%;
516
- letter-spacing: 0.02em;
517
- margin-top: 0.4rem;
518
- }
519
-
520
- .radio-group,
521
- .checkbox-group {
522
- &.layout-column {
523
- display: grid !important;
524
- grid-template-columns: repeat(12, 1fr);
525
- gap: 16px;
526
- width: 100%;
527
- }
528
-
529
- &.layout-row {
530
- flex-direction: column !important;
531
- gap: 12px;
532
- width: 100%;
533
- }
534
- }
535
-
536
- .radio-label,
537
- .checkbox-label {
538
- input {
539
- cursor: pointer;
540
- accent-color: var(--cc-sf-chip-selected-bg, #F05A28);
541
- }
542
-
543
- &.card-item {
544
- display: flex !important;
545
- flex-direction: row-reverse !important;
546
- justify-content: space-between !important;
547
- align-items: center !important;
548
- border: 1px solid var(--cc-sf-input-disabled-border, #E5E7EB);
549
- border-radius: 12px;
550
- padding: 16px 20px;
551
- box-sizing: border-box;
552
- transition: all 0.2s ease;
553
- background: var(--cc-sf-input-bg, #ffffff);
554
- margin-bottom: 0px;
555
-
556
- input {
557
- margin-left: 16px;
558
- }
559
-
560
- &.selected {
561
- border-color: var(--cc-sf-selected-color);
562
- background-color: rgba(240, 90, 40, 0.05); // Keep light tint
563
- }
564
-
565
- .option-content {
566
- .label-text {
567
- font-weight: var(--cc-sf-label-weight, 500);
568
- }
569
- }
570
- }
571
- }
572
-
573
- .checkbox-single {
574
- .checkbox-label {
575
- font-weight: var(--cc-sf-label-weight, 500);
576
- }
577
- }
578
-
579
- .chip-label {
580
- transition: var(--cc-sf-input-transition, all 0.2s ease);
581
-
582
- &:hover {
583
- background: var(--cc-sf-chip-hover-bg, #F3F4F6);
584
- }
585
-
586
- &.selected {
587
- background: var(--cc-sf-selected-color);
588
- color: var(--cc-sf-chip-selected-color, #ffffff);
589
- border-color: var(--cc-sf-selected-color);
590
- }
591
- }
592
-
593
- .switch {
594
- width: 50px;
595
- height: 24px;
596
- display: inline-block;
597
-
598
- input {
599
- opacity: 0;
600
- width: 0;
601
- height: 0;
602
- position: absolute;
603
-
604
- &:checked+.slider {
605
- background-color: var(--cc-sf-switch-track-on) !important;
606
-
607
- &::before {
608
- transform: translateX(26px);
609
- }
610
- }
611
- }
612
-
613
- .slider {
614
- top: 0;
615
- left: 0;
616
- right: 0;
617
- bottom: 0;
618
- transition: 0.4s;
619
- background-color: var(--cc-sf-switch-track-off);
620
- border-radius: 24px;
621
-
622
- &::before {
623
- position: absolute;
624
- content: "";
625
- height: 18px;
626
- width: 18px;
627
- left: 3px;
628
- bottom: 3px;
629
- background-color: var(--cc-sf-switch-thumb);
630
- transition: 0.4s;
631
- border-radius: 50%;
632
- }
633
- }
634
- }
635
-
636
- .rating-group {
637
- .star {
638
- transition: var(--cc-sf-input-transition, all 0.2s ease);
639
-
640
- mat-icon {
641
- font-size: var(--cc-sf-star-size, 28px);
642
- width: var(--cc-sf-star-size, 28px);
643
- height: var(--cc-sf-star-size, 28px);
644
- line-height: var(--cc-sf-star-size, 28px);
645
- color: var(--cc-sf-star-empty, #D1D5DB);
646
- transition: var(--cc-sf-input-transition, all 0.2s ease);
647
- }
648
-
649
- &.filled mat-icon,
650
- &.half mat-icon {
651
- color: var(--cc-sf-star-filled, #F59E0B);
652
- }
653
-
654
- &:hover mat-icon {
655
- color: var(--cc-sf-star-filled, #F59E0B);
656
- }
657
- }
658
- }
659
-
660
- .password-wrapper {
661
- .password-toggle {
662
- right: 0.625rem;
663
- top: 50%;
664
- transform: translateY(-50%);
665
- line-height: 1;
666
- transition: color var(--cc-sf-input-transition, 0.2s ease);
667
-
668
- mat-icon.eye-icon {
669
- font-size: 1.125rem;
670
- width: 1.125rem;
671
- height: 1.125rem;
672
- line-height: 1.125rem;
673
- }
674
-
675
- &:hover {
676
- color: var(--cc-sf-label-color, #374151);
677
- }
678
-
679
- &:focus {
680
- outline: none;
681
- }
682
- }
683
- }
684
-
685
- .group-section-wrapper {
686
- // Flat — no card shell; card border/shadow removed
687
-
688
- // ── Section heading: left accent bar ────────────────────────────────────────
689
- .group-label {
690
- font-size: var(--cc-sf-section-label-size, 1rem);
691
- font-weight: var(--cc-sf-section-label-weight, 600);
692
- color: var(--cc-sf-section-label-color, #1F2937);
693
- margin: 0 0 16px 0;
694
- padding-left: 12px;
695
- padding-top: 2px;
696
- padding-bottom: 2px;
697
- border-left: var(--cc-sf-section-header-accent-width, 4px) solid var(--cc-sf-section-header-accent-color, #3B82F6);
698
- line-height: 1.4;
699
- }
700
-
701
- .group-fields {
702
- &.sf-grid {
703
- display: grid;
704
- grid-template-columns: repeat(12, 1fr);
705
- gap: var(--cc-sf-grid-gap, 16px);
706
- align-items: start;
707
-
708
- @media (max-width: 640px) {
709
- grid-template-columns: 1fr;
710
-
711
- .sf-col {
712
- grid-column: span 12 !important;
713
- }
714
- }
715
- }
716
- }
717
-
718
- // ── Standard GROUP accordion instance ────────────────────────────────────────
719
- .group-accordion-instance {
720
- border: var(--cc-sf-instance-border, 1px solid #E5E7EB);
721
- border-radius: var(--cc-sf-section-border-radius-inner, 8px);
722
- margin-bottom: 8px;
723
- overflow: hidden;
724
- transition: border-color 0.2s ease;
725
-
726
- &:last-of-type {
727
- margin-bottom: 0;
728
- }
729
-
730
- .group-accordion-header {
731
- display: flex;
732
- justify-content: space-between;
733
- align-items: center;
734
- padding: 10px 14px;
735
- background: var(--cc-sf-repeater-accordion-header-bg, #F9FAFB);
736
- cursor: pointer;
737
- user-select: none;
738
- transition: background 0.15s ease;
739
-
740
- &:hover {
741
- background: var(--cc-sf-repeater-accordion-active-bg, #EFF6FF);
742
- }
743
-
744
- .instance-badge {
745
- width: 22px;
746
- height: 22px;
747
- border-radius: 50%;
748
- background: var(--cc-sf-repeater-badge-bg, #E5E7EB);
749
- color: var(--cc-sf-repeater-badge-color, #374151);
750
- font-size: 0.75rem;
751
- font-weight: 600;
752
- display: flex;
753
- align-items: center;
754
- justify-content: center;
755
- flex-shrink: 0;
756
- }
757
-
758
- .instance-title {
759
- font-size: var(--cc-sf-instance-num-size, 0.8125rem);
760
- font-weight: 600;
761
- color: var(--cc-sf-repeater-accordion-header-color, #1F2937);
762
- }
763
-
764
- .accordion-remove-btn {
765
- background: none;
766
- border: none;
767
- cursor: pointer;
768
- color: var(--cc-sf-btn-remove-color, #E53E3E);
769
- padding: 4px;
770
- border-radius: 4px;
771
- line-height: 1;
772
- display: flex;
773
- align-items: center;
774
- transition: background 0.15s ease;
775
-
776
- mat-icon {
777
- font-size: 1.1rem;
778
- width: 1.1rem;
779
- height: 1.1rem;
780
- line-height: 1.1rem;
781
- }
782
-
783
- &:hover {
784
- background: var(--cc-sf-btn-remove-hover-bg, #FED7D7);
785
- }
786
- }
787
-
788
- .accordion-chevron {
789
- font-size: 1.25rem;
790
- width: 1.25rem;
791
- height: 1.25rem;
792
- line-height: 1.25rem;
793
- color: var(--cc-sf-instance-num-color, #4B5563);
794
- }
795
- }
796
-
797
- .group-accordion-body {
798
- padding: var(--cc-sf-instance-padding, 16px);
799
- background: var(--cc-sf-instance-bg, #F9FAFB);
800
- border-top: var(--cc-sf-instance-divider, 1px dashed #D1D5DB);
801
- }
802
- }
803
-
804
- // ── Full-width dashed Add button ─────────────────────────────────────────────
805
- .btn-add-group {
806
- display: flex;
807
- align-items: center;
808
- justify-content: center;
809
- gap: 6px;
810
- width: 100%;
811
- padding: 10px 20px;
812
- margin-top: 12px;
813
- background: var(--cc-sf-btn-add-bg, transparent);
814
- color: var(--cc-sf-btn-add-color, #3B82F6);
815
- border: var(--cc-sf-btn-add-border, 1px dashed #CBD5E1);
816
- border-radius: var(--cc-sf-btn-add-radius, 6px);
817
- cursor: pointer;
818
- font-family: inherit;
819
- font-size: var(--cc-sf-btn-font-size, 0.875rem);
820
- font-weight: var(--cc-sf-btn-font-weight, 600);
821
- transition: var(--cc-sf-btn-transition, all 0.2s ease);
822
-
823
- mat-icon {
824
- font-size: 1.1rem;
825
- width: 1.1rem;
826
- height: 1.1rem;
827
- line-height: 1.1rem;
828
- }
829
-
830
- &:hover {
831
- background: var(--cc-sf-btn-add-hover-bg, #EFF6FF);
832
- border-color: var(--cc-sf-btn-add-hover-border, #BFDBFE);
833
- }
834
- }
835
-
836
- .group-instance {
837
- &:last-child {
838
- margin-bottom: 0;
839
- }
840
- }
841
-
842
- &.multi-save-active {
843
- border: none;
844
- box-shadow: none;
845
- padding: 0;
846
- background: transparent;
847
-
848
- .multi-save-header {
849
- .btn-add-multi {
850
- ::ng-deep button {
851
- color: var(--ms-btn-add-color, #3B82F6);
852
- font-weight: 600;
853
- font-size: 0.875rem;
854
- padding: 8px 12px;
855
-
856
- &:hover {
857
- color: var(--ms-btn-add-hover, #2563EB);
858
- background-color: var(--cc-sf-btn-add-hover-bg, #EFF6FF);
859
- }
860
- }
861
- }
862
- }
863
-
864
- .group-instance {
865
- // box-shadow: var(--ms-card-shadow, 0 1px 4px rgba(0, 0, 0, 0.05));
866
-
867
- // &.is-editing {
868
- // padding: 24px;
869
- // }
870
-
871
- &.is-card {
872
- cursor: pointer;
873
- transition: all 0.2s ease-in-out;
874
-
875
- &:hover {
876
- box-shadow: var(--ms-card-shadow-hover, 0 8px 24px rgba(0, 0, 0, 0.08));
877
- border-color: var(--cc-sf-input-focus-border, #3B82F6);
878
- }
879
-
880
- .card-view {
881
- .card-content {
882
- .card-title {
883
- white-space: nowrap;
884
- text-overflow: ellipsis;
885
- }
886
-
887
- .card-desc {
888
- line-height: 1.4;
889
- display: -webkit-box;
890
- -webkit-line-clamp: 1;
891
- line-clamp: 1;
892
- -webkit-box-orient: vertical;
893
- }
894
- }
895
-
896
- &.is-expanded {
897
- .card-content .card-desc {
898
- -webkit-line-clamp: unset;
899
- line-clamp: unset;
900
- }
901
- }
902
-
903
- .card-actions {
904
- mat-icon {
905
- font-size: 22px;
906
- width: 22px;
907
- height: 22px;
908
- color: var(--cc-sf-hint-color, #9CA3AF);
909
- transition: color 0.2s;
910
-
911
- &.icon-delete:hover {
912
- color: var(--cc-sf-error-border, #DC2626);
913
- }
914
-
915
- &.icon-edit:hover {
916
- color: var(--cc-sf-input-focus-border, #3B82F6);
917
- }
918
-
919
- &.icon-expand {
920
- color: var(--cc-sf-input-disabled-border, #E5E7EB);
921
- }
922
- }
923
- }
924
- }
925
- }
926
- }
927
- }
928
- }
929
-
930
- .btn-remove {
931
- transition: var(--cc-sf-btn-transition, all 0.2s ease);
932
-
933
- mat-icon {
934
- font-size: 1rem;
935
- width: 1rem;
936
- height: 1rem;
937
- line-height: 1rem;
938
- }
939
-
940
- &:hover {
941
- background: var(--cc-sf-btn-remove-hover-bg, #FED7D7);
942
- }
943
- }
944
-
945
- .btn-add-group {
946
- font-weight: var(--cc-sf-btn-font-weight, 600);
947
- transition: var(--cc-sf-btn-transition, all 0.2s ease);
948
-
949
- mat-icon {
950
- font-size: 1.1rem;
951
- width: 1.1rem;
952
- height: 1.1rem;
953
- line-height: 1.1rem;
954
- }
955
-
956
- &:hover {
957
- background: var(--cc-sf-btn-add-hover-bg, #EFF6FF);
958
- border-color: var(--cc-sf-btn-add-hover-border, #BFDBFE);
959
- }
960
- }
961
-
962
- .upload-drop-zone {
963
- background-color: var(--cc-sf-dropzone-bg, #F8FAFC);
964
- border: var(--cc-sf-dropzone-border, 1.5px dashed #CBD5E1);
965
- border-radius: var(--cc-sf-dropzone-radius, 12px);
966
- transition: background-color 0.2s ease, border-color 0.2s ease;
967
-
968
- &:hover {
969
- background-color: var(--cc-sf-dropzone-hover-bg, #EFF6FF);
970
- border-color: var(--cc-sf-dropzone-hover-border, #93C5FD);
971
- }
972
-
973
- &.drag-over {
974
- background-color: var(--cc-sf-dropzone-hover-bg, #EFF6FF);
975
- border-color: var(--cc-sf-dropzone-over-border, #3B82F6);
976
- box-shadow: var(--cc-sf-dropzone-over-shadow, 0 0 0 4px rgba(59, 130, 246, 0.12));
977
- }
978
-
979
- &.is-invalid {
980
- border-color: var(--cc-sf-error-border, #DC2626);
981
- background-color: var(--cc-sf-error-bg, #FEF2F2);
982
- }
983
- }
984
-
985
- .upload-icon-wrap {
986
- .dropzone-icon-pill {
987
- width: 52px;
988
- height: 52px;
989
- border-radius: 50%;
990
- background: var(--cc-sf-dropzone-icon-bg, rgba(59, 130, 246, 0.10));
991
- }
992
-
993
- mat-icon.upload-cloud-icon {
994
- font-size: 28px;
995
- width: 28px;
996
- height: 28px;
997
- line-height: 28px;
998
- color: var(--cc-sf-accent-color, #3B82F6);
999
- }
1000
- }
1001
-
1002
- .upload-main-text {
1003
- color: var(--cc-sf-label-color, #1E293B);
1004
- }
1005
-
1006
- .upload-sub-text {
1007
- color: var(--cc-sf-hint-color, #64748B);
1008
- }
1009
-
1010
- .upload-link {
1011
- color: var(--cc-sf-dropzone-link-color, #3B82F6);
1012
- font-weight: 500;
1013
- }
1014
-
1015
- .upload-formats {
1016
- color: var(--cc-sf-dropzone-link-color, #3B82F6);
1017
- }
1018
-
1019
- .upload-size-badge {
1020
- display: inline-block;
1021
- padding: 2px 8px;
1022
- border-radius: 20px;
1023
- background: var(--cc-sf-input-disabled-bg, #F3F4F6);
1024
- color: var(--cc-sf-hint-color, #6B7280);
1025
- font-weight: 500;
1026
- }
1027
-
1028
- .uploaded-item {
1029
- background: var(--cc-sf-uploaded-item-bg, #ffffff);
1030
- border: var(--cc-sf-uploaded-item-border, 1px solid #E2E8F0);
1031
- border-radius: var(--cc-sf-uploaded-item-radius, 8px);
1032
- transition: box-shadow 0.15s ease;
1033
-
1034
- &:hover {
1035
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
1036
- }
1037
-
1038
- mat-icon.file-type-icon {
1039
- font-size: 20px;
1040
- width: 20px;
1041
- height: 20px;
1042
- line-height: 20px;
1043
- flex-shrink: 0;
1044
- color: var(--cc-sf-hint-color, #64748B);
1045
- }
1046
-
1047
- .file-thumb {
1048
- width: 36px;
1049
- height: 36px;
1050
- object-fit: cover;
1051
- flex-shrink: 0;
1052
- }
1053
-
1054
- .file-info {
1055
- min-width: 0;
1056
- gap: 2px;
1057
-
1058
- .file-name {
1059
- white-space: nowrap;
1060
- text-overflow: ellipsis;
1061
- }
1062
- }
1063
-
1064
- .file-remove-btn {
1065
- flex-shrink: 0;
1066
- width: 32px;
1067
- height: 32px;
1068
- background: none;
1069
- border: none;
1070
- cursor: pointer;
1071
- color: var(--cc-sf-uploaded-remove-color, #94A3B8);
1072
- padding: 0;
1073
- display: flex;
1074
- align-items: center;
1075
- justify-content: center;
1076
- transition: color 0.15s ease, background 0.15s ease;
1077
-
1078
- mat-icon {
1079
- font-size: 1.1rem;
1080
- width: 1.1rem;
1081
- height: 1.1rem;
1082
- line-height: 1.1rem;
1083
- }
1084
-
1085
- &:hover:not(:disabled) {
1086
- color: var(--cc-sf-uploaded-remove-hover-color, #DC2626);
1087
- background: var(--cc-sf-uploaded-remove-hover-bg, #FEF2F2);
1088
- }
1089
-
1090
- &:disabled {
1091
- opacity: 0.4;
1092
- cursor: not-allowed;
1093
- }
1094
- }
1095
-
1096
- &.uploading {
1097
- background: var(--cc-sf-uploaded-uploading-bg, #F8FAFC);
1098
- border-color: var(--cc-sf-uploaded-uploading-border, #CBD5E1);
1099
- opacity: 0.85;
1100
- }
1101
- }
1102
-
1103
- .upload-spinner {
1104
- width: 20px;
1105
- height: 20px;
1106
- flex-shrink: 0;
1107
- border-top-color: var(--cc-sf-accent-color, #3B82F6);
1108
- animation: cc-spin 0.7s linear infinite;
1109
- }
1110
-
1111
- @keyframes cc-spin {
1112
- to {
1113
- transform: rotate(360deg);
1114
- }
1115
- }
1116
-
1117
- .uploading-label {
1118
- font-style: italic;
1119
- }
1120
-
1121
- .input-group {
1122
- align-items: stretch;
1123
-
1124
- .field-input {
1125
- flex: 1;
1126
- width: auto; // Allow flex to control width
1127
-
1128
- .input-prefix+& {
1129
- border-top-left-radius: 0;
1130
- border-bottom-left-radius: 0;
1131
- }
1132
- }
1133
-
1134
- .field-input:has(+ .input-suffix) {
1135
- border-top-right-radius: 0;
1136
- border-bottom-right-radius: 0;
1137
- }
1138
-
1139
- .field-input.has-icon-right {
1140
- padding-right: 3rem;
1141
- }
1142
-
1143
- &.readonly {
1144
- .field-input {
1145
- cursor: default;
1146
- }
1147
- }
1148
- }
1149
-
1150
- .input-prefix,
1151
- .input-suffix {
1152
- display: flex !important;
1153
- align-items: center;
1154
- white-space: nowrap;
1155
- padding: 0 14px;
1156
- background-color: var(--cc-sf-input-disabled-bg);
1157
- border: 1px solid var(--cc-sf-input-border);
1158
- font-size: 0.875rem;
1159
- color: var(--cc-sf-hint-color);
1160
- user-select: none;
1161
- }
1162
-
1163
- .input-prefix {
1164
- border-right: none;
1165
- border-top-left-radius: var(--cc-sf-input-radius, 8px);
1166
- border-bottom-left-radius: var(--cc-sf-input-radius, 8px);
1167
- }
1168
-
1169
- .input-suffix {
1170
- border-left: none;
1171
- border-top-right-radius: var(--cc-sf-input-radius, 8px);
1172
- border-bottom-right-radius: var(--cc-sf-input-radius, 8px);
1173
- }
1174
-
1175
- .readonly-icons {
1176
- right: 0.875rem;
1177
- top: 50%;
1178
- transform: translateY(-50%);
1179
-
1180
- mat-icon.lock-icon {
1181
- font-size: 1rem;
1182
- width: 1rem;
1183
- height: 1rem;
1184
- line-height: 1rem;
1185
- opacity: 0.5;
1186
- color: var(--cc-sf-hint-color, #6B7280);
1187
- }
1188
- }
1189
-
1190
- .suffix-action-icons {
1191
- right: 0.875rem;
1192
- top: 50%;
1193
- transform: translateY(-50%);
1194
- z-index: 1;
1195
- pointer-events: auto;
1196
-
1197
- mat-icon.suffix-action-icon {
1198
- font-size: 1.125rem;
1199
- width: 1.125rem;
1200
- height: 1.125rem;
1201
- line-height: 1.125rem;
1202
- color: var(--cc-sf-hint-color, #6B7280);
1203
- cursor: pointer;
1204
- transition: color 0.2s ease, transform 0.15s ease;
1205
-
1206
- &:hover {
1207
- color: var(--cc-sf-text-color, #202124);
1208
- transform: scale(1.15);
1209
- }
1210
- }
1211
- }
1212
-
1213
- .date-icon-wrapper {
1214
- right: 0.5rem;
1215
- top: 50%;
1216
- transform: translateY(-50%);
1217
- pointer-events: auto;
1218
-
1219
- .mat-icon-button {
1220
- width: 32px;
1221
- height: 32px;
1222
- line-height: 32px;
1223
- }
1224
- }
1225
-
1226
- .subfields-group-wrapper {
1227
- .subfields-row {
1228
- transition: all 0.2s ease;
1229
-
1230
- &.is-invalid {
1231
- .subfield-item ::ng-deep .field-input {
1232
- border-color: var(--cc-sf-error-border, #DC2626);
1233
- background-color: var(--cc-sf-error-bg, #FEF2F2);
1234
- }
1235
- }
1236
-
1237
- .subfield-item {
1238
- min-width: 0;
1239
-
1240
- ::ng-deep .field-label {
1241
- font-size: 0.75rem !important;
1242
- margin-bottom: 4px !important;
1243
- font-weight: 500 !important;
1244
- color: var(--cc-sf-hint-color, #6B7280) !important;
1245
- }
1246
- }
1247
-
1248
- .subfield-separator {
1249
- font-weight: bold;
1250
- }
1251
- }
1252
- }
1253
-
1254
- .autocomplete-wrapper {
1255
- .ac-input {
1256
- padding-left: 40px !important;
1257
- }
1258
-
1259
- .ac-search-icon {
1260
- left: 0.75rem;
1261
- width: 1.1rem;
1262
- height: 1.1rem;
1263
- line-height: 1.1rem;
1264
- z-index: 1;
1265
- transition: color var(--cc-sf-input-transition, 0.2s ease);
1266
- }
1267
-
1268
- .ac-clear-btn {
1269
- right: 0.6rem;
1270
- transition: color 0.15s ease, background 0.15s ease;
1271
-
1272
- mat-icon {
1273
- font-size: 1rem;
1274
- width: 1rem;
1275
- height: 1rem;
1276
- line-height: 1rem;
1277
- }
1278
-
1279
- &:hover {
1280
- color: var(--cc-sf-label-color, #374151);
1281
- background: var(--cc-sf-input-disabled-bg, #F3F4F6);
1282
- }
1283
-
1284
- &:focus {
1285
- outline: none;
1286
- }
1287
- }
1288
-
1289
- &:focus-within .ac-search-icon {
1290
- color: var(--cc-sf-accent-color, #3B82F6);
1291
- }
1292
-
1293
- &.is-invalid .ac-input {
1294
- border-color: var(--cc-sf-error-border) !important;
1295
- background-color: var(--cc-sf-error-bg);
1296
- }
1297
-
1298
- &.readonly .ac-input {
1299
- background-color: var(--cc-sf-input-disabled-bg);
1300
- color: var(--cc-sf-input-disabled-color, #6B7280);
1301
- cursor: not-allowed;
1302
- border-color: var(--cc-sf-input-disabled-border) !important;
1303
- }
1304
- }
1305
-
1306
- .ac-no-results {
1307
- font-style: italic;
1308
- }
1309
-
1310
- // ── mat-autocomplete panel global fix ───────────────────────────────────────
1311
- // The CDK overlay is appended to <body> so it is outside component scope.
1312
- // ::ng-deep is required to pierce view encapsulation for the panel.
1313
- ::ng-deep {
1314
-
1315
- .mat-mdc-autocomplete-panel,
1316
- .mat-autocomplete-panel {
1317
- background: var(--cc-sf-input-bg, #ffffff) !important;
1318
- border-radius: var(--cc-sf-input-radius, 9px) !important;
1319
- border: 1px solid var(--cc-sf-input-disabled-border, #E5E7EB) !important;
1320
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.06) !important;
1321
- padding: 4px 0 !important;
1322
- min-width: 200px;
1323
-
1324
- mat-option,
1325
- .mat-mdc-option,
1326
- .mat-option {
1327
- background: var(--cc-sf-input-bg, #ffffff) !important;
1328
- color: var(--cc-sf-label-color, #111827) !important;
1329
- font-size: 0.875rem !important;
1330
- padding: 10px 16px !important;
1331
- min-height: 40px !important;
1332
- line-height: 1.4 !important;
1333
- // Column direction so displayMeta fields stack below the label
1334
- display: flex !important;
1335
- flex-direction: column !important;
1336
- align-items: flex-start !important;
1337
- transition: background var(--cc-sf-input-transition, 0.2s ease) !important;
1338
-
1339
- &:hover:not(.mat-option-disabled):not([disabled]) {
1340
- background: var(--cc-sf-input-disabled-bg, #F3F4F6) !important;
1341
- }
1342
-
1343
- &.mat-selected:not(.mat-option-multiple),
1344
- &.mdc-list-item--selected {
1345
- background: var(--cc-sf-dropzone-hover-bg, #EFF6FF) !important;
1346
- color: var(--cc-sf-selected-color, #6366F1) !important;
1347
- font-weight: 600 !important;
1348
- }
1349
-
1350
- // ── Dynamic display fields rendered below the option label ────────────
1351
- .ac-option-label {
1352
- font-weight: 500;
1353
- color: var(--cc-sf-label-color, #111827);
1354
- font-size: 0.875rem;
1355
- display: block;
1356
- }
1357
-
1358
- .ac-display-fields {
1359
- align-items: center;
1360
- line-height: 1;
1361
- }
1362
-
1363
- .ac-df-item {
1364
- display: inline-flex;
1365
- align-items: center;
1366
- font-size: 0.72rem;
1367
- color: var(--cc-sf-hint-color, #6B7280);
1368
- gap: 3px;
1369
- }
1370
-
1371
- // Chip style: used for email and phone entries
1372
- .ac-df-chip {
1373
- background: var(--cc-sf-input-disabled-bg, #F3F4F6);
1374
- border-radius: 4px;
1375
- padding: 2px 6px;
1376
- }
1377
-
1378
- // Plain text style
1379
- .ac-df-text {
1380
- color: var(--cc-sf-hint-color, #6B7280);
1381
- }
1382
-
1383
- // Avatar image
1384
- .ac-df-image {
1385
- // No background chip for images
1386
- }
1387
-
1388
- .ac-df-avatar {
1389
- width: 24px;
1390
- height: 24px;
1391
- border-radius: 50%;
1392
- object-fit: cover;
1393
- border: 1px solid var(--cc-sf-input-border, #D1D5DB);
1394
- vertical-align: middle;
1395
- }
1396
-
1397
- .ac-df-label {
1398
- font-weight: 600;
1399
- color: var(--cc-sf-hint-color, #9CA3AF);
1400
- margin-right: 2px;
1401
- }
1402
-
1403
- .ac-df-icon {
1404
- font-size: 11px;
1405
- width: 11px;
1406
- height: 11px;
1407
- line-height: 11px;
1408
- color: var(--cc-sf-hint-color, #9CA3AF);
1409
- flex-shrink: 0;
1410
- }
1411
- }
1412
- }
1413
- }
1414
-
1415
- .mu-layout {
1416
- grid-template-columns: 1fr 1fr;
1417
- gap: 32px;
1418
-
1419
- @media (max-width: 768px) {
1420
- grid-template-columns: 1fr;
1421
- }
1422
- }
1423
-
1424
- .mu-title {
1425
- font-weight: 700;
1426
- line-height: 1.3;
1427
- }
1428
-
1429
- .mu-badge {
1430
- white-space: nowrap;
1431
- flex-shrink: 0;
1432
- }
1433
-
1434
- .mu-description {
1435
- line-height: 1.6;
1436
- }
1437
-
1438
- .mu-feature-item {
1439
- .mu-check {
1440
- width: 16px;
1441
- height: 16px;
1442
- line-height: 16px;
1443
- flex-shrink: 0;
1444
- }
1445
- }
1446
-
1447
- .mu-right {
1448
- min-height: 260px;
1449
- }
1450
-
1451
- .mu-right-empty {
1452
- min-height: 250px;
1453
- max-width: 400px;
1454
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
1455
- transition: box-shadow 0.2s ease;
1456
-
1457
- &:hover {
1458
- cursor: pointer;
1459
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
1460
- }
1461
-
1462
- .mu-right-empty-icon {
1463
- width: 52px;
1464
- height: 52px;
1465
- line-height: 52px;
1466
- opacity: 0.3;
1467
- }
1468
-
1469
- p {
1470
- margin: 0;
1471
- font-size: 0.85rem;
1472
- }
1473
- }
1474
-
1475
- .media-add-container {
1476
- display: inline-block;
1477
-
1478
- ::ng-deep button {
1479
- display: flex;
1480
- align-items: center;
1481
- gap: 6px;
1482
-
1483
- .menu-chevron {
1484
- width: 18px;
1485
- height: 18px;
1486
- line-height: 18px;
1487
- transition: transform 0.2s ease;
1488
- }
1489
- }
1490
- }
1491
-
1492
- .media-dropdown {
1493
- top: calc(100% + 6px);
1494
- left: 0;
1495
- z-index: 200;
1496
- min-width: 240px;
1497
- box-shadow: var(--mu-dropdown-shadow, 0 8px 32px rgba(0, 0, 0, 0.12));
1498
- animation: mu-fade-in 0.15s ease;
1499
- }
1500
-
1501
- @keyframes mu-fade-in {
1502
- from {
1503
- opacity: 0;
1504
- transform: translateY(-6px);
1505
- }
1506
-
1507
- to {
1508
- opacity: 1;
1509
- transform: translateY(0);
1510
- }
1511
- }
1512
-
1513
- .media-dropdown-item {
1514
- transition: background 0.15s ease;
1515
-
1516
- &:last-child {
1517
- border-bottom: none;
1518
- }
1519
-
1520
- &:hover {
1521
- background: var(--cc-sf-dropzone-hover-bg, #F0F9FF);
1522
- }
1523
- }
1524
-
1525
- .media-drop-icon {
1526
- width: 36px;
1527
- height: 36px;
1528
- flex-shrink: 0;
1529
-
1530
- mat-icon {
1531
- font-size: 20px;
1532
- width: 20px;
1533
- height: 20px;
1534
- line-height: 20px;
1535
- }
1536
-
1537
- &--video {
1538
- background: var(--mu-icon-video-bg, #FFF0F0);
1539
- color: var(--mu-icon-video-color, #EF4444);
1540
- }
1541
-
1542
- &--device {
1543
- background: var(--mu-icon-device-bg, #EFF6FF);
1544
- color: var(--mu-icon-device-color, #3B82F6);
1545
- }
1546
-
1547
- &--library {
1548
- background: var(--mu-icon-library-bg, #F0FDF4);
1549
- color: var(--mu-icon-library-color, #22C55E);
1550
- }
1551
- }
1552
-
1553
- .media-drop-text {
1554
- gap: 2px;
1555
- }
1556
-
1557
- .youtube-input-panel {
1558
- animation: mu-fade-in 0.18s ease;
1559
- }
1560
-
1561
- .youtube-panel-label {
1562
- mat-icon {
1563
- font-size: 18px;
1564
- width: 18px;
1565
- height: 18px;
1566
- line-height: 18px;
1567
- color: var(--mu-icon-video-color, #EF4444);
1568
- }
1569
- }
1570
-
1571
- .youtube-input-row {
1572
- align-items: stretch;
1573
- }
1574
-
1575
- .media-menu-backdrop {
1576
- position: fixed;
1577
- inset: 0;
1578
- z-index: 100;
1579
- }
1580
-
1581
- .media-upload-status {
1582
- animation: mu-fade-in 0.2s ease;
1583
-
1584
- .status-icon {
1585
- width: 18px;
1586
- height: 18px;
1587
- line-height: 18px;
1588
- }
1589
- }
1590
-
1591
- .media-carousel-main {
1592
- max-width: 400px;
1593
- height: var(--mu-carousel-height, 250px);
1594
- }
1595
-
1596
- .carousel-viewer {
1597
- inset: 0;
1598
-
1599
- .carousel-image {
1600
- object-fit: cover;
1601
- }
1602
-
1603
- .carousel-spinner {
1604
- width: 36px;
1605
- height: 36px;
1606
- border-top-color: var(--cc-sf-accent-color, #3B82F6);
1607
- animation: cc-spin 0.7s linear infinite;
1608
- }
1609
- }
1610
-
1611
- .carousel-nav {
1612
- top: 50%;
1613
- transform: translateY(-50%);
1614
- z-index: 10;
1615
- width: 40px;
1616
- height: 40px;
1617
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
1618
- transition: background 0.2s ease, opacity 0.2s ease;
1619
- backdrop-filter: blur(4px);
1620
-
1621
- mat-icon {
1622
- font-size: 22px;
1623
- width: 22px;
1624
- height: 22px;
1625
- line-height: 22px;
1626
- color: #1E293B;
1627
- }
1628
-
1629
- &:hover:not(:disabled) {
1630
- background: rgba(255, 255, 255, 1);
1631
- }
1632
-
1633
- &:disabled {
1634
- opacity: 0.3;
1635
- cursor: not-allowed;
1636
- }
1637
-
1638
- &--prev {
1639
- left: 12px;
1640
- }
1641
-
1642
- &--next {
1643
- right: 12px;
1644
- }
1645
- }
1646
-
1647
- .carousel-remove-btn {
1648
- top: 10px;
1649
- right: 10px;
1650
- z-index: 10;
1651
- width: 32px;
1652
- height: 32px;
1653
- transition: background 0.2s ease;
1654
-
1655
- mat-icon {
1656
- font-size: 18px;
1657
- width: 18px;
1658
- height: 18px;
1659
- line-height: 18px;
1660
- color: #ffffff;
1661
- }
1662
-
1663
- &:hover:not(:disabled) {
1664
- background: rgba(220, 38, 38, 0.85);
1665
- }
1666
-
1667
- &:disabled {
1668
- opacity: 0.4;
1669
- cursor: not-allowed;
1670
- }
1671
- }
1672
-
1673
- .carousel-dots {
1674
- bottom: 10px;
1675
- left: 50%;
1676
- transform: translateX(-50%);
1677
- z-index: 10;
1678
- }
1679
-
1680
- .carousel-dot {
1681
- width: 8px;
1682
- height: 8px;
1683
- transition: background 0.2s ease, transform 0.2s ease;
1684
-
1685
- &.active {
1686
- background: #ffffff;
1687
- transform: scale(1.3);
1688
- }
1689
- }
1690
-
1691
- .media-thumbnail-strip {
1692
- max-width: 400px;
1693
- overflow-x: auto;
1694
-
1695
- &::-webkit-scrollbar {
1696
- height: 4px;
1697
- }
1698
-
1699
- &::-webkit-scrollbar-thumb {
1700
- background: var(--cc-sf-input-disabled-border, #D1D5DB);
1701
- border-radius: 2px;
1702
- }
1703
- }
1704
-
1705
- .media-thumb {
1706
- flex-shrink: 0;
1707
- width: 72px;
1708
- height: 52px;
1709
- transition: border-color 0.2s ease, transform 0.15s ease;
1710
-
1711
- &.active {
1712
- border-color: var(--mu-thumb-active-border, var(--cc-sf-accent-color, #3B82F6));
1713
- transform: scale(1.04);
1714
- }
1715
-
1716
- &:hover:not(.active) {
1717
- border-color: var(--cc-sf-input-hover-border, #9CA3AF);
1718
- }
1719
-
1720
- .thumb-img {
1721
- object-fit: cover;
1722
- }
1723
-
1724
- .thumb-yt-placeholder {
1725
- mat-icon {
1726
- font-size: 28px;
1727
- width: 28px;
1728
- height: 28px;
1729
- line-height: 28px;
1730
- }
1731
- }
1732
-
1733
- .thumb-uploading {
1734
- .thumb-spinner {
1735
- width: 20px;
1736
- height: 20px;
1737
- border-top-color: var(--cc-sf-accent-color, #3B82F6);
1738
- animation: cc-spin 0.7s linear infinite;
1739
- }
1740
- }
1741
- }
1742
-
1743
- // ── Portal Modal Styles (rendered in document.body) ───────────────
1744
-
1745
- .media-library-portal-host {
1746
- position: fixed;
1747
- inset: 0;
1748
- z-index: 9999;
1749
- display: flex;
1750
- align-items: center;
1751
- justify-content: center;
1752
- visibility: hidden;
1753
- opacity: 0;
1754
- pointer-events: none;
1755
- transition: opacity 0.2s ease, visibility 0.2s ease;
1756
-
1757
- &.is-open {
1758
- visibility: visible;
1759
- opacity: 1;
1760
- pointer-events: auto;
1761
-
1762
- .media-library-modal {
1763
- transform: scale(1) translateY(0);
1764
- }
1765
- }
1766
- }
1767
-
1768
- .media-library-overlay {
1769
- position: absolute;
1770
- inset: 0;
1771
- background: rgba(0, 0, 0, 0.5);
1772
- backdrop-filter: blur(2px);
1773
- }
1774
-
1775
- .media-library-modal {
1776
- position: relative;
1777
- z-index: 10000;
1778
- width: 90vw;
1779
- max-width: 900px;
1780
- max-height: 90vh;
1781
- background: #ffffff;
1782
- border-radius: 16px;
1783
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
1784
- transform: scale(0.95) translateY(10px);
1785
- transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
1786
- }
1787
-
1788
-
1789
- .library-modal-header {
1790
- flex-shrink: 0;
1791
- }
1792
-
1793
- .library-modal-title {
1794
- font-weight: 700;
1795
- }
1796
-
1797
- .library-modal-subtitle {
1798
- line-height: 1.5;
1799
- max-width: 600px;
1800
- }
1801
-
1802
- .library-close-btn {
1803
- width: 32px;
1804
- height: 32px;
1805
- transition: background 0.15s ease, color 0.15s ease;
1806
-
1807
- mat-icon {
1808
- font-size: 20px;
1809
- width: 20px;
1810
- height: 20px;
1811
- line-height: 20px;
1812
- }
1813
-
1814
- &:hover {
1815
- background: var(--cc-sf-input-disabled-bg, #F3F4F6);
1816
- color: var(--cc-sf-label-color, #374151);
1817
- }
1818
- }
1819
-
1820
- .library-loading,
1821
- .library-empty {
1822
- mat-icon {
1823
- font-size: 40px;
1824
- width: 40px;
1825
- height: 40px;
1826
- line-height: 40px;
1827
- opacity: 0.5;
1828
- }
1829
- }
1830
-
1831
- .lib-spinner {
1832
- width: 36px;
1833
- height: 36px;
1834
- border-top-color: var(--cc-sf-accent-color, #3B82F6);
1835
- animation: cc-spin 0.7s linear infinite;
1836
- }
1837
-
1838
- .library-error {
1839
- flex-shrink: 0;
1840
-
1841
- mat-icon {
1842
- font-size: 20px;
1843
- width: 20px;
1844
- height: 20px;
1845
- line-height: 20px;
1846
- }
1847
- }
1848
-
1849
- .library-grid {
1850
- grid-template-columns: repeat(5, 1fr);
1851
- max-height: 50vh;
1852
- overflow-y: auto;
1853
-
1854
- &::-webkit-scrollbar {
1855
- width: 8px;
1856
- }
1857
-
1858
- &::-webkit-scrollbar-track {
1859
- background: #F1F1F1;
1860
- }
1861
-
1862
- &::-webkit-scrollbar-thumb {
1863
- background: #C1C1C1;
1864
- border-radius: 10px;
1865
- border: 2px solid #F1F1F1;
1866
- }
1867
- }
1868
-
1869
- .library-grid-item {
1870
- aspect-ratio: 1 / 1;
1871
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1872
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
1873
-
1874
- &:hover {
1875
- transform: translateY(-4px) scale(1.02);
1876
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
1877
- }
1878
-
1879
- &.selected {
1880
- border-color: var(--cc-sf-accent-color, #3B82F6);
1881
-
1882
- .library-grid-img {
1883
- opacity: 0.7;
1884
- }
1885
- }
1886
-
1887
- &:hover .library-overlay-hover {
1888
- opacity: 1;
1889
- }
1890
- }
1891
-
1892
- .library-grid-img {
1893
- object-fit: cover;
1894
- }
1895
-
1896
- .library-overlay-hover {
1897
- inset: 0;
1898
- opacity: 0;
1899
- transition: opacity 0.15s ease;
1900
- }
1901
-
1902
- .library-check {
1903
- top: 6px;
1904
- right: 6px;
1905
- width: 22px;
1906
- height: 22px;
1907
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
1908
-
1909
- mat-icon {
1910
- font-size: 18px;
1911
- width: 18px;
1912
- height: 18px;
1913
- line-height: 18px;
1914
- }
1915
- }
1916
-
1917
- .library-modal-footer {
1918
- flex-shrink: 0;
1919
-
1920
- .library-footer-actions {
1921
- ::ng-deep .cc-btn-primary {
1922
- background-color: var(--cc-sf-accent-color, #3B82F6) !important;
1923
- border-color: var(--cc-sf-accent-color, #3B82F6) !important;
1924
- color: #ffffff !important;
1925
- font-weight: 600;
1926
- padding-left: 32px;
1927
- padding-right: 32px;
1928
-
1929
- &:hover {
1930
- background-color: var(--cc-sf-btn-primary-hover-bg, #2563EB) !important;
1931
- }
1932
-
1933
- &:disabled {
1934
- background-color: #93C5FD !important;
1935
- cursor: not-allowed;
1936
- }
1937
- }
1938
-
1939
- ::ng-deep .cc-btn-outline {
1940
- font-weight: 600;
1941
- padding-left: 24px;
1942
- padding-right: 24px;
1943
- border-color: #D1D5DB;
1944
- color: #374151;
1945
-
1946
- &:hover {
1947
- background-color: #F9FAFB;
1948
- }
1949
- }
1950
- }
1951
- }
1952
-
1953
- .location-subtitle {
1954
- line-height: 1.5;
1955
- }
1956
-
1957
- .loc-tab-btn {
1958
- ::ng-deep button {
1959
- width: 100%;
1960
-
1961
- &:not(.cc-btn-warning) {
1962
- background-color: var(--cc-sf-input-bg, #ffffff) !important;
1963
- color: var(--cc-sf-label-color, #000000) !important;
1964
- border: 1px solid var(--cc-sf-input-disabled-border, #E5E7EB);
1965
-
1966
- &:hover {
1967
- background-color: var(--cc-sf-input-disabled-bg, #F3F4F6) !important;
1968
- }
1969
- }
1970
- }
1971
- }
1972
-
1973
- .loc-venue-item {
1974
- transition: box-shadow 0.15s ease, border-color 0.15s ease;
1975
-
1976
- &:hover {
1977
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
1978
- border-color: var(--cc-sf-input-hover-border, #9CA3AF);
1979
- }
1980
- }
1981
-
1982
- .loc-venue-search-icon {
1983
- width: 18px;
1984
- height: 18px;
1985
- line-height: 18px;
1986
- flex-shrink: 0;
1987
- }
1988
-
1989
- .loc-venue-text {
1990
- white-space: nowrap;
1991
- text-overflow: ellipsis;
1992
- }
1993
-
1994
- .loc-action-btn {
1995
- transition: background 0.15s ease, color 0.15s ease;
1996
- flex-shrink: 0;
1997
-
1998
- mat-icon {
1999
- font-size: 18px;
2000
- width: 18px;
2001
- height: 18px;
2002
- line-height: 18px;
2003
- }
2004
-
2005
- &.loc-delete-btn {
2006
- color: var(--loc-delete-color, #E53E3E);
2007
-
2008
- &:hover {
2009
- background: var(--cc-sf-error-bg, #FEF2F2);
2010
- }
2011
- }
2012
-
2013
- &.loc-edit-btn {
2014
- color: var(--cc-sf-hint-color, #9CA3AF);
2015
-
2016
- &:hover {
2017
- color: var(--cc-sf-input-focus-border, #3B82F6);
2018
- background: var(--cc-sf-dropzone-hover-bg, #EFF6FF);
2019
- }
2020
- }
2021
- }
2022
-
2023
- .loc-search-icon {
2024
- left: 0.75rem;
2025
- width: 1.1rem;
2026
- height: 1.1rem;
2027
- line-height: 1.1rem;
2028
- z-index: 1;
2029
- }
2030
-
2031
- .loc-suggestions-panel {
2032
- top: calc(100% + 4px);
2033
- left: 0;
2034
- right: 0;
2035
- z-index: 300;
2036
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10);
2037
- animation: mu-fade-in 0.15s ease;
2038
- max-height: 260px;
2039
- overflow-y: auto;
2040
- }
2041
-
2042
- .loc-suggestion-item {
2043
- transition: background 0.12s ease;
2044
-
2045
- &:hover,
2046
- &:focus {
2047
- background: var(--loc-suggestion-hover-bg, #F0F9FF);
2048
- }
2049
-
2050
- &:not(:last-child) {
2051
- border-bottom: 1px solid var(--cc-sf-input-disabled-border, #F3F4F6);
2052
- }
2053
- }
2054
-
2055
- .loc-suggestion-icon {
2056
- width: 18px;
2057
- height: 18px;
2058
- line-height: 18px;
2059
- flex-shrink: 0;
2060
- }
2061
-
2062
- .loc-suggestion-text {
2063
- white-space: nowrap;
2064
- text-overflow: ellipsis;
2065
- }
2066
-
2067
- .loc-add-btn {
2068
- transition: opacity 0.15s ease;
2069
-
2070
- mat-icon {
2071
- font-size: 20px;
2072
- width: 20px;
2073
- height: 20px;
2074
- line-height: 20px;
2075
- }
2076
-
2077
- &:hover {
2078
- opacity: 0.8;
2079
- }
2080
- }
2081
-
2082
- .loc-map-container {
2083
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
2084
- }
2085
-
2086
- .loc-tba-panel {
2087
- min-height: 120px;
2088
- }
2089
-
2090
- .loc-tba-icon {
2091
- width: 40px;
2092
- height: 40px;
2093
- line-height: 40px;
2094
- opacity: 0.6;
2095
- }
2096
-
2097
- .loc-tba-text {
2098
- line-height: 1.6;
2099
- max-width: 360px;
2100
- }
2101
-
2102
- .radio-label {
2103
- display: flex !important;
2104
-
2105
- .option-content {
2106
- padding-left: 10px;
2107
- }
2108
- }
2109
-
2110
- /* ==========================================================================
2111
- LINK_LIST Field Styling
2112
- ========================================================================== */
2113
- .link-list-container {
2114
- border: none !important;
2115
- background-color: transparent !important;
2116
- padding: 0 !important;
2117
- box-shadow: none !important;
2118
- overflow: visible !important;
2119
- }
2120
-
2121
- .link-items-list {
2122
- list-style: none;
2123
-
2124
- @media (max-width: 640px) {
2125
- grid-template-columns: 1fr !important;
2126
-
2127
- .link-list-item {
2128
- grid-column: span 12 !important;
2129
- }
2130
- }
2131
- }
2132
-
2133
- .link-list-item {
2134
- display: flex;
2135
- align-items: center;
2136
- justify-content: space-between;
2137
- padding: 10px 16px;
2138
- background-color: var(--cc-sf-link-item-bg, #f9fafb) !important;
2139
- border: 1px solid var(--cc-sf-link-item-border, #E5E7EB) !important;
2140
- border-radius: var(--cc-sf-input-radius, 9px) !important;
2141
- gap: 12px;
2142
- min-height: 48px;
2143
-
2144
- .link-url-text {
2145
- font-size: 0.875rem;
2146
- color: var(--cc-sf-link-item-text, #111827);
2147
- word-break: break-all;
2148
- }
2149
- }
2150
-
2151
- .link-list-item .action-btn {
2152
- border: none;
2153
- background: transparent;
2154
- cursor: pointer;
2155
- display: inline-flex;
2156
- align-items: center;
2157
- justify-content: center;
2158
- width: 34px;
2159
- height: 34px;
2160
- padding: 0;
2161
- border-radius: 6px;
2162
- transition: background 0.15s ease, color 0.15s ease;
2163
-
2164
- mat-icon {
2165
- font-size: 22px;
2166
- width: 22px;
2167
- height: 22px;
2168
- line-height: 22px;
2169
- display: flex;
2170
- align-items: center;
2171
- justify-content: center;
2172
- }
2173
-
2174
- &.edit-btn {
2175
- color: var(--cc-sf-link-edit-color, #4b5563);
2176
- &:hover {
2177
- color: var(--cc-sf-accent-color, #6366F1);
2178
- background-color: #F3F4F6;
2179
- }
2180
- }
2181
-
2182
- &.delete-btn {
2183
- color: var(--cc-sf-link-delete-color, #ef4444);
2184
- &:hover {
2185
- background-color: var(--cc-sf-error-bg, #FFF5F5);
2186
- }
2187
- }
2188
-
2189
- &.save-btn {
2190
- color: var(--cc-sf-link-save-color, #16a34a) !important;
2191
- &:hover {
2192
- background-color: #ECFDF5;
2193
- }
2194
- }
2195
-
2196
- &.cancel-btn {
2197
- color: #ef4444 !important; // Red cancel icon color
2198
- &:hover {
2199
- background-color: var(--cc-sf-error-bg, #FFF5F5);
2200
- }
2201
- }
2202
- }
2203
-
2204
- .pe-40px {
2205
- padding-right: 40px !important;
2206
- }
2207
-
2208
- .dropdown-loading-state {
2209
- display: flex;
2210
- align-items: center;
2211
- justify-content: center;
2212
- padding: 16px;
2213
- gap: 8px;
2214
- }
2215
-
2216
- .dropdown-spinner {
2217
- width: 20px;
2218
- height: 20px;
2219
- border: 2px solid #E2E8F0;
2220
- border-top-color: var(--cc-sf-accent-color, #3B82F6);
2221
- border-radius: 50%;
2222
- animation: cc-spin 0.7s linear infinite;
2223
- }
2224
-
2225
- .mini-spinner {
2226
- width: 16px;
2227
- height: 16px;
2228
- border: 2px solid #E2E8F0;
2229
- border-top-color: var(--cc-sf-accent-color, #3B82F6);
2230
- border-radius: 50%;
2231
- animation: cc-spin 0.7s linear infinite;
2232
- }
2233
-
2234
- .native-select-wrapper {
2235
- display: block;
2236
- width: 100%;
2237
- position: relative;
2238
-
2239
- select {
2240
- width: 100%;
2241
- }
2242
-
2243
- .native-select-spinner {
2244
- position: absolute;
2245
- right: 2.5rem;
2246
- top: calc(50% - 7px);
2247
- width: 14px;
2248
- height: 14px;
2249
- border: 2px solid #CBD5E1;
2250
- border-top-color: var(--cc-sf-accent-color, #3B82F6);
2251
- border-radius: 50%;
2252
- animation: cc-spin 0.7s linear infinite;
2253
- pointer-events: none;
2254
- }
2255
- }