@educarehq/solaris-ui 0.2.0 → 0.3.1

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 (417) hide show
  1. package/fesm2022/educarehq-solaris-ui.mjs +12261 -0
  2. package/fesm2022/educarehq-solaris-ui.mjs.map +1 -0
  3. package/package.json +5 -5
  4. package/styles/_button.scss +510 -510
  5. package/styles/_dropdown-menu.scss +72 -0
  6. package/styles/_icon-button.scss +481 -481
  7. package/styles/_input.scss +255 -255
  8. package/styles/_popover.scss +73 -68
  9. package/styles/_theme.scss +46 -36
  10. package/styles/_toast.scss +9 -0
  11. package/styles/token/border/_border.scss +5 -0
  12. package/styles/token/border/_index.scss +1 -0
  13. package/styles/token/color/_dark.scss +78 -0
  14. package/styles/token/color/_high-contrast.scss +27 -0
  15. package/styles/token/color/_index.scss +3 -0
  16. package/styles/token/color/_light.scss +69 -0
  17. package/styles/token/density/_comfortable.scss +15 -0
  18. package/styles/token/density/_compact.scss +15 -0
  19. package/styles/token/density/_index.scss +2 -0
  20. package/styles/token/motion/_index.scss +2 -0
  21. package/styles/token/motion/_motion.scss +15 -0
  22. package/styles/token/motion/_reduced-motion.scss +15 -0
  23. package/styles/token/opacity/_index.scss +1 -0
  24. package/styles/token/opacity/_opacity.scss +4 -0
  25. package/styles/token/radius/_index.scss +1 -0
  26. package/styles/token/radius/_radius.scss +8 -0
  27. package/styles/token/shadow/_index.scss +1 -0
  28. package/styles/token/shadow/_shadow.scss +26 -0
  29. package/styles/token/spacing/_index.scss +1 -0
  30. package/styles/token/spacing/_spacing.scss +15 -0
  31. package/styles/token/typography/_font-family.scss +13 -0
  32. package/styles/token/typography/_index.scss +2 -0
  33. package/styles/token/typography/_typography.scss +25 -0
  34. package/styles/token/z-index/_index.scss +1 -0
  35. package/styles/token/z-index/_z-index.scss +10 -0
  36. package/types/educarehq-solaris-ui.d.ts +3201 -0
  37. package/educarehq-solaris-ui.d.ts +0 -5
  38. package/esm2022/educarehq-solaris-ui.js +0 -5
  39. package/esm2022/educarehq-solaris-ui.js.map +0 -1
  40. package/esm2022/index.js +0 -70
  41. package/esm2022/index.js.map +0 -1
  42. package/esm2022/lib/components/actions/button/directives/button-icon.directive.js +0 -17
  43. package/esm2022/lib/components/actions/button/directives/button-icon.directive.js.map +0 -1
  44. package/esm2022/lib/components/actions/button/directives/button.directive.js +0 -60
  45. package/esm2022/lib/components/actions/button/directives/button.directive.js.map +0 -1
  46. package/esm2022/lib/components/actions/button/model/button.types.js +0 -1
  47. package/esm2022/lib/components/actions/button/model/button.types.js.map +0 -1
  48. package/esm2022/lib/components/actions/button-group/component/button-group.component.js +0 -21
  49. package/esm2022/lib/components/actions/button-group/component/button-group.component.js.map +0 -1
  50. package/esm2022/lib/components/actions/button-group/model/button-group.types.js +0 -1
  51. package/esm2022/lib/components/actions/button-group/model/button-group.types.js.map +0 -1
  52. package/esm2022/lib/components/actions/icon-button/directives/icon-button-badge.directive.js +0 -17
  53. package/esm2022/lib/components/actions/icon-button/directives/icon-button-badge.directive.js.map +0 -1
  54. package/esm2022/lib/components/actions/icon-button/directives/icon-button.directive.js +0 -58
  55. package/esm2022/lib/components/actions/icon-button/directives/icon-button.directive.js.map +0 -1
  56. package/esm2022/lib/components/actions/icon-button/model/icon-button.types.js +0 -1
  57. package/esm2022/lib/components/actions/icon-button/model/icon-button.types.js.map +0 -1
  58. package/esm2022/lib/components/data-display/badge/component/badge.component.js +0 -24
  59. package/esm2022/lib/components/data-display/badge/component/badge.component.js.map +0 -1
  60. package/esm2022/lib/components/data-display/badge/directives/badge-icon.directive.js +0 -17
  61. package/esm2022/lib/components/data-display/badge/directives/badge-icon.directive.js.map +0 -1
  62. package/esm2022/lib/components/data-display/badge/model/badge.types.js +0 -1
  63. package/esm2022/lib/components/data-display/badge/model/badge.types.js.map +0 -1
  64. package/esm2022/lib/components/data-display/card/component/card.component.js +0 -20
  65. package/esm2022/lib/components/data-display/card/component/card.component.js.map +0 -1
  66. package/esm2022/lib/components/data-display/card/directives/card-actions.directive.js +0 -17
  67. package/esm2022/lib/components/data-display/card/directives/card-actions.directive.js.map +0 -1
  68. package/esm2022/lib/components/data-display/card/directives/card-content.directive.js +0 -17
  69. package/esm2022/lib/components/data-display/card/directives/card-content.directive.js.map +0 -1
  70. package/esm2022/lib/components/data-display/card/directives/card-description.directive.js +0 -17
  71. package/esm2022/lib/components/data-display/card/directives/card-description.directive.js.map +0 -1
  72. package/esm2022/lib/components/data-display/card/directives/card-footer.directive.js +0 -19
  73. package/esm2022/lib/components/data-display/card/directives/card-footer.directive.js.map +0 -1
  74. package/esm2022/lib/components/data-display/card/directives/card-header.directive.js +0 -17
  75. package/esm2022/lib/components/data-display/card/directives/card-header.directive.js.map +0 -1
  76. package/esm2022/lib/components/data-display/card/directives/card-media.directive.js +0 -17
  77. package/esm2022/lib/components/data-display/card/directives/card-media.directive.js.map +0 -1
  78. package/esm2022/lib/components/data-display/card/directives/card-title.directive.js +0 -17
  79. package/esm2022/lib/components/data-display/card/directives/card-title.directive.js.map +0 -1
  80. package/esm2022/lib/components/data-display/card/model/card.types.js +0 -1
  81. package/esm2022/lib/components/data-display/card/model/card.types.js.map +0 -1
  82. package/esm2022/lib/components/feedback/alert/component/alert-actions.component.js +0 -18
  83. package/esm2022/lib/components/feedback/alert/component/alert-actions.component.js.map +0 -1
  84. package/esm2022/lib/components/feedback/alert/component/alert.component.js +0 -90
  85. package/esm2022/lib/components/feedback/alert/component/alert.component.js.map +0 -1
  86. package/esm2022/lib/components/feedback/alert/directives/alert-description.directive.js +0 -17
  87. package/esm2022/lib/components/feedback/alert/directives/alert-description.directive.js.map +0 -1
  88. package/esm2022/lib/components/feedback/alert/directives/alert-title.directive.js +0 -17
  89. package/esm2022/lib/components/feedback/alert/directives/alert-title.directive.js.map +0 -1
  90. package/esm2022/lib/components/feedback/alert/model/alert.types.js +0 -1
  91. package/esm2022/lib/components/feedback/alert/model/alert.types.js.map +0 -1
  92. package/esm2022/lib/components/feedback/skeleton/component/skeleton.component.js +0 -69
  93. package/esm2022/lib/components/feedback/skeleton/component/skeleton.component.js.map +0 -1
  94. package/esm2022/lib/components/feedback/skeleton/model/skeleton.types.js +0 -1
  95. package/esm2022/lib/components/feedback/skeleton/model/skeleton.types.js.map +0 -1
  96. package/esm2022/lib/components/forms/checkbox/component/checkbox.component.js +0 -227
  97. package/esm2022/lib/components/forms/checkbox/component/checkbox.component.js.map +0 -1
  98. package/esm2022/lib/components/forms/checkbox/model/checkbox.types.js +0 -1
  99. package/esm2022/lib/components/forms/checkbox/model/checkbox.types.js.map +0 -1
  100. package/esm2022/lib/components/forms/checkbox-group/component/checkbox-group.component.js +0 -441
  101. package/esm2022/lib/components/forms/checkbox-group/component/checkbox-group.component.js.map +0 -1
  102. package/esm2022/lib/components/forms/checkbox-group/model/checkbox-group.types.js +0 -1
  103. package/esm2022/lib/components/forms/checkbox-group/model/checkbox-group.types.js.map +0 -1
  104. package/esm2022/lib/components/forms/email-field/component/email-field.component.js +0 -214
  105. package/esm2022/lib/components/forms/email-field/component/email-field.component.js.map +0 -1
  106. package/esm2022/lib/components/forms/email-field/model/email-field.types.js +0 -1
  107. package/esm2022/lib/components/forms/email-field/model/email-field.types.js.map +0 -1
  108. package/esm2022/lib/components/forms/email-field/validators/email-field.validators.js +0 -69
  109. package/esm2022/lib/components/forms/email-field/validators/email-field.validators.js.map +0 -1
  110. package/esm2022/lib/components/forms/form-field/component/form-error.component.js +0 -19
  111. package/esm2022/lib/components/forms/form-field/component/form-error.component.js.map +0 -1
  112. package/esm2022/lib/components/forms/form-field/component/form-field.component.js +0 -394
  113. package/esm2022/lib/components/forms/form-field/component/form-field.component.js.map +0 -1
  114. package/esm2022/lib/components/forms/form-field/component/form-hint.component.js +0 -18
  115. package/esm2022/lib/components/forms/form-field/component/form-hint.component.js.map +0 -1
  116. package/esm2022/lib/components/forms/form-field/component/form-label.component.js +0 -18
  117. package/esm2022/lib/components/forms/form-field/component/form-label.component.js.map +0 -1
  118. package/esm2022/lib/components/forms/form-field/directives/form-field-trigger.directive.js +0 -14
  119. package/esm2022/lib/components/forms/form-field/directives/form-field-trigger.directive.js.map +0 -1
  120. package/esm2022/lib/components/forms/form-field/directives/form-prefix.directive.js +0 -17
  121. package/esm2022/lib/components/forms/form-field/directives/form-prefix.directive.js.map +0 -1
  122. package/esm2022/lib/components/forms/form-field/directives/form-suffix.directive.js +0 -17
  123. package/esm2022/lib/components/forms/form-field/directives/form-suffix.directive.js.map +0 -1
  124. package/esm2022/lib/components/forms/form-field/index.js +0 -8
  125. package/esm2022/lib/components/forms/form-field/index.js.map +0 -1
  126. package/esm2022/lib/components/forms/form-field/model/form-control.contract.js +0 -3
  127. package/esm2022/lib/components/forms/form-field/model/form-control.contract.js.map +0 -1
  128. package/esm2022/lib/components/forms/form-field/model/form-field.types.js +0 -1
  129. package/esm2022/lib/components/forms/form-field/model/form-field.types.js.map +0 -1
  130. package/esm2022/lib/components/forms/input/directives/input.directive.js +0 -148
  131. package/esm2022/lib/components/forms/input/directives/input.directive.js.map +0 -1
  132. package/esm2022/lib/components/forms/input/index.js +0 -2
  133. package/esm2022/lib/components/forms/input/index.js.map +0 -1
  134. package/esm2022/lib/components/forms/input/model/input.defaults.js +0 -27
  135. package/esm2022/lib/components/forms/input/model/input.defaults.js.map +0 -1
  136. package/esm2022/lib/components/forms/input/model/input.types.js +0 -1
  137. package/esm2022/lib/components/forms/input/model/input.types.js.map +0 -1
  138. package/esm2022/lib/components/forms/multi-select/component/multi-select.component.js +0 -1119
  139. package/esm2022/lib/components/forms/multi-select/component/multi-select.component.js.map +0 -1
  140. package/esm2022/lib/components/forms/multi-select/model/multi-select.types.js +0 -1
  141. package/esm2022/lib/components/forms/multi-select/model/multi-select.types.js.map +0 -1
  142. package/esm2022/lib/components/forms/option/component/option.component.js +0 -149
  143. package/esm2022/lib/components/forms/option/component/option.component.js.map +0 -1
  144. package/esm2022/lib/components/forms/option/directives/option-slots.directive.js +0 -58
  145. package/esm2022/lib/components/forms/option/directives/option-slots.directive.js.map +0 -1
  146. package/esm2022/lib/components/forms/option/index.js +0 -3
  147. package/esm2022/lib/components/forms/option/index.js.map +0 -1
  148. package/esm2022/lib/components/forms/option/model/option.types.js +0 -1
  149. package/esm2022/lib/components/forms/option/model/option.types.js.map +0 -1
  150. package/esm2022/lib/components/forms/option-group/component/option-group.component.js +0 -103
  151. package/esm2022/lib/components/forms/option-group/component/option-group.component.js.map +0 -1
  152. package/esm2022/lib/components/forms/option-group/index.js +0 -2
  153. package/esm2022/lib/components/forms/option-group/index.js.map +0 -1
  154. package/esm2022/lib/components/forms/option-group/model/option-group.types.js +0 -1
  155. package/esm2022/lib/components/forms/option-group/model/option-group.types.js.map +0 -1
  156. package/esm2022/lib/components/forms/password-field/component/password-field.component.js +0 -299
  157. package/esm2022/lib/components/forms/password-field/component/password-field.component.js.map +0 -1
  158. package/esm2022/lib/components/forms/password-field/model/password-field-constants.js +0 -5
  159. package/esm2022/lib/components/forms/password-field/model/password-field-constants.js.map +0 -1
  160. package/esm2022/lib/components/forms/password-field/model/password-field.types.js +0 -1
  161. package/esm2022/lib/components/forms/password-field/model/password-field.types.js.map +0 -1
  162. package/esm2022/lib/components/forms/password-field/model/password-policy.types.js +0 -1
  163. package/esm2022/lib/components/forms/password-field/model/password-policy.types.js.map +0 -1
  164. package/esm2022/lib/components/forms/password-field/model/password-strength.js +0 -67
  165. package/esm2022/lib/components/forms/password-field/model/password-strength.js.map +0 -1
  166. package/esm2022/lib/components/forms/password-field/validators/password.validator.js +0 -45
  167. package/esm2022/lib/components/forms/password-field/validators/password.validator.js.map +0 -1
  168. package/esm2022/lib/components/forms/radio/component/radio.component.js +0 -219
  169. package/esm2022/lib/components/forms/radio/component/radio.component.js.map +0 -1
  170. package/esm2022/lib/components/forms/radio/model/radio.types.js +0 -1
  171. package/esm2022/lib/components/forms/radio/model/radio.types.js.map +0 -1
  172. package/esm2022/lib/components/forms/radio-group/component/radio-group.component.js +0 -348
  173. package/esm2022/lib/components/forms/radio-group/component/radio-group.component.js.map +0 -1
  174. package/esm2022/lib/components/forms/radio-group/model/radio-group.token.js +0 -3
  175. package/esm2022/lib/components/forms/radio-group/model/radio-group.token.js.map +0 -1
  176. package/esm2022/lib/components/forms/radio-group/model/radio-group.types.js +0 -1
  177. package/esm2022/lib/components/forms/radio-group/model/radio-group.types.js.map +0 -1
  178. package/esm2022/lib/components/forms/select/component/select.component.js +0 -819
  179. package/esm2022/lib/components/forms/select/component/select.component.js.map +0 -1
  180. package/esm2022/lib/components/forms/select/model/select.types.js +0 -1
  181. package/esm2022/lib/components/forms/select/model/select.types.js.map +0 -1
  182. package/esm2022/lib/components/forms/switch/component/switch.component.js +0 -211
  183. package/esm2022/lib/components/forms/switch/component/switch.component.js.map +0 -1
  184. package/esm2022/lib/components/forms/switch/index.js +0 -2
  185. package/esm2022/lib/components/forms/switch/index.js.map +0 -1
  186. package/esm2022/lib/components/forms/switch/model/switch.types.js +0 -1
  187. package/esm2022/lib/components/forms/switch/model/switch.types.js.map +0 -1
  188. package/esm2022/lib/components/forms/switch-group/component/switch-group.component.js +0 -369
  189. package/esm2022/lib/components/forms/switch-group/component/switch-group.component.js.map +0 -1
  190. package/esm2022/lib/components/forms/switch-group/model/switch-group.types.js +0 -1
  191. package/esm2022/lib/components/forms/switch-group/model/switch-group.types.js.map +0 -1
  192. package/esm2022/lib/components/forms/textarea/directives/textarea.directive.js +0 -137
  193. package/esm2022/lib/components/forms/textarea/directives/textarea.directive.js.map +0 -1
  194. package/esm2022/lib/components/forms/textarea/model/textarea.types.js +0 -1
  195. package/esm2022/lib/components/forms/textarea/model/textarea.types.js.map +0 -1
  196. package/esm2022/lib/components/icon/component/solaris-icon.component.js +0 -20
  197. package/esm2022/lib/components/icon/component/solaris-icon.component.js.map +0 -1
  198. package/esm2022/lib/components/icon/index.js +0 -2
  199. package/esm2022/lib/components/icon/index.js.map +0 -1
  200. package/esm2022/lib/components/interaction/popover/component/popover-panel.component.js +0 -29
  201. package/esm2022/lib/components/interaction/popover/component/popover-panel.component.js.map +0 -1
  202. package/esm2022/lib/components/interaction/popover/directives/popover-trigger.directive.js +0 -317
  203. package/esm2022/lib/components/interaction/popover/directives/popover-trigger.directive.js.map +0 -1
  204. package/esm2022/lib/components/interaction/popover/directives/popover.directive.js +0 -16
  205. package/esm2022/lib/components/interaction/popover/directives/popover.directive.js.map +0 -1
  206. package/esm2022/lib/components/interaction/popover/index.js +0 -4
  207. package/esm2022/lib/components/interaction/popover/index.js.map +0 -1
  208. package/esm2022/lib/components/interaction/popover/model/popover-position.js +0 -145
  209. package/esm2022/lib/components/interaction/popover/model/popover-position.js.map +0 -1
  210. package/esm2022/lib/components/interaction/popover/model/popover.types.js +0 -1
  211. package/esm2022/lib/components/interaction/popover/model/popover.types.js.map +0 -1
  212. package/esm2022/lib/components/interaction/popover/token/popover.tokens.js +0 -3
  213. package/esm2022/lib/components/interaction/popover/token/popover.tokens.js.map +0 -1
  214. package/esm2022/lib/components/interaction/tooltip/component/tooltip-panel.component.js +0 -23
  215. package/esm2022/lib/components/interaction/tooltip/component/tooltip-panel.component.js.map +0 -1
  216. package/esm2022/lib/components/interaction/tooltip/directive/tooltip.directive.js +0 -405
  217. package/esm2022/lib/components/interaction/tooltip/directive/tooltip.directive.js.map +0 -1
  218. package/esm2022/lib/components/interaction/tooltip/index.js +0 -3
  219. package/esm2022/lib/components/interaction/tooltip/index.js.map +0 -1
  220. package/esm2022/lib/components/interaction/tooltip/model/tooltip-position.js +0 -209
  221. package/esm2022/lib/components/interaction/tooltip/model/tooltip-position.js.map +0 -1
  222. package/esm2022/lib/components/interaction/tooltip/model/tooltip.types.js +0 -1
  223. package/esm2022/lib/components/interaction/tooltip/model/tooltip.types.js.map +0 -1
  224. package/esm2022/lib/components/interaction/tooltip/token/tooltip.tokens.js +0 -3
  225. package/esm2022/lib/components/interaction/tooltip/token/tooltip.tokens.js.map +0 -1
  226. package/esm2022/lib/services/accessibility/directives/visually-hidden.directive.js +0 -25
  227. package/esm2022/lib/services/accessibility/directives/visually-hidden.directive.js.map +0 -1
  228. package/esm2022/lib/services/accessibility/model/solaris-accessibility-config.interface.js +0 -1
  229. package/esm2022/lib/services/accessibility/model/solaris-accessibility-config.interface.js.map +0 -1
  230. package/esm2022/lib/services/accessibility/model/solaris-accessibility.types.js +0 -1
  231. package/esm2022/lib/services/accessibility/model/solaris-accessibility.types.js.map +0 -1
  232. package/esm2022/lib/services/accessibility/provider/provide-solaris-accessibility.js +0 -10
  233. package/esm2022/lib/services/accessibility/provider/provide-solaris-accessibility.js.map +0 -1
  234. package/esm2022/lib/services/accessibility/service/solaris-accessibility.service.js +0 -60
  235. package/esm2022/lib/services/accessibility/service/solaris-accessibility.service.js.map +0 -1
  236. package/esm2022/lib/services/accessibility/testing/solaris-accessibility-testing.provider.js +0 -10
  237. package/esm2022/lib/services/accessibility/testing/solaris-accessibility-testing.provider.js.map +0 -1
  238. package/esm2022/lib/services/accessibility/token/solaris-accessibility.tokens.js +0 -3
  239. package/esm2022/lib/services/accessibility/token/solaris-accessibility.tokens.js.map +0 -1
  240. package/esm2022/lib/services/icon/icons/index.js +0 -2
  241. package/esm2022/lib/services/icon/icons/index.js.map +0 -1
  242. package/esm2022/lib/services/icon/icons/solaris-built-in-icons.js +0 -207
  243. package/esm2022/lib/services/icon/icons/solaris-built-in-icons.js.map +0 -1
  244. package/esm2022/lib/services/icon/index.js +0 -5
  245. package/esm2022/lib/services/icon/index.js.map +0 -1
  246. package/esm2022/lib/services/icon/model/solaris-icon-definition.interface.js +0 -1
  247. package/esm2022/lib/services/icon/model/solaris-icon-definition.interface.js.map +0 -1
  248. package/esm2022/lib/services/icon/model/solaris-icon.types.js +0 -1
  249. package/esm2022/lib/services/icon/model/solaris-icon.types.js.map +0 -1
  250. package/esm2022/lib/services/icon/provider/provide-solaris-icons.js +0 -10
  251. package/esm2022/lib/services/icon/provider/provide-solaris-icons.js.map +0 -1
  252. package/esm2022/lib/services/icon/service/solaris-icon-registry.service.js +0 -43
  253. package/esm2022/lib/services/icon/service/solaris-icon-registry.service.js.map +0 -1
  254. package/esm2022/lib/services/icon/token/solaris-icon.tokens.js +0 -3
  255. package/esm2022/lib/services/icon/token/solaris-icon.tokens.js.map +0 -1
  256. package/esm2022/lib/services/theme/model/solaris-theme-config.interface.js +0 -1
  257. package/esm2022/lib/services/theme/model/solaris-theme-config.interface.js.map +0 -1
  258. package/esm2022/lib/services/theme/model/solaris-theme.types.js +0 -1
  259. package/esm2022/lib/services/theme/model/solaris-theme.types.js.map +0 -1
  260. package/esm2022/lib/services/theme/provider/provide-solaris-theme.js +0 -10
  261. package/esm2022/lib/services/theme/provider/provide-solaris-theme.js.map +0 -1
  262. package/esm2022/lib/services/theme/service/solaris-theme.service.js +0 -22
  263. package/esm2022/lib/services/theme/service/solaris-theme.service.js.map +0 -1
  264. package/esm2022/lib/services/theme/testing/solaris-theme-testing.provider.js +0 -10
  265. package/esm2022/lib/services/theme/testing/solaris-theme-testing.provider.js.map +0 -1
  266. package/esm2022/lib/services/theme/token/solaris-theme.tokens.js +0 -3
  267. package/esm2022/lib/services/theme/token/solaris-theme.tokens.js.map +0 -1
  268. package/esm2022/lib/services/translation/index.js +0 -6
  269. package/esm2022/lib/services/translation/index.js.map +0 -1
  270. package/esm2022/lib/services/translation/model/solaris-locale.types.js +0 -1
  271. package/esm2022/lib/services/translation/model/solaris-locale.types.js.map +0 -1
  272. package/esm2022/lib/services/translation/model/solaris-translate-config.interface.js +0 -1
  273. package/esm2022/lib/services/translation/model/solaris-translate-config.interface.js.map +0 -1
  274. package/esm2022/lib/services/translation/model/solaris-translate-defaults.js +0 -40
  275. package/esm2022/lib/services/translation/model/solaris-translate-defaults.js.map +0 -1
  276. package/esm2022/lib/services/translation/model/solaris-translation.types.js +0 -1
  277. package/esm2022/lib/services/translation/model/solaris-translation.types.js.map +0 -1
  278. package/esm2022/lib/services/translation/pipe/solaris-translate.pipe.js +0 -20
  279. package/esm2022/lib/services/translation/pipe/solaris-translate.pipe.js.map +0 -1
  280. package/esm2022/lib/services/translation/provider/provide-solaris-translate.js +0 -10
  281. package/esm2022/lib/services/translation/provider/provide-solaris-translate.js.map +0 -1
  282. package/esm2022/lib/services/translation/service/solaris-translate.service.js +0 -87
  283. package/esm2022/lib/services/translation/service/solaris-translate.service.js.map +0 -1
  284. package/esm2022/lib/services/translation/testing/solaris-translate-testing.provider.js +0 -32
  285. package/esm2022/lib/services/translation/testing/solaris-translate-testing.provider.js.map +0 -1
  286. package/esm2022/lib/services/translation/token/solaris-translate.tokens.js +0 -3
  287. package/esm2022/lib/services/translation/token/solaris-translate.tokens.js.map +0 -1
  288. package/esm2022/lib/testing/provide-solaris-testing.js +0 -11
  289. package/esm2022/lib/testing/provide-solaris-testing.js.map +0 -1
  290. package/esm2022/lib/testing/solaris-test-utilities.js +0 -12
  291. package/esm2022/lib/testing/solaris-test-utilities.js.map +0 -1
  292. package/index.d.ts +0 -106
  293. package/lib/components/actions/button/directives/button-icon.directive.d.ts +0 -5
  294. package/lib/components/actions/button/directives/button.directive.d.ts +0 -22
  295. package/lib/components/actions/button/model/button.types.d.ts +0 -5
  296. package/lib/components/actions/button-group/component/button-group.component.d.ts +0 -10
  297. package/lib/components/actions/button-group/model/button-group.types.d.ts +0 -2
  298. package/lib/components/actions/icon-button/directives/icon-button-badge.directive.d.ts +0 -5
  299. package/lib/components/actions/icon-button/directives/icon-button.directive.d.ts +0 -21
  300. package/lib/components/actions/icon-button/model/icon-button.types.d.ts +0 -5
  301. package/lib/components/data-display/badge/component/badge.component.d.ts +0 -12
  302. package/lib/components/data-display/badge/directives/badge-icon.directive.d.ts +0 -5
  303. package/lib/components/data-display/badge/model/badge.types.d.ts +0 -6
  304. package/lib/components/data-display/card/component/card.component.d.ts +0 -10
  305. package/lib/components/data-display/card/directives/card-actions.directive.d.ts +0 -5
  306. package/lib/components/data-display/card/directives/card-content.directive.d.ts +0 -5
  307. package/lib/components/data-display/card/directives/card-description.directive.d.ts +0 -5
  308. package/lib/components/data-display/card/directives/card-footer.directive.d.ts +0 -6
  309. package/lib/components/data-display/card/directives/card-header.directive.d.ts +0 -5
  310. package/lib/components/data-display/card/directives/card-media.directive.d.ts +0 -5
  311. package/lib/components/data-display/card/directives/card-title.directive.d.ts +0 -5
  312. package/lib/components/data-display/card/model/card.types.d.ts +0 -4
  313. package/lib/components/feedback/alert/component/alert-actions.component.d.ts +0 -5
  314. package/lib/components/feedback/alert/component/alert.component.d.ts +0 -26
  315. package/lib/components/feedback/alert/directives/alert-description.directive.d.ts +0 -5
  316. package/lib/components/feedback/alert/directives/alert-title.directive.d.ts +0 -5
  317. package/lib/components/feedback/alert/model/alert.types.d.ts +0 -5
  318. package/lib/components/feedback/skeleton/component/skeleton.component.d.ts +0 -17
  319. package/lib/components/feedback/skeleton/model/skeleton.types.d.ts +0 -5
  320. package/lib/components/forms/checkbox/component/checkbox.component.d.ts +0 -70
  321. package/lib/components/forms/checkbox/model/checkbox.types.d.ts +0 -5
  322. package/lib/components/forms/checkbox-group/component/checkbox-group.component.d.ts +0 -123
  323. package/lib/components/forms/checkbox-group/model/checkbox-group.types.d.ts +0 -5
  324. package/lib/components/forms/email-field/component/email-field.component.d.ts +0 -66
  325. package/lib/components/forms/email-field/model/email-field.types.d.ts +0 -6
  326. package/lib/components/forms/email-field/validators/email-field.validators.d.ts +0 -8
  327. package/lib/components/forms/form-field/component/form-error.component.d.ts +0 -5
  328. package/lib/components/forms/form-field/component/form-field.component.d.ts +0 -90
  329. package/lib/components/forms/form-field/component/form-hint.component.d.ts +0 -5
  330. package/lib/components/forms/form-field/component/form-label.component.d.ts +0 -5
  331. package/lib/components/forms/form-field/directives/form-field-trigger.directive.d.ts +0 -5
  332. package/lib/components/forms/form-field/directives/form-prefix.directive.d.ts +0 -5
  333. package/lib/components/forms/form-field/directives/form-suffix.directive.d.ts +0 -5
  334. package/lib/components/forms/form-field/index.d.ts +0 -8
  335. package/lib/components/forms/form-field/model/form-control.contract.d.ts +0 -11
  336. package/lib/components/forms/form-field/model/form-field.types.d.ts +0 -5
  337. package/lib/components/forms/input/directives/input.directive.d.ts +0 -37
  338. package/lib/components/forms/input/index.d.ts +0 -2
  339. package/lib/components/forms/input/model/input.defaults.d.ts +0 -2
  340. package/lib/components/forms/input/model/input.types.d.ts +0 -4
  341. package/lib/components/forms/multi-select/component/multi-select.component.d.ts +0 -202
  342. package/lib/components/forms/multi-select/model/multi-select.types.d.ts +0 -5
  343. package/lib/components/forms/option/component/option.component.d.ts +0 -58
  344. package/lib/components/forms/option/directives/option-slots.directive.d.ts +0 -21
  345. package/lib/components/forms/option/index.d.ts +0 -3
  346. package/lib/components/forms/option/model/option.types.d.ts +0 -3
  347. package/lib/components/forms/option-group/component/option-group.component.d.ts +0 -32
  348. package/lib/components/forms/option-group/index.d.ts +0 -2
  349. package/lib/components/forms/option-group/model/option-group.types.d.ts +0 -2
  350. package/lib/components/forms/password-field/component/password-field.component.d.ts +0 -81
  351. package/lib/components/forms/password-field/model/password-field-constants.d.ts +0 -4
  352. package/lib/components/forms/password-field/model/password-field.types.d.ts +0 -6
  353. package/lib/components/forms/password-field/model/password-policy.types.d.ts +0 -10
  354. package/lib/components/forms/password-field/model/password-strength.d.ts +0 -2
  355. package/lib/components/forms/password-field/validators/password.validator.d.ts +0 -3
  356. package/lib/components/forms/radio/component/radio.component.d.ts +0 -68
  357. package/lib/components/forms/radio/model/radio.types.d.ts +0 -4
  358. package/lib/components/forms/radio-group/component/radio-group.component.d.ts +0 -86
  359. package/lib/components/forms/radio-group/model/radio-group.token.d.ts +0 -2
  360. package/lib/components/forms/radio-group/model/radio-group.types.d.ts +0 -5
  361. package/lib/components/forms/select/component/select.component.d.ts +0 -158
  362. package/lib/components/forms/select/model/select.types.d.ts +0 -4
  363. package/lib/components/forms/switch/component/switch.component.d.ts +0 -66
  364. package/lib/components/forms/switch/index.d.ts +0 -2
  365. package/lib/components/forms/switch/model/switch.types.d.ts +0 -4
  366. package/lib/components/forms/switch-group/component/switch-group.component.d.ts +0 -91
  367. package/lib/components/forms/switch-group/model/switch-group.types.d.ts +0 -5
  368. package/lib/components/forms/textarea/directives/textarea.directive.d.ts +0 -37
  369. package/lib/components/forms/textarea/model/textarea.types.d.ts +0 -5
  370. package/lib/components/icon/component/solaris-icon.component.d.ts +0 -13
  371. package/lib/components/icon/index.d.ts +0 -1
  372. package/lib/components/interaction/popover/component/popover-panel.component.d.ts +0 -10
  373. package/lib/components/interaction/popover/directives/popover-trigger.directive.d.ts +0 -65
  374. package/lib/components/interaction/popover/directives/popover.directive.d.ts +0 -7
  375. package/lib/components/interaction/popover/index.d.ts +0 -4
  376. package/lib/components/interaction/popover/model/popover-position.d.ts +0 -4
  377. package/lib/components/interaction/popover/model/popover.types.d.ts +0 -7
  378. package/lib/components/interaction/popover/token/popover.tokens.d.ts +0 -12
  379. package/lib/components/interaction/tooltip/component/tooltip-panel.component.d.ts +0 -9
  380. package/lib/components/interaction/tooltip/directive/tooltip.directive.d.ts +0 -80
  381. package/lib/components/interaction/tooltip/index.d.ts +0 -3
  382. package/lib/components/interaction/tooltip/model/tooltip-position.d.ts +0 -5
  383. package/lib/components/interaction/tooltip/model/tooltip.types.d.ts +0 -22
  384. package/lib/components/interaction/tooltip/token/tooltip.tokens.d.ts +0 -21
  385. package/lib/services/accessibility/directives/visually-hidden.directive.d.ts +0 -5
  386. package/lib/services/accessibility/model/solaris-accessibility-config.interface.d.ts +0 -4
  387. package/lib/services/accessibility/model/solaris-accessibility.types.d.ts +0 -5
  388. package/lib/services/accessibility/provider/provide-solaris-accessibility.d.ts +0 -3
  389. package/lib/services/accessibility/service/solaris-accessibility.service.d.ts +0 -15
  390. package/lib/services/accessibility/testing/solaris-accessibility-testing.provider.d.ts +0 -3
  391. package/lib/services/accessibility/token/solaris-accessibility.tokens.d.ts +0 -3
  392. package/lib/services/icon/icons/index.d.ts +0 -1
  393. package/lib/services/icon/icons/solaris-built-in-icons.d.ts +0 -2
  394. package/lib/services/icon/index.d.ts +0 -8
  395. package/lib/services/icon/model/solaris-icon-definition.interface.d.ts +0 -36
  396. package/lib/services/icon/model/solaris-icon.types.d.ts +0 -4
  397. package/lib/services/icon/provider/provide-solaris-icons.d.ts +0 -3
  398. package/lib/services/icon/service/solaris-icon-registry.service.d.ts +0 -12
  399. package/lib/services/icon/token/solaris-icon.tokens.d.ts +0 -6
  400. package/lib/services/theme/model/solaris-theme-config.interface.d.ts +0 -5
  401. package/lib/services/theme/model/solaris-theme.types.d.ts +0 -3
  402. package/lib/services/theme/provider/provide-solaris-theme.d.ts +0 -3
  403. package/lib/services/theme/service/solaris-theme.service.d.ts +0 -9
  404. package/lib/services/theme/testing/solaris-theme-testing.provider.d.ts +0 -3
  405. package/lib/services/theme/token/solaris-theme.tokens.d.ts +0 -3
  406. package/lib/services/translation/index.d.ts +0 -8
  407. package/lib/services/translation/model/solaris-locale.types.d.ts +0 -4
  408. package/lib/services/translation/model/solaris-translate-config.interface.d.ts +0 -8
  409. package/lib/services/translation/model/solaris-translate-defaults.d.ts +0 -2
  410. package/lib/services/translation/model/solaris-translation.types.d.ts +0 -3
  411. package/lib/services/translation/pipe/solaris-translate.pipe.d.ts +0 -8
  412. package/lib/services/translation/provider/provide-solaris-translate.d.ts +0 -3
  413. package/lib/services/translation/service/solaris-translate.service.d.ts +0 -15
  414. package/lib/services/translation/testing/solaris-translate-testing.provider.d.ts +0 -3
  415. package/lib/services/translation/token/solaris-translate.tokens.d.ts +0 -3
  416. package/lib/testing/provide-solaris-testing.d.ts +0 -10
  417. package/lib/testing/solaris-test-utilities.d.ts +0 -3
@@ -1,394 +0,0 @@
1
- import { Component, input, computed, signal, effect, ContentChild, ElementRef, inject, NgZone, } from '@angular/core';
2
- import { FormControlDirective, FormControlName, NgModel } from '@angular/forms';
3
- import { SolarisFormPrefixDirective } from '../directives/form-prefix.directive';
4
- import { SolarisFormSuffixDirective } from '../directives/form-suffix.directive';
5
- import { SolarisTranslateService } from '../../../../services/translation';
6
- import { SolarisFormControl } from '../model/form-control.contract';
7
- import { SolarisFormLabelComponent } from './form-label.component';
8
- import { SolarisFormErrorComponent } from './form-error.component';
9
- import { SolarisFormHintComponent } from './form-hint.component';
10
- import * as i0 from "@angular/core";
11
- let nextId = 0;
12
- function generateId() {
13
- return `solaris-form-field-${++nextId}`;
14
- }
15
- export class SolarisFormFieldComponent {
16
- elementRef = inject(ElementRef);
17
- translateService = inject(SolarisTranslateService);
18
- ngZone = inject(NgZone);
19
- constructor() {
20
- // SECURITY_EXCEPTION: Setting disabled/readonly on native control is standard DOM API.
21
- // SECURITY_EXCEPTION: Required for FormField to propagate disabled/readonly state to projected control.
22
- effect(() => {
23
- this.isEffectivelyDisabled();
24
- this.isEffectivelyReadonly();
25
- this.syncControlDisabledReadonly();
26
- });
27
- }
28
- hintKey = input(...(ngDevMode ? [undefined, { debugName: "hintKey" }] : /* istanbul ignore next */ []));
29
- labelKey = input(...(ngDevMode ? [undefined, { debugName: "labelKey" }] : /* istanbul ignore next */ []));
30
- hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
31
- errorKey = input(...(ngDevMode ? [undefined, { debugName: "errorKey" }] : /* istanbul ignore next */ []));
32
- label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
33
- error = input('', ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
34
- optionalLabel = input(...(ngDevMode ? [undefined, { debugName: "optionalLabel" }] : /* istanbul ignore next */ []));
35
- requiredLabel = input(...(ngDevMode ? [undefined, { debugName: "requiredLabel" }] : /* istanbul ignore next */ []));
36
- optionalLabelKey = input(...(ngDevMode ? [undefined, { debugName: "optionalLabelKey" }] : /* istanbul ignore next */ []));
37
- requiredLabelKey = input(...(ngDevMode ? [undefined, { debugName: "requiredLabelKey" }] : /* istanbul ignore next */ []));
38
- required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
39
- optional = input(false, ...(ngDevMode ? [{ debugName: "optional" }] : /* istanbul ignore next */ []));
40
- invalid = input(...(ngDevMode ? [undefined, { debugName: "invalid" }] : /* istanbul ignore next */ []));
41
- disabled = input(...(ngDevMode ? [undefined, { debugName: "disabled" }] : /* istanbul ignore next */ []));
42
- readonly = input(...(ngDevMode ? [undefined, { debugName: "readonly" }] : /* istanbul ignore next */ []));
43
- density = input(...(ngDevMode ? [undefined, { debugName: "density" }] : /* istanbul ignore next */ []));
44
- size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
45
- radius = input('md', ...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
46
- appearance = input('outline', ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
47
- control = input(undefined, ...(ngDevMode ? [{ debugName: "control" }] : /* istanbul ignore next */ []));
48
- projectedLabel;
49
- projectedHint;
50
- projectedError;
51
- prefix;
52
- suffix;
53
- formControl;
54
- formControlDirective;
55
- formControlName;
56
- ngModelDir;
57
- fieldId = generateId();
58
- hintId = `solaris-form-field-hint-${this.fieldId}`;
59
- errorId = `solaris-form-field-error-${this.fieldId}`;
60
- labelId = `solaris-form-field-label-${this.fieldId}`;
61
- isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
62
- isTextareaControl = signal(false, ...(ngDevMode ? [{ debugName: "isTextareaControl" }] : /* istanbul ignore next */ []));
63
- autoDetectedDisabled = signal(false, ...(ngDevMode ? [{ debugName: "autoDetectedDisabled" }] : /* istanbul ignore next */ []));
64
- autoDetectedReadonly = signal(false, ...(ngDevMode ? [{ debugName: "autoDetectedReadonly" }] : /* istanbul ignore next */ []));
65
- controlResize = signal(null, ...(ngDevMode ? [{ debugName: "controlResize" }] : /* istanbul ignore next */ []));
66
- controlId = null;
67
- controlElement = null;
68
- focusListener = null;
69
- blurListener = null;
70
- hasProjectedLabel = computed(() => !!this.projectedLabel, ...(ngDevMode ? [{ debugName: "hasProjectedLabel" }] : /* istanbul ignore next */ []));
71
- hasProjectedHint = computed(() => !!this.projectedHint, ...(ngDevMode ? [{ debugName: "hasProjectedHint" }] : /* istanbul ignore next */ []));
72
- hasProjectedError = computed(() => !!this.projectedError, ...(ngDevMode ? [{ debugName: "hasProjectedError" }] : /* istanbul ignore next */ []));
73
- hasPrefix = signal(false, ...(ngDevMode ? [{ debugName: "hasPrefix" }] : /* istanbul ignore next */ []));
74
- hasSuffix = signal(false, ...(ngDevMode ? [{ debugName: "hasSuffix" }] : /* istanbul ignore next */ []));
75
- controlType = computed(() => {
76
- return this.isTextareaControl() ? 'textarea' : 'other';
77
- }, ...(ngDevMode ? [{ debugName: "controlType" }] : /* istanbul ignore next */ []));
78
- effectiveDensity = computed(() => {
79
- return this.density() ?? 'comfortable';
80
- }, ...(ngDevMode ? [{ debugName: "effectiveDensity" }] : /* istanbul ignore next */ []));
81
- labelText = computed(() => {
82
- const key = this.labelKey();
83
- if (key) {
84
- return this.translateService.translate(key);
85
- }
86
- return this.label();
87
- }, ...(ngDevMode ? [{ debugName: "labelText" }] : /* istanbul ignore next */ []));
88
- hintText = computed(() => {
89
- const key = this.hintKey();
90
- if (key) {
91
- return this.translateService.translate(key);
92
- }
93
- return this.hint();
94
- }, ...(ngDevMode ? [{ debugName: "hintText" }] : /* istanbul ignore next */ []));
95
- errorText = computed(() => {
96
- const key = this.errorKey();
97
- if (key) {
98
- return this.translateService.translate(key);
99
- }
100
- return this.error();
101
- }, ...(ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []));
102
- optionalLabelText = computed(() => {
103
- const key = this.optionalLabelKey();
104
- if (key) {
105
- return this.translateService.translate(key);
106
- }
107
- const explicit = this.optionalLabel();
108
- if (explicit) {
109
- return explicit;
110
- }
111
- return this.translateService.translate('solaris.form-field.optional');
112
- }, ...(ngDevMode ? [{ debugName: "optionalLabelText" }] : /* istanbul ignore next */ []));
113
- isEffectivelyDisabled = computed(() => {
114
- const manual = this.disabled();
115
- if (manual !== undefined) {
116
- return manual;
117
- }
118
- const explicitControl = this.control();
119
- if (explicitControl) {
120
- return explicitControl.disabled;
121
- }
122
- if (this.formControl) {
123
- return this.formControl.disabled;
124
- }
125
- return this.autoDetectedDisabled();
126
- }, ...(ngDevMode ? [{ debugName: "isEffectivelyDisabled" }] : /* istanbul ignore next */ []));
127
- isEffectivelyReadonly = computed(() => {
128
- const manual = this.readonly();
129
- if (manual !== undefined) {
130
- return manual;
131
- }
132
- const explicitControl = this.control();
133
- if (explicitControl) {
134
- return explicitControl.readonly;
135
- }
136
- if (this.formControl) {
137
- return this.formControl.readonly;
138
- }
139
- return this.autoDetectedReadonly();
140
- }, ...(ngDevMode ? [{ debugName: "isEffectivelyReadonly" }] : /* istanbul ignore next */ []));
141
- effectiveNgControl = computed(() => {
142
- return (this.formControlDirective ??
143
- this.formControlName ??
144
- this.ngModelDir ??
145
- null);
146
- }, ...(ngDevMode ? [{ debugName: "effectiveNgControl" }] : /* istanbul ignore next */ []));
147
- isAutoInvalid = computed(() => {
148
- const control = this.effectiveNgControl();
149
- if (!control?.control) {
150
- return false;
151
- }
152
- const ctrl = control.control;
153
- const invalid = ctrl.invalid;
154
- const touched = ctrl.touched;
155
- const dirty = ctrl.dirty;
156
- const focused = this.isFocused();
157
- if (!invalid) {
158
- return false;
159
- }
160
- if (focused) {
161
- return false;
162
- }
163
- return touched || dirty;
164
- }, ...(ngDevMode ? [{ debugName: "isAutoInvalid" }] : /* istanbul ignore next */ []));
165
- isInvalid = computed(() => {
166
- const manual = this.invalid();
167
- if (manual !== undefined) {
168
- return manual;
169
- }
170
- const explicitControl = this.control();
171
- if (explicitControl) {
172
- return explicitControl.invalid;
173
- }
174
- if (this.formControl) {
175
- return this.formControl.invalid && !this.isFocused();
176
- }
177
- return this.isAutoInvalid();
178
- }, ...(ngDevMode ? [{ debugName: "isInvalid" }] : /* istanbul ignore next */ []));
179
- showError = computed(() => {
180
- return this.isInvalid() && (!!this.errorText() || this.hasProjectedError());
181
- }, ...(ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []));
182
- showHint = computed(() => {
183
- if (this.showError()) {
184
- return false;
185
- }
186
- return !!this.hintText() || this.hasProjectedHint();
187
- }, ...(ngDevMode ? [{ debugName: "showHint" }] : /* istanbul ignore next */ []));
188
- describedBy = computed(() => {
189
- const ids = [];
190
- if (this.showHint()) {
191
- ids.push(this.hintId);
192
- }
193
- if (this.showError()) {
194
- ids.push(this.errorId);
195
- }
196
- return ids.length > 0 ? ids.join(' ') : null;
197
- }, ...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
198
- ngAfterContentInit() {
199
- this.hasPrefix.set(!!this.prefix);
200
- this.hasSuffix.set(!!this.suffix);
201
- this.detectControl();
202
- this.connectControl();
203
- this.syncDescribedBy();
204
- this.syncControlDisabledReadonly();
205
- this.warnNoControl();
206
- this.warnMultipleControls();
207
- }
208
- syncControlDisabledReadonly() {
209
- if (!this.controlElement) {
210
- return;
211
- }
212
- if (this.control()) {
213
- return;
214
- }
215
- // SECURITY_EXCEPTION: Setting disabled/readonly on native control is required for FormField propagation.
216
- const input = this.controlElement;
217
- const shouldDisable = this.isEffectivelyDisabled();
218
- const shouldReadonly = this.isEffectivelyReadonly();
219
- if (input.disabled !== shouldDisable) {
220
- input.disabled = shouldDisable;
221
- }
222
- if (input.readOnly !== shouldReadonly) {
223
- input.readOnly = shouldReadonly;
224
- }
225
- }
226
- syncDescribedBy() {
227
- const describedBy = this.describedBy();
228
- const targetControl = this.control() ?? this.formControl;
229
- if (targetControl) {
230
- if (describedBy) {
231
- targetControl.setDescribedByIds(describedBy.split(' '));
232
- }
233
- else {
234
- targetControl.setDescribedByIds([]);
235
- }
236
- }
237
- }
238
- describedByEffect = effect(() => {
239
- this.describedBy();
240
- this.syncDescribedBy();
241
- }, ...(ngDevMode ? [{ debugName: "describedByEffect" }] : /* istanbul ignore next */ []));
242
- ngOnDestroy() {
243
- this.removeListeners();
244
- }
245
- detectControl() {
246
- const explicitControl = this.control();
247
- if (explicitControl) {
248
- this.controlId = explicitControl.id;
249
- // SECURITY_EXCEPTION: nativeElement.querySelector required to find trigger element. Standard DOM API used after Angular CDK pattern.
250
- const triggerEl = this.elementRef.nativeElement.querySelector('[solaris-form-field-trigger]');
251
- if (triggerEl) {
252
- this.controlElement = triggerEl;
253
- if (triggerEl.id) {
254
- this.controlId = triggerEl.id;
255
- }
256
- this.connectControl();
257
- }
258
- return;
259
- }
260
- // SECURITY_EXCEPTION: nativeElement access required to detect projected form controls.
261
- // SECURITY_EXCEPTION: Angular CDK and Material use the same approach.
262
- // SECURITY_EXCEPTION: Read-only querySelectorAll, no DOM mutation.
263
- const nativeElement = this.elementRef.nativeElement;
264
- const children = nativeElement.querySelectorAll('input, select, textarea, [solaris-input], [solaris-select], [solaris-textarea]');
265
- if (children.length > 0) {
266
- const first = children[0];
267
- this.controlElement = first;
268
- // SECURITY_EXCEPTION: nativeElement.tagName is the standard DOM API to check element type.
269
- const isTextarea = first.tagName === 'TEXTAREA';
270
- this.isTextareaControl.set(isTextarea);
271
- if (isTextarea) {
272
- const resize = first.dataset['resize'] ?? first.getAttribute('resize');
273
- const validResize = resize === 'none' ||
274
- resize === 'vertical' ||
275
- resize === 'horizontal' ||
276
- resize === 'both'
277
- ? resize
278
- : 'vertical';
279
- this.controlResize.set(validResize);
280
- }
281
- else {
282
- this.controlResize.set(null);
283
- }
284
- }
285
- if (this.formControl) {
286
- this.controlId = this.formControl.id;
287
- }
288
- else if (this.controlElement) {
289
- if (!this.controlElement.id) {
290
- const generatedId = `solaris-control-${this.fieldId}`;
291
- this.controlElement.id = generatedId;
292
- this.controlId = generatedId;
293
- }
294
- else {
295
- this.controlId = this.controlElement.id;
296
- }
297
- }
298
- }
299
- connectControl() {
300
- if (this.controlElement) {
301
- this.addListeners(this.controlElement);
302
- }
303
- }
304
- addListeners(element) {
305
- this.removeListeners();
306
- this.ngZone.runOutsideAngular(() => {
307
- const onFocus = () => {
308
- this.ngZone.run(() => this.isFocused.set(true));
309
- };
310
- const onBlur = () => {
311
- this.ngZone.run(() => this.isFocused.set(false));
312
- };
313
- element.addEventListener('focusin', onFocus);
314
- element.addEventListener('focusout', onBlur);
315
- this.focusListener = () => element.removeEventListener('focusin', onFocus);
316
- this.blurListener = () => element.removeEventListener('focusout', onBlur);
317
- });
318
- }
319
- removeListeners() {
320
- this.focusListener?.();
321
- this.blurListener?.();
322
- this.focusListener = null;
323
- this.blurListener = null;
324
- }
325
- warnNoControl() {
326
- const hasAnyControl = !!this.control() ||
327
- !!this.formControl ||
328
- !!this.controlElement ||
329
- !!this.effectiveNgControl();
330
- if (!hasAnyControl) {
331
- console.warn(`[SolarisFormField] No form control found inside <solaris-form-field id="${this.fieldId}">. ` +
332
- 'Form Field requires a control (input, select, textarea, or a Solaris form control directive). ' +
333
- 'This warning is shown in development only. The component will render safely without the control.');
334
- }
335
- }
336
- warnMultipleControls() {
337
- // SECURITY_EXCEPTION: nativeElement access required to count projected controls.
338
- // SECURITY_EXCEPTION: Same justification as detectControl: read-only query, no DOM mutation.
339
- const nativeElement = this.elementRef.nativeElement;
340
- const children = nativeElement.querySelectorAll('input, select, textarea, [solaris-input], [solaris-select], [solaris-textarea]');
341
- if (children.length > 1) {
342
- console.warn(`[SolarisFormField] Multiple form controls detected inside <solaris-form-field id="${this.fieldId}">. ` +
343
- 'Form Field v1 supports one main control. Multiple controls may cause unexpected behavior.');
344
- }
345
- }
346
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
347
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: SolarisFormFieldComponent, isStandalone: true, selector: "solaris-form-field", inputs: { hintKey: { classPropertyName: "hintKey", publicName: "hintKey", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, errorKey: { classPropertyName: "errorKey", publicName: "errorKey", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, optionalLabel: { classPropertyName: "optionalLabel", publicName: "optionalLabel", isSignal: true, isRequired: false, transformFunction: null }, requiredLabel: { classPropertyName: "requiredLabel", publicName: "requiredLabel", isSignal: true, isRequired: false, transformFunction: null }, optionalLabelKey: { classPropertyName: "optionalLabelKey", publicName: "optionalLabelKey", isSignal: true, isRequired: false, transformFunction: null }, requiredLabelKey: { classPropertyName: "requiredLabelKey", publicName: "requiredLabelKey", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, optional: { classPropertyName: "optional", publicName: "optional", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, density: { classPropertyName: "density", publicName: "density", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-radius": "radius()", "attr.data-bwignore": "\"true\"", "attr.data-appearance": "appearance()", "attr.data-density": "effectiveDensity()", "attr.data-control-type": "controlType()", "attr.data-control-resize": "controlResize()", "attr.data-invalid": "isInvalid() ? \"\" : null", "attr.data-focused": "isFocused() ? \"\" : null", "attr.data-has-prefix": "hasPrefix() ? \"\" : null", "attr.data-has-suffix": "hasSuffix() ? \"\" : null", "attr.data-disabled": "isEffectivelyDisabled() ? \"\" : null", "attr.data-readonly": "isEffectivelyReadonly() ? \"\" : null" } }, queries: [{ propertyName: "projectedLabel", first: true, predicate: SolarisFormLabelComponent, descendants: true }, { propertyName: "projectedHint", first: true, predicate: SolarisFormHintComponent, descendants: true }, { propertyName: "projectedError", first: true, predicate: SolarisFormErrorComponent, descendants: true }, { propertyName: "prefix", first: true, predicate: SolarisFormPrefixDirective, descendants: true }, { propertyName: "suffix", first: true, predicate: SolarisFormSuffixDirective, descendants: true }, { propertyName: "formControl", first: true, predicate: SolarisFormControl, descendants: true }, { propertyName: "formControlDirective", first: true, predicate: FormControlDirective, descendants: true }, { propertyName: "formControlName", first: true, predicate: FormControlName, descendants: true }, { propertyName: "ngModelDir", first: true, predicate: NgModel, descendants: true }], ngImport: i0, template: "@if (labelText() || hasProjectedLabel()) {\n <div class=\"solaris-form-field__label-row\">\n @if (hasProjectedLabel()) {\n <ng-content select=\"solaris-form-label\" />\n } @else if (labelText()) {\n <label\n class=\"solaris-form-field__label\"\n [id]=\"labelId\"\n [for]=\"controlId ?? undefined\"\n >\n {{ labelText() }}\n </label>\n }\n @if (optional()) {\n <span\n class=\"solaris-form-field__optional-marker\"\n [attr.aria-label]=\"optionalLabelText()\"\n >\n {{ optionalLabelText() }}\n </span>\n }\n </div>\n}\n\n<div class=\"solaris-form-field__control-wrapper\">\n <span\n class=\"solaris-form-field__affix solaris-form-field__affix--prefix\"\n [attr.data-empty]=\"hasPrefix() ? null : ''\"\n >\n <ng-content select=\"[solaris-form-prefix]\" />\n </span>\n\n <div class=\"solaris-form-field__control\">\n <ng-content />\n </div>\n\n <span\n class=\"solaris-form-field__affix solaris-form-field__affix--suffix\"\n [attr.data-empty]=\"hasSuffix() ? null : ''\"\n >\n <ng-content select=\"[solaris-form-suffix]\" />\n </span>\n</div>\n\n<div class=\"solaris-form-field__message-row\">\n @if (showError()) {\n <div class=\"solaris-form-field__error\" [id]=\"errorId\" role=\"alert\">\n @if (hasProjectedError()) {\n <ng-content select=\"solaris-form-error\" />\n } @else {\n {{ errorText() }}\n }\n </div>\n } @else if (showHint()) {\n <div class=\"solaris-form-field__hint\" [id]=\"hintId\">\n @if (hasProjectedHint()) {\n <ng-content select=\"solaris-form-hint\" />\n } @else {\n {{ hintText() }}\n }\n </div>\n }\n</div>\n", styles: [":host{--solaris-form-field-font-size: initial;--solaris-form-field-hint-color: initial;--solaris-form-field-label-color: initial;--solaris-form-field-control-gap: initial;--solaris-form-field-error-color: initial;--solaris-form-field-prefix-color: initial;--solaris-form-field-suffix-color: initial;--solaris-form-field-control-color: initial;--solaris-form-field-control-height: initial;--solaris-form-field-control-radius: initial;--solaris-form-field-hint-font-size: initial;--solaris-form-field-optional-color: initial;--solaris-form-field-label-font-size: initial;--solaris-form-field-error-font-size: initial;--solaris-form-field-disabled-opacity: initial;--solaris-form-field-focus-ring-width: initial;--solaris-form-field-focus-ring-color: initial;--solaris-form-field-control-padding-x: initial;--solaris-form-field-label-font-weight: initial;--solaris-form-field-message-margin-top: initial;--solaris-form-field-optional-font-size: initial;--solaris-form-field-error-border-color: initial;--solaris-form-field-control-background: initial;--solaris-form-field-label-margin-bottom: initial;--solaris-form-field-readonly-background: initial;--solaris-form-field-control-border-color: initial;--solaris-form-field-control-border-width: initial;display:block;box-sizing:border-box;font-size:var(--solaris-form-field-font-size);font-family:var(--solaris-font-family-sans),system-ui}.solaris-form-field__label-row{display:flex;align-items:center;gap:var(--solaris-spacing-2);margin-bottom:var(--solaris-form-field-label-margin-bottom)}.solaris-form-field__label,::ng-deep .solaris-form-label{display:inline-block;color:var(--solaris-form-field-label-color);font-size:var(--solaris-form-field-label-font-size);font-weight:var(--solaris-form-field-label-font-weight);cursor:pointer}.solaris-form-field__optional-marker{color:var(--solaris-form-field-optional-color);font-size:var(--solaris-form-field-optional-font-size);white-space:nowrap}.solaris-form-field__control-wrapper{position:relative;display:flex;align-items:stretch;gap:var(--solaris-form-field-control-gap);min-height:var(--solaris-form-field-control-height);padding:0 var(--solaris-form-field-control-padding-x);box-sizing:border-box;border-width:var(--solaris-form-field-control-border-width);border-style:solid;border-color:var(--solaris-form-field-control-border-color);border-radius:var(--solaris-form-field-control-radius);background:var(--solaris-form-field-control-background);transition:border-color var(--solaris-motion-duration-fast) ease,box-shadow var(--solaris-motion-duration-fast) ease}:host([data-has-prefix]) .solaris-form-field__control-wrapper{padding-left:0}.solaris-form-field__control-wrapper[data-connected-side=bottom]{border-bottom-left-radius:0;border-bottom-right-radius:0}.solaris-form-field__control-wrapper[data-connected-side=top]{border-top-left-radius:0;border-top-right-radius:0}.solaris-form-field__control{display:flex;flex:1;align-items:center;min-width:0}.solaris-form-field__affix{display:flex;flex:0 0 auto;align-self:stretch;align-items:center;justify-content:center;min-width:0;box-sizing:border-box;line-height:1;cursor:default}.solaris-form-field__affix[data-empty]{display:none}.solaris-form-field__affix--prefix{inline-size:var(--solaris-form-field-control-height);color:var(--solaris-form-field-prefix-color);border-inline-end:var(--solaris-border-width-sm) solid var(--solaris-border-subtle);transition:color var(--solaris-motion-duration-fast) ease}.solaris-form-field__affix--suffix{color:var(--solaris-form-field-suffix-color);transition:color var(--solaris-motion-duration-slow) ease}.solaris-form-field__affix--prefix:hover,.solaris-form-field__affix--suffix:hover{color:var(--solaris-text-default)}:host ::ng-deep .solaris-form-prefix,:host ::ng-deep .solaris-form-suffix{display:inline-flex;flex:0 0 auto;align-self:auto;align-items:center;justify-content:center;color:inherit;border:0;line-height:1;cursor:inherit}:host ::ng-deep solaris-icon.solaris-form-prefix,:host ::ng-deep solaris-icon.solaris-form-suffix,:host ::ng-deep .solaris-form-prefix solaris-icon,:host ::ng-deep .solaris-form-suffix solaris-icon{inline-size:1em;block-size:1em;flex:0 0 auto;color:inherit;font-size:var(--solaris-font-size-lg);transition:color var(--solaris-motion-duration-slow) ease}:host([data-control-type=textarea]){min-width:0}:host([data-control-type=textarea]) .solaris-form-field__control-wrapper{padding-right:0;overflow:visible}:host([data-control-type=textarea]) .solaris-form-field__control{overflow:visible}:host([data-control-type=textarea][data-control-resize=horizontal]) .solaris-form-field__control-wrapper{width:100%;min-width:8rem;overflow:hidden;resize:horizontal}:host([data-control-type=textarea][data-control-resize=horizontal]) .solaris-form-field__control{min-width:0}:host([data-control-type=textarea][data-control-resize=horizontal]) ::ng-deep textarea[solaris-textarea]{display:block;width:100%;min-width:0;resize:none}:host([data-control-type=textarea][data-control-resize=both]) .solaris-form-field__control-wrapper{width:100%;min-width:8rem;min-height:var(--solaris-form-field-control-height);align-items:stretch;overflow:hidden;resize:both}:host([data-control-type=textarea][data-control-resize=both]) .solaris-form-field__control{align-items:stretch;min-width:0;min-height:0;overflow:hidden}:host([data-control-type=textarea][data-control-resize=both]) ::ng-deep textarea[solaris-textarea]{display:block;flex:1 1 auto;width:100%;height:100%;min-width:0;min-height:0;resize:none}.solaris-form-field__message-row{margin-top:var(--solaris-form-field-message-margin-top)}.solaris-form-field__hint{margin:var(--solaris-spacing-1);color:var(--solaris-form-field-hint-color);font-size:var(--solaris-form-field-hint-font-size)}.solaris-form-field__error{margin:var(--solaris-spacing-1);color:var(--solaris-form-field-error-color);font-size:var(--solaris-form-field-error-font-size)}:host([data-size=sm]){--solaris-form-field-control-gap: var(--solaris-spacing-1);--solaris-form-field-font-size: var(--solaris-font-size-sm);--solaris-form-field-control-height: var(--solaris-spacing-8);--solaris-form-field-control-padding-x: var(--solaris-spacing-2);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-label-font-size: var(--solaris-font-size-xs);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-message-margin-top: var(--solaris-spacing-1);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-1);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-size=md]){--solaris-form-field-control-height: var(--solaris-spacing-10);--solaris-form-field-control-gap: var(--solaris-spacing-2);--solaris-form-field-font-size: var(--solaris-font-size-md);--solaris-form-field-control-padding-x: var(--solaris-spacing-3);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-label-font-size: var(--solaris-font-size-sm);--solaris-form-field-message-margin-top: var(--solaris-spacing-1);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-1);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-size=lg]){--solaris-form-field-control-height: var(--solaris-spacing-12);--solaris-form-field-control-gap: var(--solaris-spacing-2);--solaris-form-field-font-size: var(--solaris-font-size-lg);--solaris-form-field-control-padding-x: var(--solaris-spacing-4);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-label-font-size: var(--solaris-font-size-md);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-message-margin-top: var(--solaris-spacing-2);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-2);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-density=compact]){--solaris-form-field-control-height: var(--solaris-density-min-height);--solaris-form-field-control-gap: var(--solaris-spacing-1);--solaris-form-field-font-size: var(--solaris-font-size-sm);--solaris-form-field-control-padding-x: var(--solaris-spacing-2);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-label-font-size: var(--solaris-font-size-xs);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-message-margin-top: var(--solaris-spacing-1);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-1);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-density=comfortable]){--solaris-form-field-control-height: var(--solaris-density-min-height);--solaris-form-field-control-gap: var(--solaris-spacing-2);--solaris-form-field-control-padding-x: var(--solaris-spacing-3);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-message-margin-top: var(--solaris-spacing-2);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-2);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-radius=none]){--solaris-form-field-control-radius: var(--solaris-radius-none)}:host([data-radius=sm]){--solaris-form-field-control-radius: var(--solaris-radius-sm)}:host([data-radius=md]){--solaris-form-field-control-radius: var(--solaris-radius-md)}:host([data-radius=lg]){--solaris-form-field-control-radius: var(--solaris-radius-lg)}:host([data-focused]){--solaris-form-field-control-border-color: var( --solaris-form-field-focus-ring-color )}:host([data-disabled]){--solaris-form-field-control-color: var( --solaris-text-disabled, var(--solaris-text-muted) );--solaris-form-field-control-background: var( --solaris-surface-disabled, var(--solaris-surface-muted) );opacity:var(--solaris-form-field-disabled-opacity);cursor:not-allowed}:host([data-readonly]){--solaris-form-field-control-border-color: var(--solaris-border-subtle);--solaris-form-field-control-background: var( --solaris-form-field-readonly-background )}:host([data-appearance=outline]),:host([data-appearance=surface]),:host([data-appearance=filled]){--solaris-form-field-disabled-opacity: .5;--solaris-form-field-focus-ring-width: 2px;--solaris-form-field-hint-color: var(--solaris-text-muted);--solaris-form-field-prefix-color: var(--solaris-text-muted);--solaris-form-field-suffix-color: var(--solaris-text-muted);--solaris-form-field-error-color: var(--solaris-danger-text);--solaris-form-field-label-color: var(--solaris-text-default);--solaris-form-field-optional-color: var(--solaris-text-muted);--solaris-form-field-focus-ring-color: var(--solaris-primary-base);--solaris-form-field-error-border-color: var(--solaris-danger-base);--solaris-form-field-label-font-weight: var(--solaris-font-weight-medium)}:host([data-appearance=outline]){--solaris-form-field-control-border-width: var(--solaris-border-width-sm);--solaris-form-field-control-background: var(--solaris-surface-base);--solaris-form-field-readonly-background: var(--solaris-surface-muted);--solaris-form-field-control-border-color: var(--solaris-border-subtle)}:host([data-appearance=surface]){--solaris-form-field-control-border-width: 0;--solaris-form-field-readonly-background: var(--solaris-surface-base);--solaris-form-field-control-background: var(--solaris-surface-subtle);--solaris-form-field-control-border-color: var(--solaris-border-subtle)}:host([data-appearance=filled]){--solaris-form-field-control-background: var(--solaris-surface-subtle);--solaris-form-field-readonly-background: var(--solaris-surface-muted);--solaris-form-field-control-border-color: var(--solaris-border-subtle);--solaris-form-field-control-border-width: var(--solaris-border-width-sm)}:host([data-invalid]){--solaris-form-field-control-border-color: var( --solaris-form-field-error-border-color )}:host([data-invalid][data-focused]){--solaris-form-field-control-border-color: var( --solaris-form-field-error-border-color );outline-color:var(--solaris-form-field-error-border-color)}\n"] });
348
- }
349
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormFieldComponent, decorators: [{
350
- type: Component,
351
- args: [{ selector: 'solaris-form-field', standalone: true, imports: [], host: {
352
- '[attr.data-size]': 'size()',
353
- '[attr.data-radius]': 'radius()',
354
- '[attr.data-bwignore]': '"true"',
355
- '[attr.data-appearance]': 'appearance()',
356
- '[attr.data-density]': 'effectiveDensity()',
357
- '[attr.data-control-type]': 'controlType()',
358
- '[attr.data-control-resize]': 'controlResize()',
359
- '[attr.data-invalid]': 'isInvalid() ? "" : null',
360
- '[attr.data-focused]': 'isFocused() ? "" : null',
361
- '[attr.data-has-prefix]': 'hasPrefix() ? "" : null',
362
- '[attr.data-has-suffix]': 'hasSuffix() ? "" : null',
363
- '[attr.data-disabled]': 'isEffectivelyDisabled() ? "" : null',
364
- '[attr.data-readonly]': 'isEffectivelyReadonly() ? "" : null',
365
- }, template: "@if (labelText() || hasProjectedLabel()) {\n <div class=\"solaris-form-field__label-row\">\n @if (hasProjectedLabel()) {\n <ng-content select=\"solaris-form-label\" />\n } @else if (labelText()) {\n <label\n class=\"solaris-form-field__label\"\n [id]=\"labelId\"\n [for]=\"controlId ?? undefined\"\n >\n {{ labelText() }}\n </label>\n }\n @if (optional()) {\n <span\n class=\"solaris-form-field__optional-marker\"\n [attr.aria-label]=\"optionalLabelText()\"\n >\n {{ optionalLabelText() }}\n </span>\n }\n </div>\n}\n\n<div class=\"solaris-form-field__control-wrapper\">\n <span\n class=\"solaris-form-field__affix solaris-form-field__affix--prefix\"\n [attr.data-empty]=\"hasPrefix() ? null : ''\"\n >\n <ng-content select=\"[solaris-form-prefix]\" />\n </span>\n\n <div class=\"solaris-form-field__control\">\n <ng-content />\n </div>\n\n <span\n class=\"solaris-form-field__affix solaris-form-field__affix--suffix\"\n [attr.data-empty]=\"hasSuffix() ? null : ''\"\n >\n <ng-content select=\"[solaris-form-suffix]\" />\n </span>\n</div>\n\n<div class=\"solaris-form-field__message-row\">\n @if (showError()) {\n <div class=\"solaris-form-field__error\" [id]=\"errorId\" role=\"alert\">\n @if (hasProjectedError()) {\n <ng-content select=\"solaris-form-error\" />\n } @else {\n {{ errorText() }}\n }\n </div>\n } @else if (showHint()) {\n <div class=\"solaris-form-field__hint\" [id]=\"hintId\">\n @if (hasProjectedHint()) {\n <ng-content select=\"solaris-form-hint\" />\n } @else {\n {{ hintText() }}\n }\n </div>\n }\n</div>\n", styles: [":host{--solaris-form-field-font-size: initial;--solaris-form-field-hint-color: initial;--solaris-form-field-label-color: initial;--solaris-form-field-control-gap: initial;--solaris-form-field-error-color: initial;--solaris-form-field-prefix-color: initial;--solaris-form-field-suffix-color: initial;--solaris-form-field-control-color: initial;--solaris-form-field-control-height: initial;--solaris-form-field-control-radius: initial;--solaris-form-field-hint-font-size: initial;--solaris-form-field-optional-color: initial;--solaris-form-field-label-font-size: initial;--solaris-form-field-error-font-size: initial;--solaris-form-field-disabled-opacity: initial;--solaris-form-field-focus-ring-width: initial;--solaris-form-field-focus-ring-color: initial;--solaris-form-field-control-padding-x: initial;--solaris-form-field-label-font-weight: initial;--solaris-form-field-message-margin-top: initial;--solaris-form-field-optional-font-size: initial;--solaris-form-field-error-border-color: initial;--solaris-form-field-control-background: initial;--solaris-form-field-label-margin-bottom: initial;--solaris-form-field-readonly-background: initial;--solaris-form-field-control-border-color: initial;--solaris-form-field-control-border-width: initial;display:block;box-sizing:border-box;font-size:var(--solaris-form-field-font-size);font-family:var(--solaris-font-family-sans),system-ui}.solaris-form-field__label-row{display:flex;align-items:center;gap:var(--solaris-spacing-2);margin-bottom:var(--solaris-form-field-label-margin-bottom)}.solaris-form-field__label,::ng-deep .solaris-form-label{display:inline-block;color:var(--solaris-form-field-label-color);font-size:var(--solaris-form-field-label-font-size);font-weight:var(--solaris-form-field-label-font-weight);cursor:pointer}.solaris-form-field__optional-marker{color:var(--solaris-form-field-optional-color);font-size:var(--solaris-form-field-optional-font-size);white-space:nowrap}.solaris-form-field__control-wrapper{position:relative;display:flex;align-items:stretch;gap:var(--solaris-form-field-control-gap);min-height:var(--solaris-form-field-control-height);padding:0 var(--solaris-form-field-control-padding-x);box-sizing:border-box;border-width:var(--solaris-form-field-control-border-width);border-style:solid;border-color:var(--solaris-form-field-control-border-color);border-radius:var(--solaris-form-field-control-radius);background:var(--solaris-form-field-control-background);transition:border-color var(--solaris-motion-duration-fast) ease,box-shadow var(--solaris-motion-duration-fast) ease}:host([data-has-prefix]) .solaris-form-field__control-wrapper{padding-left:0}.solaris-form-field__control-wrapper[data-connected-side=bottom]{border-bottom-left-radius:0;border-bottom-right-radius:0}.solaris-form-field__control-wrapper[data-connected-side=top]{border-top-left-radius:0;border-top-right-radius:0}.solaris-form-field__control{display:flex;flex:1;align-items:center;min-width:0}.solaris-form-field__affix{display:flex;flex:0 0 auto;align-self:stretch;align-items:center;justify-content:center;min-width:0;box-sizing:border-box;line-height:1;cursor:default}.solaris-form-field__affix[data-empty]{display:none}.solaris-form-field__affix--prefix{inline-size:var(--solaris-form-field-control-height);color:var(--solaris-form-field-prefix-color);border-inline-end:var(--solaris-border-width-sm) solid var(--solaris-border-subtle);transition:color var(--solaris-motion-duration-fast) ease}.solaris-form-field__affix--suffix{color:var(--solaris-form-field-suffix-color);transition:color var(--solaris-motion-duration-slow) ease}.solaris-form-field__affix--prefix:hover,.solaris-form-field__affix--suffix:hover{color:var(--solaris-text-default)}:host ::ng-deep .solaris-form-prefix,:host ::ng-deep .solaris-form-suffix{display:inline-flex;flex:0 0 auto;align-self:auto;align-items:center;justify-content:center;color:inherit;border:0;line-height:1;cursor:inherit}:host ::ng-deep solaris-icon.solaris-form-prefix,:host ::ng-deep solaris-icon.solaris-form-suffix,:host ::ng-deep .solaris-form-prefix solaris-icon,:host ::ng-deep .solaris-form-suffix solaris-icon{inline-size:1em;block-size:1em;flex:0 0 auto;color:inherit;font-size:var(--solaris-font-size-lg);transition:color var(--solaris-motion-duration-slow) ease}:host([data-control-type=textarea]){min-width:0}:host([data-control-type=textarea]) .solaris-form-field__control-wrapper{padding-right:0;overflow:visible}:host([data-control-type=textarea]) .solaris-form-field__control{overflow:visible}:host([data-control-type=textarea][data-control-resize=horizontal]) .solaris-form-field__control-wrapper{width:100%;min-width:8rem;overflow:hidden;resize:horizontal}:host([data-control-type=textarea][data-control-resize=horizontal]) .solaris-form-field__control{min-width:0}:host([data-control-type=textarea][data-control-resize=horizontal]) ::ng-deep textarea[solaris-textarea]{display:block;width:100%;min-width:0;resize:none}:host([data-control-type=textarea][data-control-resize=both]) .solaris-form-field__control-wrapper{width:100%;min-width:8rem;min-height:var(--solaris-form-field-control-height);align-items:stretch;overflow:hidden;resize:both}:host([data-control-type=textarea][data-control-resize=both]) .solaris-form-field__control{align-items:stretch;min-width:0;min-height:0;overflow:hidden}:host([data-control-type=textarea][data-control-resize=both]) ::ng-deep textarea[solaris-textarea]{display:block;flex:1 1 auto;width:100%;height:100%;min-width:0;min-height:0;resize:none}.solaris-form-field__message-row{margin-top:var(--solaris-form-field-message-margin-top)}.solaris-form-field__hint{margin:var(--solaris-spacing-1);color:var(--solaris-form-field-hint-color);font-size:var(--solaris-form-field-hint-font-size)}.solaris-form-field__error{margin:var(--solaris-spacing-1);color:var(--solaris-form-field-error-color);font-size:var(--solaris-form-field-error-font-size)}:host([data-size=sm]){--solaris-form-field-control-gap: var(--solaris-spacing-1);--solaris-form-field-font-size: var(--solaris-font-size-sm);--solaris-form-field-control-height: var(--solaris-spacing-8);--solaris-form-field-control-padding-x: var(--solaris-spacing-2);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-label-font-size: var(--solaris-font-size-xs);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-message-margin-top: var(--solaris-spacing-1);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-1);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-size=md]){--solaris-form-field-control-height: var(--solaris-spacing-10);--solaris-form-field-control-gap: var(--solaris-spacing-2);--solaris-form-field-font-size: var(--solaris-font-size-md);--solaris-form-field-control-padding-x: var(--solaris-spacing-3);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-label-font-size: var(--solaris-font-size-sm);--solaris-form-field-message-margin-top: var(--solaris-spacing-1);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-1);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-size=lg]){--solaris-form-field-control-height: var(--solaris-spacing-12);--solaris-form-field-control-gap: var(--solaris-spacing-2);--solaris-form-field-font-size: var(--solaris-font-size-lg);--solaris-form-field-control-padding-x: var(--solaris-spacing-4);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-label-font-size: var(--solaris-font-size-md);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-message-margin-top: var(--solaris-spacing-2);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-2);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-density=compact]){--solaris-form-field-control-height: var(--solaris-density-min-height);--solaris-form-field-control-gap: var(--solaris-spacing-1);--solaris-form-field-font-size: var(--solaris-font-size-sm);--solaris-form-field-control-padding-x: var(--solaris-spacing-2);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-label-font-size: var(--solaris-font-size-xs);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-message-margin-top: var(--solaris-spacing-1);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-1);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-density=comfortable]){--solaris-form-field-control-height: var(--solaris-density-min-height);--solaris-form-field-control-gap: var(--solaris-spacing-2);--solaris-form-field-control-padding-x: var(--solaris-spacing-3);--solaris-form-field-hint-font-size: var(--solaris-font-size-xs);--solaris-form-field-error-font-size: var(--solaris-font-size-xs);--solaris-form-field-message-margin-top: var(--solaris-spacing-2);--solaris-form-field-label-margin-bottom: var(--solaris-spacing-2);--solaris-form-field-optional-font-size: var(--solaris-font-size-xs)}:host([data-radius=none]){--solaris-form-field-control-radius: var(--solaris-radius-none)}:host([data-radius=sm]){--solaris-form-field-control-radius: var(--solaris-radius-sm)}:host([data-radius=md]){--solaris-form-field-control-radius: var(--solaris-radius-md)}:host([data-radius=lg]){--solaris-form-field-control-radius: var(--solaris-radius-lg)}:host([data-focused]){--solaris-form-field-control-border-color: var( --solaris-form-field-focus-ring-color )}:host([data-disabled]){--solaris-form-field-control-color: var( --solaris-text-disabled, var(--solaris-text-muted) );--solaris-form-field-control-background: var( --solaris-surface-disabled, var(--solaris-surface-muted) );opacity:var(--solaris-form-field-disabled-opacity);cursor:not-allowed}:host([data-readonly]){--solaris-form-field-control-border-color: var(--solaris-border-subtle);--solaris-form-field-control-background: var( --solaris-form-field-readonly-background )}:host([data-appearance=outline]),:host([data-appearance=surface]),:host([data-appearance=filled]){--solaris-form-field-disabled-opacity: .5;--solaris-form-field-focus-ring-width: 2px;--solaris-form-field-hint-color: var(--solaris-text-muted);--solaris-form-field-prefix-color: var(--solaris-text-muted);--solaris-form-field-suffix-color: var(--solaris-text-muted);--solaris-form-field-error-color: var(--solaris-danger-text);--solaris-form-field-label-color: var(--solaris-text-default);--solaris-form-field-optional-color: var(--solaris-text-muted);--solaris-form-field-focus-ring-color: var(--solaris-primary-base);--solaris-form-field-error-border-color: var(--solaris-danger-base);--solaris-form-field-label-font-weight: var(--solaris-font-weight-medium)}:host([data-appearance=outline]){--solaris-form-field-control-border-width: var(--solaris-border-width-sm);--solaris-form-field-control-background: var(--solaris-surface-base);--solaris-form-field-readonly-background: var(--solaris-surface-muted);--solaris-form-field-control-border-color: var(--solaris-border-subtle)}:host([data-appearance=surface]){--solaris-form-field-control-border-width: 0;--solaris-form-field-readonly-background: var(--solaris-surface-base);--solaris-form-field-control-background: var(--solaris-surface-subtle);--solaris-form-field-control-border-color: var(--solaris-border-subtle)}:host([data-appearance=filled]){--solaris-form-field-control-background: var(--solaris-surface-subtle);--solaris-form-field-readonly-background: var(--solaris-surface-muted);--solaris-form-field-control-border-color: var(--solaris-border-subtle);--solaris-form-field-control-border-width: var(--solaris-border-width-sm)}:host([data-invalid]){--solaris-form-field-control-border-color: var( --solaris-form-field-error-border-color )}:host([data-invalid][data-focused]){--solaris-form-field-control-border-color: var( --solaris-form-field-error-border-color );outline-color:var(--solaris-form-field-error-border-color)}\n"] }]
366
- }], ctorParameters: () => [], propDecorators: { hintKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "hintKey", required: false }] }], labelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelKey", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], errorKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorKey", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], optionalLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionalLabel", required: false }] }], requiredLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "requiredLabel", required: false }] }], optionalLabelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionalLabelKey", required: false }] }], requiredLabelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "requiredLabelKey", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], optional: [{ type: i0.Input, args: [{ isSignal: true, alias: "optional", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: false }] }], projectedLabel: [{
367
- type: ContentChild,
368
- args: [SolarisFormLabelComponent]
369
- }], projectedHint: [{
370
- type: ContentChild,
371
- args: [SolarisFormHintComponent]
372
- }], projectedError: [{
373
- type: ContentChild,
374
- args: [SolarisFormErrorComponent]
375
- }], prefix: [{
376
- type: ContentChild,
377
- args: [SolarisFormPrefixDirective]
378
- }], suffix: [{
379
- type: ContentChild,
380
- args: [SolarisFormSuffixDirective]
381
- }], formControl: [{
382
- type: ContentChild,
383
- args: [SolarisFormControl]
384
- }], formControlDirective: [{
385
- type: ContentChild,
386
- args: [FormControlDirective]
387
- }], formControlName: [{
388
- type: ContentChild,
389
- args: [FormControlName]
390
- }], ngModelDir: [{
391
- type: ContentChild,
392
- args: [NgModel]
393
- }] } });
394
- //# sourceMappingURL=form-field.component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-field.component.js","sourceRoot":"","sources":["../../../../../../../../../packages/angular/src/lib/components/forms/form-field/component/form-field.component.ts","../../../../../../../../../packages/angular/src/lib/components/forms/form-field/component/form-field.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\r\n Component,\r\n input,\r\n computed,\r\n signal,\r\n effect,\r\n ContentChild,\r\n AfterContentInit,\r\n OnDestroy,\r\n ElementRef,\r\n inject,\r\n NgZone,\r\n} from '@angular/core';\r\nimport { FormControlDirective, FormControlName, NgModel } from '@angular/forms';\r\n\r\nimport { SolarisFormPrefixDirective } from '../directives/form-prefix.directive';\r\nimport { SolarisFormSuffixDirective } from '../directives/form-suffix.directive';\r\nimport { SolarisTranslateService } from '../../../../services/translation';\r\nimport { SolarisFormControl } from '../model/form-control.contract';\r\nimport { SolarisFormLabelComponent } from './form-label.component';\r\nimport { SolarisFormErrorComponent } from './form-error.component';\r\nimport { SolarisFormHintComponent } from './form-hint.component';\r\n\r\nimport type {\r\n SolarisFormFieldAppearance,\r\n SolarisFormFieldSize,\r\n SolarisFormFieldDensity,\r\n SolarisFormFieldRadius,\r\n ControlResize,\r\n} from '../model/form-field.types';\r\n\r\nlet nextId = 0;\r\nfunction generateId(): string {\r\n return `solaris-form-field-${++nextId}`;\r\n}\r\n\r\n@Component({\r\n selector: 'solaris-form-field',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './form-field.component.html',\r\n styleUrls: ['./form-field.component.scss'],\r\n host: {\r\n '[attr.data-size]': 'size()',\r\n '[attr.data-radius]': 'radius()',\r\n '[attr.data-bwignore]': '\"true\"',\r\n '[attr.data-appearance]': 'appearance()',\r\n '[attr.data-density]': 'effectiveDensity()',\r\n '[attr.data-control-type]': 'controlType()',\r\n '[attr.data-control-resize]': 'controlResize()',\r\n '[attr.data-invalid]': 'isInvalid() ? \"\" : null',\r\n '[attr.data-focused]': 'isFocused() ? \"\" : null',\r\n '[attr.data-has-prefix]': 'hasPrefix() ? \"\" : null',\r\n '[attr.data-has-suffix]': 'hasSuffix() ? \"\" : null',\r\n '[attr.data-disabled]': 'isEffectivelyDisabled() ? \"\" : null',\r\n '[attr.data-readonly]': 'isEffectivelyReadonly() ? \"\" : null',\r\n },\r\n})\r\nexport class SolarisFormFieldComponent implements AfterContentInit, OnDestroy {\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly translateService = inject(SolarisTranslateService);\r\n private readonly ngZone = inject(NgZone);\r\n\r\n constructor() {\r\n // SECURITY_EXCEPTION: Setting disabled/readonly on native control is standard DOM API.\r\n // SECURITY_EXCEPTION: Required for FormField to propagate disabled/readonly state to projected control.\r\n effect(() => {\r\n this.isEffectivelyDisabled();\r\n this.isEffectivelyReadonly();\r\n this.syncControlDisabledReadonly();\r\n });\r\n }\r\n\r\n readonly hintKey = input<string>();\r\n readonly labelKey = input<string>();\r\n readonly hint = input<string>('');\r\n readonly errorKey = input<string>();\r\n readonly label = input<string>('');\r\n readonly error = input<string>('');\r\n readonly optionalLabel = input<string>();\r\n readonly requiredLabel = input<string>();\r\n readonly optionalLabelKey = input<string>();\r\n readonly requiredLabelKey = input<string>();\r\n readonly required = input<boolean>(false);\r\n readonly optional = input<boolean>(false);\r\n readonly invalid = input<boolean | undefined>();\r\n readonly disabled = input<boolean | undefined>();\r\n readonly readonly = input<boolean | undefined>();\r\n readonly density = input<SolarisFormFieldDensity>();\r\n readonly size = input<SolarisFormFieldSize>('md');\r\n readonly radius = input<SolarisFormFieldRadius>('md');\r\n readonly appearance = input<SolarisFormFieldAppearance>('outline');\r\n readonly control = input<SolarisFormControl | undefined>(undefined);\r\n\r\n @ContentChild(SolarisFormLabelComponent)\r\n protected projectedLabel?: SolarisFormLabelComponent;\r\n @ContentChild(SolarisFormHintComponent)\r\n protected projectedHint?: SolarisFormHintComponent;\r\n @ContentChild(SolarisFormErrorComponent)\r\n protected projectedError?: SolarisFormErrorComponent;\r\n @ContentChild(SolarisFormPrefixDirective)\r\n protected prefix?: SolarisFormPrefixDirective;\r\n @ContentChild(SolarisFormSuffixDirective)\r\n protected suffix?: SolarisFormSuffixDirective;\r\n @ContentChild(SolarisFormControl)\r\n protected formControl?: SolarisFormControl;\r\n @ContentChild(FormControlDirective)\r\n protected formControlDirective?: FormControlDirective;\r\n @ContentChild(FormControlName)\r\n protected formControlName?: FormControlName;\r\n @ContentChild(NgModel)\r\n protected ngModelDir?: NgModel;\r\n\r\n protected readonly fieldId = generateId();\r\n protected readonly hintId = `solaris-form-field-hint-${this.fieldId}`;\r\n protected readonly errorId = `solaris-form-field-error-${this.fieldId}`;\r\n protected readonly labelId = `solaris-form-field-label-${this.fieldId}`;\r\n\r\n protected readonly isFocused = signal(false);\r\n protected readonly isTextareaControl = signal(false);\r\n protected readonly autoDetectedDisabled = signal(false);\r\n protected readonly autoDetectedReadonly = signal(false);\r\n protected readonly controlResize = signal<ControlResize | null>(null);\r\n\r\n protected controlId: string | null = null;\r\n private controlElement: HTMLElement | null = null;\r\n private focusListener: (() => void) | null = null;\r\n private blurListener: (() => void) | null = null;\r\n\r\n protected readonly hasProjectedLabel = computed(() => !!this.projectedLabel);\r\n protected readonly hasProjectedHint = computed(() => !!this.projectedHint);\r\n protected readonly hasProjectedError = computed(() => !!this.projectedError);\r\n protected readonly hasPrefix = signal(false);\r\n protected readonly hasSuffix = signal(false);\r\n\r\n protected readonly controlType = computed<\r\n 'input' | 'textarea' | 'select' | 'other'\r\n >(() => {\r\n return this.isTextareaControl() ? 'textarea' : 'other';\r\n });\r\n\r\n protected readonly effectiveDensity = computed<SolarisFormFieldDensity>(\r\n () => {\r\n return this.density() ?? 'comfortable';\r\n },\r\n );\r\n\r\n protected readonly labelText = computed(() => {\r\n const key = this.labelKey();\r\n if (key) {\r\n return this.translateService.translate(key);\r\n }\r\n return this.label();\r\n });\r\n\r\n protected readonly hintText = computed(() => {\r\n const key = this.hintKey();\r\n if (key) {\r\n return this.translateService.translate(key);\r\n }\r\n return this.hint();\r\n });\r\n\r\n protected readonly errorText = computed(() => {\r\n const key = this.errorKey();\r\n if (key) {\r\n return this.translateService.translate(key);\r\n }\r\n return this.error();\r\n });\r\n\r\n protected readonly optionalLabelText = computed(() => {\r\n const key = this.optionalLabelKey();\r\n if (key) {\r\n return this.translateService.translate(key);\r\n }\r\n const explicit = this.optionalLabel();\r\n if (explicit) {\r\n return explicit;\r\n }\r\n return this.translateService.translate('solaris.form-field.optional');\r\n });\r\n\r\n protected readonly isEffectivelyDisabled = computed(() => {\r\n const manual = this.disabled();\r\n if (manual !== undefined) {\r\n return manual;\r\n }\r\n const explicitControl = this.control();\r\n if (explicitControl) {\r\n return explicitControl.disabled;\r\n }\r\n if (this.formControl) {\r\n return this.formControl.disabled;\r\n }\r\n return this.autoDetectedDisabled();\r\n });\r\n\r\n protected readonly isEffectivelyReadonly = computed(() => {\r\n const manual = this.readonly();\r\n if (manual !== undefined) {\r\n return manual;\r\n }\r\n const explicitControl = this.control();\r\n if (explicitControl) {\r\n return explicitControl.readonly;\r\n }\r\n if (this.formControl) {\r\n return this.formControl.readonly;\r\n }\r\n return this.autoDetectedReadonly();\r\n });\r\n\r\n protected readonly effectiveNgControl = computed(() => {\r\n return (\r\n this.formControlDirective ??\r\n this.formControlName ??\r\n this.ngModelDir ??\r\n null\r\n );\r\n });\r\n\r\n protected readonly isAutoInvalid = computed(() => {\r\n const control = this.effectiveNgControl();\r\n if (!control?.control) {\r\n return false;\r\n }\r\n const ctrl = control.control;\r\n const invalid = ctrl.invalid;\r\n const touched = ctrl.touched;\r\n const dirty = ctrl.dirty;\r\n const focused = this.isFocused();\r\n if (!invalid) {\r\n return false;\r\n }\r\n if (focused) {\r\n return false;\r\n }\r\n return touched || dirty;\r\n });\r\n\r\n protected readonly isInvalid = computed(() => {\r\n const manual = this.invalid();\r\n if (manual !== undefined) {\r\n return manual;\r\n }\r\n const explicitControl = this.control();\r\n if (explicitControl) {\r\n return explicitControl.invalid;\r\n }\r\n if (this.formControl) {\r\n return this.formControl.invalid && !this.isFocused();\r\n }\r\n return this.isAutoInvalid();\r\n });\r\n\r\n protected readonly showError = computed(() => {\r\n return this.isInvalid() && (!!this.errorText() || this.hasProjectedError());\r\n });\r\n\r\n protected readonly showHint = computed(() => {\r\n if (this.showError()) {\r\n return false;\r\n }\r\n return !!this.hintText() || this.hasProjectedHint();\r\n });\r\n\r\n protected readonly describedBy = computed(() => {\r\n const ids: string[] = [];\r\n if (this.showHint()) {\r\n ids.push(this.hintId);\r\n }\r\n if (this.showError()) {\r\n ids.push(this.errorId);\r\n }\r\n return ids.length > 0 ? ids.join(' ') : null;\r\n });\r\n\r\n ngAfterContentInit(): void {\r\n this.hasPrefix.set(!!this.prefix);\r\n this.hasSuffix.set(!!this.suffix);\r\n this.detectControl();\r\n this.connectControl();\r\n this.syncDescribedBy();\r\n this.syncControlDisabledReadonly();\r\n this.warnNoControl();\r\n this.warnMultipleControls();\r\n }\r\n\r\n private syncControlDisabledReadonly(): void {\r\n if (!this.controlElement) {\r\n return;\r\n }\r\n if (this.control()) {\r\n return;\r\n }\r\n // SECURITY_EXCEPTION: Setting disabled/readonly on native control is required for FormField propagation.\r\n const input = this.controlElement as HTMLInputElement;\r\n const shouldDisable = this.isEffectivelyDisabled();\r\n const shouldReadonly = this.isEffectivelyReadonly();\r\n if (input.disabled !== shouldDisable) {\r\n input.disabled = shouldDisable;\r\n }\r\n if (input.readOnly !== shouldReadonly) {\r\n input.readOnly = shouldReadonly;\r\n }\r\n }\r\n\r\n private syncDescribedBy(): void {\r\n const describedBy = this.describedBy();\r\n const targetControl = this.control() ?? this.formControl;\r\n if (targetControl) {\r\n if (describedBy) {\r\n targetControl.setDescribedByIds(describedBy.split(' '));\r\n } else {\r\n targetControl.setDescribedByIds([]);\r\n }\r\n }\r\n }\r\n\r\n protected readonly describedByEffect = effect(() => {\r\n this.describedBy();\r\n this.syncDescribedBy();\r\n });\r\n\r\n ngOnDestroy(): void {\r\n this.removeListeners();\r\n }\r\n\r\n private detectControl(): void {\r\n const explicitControl = this.control();\r\n if (explicitControl) {\r\n this.controlId = explicitControl.id;\r\n // SECURITY_EXCEPTION: nativeElement.querySelector required to find trigger element. Standard DOM API used after Angular CDK pattern.\r\n const triggerEl = this.elementRef.nativeElement.querySelector(\r\n '[solaris-form-field-trigger]',\r\n );\r\n if (triggerEl) {\r\n this.controlElement = triggerEl as HTMLElement;\r\n if (triggerEl.id) {\r\n this.controlId = triggerEl.id;\r\n }\r\n this.connectControl();\r\n }\r\n return;\r\n }\r\n\r\n // SECURITY_EXCEPTION: nativeElement access required to detect projected form controls.\r\n // SECURITY_EXCEPTION: Angular CDK and Material use the same approach.\r\n // SECURITY_EXCEPTION: Read-only querySelectorAll, no DOM mutation.\r\n const nativeElement = this.elementRef.nativeElement;\r\n const children = nativeElement.querySelectorAll(\r\n 'input, select, textarea, [solaris-input], [solaris-select], [solaris-textarea]',\r\n );\r\n\r\n if (children.length > 0) {\r\n const first = children[0] as HTMLElement;\r\n this.controlElement = first;\r\n // SECURITY_EXCEPTION: nativeElement.tagName is the standard DOM API to check element type.\r\n const isTextarea = first.tagName === 'TEXTAREA';\r\n this.isTextareaControl.set(isTextarea);\r\n\r\n if (isTextarea) {\r\n const resize = first.dataset['resize'] ?? first.getAttribute('resize');\r\n\r\n const validResize: ControlResize =\r\n resize === 'none' ||\r\n resize === 'vertical' ||\r\n resize === 'horizontal' ||\r\n resize === 'both'\r\n ? resize\r\n : 'vertical';\r\n\r\n this.controlResize.set(validResize);\r\n } else {\r\n this.controlResize.set(null);\r\n }\r\n }\r\n\r\n if (this.formControl) {\r\n this.controlId = this.formControl.id;\r\n } else if (this.controlElement) {\r\n if (!this.controlElement.id) {\r\n const generatedId = `solaris-control-${this.fieldId}`;\r\n this.controlElement.id = generatedId;\r\n this.controlId = generatedId;\r\n } else {\r\n this.controlId = this.controlElement.id;\r\n }\r\n }\r\n }\r\n\r\n private connectControl(): void {\r\n if (this.controlElement) {\r\n this.addListeners(this.controlElement);\r\n }\r\n }\r\n\r\n private addListeners(element: HTMLElement): void {\r\n this.removeListeners();\r\n this.ngZone.runOutsideAngular(() => {\r\n const onFocus = (): void => {\r\n this.ngZone.run(() => this.isFocused.set(true));\r\n };\r\n const onBlur = (): void => {\r\n this.ngZone.run(() => this.isFocused.set(false));\r\n };\r\n element.addEventListener('focusin', onFocus);\r\n element.addEventListener('focusout', onBlur);\r\n this.focusListener = () =>\r\n element.removeEventListener('focusin', onFocus);\r\n this.blurListener = () => element.removeEventListener('focusout', onBlur);\r\n });\r\n }\r\n\r\n private removeListeners(): void {\r\n this.focusListener?.();\r\n this.blurListener?.();\r\n this.focusListener = null;\r\n this.blurListener = null;\r\n }\r\n\r\n private warnNoControl(): void {\r\n const hasAnyControl =\r\n !!this.control() ||\r\n !!this.formControl ||\r\n !!this.controlElement ||\r\n !!this.effectiveNgControl();\r\n if (!hasAnyControl) {\r\n console.warn(\r\n `[SolarisFormField] No form control found inside <solaris-form-field id=\"${this.fieldId}\">. ` +\r\n 'Form Field requires a control (input, select, textarea, or a Solaris form control directive). ' +\r\n 'This warning is shown in development only. The component will render safely without the control.',\r\n );\r\n }\r\n }\r\n\r\n private warnMultipleControls(): void {\r\n // SECURITY_EXCEPTION: nativeElement access required to count projected controls.\r\n // SECURITY_EXCEPTION: Same justification as detectControl: read-only query, no DOM mutation.\r\n const nativeElement = this.elementRef.nativeElement;\r\n const children = nativeElement.querySelectorAll(\r\n 'input, select, textarea, [solaris-input], [solaris-select], [solaris-textarea]',\r\n );\r\n if (children.length > 1) {\r\n console.warn(\r\n `[SolarisFormField] Multiple form controls detected inside <solaris-form-field id=\"${this.fieldId}\">. ` +\r\n 'Form Field v1 supports one main control. Multiple controls may cause unexpected behavior.',\r\n );\r\n }\r\n }\r\n}\r\n","@if (labelText() || hasProjectedLabel()) {\n <div class=\"solaris-form-field__label-row\">\n @if (hasProjectedLabel()) {\n <ng-content select=\"solaris-form-label\" />\n } @else if (labelText()) {\n <label\n class=\"solaris-form-field__label\"\n [id]=\"labelId\"\n [for]=\"controlId ?? undefined\"\n >\n {{ labelText() }}\n </label>\n }\n @if (optional()) {\n <span\n class=\"solaris-form-field__optional-marker\"\n [attr.aria-label]=\"optionalLabelText()\"\n >\n {{ optionalLabelText() }}\n </span>\n }\n </div>\n}\n\n<div class=\"solaris-form-field__control-wrapper\">\n <span\n class=\"solaris-form-field__affix solaris-form-field__affix--prefix\"\n [attr.data-empty]=\"hasPrefix() ? null : ''\"\n >\n <ng-content select=\"[solaris-form-prefix]\" />\n </span>\n\n <div class=\"solaris-form-field__control\">\n <ng-content />\n </div>\n\n <span\n class=\"solaris-form-field__affix solaris-form-field__affix--suffix\"\n [attr.data-empty]=\"hasSuffix() ? null : ''\"\n >\n <ng-content select=\"[solaris-form-suffix]\" />\n </span>\n</div>\n\n<div class=\"solaris-form-field__message-row\">\n @if (showError()) {\n <div class=\"solaris-form-field__error\" [id]=\"errorId\" role=\"alert\">\n @if (hasProjectedError()) {\n <ng-content select=\"solaris-form-error\" />\n } @else {\n {{ errorText() }}\n }\n </div>\n } @else if (showHint()) {\n <div class=\"solaris-form-field__hint\" [id]=\"hintId\">\n @if (hasProjectedHint()) {\n <ng-content select=\"solaris-form-hint\" />\n } @else {\n {{ hintText() }}\n }\n </div>\n }\n</div>\n"]}
@@ -1,18 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class SolarisFormHintComponent {
4
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormHintComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.17", type: SolarisFormHintComponent, isStandalone: true, selector: "solaris-form-hint", host: { classAttribute: "solaris-form-hint" }, ngImport: i0, template: '<ng-content />', isInline: true });
6
- }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormHintComponent, decorators: [{
8
- type: Component,
9
- args: [{
10
- selector: 'solaris-form-hint',
11
- standalone: true,
12
- template: '<ng-content />',
13
- host: {
14
- class: 'solaris-form-hint',
15
- },
16
- }]
17
- }] });
18
- //# sourceMappingURL=form-hint.component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-hint.component.js","sourceRoot":"","sources":["../../../../../../../../../packages/angular/src/lib/components/forms/form-field/component/form-hint.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;;AAU1C,MAAM,OAAO,wBAAwB;wGAAxB,wBAAwB;4FAAxB,wBAAwB,4HALzB,gBAAgB;;4FAKf,wBAAwB;kBARpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE;wBACJ,KAAK,EAAE,mBAAmB;qBAC3B;iBACF","sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'solaris-form-hint',\n standalone: true,\n template: '<ng-content />',\n host: {\n class: 'solaris-form-hint',\n },\n})\nexport class SolarisFormHintComponent {}\n"]}
@@ -1,18 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class SolarisFormLabelComponent {
4
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.17", type: SolarisFormLabelComponent, isStandalone: true, selector: "solaris-form-label", host: { classAttribute: "solaris-form-label" }, ngImport: i0, template: '<ng-content />', isInline: true });
6
- }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormLabelComponent, decorators: [{
8
- type: Component,
9
- args: [{
10
- selector: 'solaris-form-label',
11
- standalone: true,
12
- template: '<ng-content />',
13
- host: {
14
- class: 'solaris-form-label',
15
- },
16
- }]
17
- }] });
18
- //# sourceMappingURL=form-label.component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-label.component.js","sourceRoot":"","sources":["../../../../../../../../../packages/angular/src/lib/components/forms/form-field/component/form-label.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;;AAU1C,MAAM,OAAO,yBAAyB;wGAAzB,yBAAyB;4FAAzB,yBAAyB,8HAL1B,gBAAgB;;4FAKf,yBAAyB;kBARrC,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE;wBACJ,KAAK,EAAE,oBAAoB;qBAC5B;iBACF","sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'solaris-form-label',\n standalone: true,\n template: '<ng-content />',\n host: {\n class: 'solaris-form-label',\n },\n})\nexport class SolarisFormLabelComponent {}\n"]}
@@ -1,14 +0,0 @@
1
- import { Directive } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class SolarisFormFieldTriggerDirective {
4
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormFieldTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.17", type: SolarisFormFieldTriggerDirective, isStandalone: true, selector: "[solaris-form-field-trigger]", ngImport: i0 });
6
- }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormFieldTriggerDirective, decorators: [{
8
- type: Directive,
9
- args: [{
10
- selector: '[solaris-form-field-trigger]',
11
- standalone: true,
12
- }]
13
- }] });
14
- //# sourceMappingURL=form-field-trigger.directive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-field-trigger.directive.js","sourceRoot":"","sources":["../../../../../../../../../packages/angular/src/lib/components/forms/form-field/directives/form-field-trigger.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;;AAM1C,MAAM,OAAO,gCAAgC;wGAAhC,gCAAgC;4FAAhC,gCAAgC;;4FAAhC,gCAAgC;kBAJ5C,SAAS;mBAAC;oBACT,QAAQ,EAAE,8BAA8B;oBACxC,UAAU,EAAE,IAAI;iBACjB","sourcesContent":["import { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[solaris-form-field-trigger]',\r\n standalone: true,\r\n})\r\nexport class SolarisFormFieldTriggerDirective {}\r\n"]}
@@ -1,17 +0,0 @@
1
- import { Directive } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class SolarisFormPrefixDirective {
4
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormPrefixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.17", type: SolarisFormPrefixDirective, isStandalone: true, selector: "[solaris-form-prefix]", host: { classAttribute: "solaris-form-prefix" }, ngImport: i0 });
6
- }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormPrefixDirective, decorators: [{
8
- type: Directive,
9
- args: [{
10
- selector: '[solaris-form-prefix]',
11
- standalone: true,
12
- host: {
13
- class: 'solaris-form-prefix',
14
- },
15
- }]
16
- }] });
17
- //# sourceMappingURL=form-prefix.directive.js.map