@educarehq/solaris-ui 0.1.0 → 0.3.0
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.
- package/educarehq-solaris-ui.d.ts +5 -0
- package/esm2022/educarehq-solaris-ui.js +5 -0
- package/esm2022/educarehq-solaris-ui.js.map +1 -0
- package/esm2022/index.js +109 -0
- package/esm2022/index.js.map +1 -0
- package/esm2022/lib/components/actions/button/directives/button-icon.directive.js +17 -0
- package/esm2022/lib/components/actions/button/directives/button-icon.directive.js.map +1 -0
- package/esm2022/lib/components/actions/button/directives/button.directive.js +60 -0
- package/esm2022/lib/components/actions/button/directives/button.directive.js.map +1 -0
- package/esm2022/lib/components/actions/button/index.js +3 -0
- package/esm2022/lib/components/actions/button/index.js.map +1 -0
- package/esm2022/lib/components/actions/button/model/button.types.js +1 -0
- package/esm2022/lib/components/actions/button/model/button.types.js.map +1 -0
- package/esm2022/lib/components/actions/button-group/component/button-group.component.js +21 -0
- package/esm2022/lib/components/actions/button-group/component/button-group.component.js.map +1 -0
- package/esm2022/lib/components/actions/button-group/model/button-group.types.js +1 -0
- package/esm2022/lib/components/actions/button-group/model/button-group.types.js.map +1 -0
- package/esm2022/lib/components/actions/icon-button/directives/icon-button-badge.directive.js +17 -0
- package/esm2022/lib/components/actions/icon-button/directives/icon-button-badge.directive.js.map +1 -0
- package/esm2022/lib/components/actions/icon-button/directives/icon-button.directive.js +58 -0
- package/esm2022/lib/components/actions/icon-button/directives/icon-button.directive.js.map +1 -0
- package/esm2022/lib/components/actions/icon-button/model/icon-button.types.js +1 -0
- package/esm2022/lib/components/actions/icon-button/model/icon-button.types.js.map +1 -0
- package/esm2022/lib/components/data-display/badge/component/badge.component.js +24 -0
- package/esm2022/lib/components/data-display/badge/component/badge.component.js.map +1 -0
- package/esm2022/lib/components/data-display/badge/directives/badge-icon.directive.js +17 -0
- package/esm2022/lib/components/data-display/badge/directives/badge-icon.directive.js.map +1 -0
- package/esm2022/lib/components/data-display/badge/index.js +3 -0
- package/esm2022/lib/components/data-display/badge/index.js.map +1 -0
- package/esm2022/lib/components/data-display/badge/model/badge.types.js +1 -0
- package/esm2022/lib/components/data-display/badge/model/badge.types.js.map +1 -0
- package/esm2022/lib/components/data-display/card/component/card.component.js +20 -0
- package/esm2022/lib/components/data-display/card/component/card.component.js.map +1 -0
- package/esm2022/lib/components/data-display/card/directives/card-actions.directive.js +17 -0
- package/esm2022/lib/components/data-display/card/directives/card-actions.directive.js.map +1 -0
- package/esm2022/lib/components/data-display/card/directives/card-content.directive.js +17 -0
- package/esm2022/lib/components/data-display/card/directives/card-content.directive.js.map +1 -0
- package/esm2022/lib/components/data-display/card/directives/card-description.directive.js +17 -0
- package/esm2022/lib/components/data-display/card/directives/card-description.directive.js.map +1 -0
- package/esm2022/lib/components/data-display/card/directives/card-footer.directive.js +19 -0
- package/esm2022/lib/components/data-display/card/directives/card-footer.directive.js.map +1 -0
- package/esm2022/lib/components/data-display/card/directives/card-header.directive.js +17 -0
- package/esm2022/lib/components/data-display/card/directives/card-header.directive.js.map +1 -0
- package/esm2022/lib/components/data-display/card/directives/card-media.directive.js +17 -0
- package/esm2022/lib/components/data-display/card/directives/card-media.directive.js.map +1 -0
- package/esm2022/lib/components/data-display/card/directives/card-title.directive.js +17 -0
- package/esm2022/lib/components/data-display/card/directives/card-title.directive.js.map +1 -0
- package/esm2022/lib/components/data-display/card/model/card.types.js +1 -0
- package/esm2022/lib/components/data-display/card/model/card.types.js.map +1 -0
- package/esm2022/lib/components/data-display/divider/component/divider.component.js +46 -0
- package/esm2022/lib/components/data-display/divider/component/divider.component.js.map +1 -0
- package/esm2022/lib/components/data-display/divider/index.js +2 -0
- package/esm2022/lib/components/data-display/divider/index.js.map +1 -0
- package/esm2022/lib/components/data-display/divider/model/divider.types.js +1 -0
- package/esm2022/lib/components/data-display/divider/model/divider.types.js.map +1 -0
- package/esm2022/lib/components/feedback/alert/component/alert-actions.component.js +18 -0
- package/esm2022/lib/components/feedback/alert/component/alert-actions.component.js.map +1 -0
- package/esm2022/lib/components/feedback/alert/component/alert.component.js +90 -0
- package/esm2022/lib/components/feedback/alert/component/alert.component.js.map +1 -0
- package/esm2022/lib/components/feedback/alert/directives/alert-description.directive.js +17 -0
- package/esm2022/lib/components/feedback/alert/directives/alert-description.directive.js.map +1 -0
- package/esm2022/lib/components/feedback/alert/directives/alert-title.directive.js +17 -0
- package/esm2022/lib/components/feedback/alert/directives/alert-title.directive.js.map +1 -0
- package/esm2022/lib/components/feedback/alert/model/alert.types.js +1 -0
- package/esm2022/lib/components/feedback/alert/model/alert.types.js.map +1 -0
- package/esm2022/lib/components/feedback/skeleton/component/skeleton.component.js +69 -0
- package/esm2022/lib/components/feedback/skeleton/component/skeleton.component.js.map +1 -0
- package/esm2022/lib/components/feedback/skeleton/model/skeleton.types.js +1 -0
- package/esm2022/lib/components/feedback/skeleton/model/skeleton.types.js.map +1 -0
- package/esm2022/lib/components/feedback/toast/component/toast.component.js +268 -0
- package/esm2022/lib/components/feedback/toast/component/toast.component.js.map +1 -0
- package/esm2022/lib/components/feedback/toast/container/toast-container.component.js +24 -0
- package/esm2022/lib/components/feedback/toast/container/toast-container.component.js.map +1 -0
- package/esm2022/lib/components/feedback/toast/model/toast.types.js +1 -0
- package/esm2022/lib/components/feedback/toast/model/toast.types.js.map +1 -0
- package/esm2022/lib/components/feedback/toast/provider/provide-solaris-toast.js +17 -0
- package/esm2022/lib/components/feedback/toast/provider/provide-solaris-toast.js.map +1 -0
- package/esm2022/lib/components/feedback/toast/service/toast.service.js +219 -0
- package/esm2022/lib/components/feedback/toast/service/toast.service.js.map +1 -0
- package/esm2022/lib/components/feedback/toast/token/toast.tokens.js +13 -0
- package/esm2022/lib/components/feedback/toast/token/toast.tokens.js.map +1 -0
- package/esm2022/lib/components/forms/checkbox/component/checkbox.component.js +227 -0
- package/esm2022/lib/components/forms/checkbox/component/checkbox.component.js.map +1 -0
- package/esm2022/lib/components/forms/checkbox/model/checkbox.types.js +1 -0
- package/esm2022/lib/components/forms/checkbox/model/checkbox.types.js.map +1 -0
- package/esm2022/lib/components/forms/checkbox-group/component/checkbox-group.component.js +441 -0
- package/esm2022/lib/components/forms/checkbox-group/component/checkbox-group.component.js.map +1 -0
- package/esm2022/lib/components/forms/checkbox-group/model/checkbox-group.types.js +1 -0
- package/esm2022/lib/components/forms/checkbox-group/model/checkbox-group.types.js.map +1 -0
- package/esm2022/lib/components/forms/email-field/component/email-field.component.js +215 -0
- package/esm2022/lib/components/forms/email-field/component/email-field.component.js.map +1 -0
- package/esm2022/lib/components/forms/email-field/model/email-field.types.js +1 -0
- package/esm2022/lib/components/forms/email-field/model/email-field.types.js.map +1 -0
- package/esm2022/lib/components/forms/email-field/validators/email-field.validators.js +69 -0
- package/esm2022/lib/components/forms/email-field/validators/email-field.validators.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/component/form-error.component.js +19 -0
- package/esm2022/lib/components/forms/form-field/component/form-error.component.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/component/form-field.component.js +442 -0
- package/esm2022/lib/components/forms/form-field/component/form-field.component.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/component/form-hint.component.js +18 -0
- package/esm2022/lib/components/forms/form-field/component/form-hint.component.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/component/form-label.component.js +18 -0
- package/esm2022/lib/components/forms/form-field/component/form-label.component.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/directives/form-field-trigger.directive.js +14 -0
- package/esm2022/lib/components/forms/form-field/directives/form-field-trigger.directive.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/directives/form-prefix.directive.js +17 -0
- package/esm2022/lib/components/forms/form-field/directives/form-prefix.directive.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/directives/form-suffix.directive.js +17 -0
- package/esm2022/lib/components/forms/form-field/directives/form-suffix.directive.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/index.js +8 -0
- package/esm2022/lib/components/forms/form-field/index.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/model/form-control.contract.js +3 -0
- package/esm2022/lib/components/forms/form-field/model/form-control.contract.js.map +1 -0
- package/esm2022/lib/components/forms/form-field/model/form-field.types.js +1 -0
- package/esm2022/lib/components/forms/form-field/model/form-field.types.js.map +1 -0
- package/esm2022/lib/components/forms/input/directives/input.directive.js +148 -0
- package/esm2022/lib/components/forms/input/directives/input.directive.js.map +1 -0
- package/esm2022/lib/components/forms/input/index.js +2 -0
- package/esm2022/lib/components/forms/input/index.js.map +1 -0
- package/esm2022/lib/components/forms/input/model/input.defaults.js +27 -0
- package/esm2022/lib/components/forms/input/model/input.defaults.js.map +1 -0
- package/esm2022/lib/components/forms/input/model/input.types.js +1 -0
- package/esm2022/lib/components/forms/input/model/input.types.js.map +1 -0
- package/esm2022/lib/components/forms/multi-select/component/multi-select.component.js +1102 -0
- package/esm2022/lib/components/forms/multi-select/component/multi-select.component.js.map +1 -0
- package/esm2022/lib/components/forms/multi-select/model/multi-select.types.js +1 -0
- package/esm2022/lib/components/forms/multi-select/model/multi-select.types.js.map +1 -0
- package/esm2022/lib/components/forms/option/component/option.component.js +149 -0
- package/esm2022/lib/components/forms/option/component/option.component.js.map +1 -0
- package/esm2022/lib/components/forms/option/directives/option-slots.directive.js +58 -0
- package/esm2022/lib/components/forms/option/directives/option-slots.directive.js.map +1 -0
- package/esm2022/lib/components/forms/option/index.js +3 -0
- package/esm2022/lib/components/forms/option/index.js.map +1 -0
- package/esm2022/lib/components/forms/option/model/option.types.js +1 -0
- package/esm2022/lib/components/forms/option/model/option.types.js.map +1 -0
- package/esm2022/lib/components/forms/option-group/component/option-group.component.js +103 -0
- package/esm2022/lib/components/forms/option-group/component/option-group.component.js.map +1 -0
- package/esm2022/lib/components/forms/option-group/index.js +2 -0
- package/esm2022/lib/components/forms/option-group/index.js.map +1 -0
- package/esm2022/lib/components/forms/option-group/model/option-group.types.js +1 -0
- package/esm2022/lib/components/forms/option-group/model/option-group.types.js.map +1 -0
- package/esm2022/lib/components/forms/password-field/component/password-field.component.js +299 -0
- package/esm2022/lib/components/forms/password-field/component/password-field.component.js.map +1 -0
- package/esm2022/lib/components/forms/password-field/model/password-field-constants.js +5 -0
- package/esm2022/lib/components/forms/password-field/model/password-field-constants.js.map +1 -0
- package/esm2022/lib/components/forms/password-field/model/password-field.types.js +1 -0
- package/esm2022/lib/components/forms/password-field/model/password-field.types.js.map +1 -0
- package/esm2022/lib/components/forms/password-field/model/password-policy.types.js +1 -0
- package/esm2022/lib/components/forms/password-field/model/password-policy.types.js.map +1 -0
- package/esm2022/lib/components/forms/password-field/model/password-strength.js +67 -0
- package/esm2022/lib/components/forms/password-field/model/password-strength.js.map +1 -0
- package/esm2022/lib/components/forms/password-field/validators/password.validator.js +45 -0
- package/esm2022/lib/components/forms/password-field/validators/password.validator.js.map +1 -0
- package/esm2022/lib/components/forms/radio/component/radio.component.js +219 -0
- package/esm2022/lib/components/forms/radio/component/radio.component.js.map +1 -0
- package/esm2022/lib/components/forms/radio/model/radio.types.js +1 -0
- package/esm2022/lib/components/forms/radio/model/radio.types.js.map +1 -0
- package/esm2022/lib/components/forms/radio-group/component/radio-group.component.js +348 -0
- package/esm2022/lib/components/forms/radio-group/component/radio-group.component.js.map +1 -0
- package/esm2022/lib/components/forms/radio-group/model/radio-group.token.js +3 -0
- package/esm2022/lib/components/forms/radio-group/model/radio-group.token.js.map +1 -0
- package/esm2022/lib/components/forms/radio-group/model/radio-group.types.js +1 -0
- package/esm2022/lib/components/forms/radio-group/model/radio-group.types.js.map +1 -0
- package/esm2022/lib/components/forms/select/component/select.component.js +815 -0
- package/esm2022/lib/components/forms/select/component/select.component.js.map +1 -0
- package/esm2022/lib/components/forms/select/model/select.types.js +1 -0
- package/esm2022/lib/components/forms/select/model/select.types.js.map +1 -0
- package/esm2022/lib/components/forms/switch/component/switch.component.js +211 -0
- package/esm2022/lib/components/forms/switch/component/switch.component.js.map +1 -0
- package/esm2022/lib/components/forms/switch/index.js +2 -0
- package/esm2022/lib/components/forms/switch/index.js.map +1 -0
- package/esm2022/lib/components/forms/switch/model/switch.types.js +1 -0
- package/esm2022/lib/components/forms/switch/model/switch.types.js.map +1 -0
- package/esm2022/lib/components/forms/switch-group/component/switch-group.component.js +369 -0
- package/esm2022/lib/components/forms/switch-group/component/switch-group.component.js.map +1 -0
- package/esm2022/lib/components/forms/switch-group/model/switch-group.types.js +1 -0
- package/esm2022/lib/components/forms/switch-group/model/switch-group.types.js.map +1 -0
- package/esm2022/lib/components/forms/textarea/directives/textarea.directive.js +137 -0
- package/esm2022/lib/components/forms/textarea/directives/textarea.directive.js.map +1 -0
- package/esm2022/lib/components/forms/textarea/model/textarea.types.js +1 -0
- package/esm2022/lib/components/forms/textarea/model/textarea.types.js.map +1 -0
- package/esm2022/lib/components/icon/component/solaris-icon.component.js +20 -0
- package/esm2022/lib/components/icon/component/solaris-icon.component.js.map +1 -0
- package/esm2022/lib/components/icon/index.js +2 -0
- package/esm2022/lib/components/icon/index.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-group.component.js +27 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-group.component.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-item.component.js +96 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-item.component.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-label.component.js +22 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-label.component.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu.component.js +105 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu.component.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-submenu-trigger.component.js +95 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-submenu-trigger.component.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-submenu.component.js +631 -0
- package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-submenu.component.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/directives/dropdown-menu-trigger.directive.js +365 -0
- package/esm2022/lib/components/interaction/dropdown-menu/directives/dropdown-menu-trigger.directive.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/index.js +8 -0
- package/esm2022/lib/components/interaction/dropdown-menu/index.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-menu-navigation.js +3 -0
- package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-menu-navigation.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-menu.types.js +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-menu.types.js.map +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-submenu.types.js +1 -0
- package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-submenu.types.js.map +1 -0
- package/esm2022/lib/components/interaction/popover/component/popover-panel.component.js +29 -0
- package/esm2022/lib/components/interaction/popover/component/popover-panel.component.js.map +1 -0
- package/esm2022/lib/components/interaction/popover/directives/popover-trigger.directive.js +325 -0
- package/esm2022/lib/components/interaction/popover/directives/popover-trigger.directive.js.map +1 -0
- package/esm2022/lib/components/interaction/popover/directives/popover.directive.js +16 -0
- package/esm2022/lib/components/interaction/popover/directives/popover.directive.js.map +1 -0
- package/esm2022/lib/components/interaction/popover/index.js +4 -0
- package/esm2022/lib/components/interaction/popover/index.js.map +1 -0
- package/esm2022/lib/components/interaction/popover/model/popover-position.js +145 -0
- package/esm2022/lib/components/interaction/popover/model/popover-position.js.map +1 -0
- package/esm2022/lib/components/interaction/popover/model/popover.types.js +1 -0
- package/esm2022/lib/components/interaction/popover/model/popover.types.js.map +1 -0
- package/esm2022/lib/components/interaction/popover/token/popover.tokens.js +3 -0
- package/esm2022/lib/components/interaction/popover/token/popover.tokens.js.map +1 -0
- package/esm2022/lib/components/interaction/tooltip/component/tooltip-panel.component.js +23 -0
- package/esm2022/lib/components/interaction/tooltip/component/tooltip-panel.component.js.map +1 -0
- package/esm2022/lib/components/interaction/tooltip/directive/tooltip.directive.js +405 -0
- package/esm2022/lib/components/interaction/tooltip/directive/tooltip.directive.js.map +1 -0
- package/esm2022/lib/components/interaction/tooltip/index.js +3 -0
- package/esm2022/lib/components/interaction/tooltip/index.js.map +1 -0
- package/esm2022/lib/components/interaction/tooltip/model/tooltip-position.js +209 -0
- package/esm2022/lib/components/interaction/tooltip/model/tooltip-position.js.map +1 -0
- package/esm2022/lib/components/interaction/tooltip/model/tooltip.types.js +1 -0
- package/esm2022/lib/components/interaction/tooltip/model/tooltip.types.js.map +1 -0
- package/esm2022/lib/components/interaction/tooltip/token/tooltip.tokens.js +3 -0
- package/esm2022/lib/components/interaction/tooltip/token/tooltip.tokens.js.map +1 -0
- package/esm2022/lib/components/navigation/editable-tabs/component/editable-tabs.component.js +323 -0
- package/esm2022/lib/components/navigation/editable-tabs/component/editable-tabs.component.js.map +1 -0
- package/esm2022/lib/components/navigation/editable-tabs/editable-tab/editable-tab.component.js +34 -0
- package/esm2022/lib/components/navigation/editable-tabs/editable-tab/editable-tab.component.js.map +1 -0
- package/esm2022/lib/components/navigation/editable-tabs/model/editable-tabs.types.js +1 -0
- package/esm2022/lib/components/navigation/editable-tabs/model/editable-tabs.types.js.map +1 -0
- package/esm2022/lib/components/navigation/segmented-control/component/segmented-control.component.js +242 -0
- package/esm2022/lib/components/navigation/segmented-control/component/segmented-control.component.js.map +1 -0
- package/esm2022/lib/components/navigation/segmented-control/item/segmented-item.component.js +197 -0
- package/esm2022/lib/components/navigation/segmented-control/item/segmented-item.component.js.map +1 -0
- package/esm2022/lib/components/navigation/segmented-control/model/segmented-control.types.js +1 -0
- package/esm2022/lib/components/navigation/segmented-control/model/segmented-control.types.js.map +1 -0
- package/esm2022/lib/components/navigation/segmented-control/token/segmented-control.tokens.js +3 -0
- package/esm2022/lib/components/navigation/segmented-control/token/segmented-control.tokens.js.map +1 -0
- package/esm2022/lib/components/navigation/stepper/actions/stepper-actions.component.js +15 -0
- package/esm2022/lib/components/navigation/stepper/actions/stepper-actions.component.js.map +1 -0
- package/esm2022/lib/components/navigation/stepper/component/stepper.component.js +99 -0
- package/esm2022/lib/components/navigation/stepper/component/stepper.component.js.map +1 -0
- package/esm2022/lib/components/navigation/stepper/content/stepper-content.component.js +13 -0
- package/esm2022/lib/components/navigation/stepper/content/stepper-content.component.js.map +1 -0
- package/esm2022/lib/components/navigation/stepper/model/stepper.types.js +1 -0
- package/esm2022/lib/components/navigation/stepper/model/stepper.types.js.map +1 -0
- package/esm2022/lib/components/navigation/stepper/step/step.component.js +91 -0
- package/esm2022/lib/components/navigation/stepper/step/step.component.js.map +1 -0
- package/esm2022/lib/components/navigation/stepper/token/stepper.tokens.js +3 -0
- package/esm2022/lib/components/navigation/stepper/token/stepper.tokens.js.map +1 -0
- package/esm2022/lib/components/navigation/tabs/component/tabs.component.js +169 -0
- package/esm2022/lib/components/navigation/tabs/component/tabs.component.js.map +1 -0
- package/esm2022/lib/components/navigation/tabs/index.js +5 -0
- package/esm2022/lib/components/navigation/tabs/index.js.map +1 -0
- package/esm2022/lib/components/navigation/tabs/model/tabs.types.js +1 -0
- package/esm2022/lib/components/navigation/tabs/model/tabs.types.js.map +1 -0
- package/esm2022/lib/components/navigation/tabs/tab/tab.component.js +195 -0
- package/esm2022/lib/components/navigation/tabs/tab/tab.component.js.map +1 -0
- package/esm2022/lib/components/navigation/tabs/tab-panel/tab-panel.component.js +55 -0
- package/esm2022/lib/components/navigation/tabs/tab-panel/tab-panel.component.js.map +1 -0
- package/esm2022/lib/components/navigation/tabs/token/tabs.tokens.js +3 -0
- package/esm2022/lib/components/navigation/tabs/token/tabs.tokens.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/component/dialog.component.js +49 -0
- package/esm2022/lib/components/overlay/dialog/component/dialog.component.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/components/dialog-actions.component.js +37 -0
- package/esm2022/lib/components/overlay/dialog/components/dialog-actions.component.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/components/dialog-content.component.js +13 -0
- package/esm2022/lib/components/overlay/dialog/components/dialog-content.component.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/components/dialog-header.component.js +32 -0
- package/esm2022/lib/components/overlay/dialog/components/dialog-header.component.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/container/dialog-container.component.js +142 -0
- package/esm2022/lib/components/overlay/dialog/container/dialog-container.component.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/flow/dialog-flow.component.js +56 -0
- package/esm2022/lib/components/overlay/dialog/flow/dialog-flow.component.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/flow/dialog-step.component.js +20 -0
- package/esm2022/lib/components/overlay/dialog/flow/dialog-step.component.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/model/dialog.types.js +1 -0
- package/esm2022/lib/components/overlay/dialog/model/dialog.types.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/provider/provide-solaris-dialog.js +13 -0
- package/esm2022/lib/components/overlay/dialog/provider/provide-solaris-dialog.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/service/dialog-ref.js +23 -0
- package/esm2022/lib/components/overlay/dialog/service/dialog-ref.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/service/dialog.service.js +111 -0
- package/esm2022/lib/components/overlay/dialog/service/dialog.service.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/token/dialog-data.token.js +4 -0
- package/esm2022/lib/components/overlay/dialog/token/dialog-data.token.js.map +1 -0
- package/esm2022/lib/components/overlay/dialog/token/dialog.tokens.js +15 -0
- package/esm2022/lib/components/overlay/dialog/token/dialog.tokens.js.map +1 -0
- package/esm2022/lib/services/accessibility/directives/visually-hidden.directive.js +25 -0
- package/esm2022/lib/services/accessibility/directives/visually-hidden.directive.js.map +1 -0
- package/esm2022/lib/services/accessibility/model/solaris-accessibility-config.interface.js +1 -0
- package/esm2022/lib/services/accessibility/model/solaris-accessibility-config.interface.js.map +1 -0
- package/esm2022/lib/services/accessibility/model/solaris-accessibility.types.js +1 -0
- package/esm2022/lib/services/accessibility/model/solaris-accessibility.types.js.map +1 -0
- package/esm2022/lib/services/accessibility/provider/provide-solaris-accessibility.js +10 -0
- package/esm2022/lib/services/accessibility/provider/provide-solaris-accessibility.js.map +1 -0
- package/esm2022/lib/services/accessibility/service/solaris-accessibility.service.js +60 -0
- package/esm2022/lib/services/accessibility/service/solaris-accessibility.service.js.map +1 -0
- package/esm2022/lib/services/accessibility/testing/solaris-accessibility-testing.provider.js +10 -0
- package/esm2022/lib/services/accessibility/testing/solaris-accessibility-testing.provider.js.map +1 -0
- package/esm2022/lib/services/accessibility/token/solaris-accessibility.tokens.js +3 -0
- package/esm2022/lib/services/accessibility/token/solaris-accessibility.tokens.js.map +1 -0
- package/esm2022/lib/services/icon/icons/groups/actions.js +242 -0
- package/esm2022/lib/services/icon/icons/groups/actions.js.map +1 -0
- package/esm2022/lib/services/icon/icons/groups/data.js +129 -0
- package/esm2022/lib/services/icon/icons/groups/data.js.map +1 -0
- package/esm2022/lib/services/icon/icons/groups/layout.js +50 -0
- package/esm2022/lib/services/icon/icons/groups/layout.js.map +1 -0
- package/esm2022/lib/services/icon/icons/groups/navigation.js +354 -0
- package/esm2022/lib/services/icon/icons/groups/navigation.js.map +1 -0
- package/esm2022/lib/services/icon/icons/groups/status.js +70 -0
- package/esm2022/lib/services/icon/icons/groups/status.js.map +1 -0
- package/esm2022/lib/services/icon/icons/groups/theme.js +49 -0
- package/esm2022/lib/services/icon/icons/groups/theme.js.map +1 -0
- package/esm2022/lib/services/icon/icons/index.js +2 -0
- package/esm2022/lib/services/icon/icons/index.js.map +1 -0
- package/esm2022/lib/services/icon/icons/solaris-built-in-icons.js +15 -0
- package/esm2022/lib/services/icon/icons/solaris-built-in-icons.js.map +1 -0
- package/esm2022/lib/services/icon/index.js +5 -0
- package/esm2022/lib/services/icon/index.js.map +1 -0
- package/esm2022/lib/services/icon/model/solaris-icon-definition.interface.js +1 -0
- package/esm2022/lib/services/icon/model/solaris-icon-definition.interface.js.map +1 -0
- package/esm2022/lib/services/icon/model/solaris-icon.types.js +1 -0
- package/esm2022/lib/services/icon/model/solaris-icon.types.js.map +1 -0
- package/esm2022/lib/services/icon/provider/provide-solaris-icons.js +10 -0
- package/esm2022/lib/services/icon/provider/provide-solaris-icons.js.map +1 -0
- package/esm2022/lib/services/icon/service/solaris-icon-registry.service.js +43 -0
- package/esm2022/lib/services/icon/service/solaris-icon-registry.service.js.map +1 -0
- package/esm2022/lib/services/icon/token/solaris-icon.tokens.js +3 -0
- package/esm2022/lib/services/icon/token/solaris-icon.tokens.js.map +1 -0
- package/esm2022/lib/services/theme/model/solaris-theme-config.interface.js +1 -0
- package/esm2022/lib/services/theme/model/solaris-theme-config.interface.js.map +1 -0
- package/esm2022/lib/services/theme/model/solaris-theme.types.js +1 -0
- package/esm2022/lib/services/theme/model/solaris-theme.types.js.map +1 -0
- package/esm2022/lib/services/theme/provider/provide-solaris-theme.js +10 -0
- package/esm2022/lib/services/theme/provider/provide-solaris-theme.js.map +1 -0
- package/esm2022/lib/services/theme/service/solaris-theme.service.js +22 -0
- package/esm2022/lib/services/theme/service/solaris-theme.service.js.map +1 -0
- package/esm2022/lib/services/theme/testing/solaris-theme-testing.provider.js +10 -0
- package/esm2022/lib/services/theme/testing/solaris-theme-testing.provider.js.map +1 -0
- package/esm2022/lib/services/theme/token/solaris-theme.tokens.js +3 -0
- package/esm2022/lib/services/theme/token/solaris-theme.tokens.js.map +1 -0
- package/esm2022/lib/services/translation/index.js +6 -0
- package/esm2022/lib/services/translation/index.js.map +1 -0
- package/esm2022/lib/services/translation/model/solaris-locale.types.js +1 -0
- package/esm2022/lib/services/translation/model/solaris-locale.types.js.map +1 -0
- package/esm2022/lib/services/translation/model/solaris-translate-config.interface.js +1 -0
- package/esm2022/lib/services/translation/model/solaris-translate-config.interface.js.map +1 -0
- package/esm2022/lib/services/translation/model/solaris-translate-defaults.js +96 -0
- package/esm2022/lib/services/translation/model/solaris-translate-defaults.js.map +1 -0
- package/esm2022/lib/services/translation/model/solaris-translation.types.js +1 -0
- package/esm2022/lib/services/translation/model/solaris-translation.types.js.map +1 -0
- package/esm2022/lib/services/translation/pipe/solaris-translate.pipe.js +20 -0
- package/esm2022/lib/services/translation/pipe/solaris-translate.pipe.js.map +1 -0
- package/esm2022/lib/services/translation/provider/provide-solaris-translate.js +10 -0
- package/esm2022/lib/services/translation/provider/provide-solaris-translate.js.map +1 -0
- package/esm2022/lib/services/translation/service/solaris-translate.service.js +87 -0
- package/esm2022/lib/services/translation/service/solaris-translate.service.js.map +1 -0
- package/esm2022/lib/services/translation/testing/solaris-translate-testing.provider.js +32 -0
- package/esm2022/lib/services/translation/testing/solaris-translate-testing.provider.js.map +1 -0
- package/esm2022/lib/services/translation/token/solaris-translate.tokens.js +3 -0
- package/esm2022/lib/services/translation/token/solaris-translate.tokens.js.map +1 -0
- package/esm2022/lib/testing/provide-solaris-testing.js +11 -0
- package/esm2022/lib/testing/provide-solaris-testing.js.map +1 -0
- package/esm2022/lib/testing/solaris-test-utilities.js +12 -0
- package/esm2022/lib/testing/solaris-test-utilities.js.map +1 -0
- package/index.d.ts +197 -0
- package/lib/components/actions/button/directives/button-icon.directive.d.ts +5 -0
- package/lib/components/actions/button/directives/button.directive.d.ts +22 -0
- package/lib/components/actions/button/index.d.ts +3 -0
- package/lib/components/actions/button/model/button.types.d.ts +5 -0
- package/lib/components/actions/button-group/component/button-group.component.d.ts +10 -0
- package/lib/components/actions/button-group/model/button-group.types.d.ts +2 -0
- package/lib/components/actions/icon-button/directives/icon-button-badge.directive.d.ts +5 -0
- package/lib/components/actions/icon-button/directives/icon-button.directive.d.ts +21 -0
- package/lib/components/actions/icon-button/model/icon-button.types.d.ts +5 -0
- package/lib/components/data-display/badge/component/badge.component.d.ts +12 -0
- package/lib/components/data-display/badge/directives/badge-icon.directive.d.ts +5 -0
- package/lib/components/data-display/badge/index.d.ts +3 -0
- package/lib/components/data-display/badge/model/badge.types.d.ts +6 -0
- package/lib/components/data-display/card/component/card.component.d.ts +10 -0
- package/lib/components/data-display/card/directives/card-actions.directive.d.ts +5 -0
- package/lib/components/data-display/card/directives/card-content.directive.d.ts +5 -0
- package/lib/components/data-display/card/directives/card-description.directive.d.ts +5 -0
- package/lib/components/data-display/card/directives/card-footer.directive.d.ts +6 -0
- package/lib/components/data-display/card/directives/card-header.directive.d.ts +5 -0
- package/lib/components/data-display/card/directives/card-media.directive.d.ts +5 -0
- package/lib/components/data-display/card/directives/card-title.directive.d.ts +5 -0
- package/lib/components/data-display/card/model/card.types.d.ts +4 -0
- package/lib/components/data-display/divider/component/divider.component.d.ts +17 -0
- package/lib/components/data-display/divider/index.d.ts +2 -0
- package/lib/components/data-display/divider/model/divider.types.d.ts +5 -0
- package/lib/components/feedback/alert/component/alert-actions.component.d.ts +5 -0
- package/lib/components/feedback/alert/component/alert.component.d.ts +26 -0
- package/lib/components/feedback/alert/directives/alert-description.directive.d.ts +5 -0
- package/lib/components/feedback/alert/directives/alert-title.directive.d.ts +5 -0
- package/lib/components/feedback/alert/model/alert.types.d.ts +5 -0
- package/lib/components/feedback/skeleton/component/skeleton.component.d.ts +17 -0
- package/lib/components/feedback/skeleton/model/skeleton.types.d.ts +5 -0
- package/lib/components/feedback/toast/component/toast.component.d.ts +62 -0
- package/lib/components/feedback/toast/container/toast-container.component.d.ts +10 -0
- package/lib/components/feedback/toast/model/toast.types.d.ts +106 -0
- package/lib/components/feedback/toast/provider/provide-solaris-toast.d.ts +3 -0
- package/lib/components/feedback/toast/service/toast.service.d.ts +36 -0
- package/lib/components/feedback/toast/token/toast.tokens.d.ts +5 -0
- package/lib/components/forms/checkbox/component/checkbox.component.d.ts +70 -0
- package/lib/components/forms/checkbox/model/checkbox.types.d.ts +5 -0
- package/lib/components/forms/checkbox-group/component/checkbox-group.component.d.ts +123 -0
- package/lib/components/forms/checkbox-group/model/checkbox-group.types.d.ts +5 -0
- package/lib/components/forms/email-field/component/email-field.component.d.ts +67 -0
- package/lib/components/forms/email-field/model/email-field.types.d.ts +6 -0
- package/lib/components/forms/email-field/validators/email-field.validators.d.ts +8 -0
- package/lib/components/forms/form-field/component/form-error.component.d.ts +5 -0
- package/lib/components/forms/form-field/component/form-field.component.d.ts +96 -0
- package/lib/components/forms/form-field/component/form-hint.component.d.ts +5 -0
- package/lib/components/forms/form-field/component/form-label.component.d.ts +5 -0
- package/lib/components/forms/form-field/directives/form-field-trigger.directive.d.ts +5 -0
- package/lib/components/forms/form-field/directives/form-prefix.directive.d.ts +5 -0
- package/lib/components/forms/form-field/directives/form-suffix.directive.d.ts +5 -0
- package/lib/components/forms/form-field/index.d.ts +8 -0
- package/lib/components/forms/form-field/model/form-control.contract.d.ts +11 -0
- package/lib/components/forms/form-field/model/form-field.types.d.ts +5 -0
- package/lib/components/forms/input/directives/input.directive.d.ts +37 -0
- package/lib/components/forms/input/index.d.ts +2 -0
- package/lib/components/forms/input/model/input.defaults.d.ts +2 -0
- package/lib/components/forms/input/model/input.types.d.ts +4 -0
- package/lib/components/forms/multi-select/component/multi-select.component.d.ts +199 -0
- package/lib/components/forms/multi-select/model/multi-select.types.d.ts +5 -0
- package/lib/components/forms/option/component/option.component.d.ts +58 -0
- package/lib/components/forms/option/directives/option-slots.directive.d.ts +21 -0
- package/lib/components/forms/option/index.d.ts +3 -0
- package/lib/components/forms/option/model/option.types.d.ts +3 -0
- package/lib/components/forms/option-group/component/option-group.component.d.ts +32 -0
- package/lib/components/forms/option-group/index.d.ts +2 -0
- package/lib/components/forms/option-group/model/option-group.types.d.ts +2 -0
- package/lib/components/forms/password-field/component/password-field.component.d.ts +81 -0
- package/lib/components/forms/password-field/model/password-field-constants.d.ts +4 -0
- package/lib/components/forms/password-field/model/password-field.types.d.ts +6 -0
- package/lib/components/forms/password-field/model/password-policy.types.d.ts +10 -0
- package/lib/components/forms/password-field/model/password-strength.d.ts +2 -0
- package/lib/components/forms/password-field/validators/password.validator.d.ts +3 -0
- package/lib/components/forms/radio/component/radio.component.d.ts +68 -0
- package/lib/components/forms/radio/model/radio.types.d.ts +4 -0
- package/lib/components/forms/radio-group/component/radio-group.component.d.ts +86 -0
- package/lib/components/forms/radio-group/model/radio-group.token.d.ts +2 -0
- package/lib/components/forms/radio-group/model/radio-group.types.d.ts +5 -0
- package/lib/components/forms/select/component/select.component.d.ts +158 -0
- package/lib/components/forms/select/model/select.types.d.ts +4 -0
- package/lib/components/forms/switch/component/switch.component.d.ts +66 -0
- package/lib/components/forms/switch/index.d.ts +2 -0
- package/lib/components/forms/switch/model/switch.types.d.ts +4 -0
- package/lib/components/forms/switch-group/component/switch-group.component.d.ts +91 -0
- package/lib/components/forms/switch-group/model/switch-group.types.d.ts +5 -0
- package/lib/components/forms/textarea/directives/textarea.directive.d.ts +37 -0
- package/lib/components/forms/textarea/model/textarea.types.d.ts +5 -0
- package/lib/components/icon/component/solaris-icon.component.d.ts +13 -0
- package/lib/components/icon/index.d.ts +1 -0
- package/lib/components/interaction/dropdown-menu/component/dropdown-menu-group.component.d.ts +10 -0
- package/lib/components/interaction/dropdown-menu/component/dropdown-menu-item.component.d.ts +28 -0
- package/lib/components/interaction/dropdown-menu/component/dropdown-menu-label.component.d.ts +7 -0
- package/lib/components/interaction/dropdown-menu/component/dropdown-menu.component.d.ts +21 -0
- package/lib/components/interaction/dropdown-menu/component/dropdown-submenu-trigger.component.d.ts +21 -0
- package/lib/components/interaction/dropdown-menu/component/dropdown-submenu.component.d.ts +68 -0
- package/lib/components/interaction/dropdown-menu/directives/dropdown-menu-trigger.directive.d.ts +61 -0
- package/lib/components/interaction/dropdown-menu/index.d.ts +9 -0
- package/lib/components/interaction/dropdown-menu/model/dropdown-menu-navigation.d.ts +8 -0
- package/lib/components/interaction/dropdown-menu/model/dropdown-menu.types.d.ts +11 -0
- package/lib/components/interaction/dropdown-menu/model/dropdown-submenu.types.d.ts +2 -0
- package/lib/components/interaction/popover/component/popover-panel.component.d.ts +10 -0
- package/lib/components/interaction/popover/directives/popover-trigger.directive.d.ts +65 -0
- package/lib/components/interaction/popover/directives/popover.directive.d.ts +7 -0
- package/lib/components/interaction/popover/index.d.ts +4 -0
- package/lib/components/interaction/popover/model/popover-position.d.ts +4 -0
- package/lib/components/interaction/popover/model/popover.types.d.ts +7 -0
- package/lib/components/interaction/popover/token/popover.tokens.d.ts +12 -0
- package/lib/components/interaction/tooltip/component/tooltip-panel.component.d.ts +9 -0
- package/lib/components/interaction/tooltip/directive/tooltip.directive.d.ts +80 -0
- package/lib/components/interaction/tooltip/index.d.ts +3 -0
- package/lib/components/interaction/tooltip/model/tooltip-position.d.ts +5 -0
- package/lib/components/interaction/tooltip/model/tooltip.types.d.ts +22 -0
- package/lib/components/interaction/tooltip/token/tooltip.tokens.d.ts +21 -0
- package/lib/components/navigation/editable-tabs/component/editable-tabs.component.d.ts +69 -0
- package/lib/components/navigation/editable-tabs/editable-tab/editable-tab.component.d.ts +20 -0
- package/lib/components/navigation/editable-tabs/model/editable-tabs.types.d.ts +60 -0
- package/lib/components/navigation/segmented-control/component/segmented-control.component.d.ts +64 -0
- package/lib/components/navigation/segmented-control/item/segmented-item.component.d.ts +35 -0
- package/lib/components/navigation/segmented-control/model/segmented-control.types.d.ts +12 -0
- package/lib/components/navigation/segmented-control/token/segmented-control.tokens.d.ts +22 -0
- package/lib/components/navigation/stepper/actions/stepper-actions.component.d.ts +7 -0
- package/lib/components/navigation/stepper/component/stepper.component.d.ts +36 -0
- package/lib/components/navigation/stepper/content/stepper-content.component.d.ts +5 -0
- package/lib/components/navigation/stepper/model/stepper.types.d.ts +15 -0
- package/lib/components/navigation/stepper/step/step.component.d.ts +27 -0
- package/lib/components/navigation/stepper/token/stepper.tokens.d.ts +13 -0
- package/lib/components/navigation/tabs/component/tabs.component.d.ts +47 -0
- package/lib/components/navigation/tabs/index.d.ts +6 -0
- package/lib/components/navigation/tabs/model/tabs.types.d.ts +17 -0
- package/lib/components/navigation/tabs/tab/tab.component.d.ts +38 -0
- package/lib/components/navigation/tabs/tab-panel/tab-panel.component.d.ts +15 -0
- package/lib/components/navigation/tabs/token/tabs.tokens.d.ts +19 -0
- package/lib/components/overlay/dialog/component/dialog.component.d.ts +29 -0
- package/lib/components/overlay/dialog/components/dialog-actions.component.d.ts +12 -0
- package/lib/components/overlay/dialog/components/dialog-content.component.d.ts +5 -0
- package/lib/components/overlay/dialog/components/dialog-header.component.d.ts +19 -0
- package/lib/components/overlay/dialog/container/dialog-container.component.d.ts +32 -0
- package/lib/components/overlay/dialog/flow/dialog-flow.component.d.ts +19 -0
- package/lib/components/overlay/dialog/flow/dialog-step.component.d.ts +7 -0
- package/lib/components/overlay/dialog/model/dialog.types.d.ts +87 -0
- package/lib/components/overlay/dialog/provider/provide-solaris-dialog.d.ts +3 -0
- package/lib/components/overlay/dialog/service/dialog-ref.d.ts +11 -0
- package/lib/components/overlay/dialog/service/dialog.service.d.ts +20 -0
- package/lib/components/overlay/dialog/token/dialog-data.token.d.ts +4 -0
- package/lib/components/overlay/dialog/token/dialog.tokens.d.ts +4 -0
- package/lib/services/accessibility/directives/visually-hidden.directive.d.ts +5 -0
- package/lib/services/accessibility/model/solaris-accessibility-config.interface.d.ts +4 -0
- package/lib/services/accessibility/model/solaris-accessibility.types.d.ts +5 -0
- package/lib/services/accessibility/provider/provide-solaris-accessibility.d.ts +3 -0
- package/lib/services/accessibility/service/solaris-accessibility.service.d.ts +15 -0
- package/lib/services/accessibility/testing/solaris-accessibility-testing.provider.d.ts +3 -0
- package/lib/services/accessibility/token/solaris-accessibility.tokens.d.ts +3 -0
- package/lib/services/icon/icons/groups/actions.d.ts +2 -0
- package/lib/services/icon/icons/groups/data.d.ts +2 -0
- package/lib/services/icon/icons/groups/layout.d.ts +2 -0
- package/lib/services/icon/icons/groups/navigation.d.ts +2 -0
- package/lib/services/icon/icons/groups/status.d.ts +2 -0
- package/lib/services/icon/icons/groups/theme.d.ts +2 -0
- package/lib/services/icon/icons/index.d.ts +1 -0
- package/lib/services/icon/icons/solaris-built-in-icons.d.ts +2 -0
- package/lib/services/icon/index.d.ts +8 -0
- package/lib/services/icon/model/solaris-icon-definition.interface.d.ts +45 -0
- package/lib/services/icon/model/solaris-icon.types.d.ts +4 -0
- package/lib/services/icon/provider/provide-solaris-icons.d.ts +3 -0
- package/lib/services/icon/service/solaris-icon-registry.service.d.ts +12 -0
- package/lib/services/icon/token/solaris-icon.tokens.d.ts +6 -0
- package/lib/services/theme/model/solaris-theme-config.interface.d.ts +5 -0
- package/lib/services/theme/model/solaris-theme.types.d.ts +3 -0
- package/lib/services/theme/provider/provide-solaris-theme.d.ts +3 -0
- package/lib/services/theme/service/solaris-theme.service.d.ts +9 -0
- package/lib/services/theme/testing/solaris-theme-testing.provider.d.ts +3 -0
- package/lib/services/theme/token/solaris-theme.tokens.d.ts +3 -0
- package/lib/services/translation/index.d.ts +8 -0
- package/lib/services/translation/model/solaris-locale.types.d.ts +4 -0
- package/lib/services/translation/model/solaris-translate-config.interface.d.ts +8 -0
- package/lib/services/translation/model/solaris-translate-defaults.d.ts +2 -0
- package/lib/services/translation/model/solaris-translation.types.d.ts +3 -0
- package/lib/services/translation/pipe/solaris-translate.pipe.d.ts +8 -0
- package/lib/services/translation/provider/provide-solaris-translate.d.ts +3 -0
- package/lib/services/translation/service/solaris-translate.service.d.ts +15 -0
- package/lib/services/translation/testing/solaris-translate-testing.provider.d.ts +3 -0
- package/lib/services/translation/token/solaris-translate.tokens.d.ts +3 -0
- package/lib/testing/provide-solaris-testing.d.ts +10 -0
- package/lib/testing/solaris-test-utilities.d.ts +3 -0
- package/package.json +9 -5
- package/styles/_button.scss +50 -220
- package/styles/_core.scss +37 -37
- package/styles/_dropdown-menu.scss +72 -0
- package/styles/_icon-button.scss +43 -219
- package/styles/_index.scss +19 -19
- package/styles/_input.scss +255 -0
- package/styles/_popover.scss +73 -0
- package/styles/_theme.scss +36 -36
- package/styles/_toast.scss +9 -0
- package/styles/_tooltip.scss +3 -0
- package/fesm2022/educarehq-solaris-ui.mjs +0 -1047
- package/fesm2022/educarehq-solaris-ui.mjs.map +0 -1
- package/types/educarehq-solaris-ui.d.ts +0 -408
|
@@ -0,0 +1,442 @@
|
|
|
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
|
+
maxLength = signal(undefined, ...(ngDevMode ? [{ debugName: "maxLength" }] : /* istanbul ignore next */ []));
|
|
67
|
+
currentLength = signal(0, ...(ngDevMode ? [{ debugName: "currentLength" }] : /* istanbul ignore next */ []));
|
|
68
|
+
showCharacterCounter = computed(() => {
|
|
69
|
+
const max = this.maxLength();
|
|
70
|
+
return max !== undefined && max > 0;
|
|
71
|
+
}, ...(ngDevMode ? [{ debugName: "showCharacterCounter" }] : /* istanbul ignore next */ []));
|
|
72
|
+
characterCounterText = computed(() => {
|
|
73
|
+
const max = this.maxLength();
|
|
74
|
+
if (max === undefined || max <= 0)
|
|
75
|
+
return '';
|
|
76
|
+
const current = this.currentLength();
|
|
77
|
+
return `${current}/${max}`;
|
|
78
|
+
}, ...(ngDevMode ? [{ debugName: "characterCounterText" }] : /* istanbul ignore next */ []));
|
|
79
|
+
characterCounterSeverity = computed(() => {
|
|
80
|
+
const max = this.maxLength();
|
|
81
|
+
const current = this.currentLength();
|
|
82
|
+
if (max === undefined || max <= 0)
|
|
83
|
+
return 'normal';
|
|
84
|
+
const ratio = current / max;
|
|
85
|
+
if (ratio >= 1)
|
|
86
|
+
return 'danger';
|
|
87
|
+
if (ratio >= 0.9)
|
|
88
|
+
return 'warning';
|
|
89
|
+
return 'normal';
|
|
90
|
+
}, ...(ngDevMode ? [{ debugName: "characterCounterSeverity" }] : /* istanbul ignore next */ []));
|
|
91
|
+
controlId = null;
|
|
92
|
+
controlElement = null;
|
|
93
|
+
focusListener = null;
|
|
94
|
+
blurListener = null;
|
|
95
|
+
inputListener = null;
|
|
96
|
+
hasProjectedLabel = computed(() => !!this.projectedLabel, ...(ngDevMode ? [{ debugName: "hasProjectedLabel" }] : /* istanbul ignore next */ []));
|
|
97
|
+
hasProjectedHint = computed(() => !!this.projectedHint, ...(ngDevMode ? [{ debugName: "hasProjectedHint" }] : /* istanbul ignore next */ []));
|
|
98
|
+
hasProjectedError = computed(() => !!this.projectedError, ...(ngDevMode ? [{ debugName: "hasProjectedError" }] : /* istanbul ignore next */ []));
|
|
99
|
+
hasPrefix = signal(false, ...(ngDevMode ? [{ debugName: "hasPrefix" }] : /* istanbul ignore next */ []));
|
|
100
|
+
hasSuffix = signal(false, ...(ngDevMode ? [{ debugName: "hasSuffix" }] : /* istanbul ignore next */ []));
|
|
101
|
+
controlType = computed(() => {
|
|
102
|
+
return this.isTextareaControl() ? 'textarea' : 'other';
|
|
103
|
+
}, ...(ngDevMode ? [{ debugName: "controlType" }] : /* istanbul ignore next */ []));
|
|
104
|
+
effectiveDensity = computed(() => {
|
|
105
|
+
return this.density() ?? 'comfortable';
|
|
106
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveDensity" }] : /* istanbul ignore next */ []));
|
|
107
|
+
labelText = computed(() => {
|
|
108
|
+
const key = this.labelKey();
|
|
109
|
+
if (key) {
|
|
110
|
+
return this.translateService.translate(key);
|
|
111
|
+
}
|
|
112
|
+
return this.label();
|
|
113
|
+
}, ...(ngDevMode ? [{ debugName: "labelText" }] : /* istanbul ignore next */ []));
|
|
114
|
+
hintText = computed(() => {
|
|
115
|
+
const key = this.hintKey();
|
|
116
|
+
if (key) {
|
|
117
|
+
return this.translateService.translate(key);
|
|
118
|
+
}
|
|
119
|
+
return this.hint();
|
|
120
|
+
}, ...(ngDevMode ? [{ debugName: "hintText" }] : /* istanbul ignore next */ []));
|
|
121
|
+
errorText = computed(() => {
|
|
122
|
+
const key = this.errorKey();
|
|
123
|
+
if (key) {
|
|
124
|
+
return this.translateService.translate(key);
|
|
125
|
+
}
|
|
126
|
+
return this.error();
|
|
127
|
+
}, ...(ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []));
|
|
128
|
+
optionalLabelText = computed(() => {
|
|
129
|
+
const key = this.optionalLabelKey();
|
|
130
|
+
if (key) {
|
|
131
|
+
return this.translateService.translate(key);
|
|
132
|
+
}
|
|
133
|
+
const explicit = this.optionalLabel();
|
|
134
|
+
if (explicit) {
|
|
135
|
+
return explicit;
|
|
136
|
+
}
|
|
137
|
+
return this.translateService.translate('solaris.form-field.optional');
|
|
138
|
+
}, ...(ngDevMode ? [{ debugName: "optionalLabelText" }] : /* istanbul ignore next */ []));
|
|
139
|
+
isEffectivelyDisabled = computed(() => {
|
|
140
|
+
const manual = this.disabled();
|
|
141
|
+
if (manual !== undefined) {
|
|
142
|
+
return manual;
|
|
143
|
+
}
|
|
144
|
+
const explicitControl = this.control();
|
|
145
|
+
if (explicitControl) {
|
|
146
|
+
return explicitControl.disabled;
|
|
147
|
+
}
|
|
148
|
+
if (this.formControl) {
|
|
149
|
+
return this.formControl.disabled;
|
|
150
|
+
}
|
|
151
|
+
return this.autoDetectedDisabled();
|
|
152
|
+
}, ...(ngDevMode ? [{ debugName: "isEffectivelyDisabled" }] : /* istanbul ignore next */ []));
|
|
153
|
+
isEffectivelyReadonly = computed(() => {
|
|
154
|
+
const manual = this.readonly();
|
|
155
|
+
if (manual !== undefined) {
|
|
156
|
+
return manual;
|
|
157
|
+
}
|
|
158
|
+
const explicitControl = this.control();
|
|
159
|
+
if (explicitControl) {
|
|
160
|
+
return explicitControl.readonly;
|
|
161
|
+
}
|
|
162
|
+
if (this.formControl) {
|
|
163
|
+
return this.formControl.readonly;
|
|
164
|
+
}
|
|
165
|
+
return this.autoDetectedReadonly();
|
|
166
|
+
}, ...(ngDevMode ? [{ debugName: "isEffectivelyReadonly" }] : /* istanbul ignore next */ []));
|
|
167
|
+
effectiveNgControl = computed(() => {
|
|
168
|
+
return (this.formControlDirective ??
|
|
169
|
+
this.formControlName ??
|
|
170
|
+
this.ngModelDir ??
|
|
171
|
+
null);
|
|
172
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveNgControl" }] : /* istanbul ignore next */ []));
|
|
173
|
+
isAutoInvalid = computed(() => {
|
|
174
|
+
const control = this.effectiveNgControl();
|
|
175
|
+
if (!control?.control) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const ctrl = control.control;
|
|
179
|
+
const invalid = ctrl.invalid;
|
|
180
|
+
const touched = ctrl.touched;
|
|
181
|
+
const dirty = ctrl.dirty;
|
|
182
|
+
const focused = this.isFocused();
|
|
183
|
+
if (!invalid) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
if (focused) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
return touched || dirty;
|
|
190
|
+
}, ...(ngDevMode ? [{ debugName: "isAutoInvalid" }] : /* istanbul ignore next */ []));
|
|
191
|
+
isInvalid = computed(() => {
|
|
192
|
+
const manual = this.invalid();
|
|
193
|
+
if (manual !== undefined) {
|
|
194
|
+
return manual;
|
|
195
|
+
}
|
|
196
|
+
const explicitControl = this.control();
|
|
197
|
+
if (explicitControl) {
|
|
198
|
+
return explicitControl.invalid;
|
|
199
|
+
}
|
|
200
|
+
if (this.formControl) {
|
|
201
|
+
return this.formControl.invalid && !this.isFocused();
|
|
202
|
+
}
|
|
203
|
+
return this.isAutoInvalid();
|
|
204
|
+
}, ...(ngDevMode ? [{ debugName: "isInvalid" }] : /* istanbul ignore next */ []));
|
|
205
|
+
showError = computed(() => {
|
|
206
|
+
return this.isInvalid() && (!!this.errorText() || this.hasProjectedError());
|
|
207
|
+
}, ...(ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []));
|
|
208
|
+
showHint = computed(() => {
|
|
209
|
+
if (this.showError()) {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
return !!this.hintText() || this.hasProjectedHint();
|
|
213
|
+
}, ...(ngDevMode ? [{ debugName: "showHint" }] : /* istanbul ignore next */ []));
|
|
214
|
+
describedBy = computed(() => {
|
|
215
|
+
const ids = [];
|
|
216
|
+
if (this.showHint()) {
|
|
217
|
+
ids.push(this.hintId);
|
|
218
|
+
}
|
|
219
|
+
if (this.showError()) {
|
|
220
|
+
ids.push(this.errorId);
|
|
221
|
+
}
|
|
222
|
+
return ids.length > 0 ? ids.join(' ') : null;
|
|
223
|
+
}, ...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
224
|
+
ngAfterContentInit() {
|
|
225
|
+
this.hasPrefix.set(!!this.prefix);
|
|
226
|
+
this.hasSuffix.set(!!this.suffix);
|
|
227
|
+
this.detectControl();
|
|
228
|
+
this.connectControl();
|
|
229
|
+
this.syncDescribedBy();
|
|
230
|
+
this.syncControlDisabledReadonly();
|
|
231
|
+
this.warnNoControl();
|
|
232
|
+
this.warnMultipleControls();
|
|
233
|
+
}
|
|
234
|
+
syncControlDisabledReadonly() {
|
|
235
|
+
if (!this.controlElement) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (this.control()) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
// SECURITY_EXCEPTION: Setting disabled/readonly on native control is required for FormField propagation.
|
|
242
|
+
const input = this.controlElement;
|
|
243
|
+
const shouldDisable = this.isEffectivelyDisabled();
|
|
244
|
+
const shouldReadonly = this.isEffectivelyReadonly();
|
|
245
|
+
if (input.disabled !== shouldDisable) {
|
|
246
|
+
input.disabled = shouldDisable;
|
|
247
|
+
}
|
|
248
|
+
if (input.readOnly !== shouldReadonly) {
|
|
249
|
+
input.readOnly = shouldReadonly;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
syncDescribedBy() {
|
|
253
|
+
const describedBy = this.describedBy();
|
|
254
|
+
const targetControl = this.control() ?? this.formControl;
|
|
255
|
+
if (targetControl) {
|
|
256
|
+
if (describedBy) {
|
|
257
|
+
targetControl.setDescribedByIds(describedBy.split(' '));
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
targetControl.setDescribedByIds([]);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
describedByEffect = effect(() => {
|
|
265
|
+
this.describedBy();
|
|
266
|
+
this.syncDescribedBy();
|
|
267
|
+
}, ...(ngDevMode ? [{ debugName: "describedByEffect" }] : /* istanbul ignore next */ []));
|
|
268
|
+
ngOnDestroy() {
|
|
269
|
+
this.removeListeners();
|
|
270
|
+
}
|
|
271
|
+
detectControl() {
|
|
272
|
+
const explicitControl = this.control();
|
|
273
|
+
if (explicitControl) {
|
|
274
|
+
this.controlId = explicitControl.id;
|
|
275
|
+
// SECURITY_EXCEPTION: nativeElement.querySelector required to find trigger element. Standard DOM API used after Angular CDK pattern.
|
|
276
|
+
const triggerEl = this.elementRef.nativeElement.querySelector('[solaris-form-field-trigger]');
|
|
277
|
+
if (triggerEl) {
|
|
278
|
+
this.controlElement = triggerEl;
|
|
279
|
+
if (triggerEl.id) {
|
|
280
|
+
this.controlId = triggerEl.id;
|
|
281
|
+
}
|
|
282
|
+
this.connectControl();
|
|
283
|
+
}
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
// SECURITY_EXCEPTION: nativeElement access required to detect projected form controls.
|
|
287
|
+
// SECURITY_EXCEPTION: Angular CDK and Material use the same approach.
|
|
288
|
+
// SECURITY_EXCEPTION: Read-only querySelectorAll, no DOM mutation.
|
|
289
|
+
const nativeElement = this.elementRef.nativeElement;
|
|
290
|
+
const children = nativeElement.querySelectorAll('input, select, textarea, [solaris-input], [solaris-select], [solaris-textarea]');
|
|
291
|
+
if (children.length > 0) {
|
|
292
|
+
const first = children[0];
|
|
293
|
+
this.controlElement = first;
|
|
294
|
+
// SECURITY_EXCEPTION: nativeElement.tagName is the standard DOM API to check element type.
|
|
295
|
+
const isTextarea = first.tagName === 'TEXTAREA';
|
|
296
|
+
this.isTextareaControl.set(isTextarea);
|
|
297
|
+
// SECURITY_EXCEPTION: getAttribute is the standard DOM API to read HTML attributes.
|
|
298
|
+
const maxlengthAttr = first.getAttribute('maxlength');
|
|
299
|
+
if (maxlengthAttr !== null) {
|
|
300
|
+
const parsed = parseInt(maxlengthAttr, 10);
|
|
301
|
+
this.maxLength.set(!isNaN(parsed) ? parsed : undefined);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
this.maxLength.set(undefined);
|
|
305
|
+
}
|
|
306
|
+
// SECURITY_EXCEPTION: reading value.length from native input/textarea is required for character counter.
|
|
307
|
+
this.currentLength.set(first.value?.length ?? 0);
|
|
308
|
+
if (isTextarea) {
|
|
309
|
+
const resize = first.dataset['resize'] ?? first.getAttribute('resize');
|
|
310
|
+
const validResize = resize === 'none' ||
|
|
311
|
+
resize === 'vertical' ||
|
|
312
|
+
resize === 'horizontal' ||
|
|
313
|
+
resize === 'both'
|
|
314
|
+
? resize
|
|
315
|
+
: 'vertical';
|
|
316
|
+
this.controlResize.set(validResize);
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
this.controlResize.set(null);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (this.formControl) {
|
|
323
|
+
this.controlId = this.formControl.id;
|
|
324
|
+
}
|
|
325
|
+
else if (this.controlElement) {
|
|
326
|
+
if (!this.controlElement.id) {
|
|
327
|
+
const generatedId = `solaris-control-${this.fieldId}`;
|
|
328
|
+
this.controlElement.id = generatedId;
|
|
329
|
+
this.controlId = generatedId;
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
this.controlId = this.controlElement.id;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
connectControl() {
|
|
337
|
+
if (this.controlElement) {
|
|
338
|
+
this.addListeners(this.controlElement);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
addListeners(element) {
|
|
342
|
+
this.removeListeners();
|
|
343
|
+
this.ngZone.runOutsideAngular(() => {
|
|
344
|
+
const onFocus = () => {
|
|
345
|
+
this.ngZone.run(() => this.isFocused.set(true));
|
|
346
|
+
};
|
|
347
|
+
const onBlur = () => {
|
|
348
|
+
this.ngZone.run(() => this.isFocused.set(false));
|
|
349
|
+
};
|
|
350
|
+
const onInput = () => {
|
|
351
|
+
// SECURITY_EXCEPTION: reading value.length from native input/textarea is standard DOM API for character counter.
|
|
352
|
+
this.ngZone.run(() => {
|
|
353
|
+
this.currentLength.set(element.value?.length ??
|
|
354
|
+
0);
|
|
355
|
+
});
|
|
356
|
+
};
|
|
357
|
+
element.addEventListener('focusin', onFocus);
|
|
358
|
+
element.addEventListener('focusout', onBlur);
|
|
359
|
+
element.addEventListener('input', onInput);
|
|
360
|
+
this.focusListener = () => element.removeEventListener('focusin', onFocus);
|
|
361
|
+
this.blurListener = () => element.removeEventListener('focusout', onBlur);
|
|
362
|
+
this.inputListener = () => element.removeEventListener('input', onInput);
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
removeListeners() {
|
|
366
|
+
this.focusListener?.();
|
|
367
|
+
this.blurListener?.();
|
|
368
|
+
this.inputListener?.();
|
|
369
|
+
this.focusListener = null;
|
|
370
|
+
this.blurListener = null;
|
|
371
|
+
this.inputListener = null;
|
|
372
|
+
}
|
|
373
|
+
warnNoControl() {
|
|
374
|
+
const hasAnyControl = !!this.control() ||
|
|
375
|
+
!!this.formControl ||
|
|
376
|
+
!!this.controlElement ||
|
|
377
|
+
!!this.effectiveNgControl();
|
|
378
|
+
if (!hasAnyControl) {
|
|
379
|
+
console.warn(`[SolarisFormField] No form control found inside <solaris-form-field id="${this.fieldId}">. ` +
|
|
380
|
+
'Form Field requires a control (input, select, textarea, or a Solaris form control directive). ' +
|
|
381
|
+
'This warning is shown in development only. The component will render safely without the control.');
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
warnMultipleControls() {
|
|
385
|
+
// SECURITY_EXCEPTION: nativeElement access required to count projected controls.
|
|
386
|
+
// SECURITY_EXCEPTION: Same justification as detectControl: read-only query, no DOM mutation.
|
|
387
|
+
const nativeElement = this.elementRef.nativeElement;
|
|
388
|
+
const children = nativeElement.querySelectorAll('input, select, textarea, [solaris-input], [solaris-select], [solaris-textarea]');
|
|
389
|
+
if (children.length > 1) {
|
|
390
|
+
console.warn(`[SolarisFormField] Multiple form controls detected inside <solaris-form-field id="${this.fieldId}">. ` +
|
|
391
|
+
'Form Field v1 supports one main control. Multiple controls may cause unexpected behavior.');
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
395
|
+
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 @if (showCharacterCounter()) {\n <span\n class=\"solaris-form-field__character-counter\"\n aria-live=\"polite\"\n [attr.aria-label]=\"characterCounterText()\"\n [attr.data-severity]=\"characterCounterSeverity()\"\n >\n {{ characterCounterText() }}\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@if (showError() || showHint()) {\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}\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__character-counter{margin-left:auto;color:var(--solaris-form-field-optional-color);font-size:var(--solaris-form-field-optional-font-size);font-variant-numeric:tabular-nums;white-space:nowrap;transition:color var(--solaris-motion-duration-fast) ease}.solaris-form-field__character-counter[data-severity=warning]{color:var(--solaris-warning-text)}.solaris-form-field__character-counter[data-severity=danger]{color:var(--solaris-danger-text)}.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"] });
|
|
396
|
+
}
|
|
397
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisFormFieldComponent, decorators: [{
|
|
398
|
+
type: Component,
|
|
399
|
+
args: [{ selector: 'solaris-form-field', standalone: true, imports: [], host: {
|
|
400
|
+
'[attr.data-size]': 'size()',
|
|
401
|
+
'[attr.data-radius]': 'radius()',
|
|
402
|
+
'[attr.data-bwignore]': '"true"',
|
|
403
|
+
'[attr.data-appearance]': 'appearance()',
|
|
404
|
+
'[attr.data-density]': 'effectiveDensity()',
|
|
405
|
+
'[attr.data-control-type]': 'controlType()',
|
|
406
|
+
'[attr.data-control-resize]': 'controlResize()',
|
|
407
|
+
'[attr.data-invalid]': 'isInvalid() ? "" : null',
|
|
408
|
+
'[attr.data-focused]': 'isFocused() ? "" : null',
|
|
409
|
+
'[attr.data-has-prefix]': 'hasPrefix() ? "" : null',
|
|
410
|
+
'[attr.data-has-suffix]': 'hasSuffix() ? "" : null',
|
|
411
|
+
'[attr.data-disabled]': 'isEffectivelyDisabled() ? "" : null',
|
|
412
|
+
'[attr.data-readonly]': 'isEffectivelyReadonly() ? "" : null',
|
|
413
|
+
}, 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 @if (showCharacterCounter()) {\n <span\n class=\"solaris-form-field__character-counter\"\n aria-live=\"polite\"\n [attr.aria-label]=\"characterCounterText()\"\n [attr.data-severity]=\"characterCounterSeverity()\"\n >\n {{ characterCounterText() }}\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@if (showError() || showHint()) {\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}\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__character-counter{margin-left:auto;color:var(--solaris-form-field-optional-color);font-size:var(--solaris-form-field-optional-font-size);font-variant-numeric:tabular-nums;white-space:nowrap;transition:color var(--solaris-motion-duration-fast) ease}.solaris-form-field__character-counter[data-severity=warning]{color:var(--solaris-warning-text)}.solaris-form-field__character-counter[data-severity=danger]{color:var(--solaris-danger-text)}.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"] }]
|
|
414
|
+
}], 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: [{
|
|
415
|
+
type: ContentChild,
|
|
416
|
+
args: [SolarisFormLabelComponent]
|
|
417
|
+
}], projectedHint: [{
|
|
418
|
+
type: ContentChild,
|
|
419
|
+
args: [SolarisFormHintComponent]
|
|
420
|
+
}], projectedError: [{
|
|
421
|
+
type: ContentChild,
|
|
422
|
+
args: [SolarisFormErrorComponent]
|
|
423
|
+
}], prefix: [{
|
|
424
|
+
type: ContentChild,
|
|
425
|
+
args: [SolarisFormPrefixDirective]
|
|
426
|
+
}], suffix: [{
|
|
427
|
+
type: ContentChild,
|
|
428
|
+
args: [SolarisFormSuffixDirective]
|
|
429
|
+
}], formControl: [{
|
|
430
|
+
type: ContentChild,
|
|
431
|
+
args: [SolarisFormControl]
|
|
432
|
+
}], formControlDirective: [{
|
|
433
|
+
type: ContentChild,
|
|
434
|
+
args: [FormControlDirective]
|
|
435
|
+
}], formControlName: [{
|
|
436
|
+
type: ContentChild,
|
|
437
|
+
args: [FormControlName]
|
|
438
|
+
}], ngModelDir: [{
|
|
439
|
+
type: ContentChild,
|
|
440
|
+
args: [NgModel]
|
|
441
|
+
}] } });
|
|
442
|
+
//# sourceMappingURL=form-field.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 {\n Component,\n input,\n computed,\n signal,\n effect,\n ContentChild,\n AfterContentInit,\n OnDestroy,\n ElementRef,\n inject,\n NgZone,\n} from '@angular/core';\nimport { FormControlDirective, FormControlName, NgModel } from '@angular/forms';\n\nimport { SolarisFormPrefixDirective } from '../directives/form-prefix.directive';\nimport { SolarisFormSuffixDirective } from '../directives/form-suffix.directive';\nimport { SolarisTranslateService } from '../../../../services/translation';\nimport { SolarisFormControl } from '../model/form-control.contract';\nimport { SolarisFormLabelComponent } from './form-label.component';\nimport { SolarisFormErrorComponent } from './form-error.component';\nimport { SolarisFormHintComponent } from './form-hint.component';\n\nimport type {\n SolarisFormFieldAppearance,\n SolarisFormFieldSize,\n SolarisFormFieldDensity,\n SolarisFormFieldRadius,\n ControlResize,\n} from '../model/form-field.types';\n\nlet nextId = 0;\nfunction generateId(): string {\n return `solaris-form-field-${++nextId}`;\n}\n\n@Component({\n selector: 'solaris-form-field',\n standalone: true,\n imports: [],\n templateUrl: './form-field.component.html',\n styleUrls: ['./form-field.component.scss'],\n host: {\n '[attr.data-size]': 'size()',\n '[attr.data-radius]': 'radius()',\n '[attr.data-bwignore]': '\"true\"',\n '[attr.data-appearance]': 'appearance()',\n '[attr.data-density]': 'effectiveDensity()',\n '[attr.data-control-type]': 'controlType()',\n '[attr.data-control-resize]': 'controlResize()',\n '[attr.data-invalid]': 'isInvalid() ? \"\" : null',\n '[attr.data-focused]': 'isFocused() ? \"\" : null',\n '[attr.data-has-prefix]': 'hasPrefix() ? \"\" : null',\n '[attr.data-has-suffix]': 'hasSuffix() ? \"\" : null',\n '[attr.data-disabled]': 'isEffectivelyDisabled() ? \"\" : null',\n '[attr.data-readonly]': 'isEffectivelyReadonly() ? \"\" : null',\n },\n})\nexport class SolarisFormFieldComponent implements AfterContentInit, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly translateService = inject(SolarisTranslateService);\n private readonly ngZone = inject(NgZone);\n\n constructor() {\n // SECURITY_EXCEPTION: Setting disabled/readonly on native control is standard DOM API.\n // SECURITY_EXCEPTION: Required for FormField to propagate disabled/readonly state to projected control.\n effect(() => {\n this.isEffectivelyDisabled();\n this.isEffectivelyReadonly();\n this.syncControlDisabledReadonly();\n });\n }\n\n readonly hintKey = input<string>();\n readonly labelKey = input<string>();\n readonly hint = input<string>('');\n readonly errorKey = input<string>();\n readonly label = input<string>('');\n readonly error = input<string>('');\n readonly optionalLabel = input<string>();\n readonly requiredLabel = input<string>();\n readonly optionalLabelKey = input<string>();\n readonly requiredLabelKey = input<string>();\n readonly required = input<boolean>(false);\n readonly optional = input<boolean>(false);\n readonly invalid = input<boolean | undefined>();\n readonly disabled = input<boolean | undefined>();\n readonly readonly = input<boolean | undefined>();\n readonly density = input<SolarisFormFieldDensity>();\n readonly size = input<SolarisFormFieldSize>('md');\n readonly radius = input<SolarisFormFieldRadius>('md');\n readonly appearance = input<SolarisFormFieldAppearance>('outline');\n readonly control = input<SolarisFormControl | undefined>(undefined);\n\n @ContentChild(SolarisFormLabelComponent)\n protected projectedLabel?: SolarisFormLabelComponent;\n @ContentChild(SolarisFormHintComponent)\n protected projectedHint?: SolarisFormHintComponent;\n @ContentChild(SolarisFormErrorComponent)\n protected projectedError?: SolarisFormErrorComponent;\n @ContentChild(SolarisFormPrefixDirective)\n protected prefix?: SolarisFormPrefixDirective;\n @ContentChild(SolarisFormSuffixDirective)\n protected suffix?: SolarisFormSuffixDirective;\n @ContentChild(SolarisFormControl)\n protected formControl?: SolarisFormControl;\n @ContentChild(FormControlDirective)\n protected formControlDirective?: FormControlDirective;\n @ContentChild(FormControlName)\n protected formControlName?: FormControlName;\n @ContentChild(NgModel)\n protected ngModelDir?: NgModel;\n\n protected readonly fieldId = generateId();\n protected readonly hintId = `solaris-form-field-hint-${this.fieldId}`;\n protected readonly errorId = `solaris-form-field-error-${this.fieldId}`;\n protected readonly labelId = `solaris-form-field-label-${this.fieldId}`;\n\n protected readonly isFocused = signal(false);\n protected readonly isTextareaControl = signal(false);\n protected readonly autoDetectedDisabled = signal(false);\n protected readonly autoDetectedReadonly = signal(false);\n protected readonly controlResize = signal<ControlResize | null>(null);\n\n protected readonly maxLength = signal<number | undefined>(undefined);\n protected readonly currentLength = signal<number>(0);\n protected readonly showCharacterCounter = computed(() => {\n const max = this.maxLength();\n return max !== undefined && max > 0;\n });\n protected readonly characterCounterText = computed(() => {\n const max = this.maxLength();\n if (max === undefined || max <= 0) return '';\n const current = this.currentLength();\n return `${current}/${max}`;\n });\n protected readonly characterCounterSeverity = computed<\n 'normal' | 'warning' | 'danger'\n >(() => {\n const max = this.maxLength();\n const current = this.currentLength();\n if (max === undefined || max <= 0) return 'normal';\n const ratio = current / max;\n if (ratio >= 1) return 'danger';\n if (ratio >= 0.9) return 'warning';\n return 'normal';\n });\n\n protected controlId: string | null = null;\n private controlElement: HTMLElement | null = null;\n private focusListener: (() => void) | null = null;\n private blurListener: (() => void) | null = null;\n private inputListener: (() => void) | null = null;\n\n protected readonly hasProjectedLabel = computed(() => !!this.projectedLabel);\n protected readonly hasProjectedHint = computed(() => !!this.projectedHint);\n protected readonly hasProjectedError = computed(() => !!this.projectedError);\n protected readonly hasPrefix = signal(false);\n protected readonly hasSuffix = signal(false);\n\n protected readonly controlType = computed<\n 'input' | 'textarea' | 'select' | 'other'\n >(() => {\n return this.isTextareaControl() ? 'textarea' : 'other';\n });\n\n protected readonly effectiveDensity = computed<SolarisFormFieldDensity>(\n () => {\n return this.density() ?? 'comfortable';\n },\n );\n\n protected readonly labelText = computed(() => {\n const key = this.labelKey();\n if (key) {\n return this.translateService.translate(key);\n }\n return this.label();\n });\n\n protected readonly hintText = computed(() => {\n const key = this.hintKey();\n if (key) {\n return this.translateService.translate(key);\n }\n return this.hint();\n });\n\n protected readonly errorText = computed(() => {\n const key = this.errorKey();\n if (key) {\n return this.translateService.translate(key);\n }\n return this.error();\n });\n\n protected readonly optionalLabelText = computed(() => {\n const key = this.optionalLabelKey();\n if (key) {\n return this.translateService.translate(key);\n }\n const explicit = this.optionalLabel();\n if (explicit) {\n return explicit;\n }\n return this.translateService.translate('solaris.form-field.optional');\n });\n\n protected readonly isEffectivelyDisabled = computed(() => {\n const manual = this.disabled();\n if (manual !== undefined) {\n return manual;\n }\n const explicitControl = this.control();\n if (explicitControl) {\n return explicitControl.disabled;\n }\n if (this.formControl) {\n return this.formControl.disabled;\n }\n return this.autoDetectedDisabled();\n });\n\n protected readonly isEffectivelyReadonly = computed(() => {\n const manual = this.readonly();\n if (manual !== undefined) {\n return manual;\n }\n const explicitControl = this.control();\n if (explicitControl) {\n return explicitControl.readonly;\n }\n if (this.formControl) {\n return this.formControl.readonly;\n }\n return this.autoDetectedReadonly();\n });\n\n protected readonly effectiveNgControl = computed(() => {\n return (\n this.formControlDirective ??\n this.formControlName ??\n this.ngModelDir ??\n null\n );\n });\n\n protected readonly isAutoInvalid = computed(() => {\n const control = this.effectiveNgControl();\n if (!control?.control) {\n return false;\n }\n const ctrl = control.control;\n const invalid = ctrl.invalid;\n const touched = ctrl.touched;\n const dirty = ctrl.dirty;\n const focused = this.isFocused();\n if (!invalid) {\n return false;\n }\n if (focused) {\n return false;\n }\n return touched || dirty;\n });\n\n protected readonly isInvalid = computed(() => {\n const manual = this.invalid();\n if (manual !== undefined) {\n return manual;\n }\n const explicitControl = this.control();\n if (explicitControl) {\n return explicitControl.invalid;\n }\n if (this.formControl) {\n return this.formControl.invalid && !this.isFocused();\n }\n return this.isAutoInvalid();\n });\n\n protected readonly showError = computed(() => {\n return this.isInvalid() && (!!this.errorText() || this.hasProjectedError());\n });\n\n protected readonly showHint = computed(() => {\n if (this.showError()) {\n return false;\n }\n return !!this.hintText() || this.hasProjectedHint();\n });\n\n protected readonly describedBy = computed(() => {\n const ids: string[] = [];\n if (this.showHint()) {\n ids.push(this.hintId);\n }\n if (this.showError()) {\n ids.push(this.errorId);\n }\n return ids.length > 0 ? ids.join(' ') : null;\n });\n\n ngAfterContentInit(): void {\n this.hasPrefix.set(!!this.prefix);\n this.hasSuffix.set(!!this.suffix);\n this.detectControl();\n this.connectControl();\n this.syncDescribedBy();\n this.syncControlDisabledReadonly();\n this.warnNoControl();\n this.warnMultipleControls();\n }\n\n private syncControlDisabledReadonly(): void {\n if (!this.controlElement) {\n return;\n }\n if (this.control()) {\n return;\n }\n // SECURITY_EXCEPTION: Setting disabled/readonly on native control is required for FormField propagation.\n const input = this.controlElement as HTMLInputElement;\n const shouldDisable = this.isEffectivelyDisabled();\n const shouldReadonly = this.isEffectivelyReadonly();\n if (input.disabled !== shouldDisable) {\n input.disabled = shouldDisable;\n }\n if (input.readOnly !== shouldReadonly) {\n input.readOnly = shouldReadonly;\n }\n }\n\n private syncDescribedBy(): void {\n const describedBy = this.describedBy();\n const targetControl = this.control() ?? this.formControl;\n if (targetControl) {\n if (describedBy) {\n targetControl.setDescribedByIds(describedBy.split(' '));\n } else {\n targetControl.setDescribedByIds([]);\n }\n }\n }\n\n protected readonly describedByEffect = effect(() => {\n this.describedBy();\n this.syncDescribedBy();\n });\n\n ngOnDestroy(): void {\n this.removeListeners();\n }\n\n private detectControl(): void {\n const explicitControl = this.control();\n if (explicitControl) {\n this.controlId = explicitControl.id;\n // SECURITY_EXCEPTION: nativeElement.querySelector required to find trigger element. Standard DOM API used after Angular CDK pattern.\n const triggerEl = this.elementRef.nativeElement.querySelector(\n '[solaris-form-field-trigger]',\n );\n if (triggerEl) {\n this.controlElement = triggerEl as HTMLElement;\n if (triggerEl.id) {\n this.controlId = triggerEl.id;\n }\n this.connectControl();\n }\n return;\n }\n\n // SECURITY_EXCEPTION: nativeElement access required to detect projected form controls.\n // SECURITY_EXCEPTION: Angular CDK and Material use the same approach.\n // SECURITY_EXCEPTION: Read-only querySelectorAll, no DOM mutation.\n const nativeElement = this.elementRef.nativeElement;\n const children = nativeElement.querySelectorAll(\n 'input, select, textarea, [solaris-input], [solaris-select], [solaris-textarea]',\n );\n\n if (children.length > 0) {\n const first = children[0] as HTMLElement;\n this.controlElement = first;\n // SECURITY_EXCEPTION: nativeElement.tagName is the standard DOM API to check element type.\n const isTextarea = first.tagName === 'TEXTAREA';\n this.isTextareaControl.set(isTextarea);\n\n // SECURITY_EXCEPTION: getAttribute is the standard DOM API to read HTML attributes.\n const maxlengthAttr = first.getAttribute('maxlength');\n if (maxlengthAttr !== null) {\n const parsed = parseInt(maxlengthAttr, 10);\n this.maxLength.set(!isNaN(parsed) ? parsed : undefined);\n } else {\n this.maxLength.set(undefined);\n }\n // SECURITY_EXCEPTION: reading value.length from native input/textarea is required for character counter.\n this.currentLength.set(\n (first as HTMLInputElement | HTMLTextAreaElement).value?.length ?? 0,\n );\n\n if (isTextarea) {\n const resize = first.dataset['resize'] ?? first.getAttribute('resize');\n\n const validResize: ControlResize =\n resize === 'none' ||\n resize === 'vertical' ||\n resize === 'horizontal' ||\n resize === 'both'\n ? resize\n : 'vertical';\n\n this.controlResize.set(validResize);\n } else {\n this.controlResize.set(null);\n }\n }\n\n if (this.formControl) {\n this.controlId = this.formControl.id;\n } else if (this.controlElement) {\n if (!this.controlElement.id) {\n const generatedId = `solaris-control-${this.fieldId}`;\n this.controlElement.id = generatedId;\n this.controlId = generatedId;\n } else {\n this.controlId = this.controlElement.id;\n }\n }\n }\n\n private connectControl(): void {\n if (this.controlElement) {\n this.addListeners(this.controlElement);\n }\n }\n\n private addListeners(element: HTMLElement): void {\n this.removeListeners();\n this.ngZone.runOutsideAngular(() => {\n const onFocus = (): void => {\n this.ngZone.run(() => this.isFocused.set(true));\n };\n const onBlur = (): void => {\n this.ngZone.run(() => this.isFocused.set(false));\n };\n const onInput = (): void => {\n // SECURITY_EXCEPTION: reading value.length from native input/textarea is standard DOM API for character counter.\n this.ngZone.run(() => {\n this.currentLength.set(\n (element as HTMLInputElement | HTMLTextAreaElement).value?.length ??\n 0,\n );\n });\n };\n element.addEventListener('focusin', onFocus);\n element.addEventListener('focusout', onBlur);\n element.addEventListener('input', onInput);\n this.focusListener = () =>\n element.removeEventListener('focusin', onFocus);\n this.blurListener = () => element.removeEventListener('focusout', onBlur);\n this.inputListener = () => element.removeEventListener('input', onInput);\n });\n }\n\n private removeListeners(): void {\n this.focusListener?.();\n this.blurListener?.();\n this.inputListener?.();\n this.focusListener = null;\n this.blurListener = null;\n this.inputListener = null;\n }\n\n private warnNoControl(): void {\n const hasAnyControl =\n !!this.control() ||\n !!this.formControl ||\n !!this.controlElement ||\n !!this.effectiveNgControl();\n if (!hasAnyControl) {\n console.warn(\n `[SolarisFormField] No form control found inside <solaris-form-field id=\"${this.fieldId}\">. ` +\n 'Form Field requires a control (input, select, textarea, or a Solaris form control directive). ' +\n 'This warning is shown in development only. The component will render safely without the control.',\n );\n }\n }\n\n private warnMultipleControls(): void {\n // SECURITY_EXCEPTION: nativeElement access required to count projected controls.\n // SECURITY_EXCEPTION: Same justification as detectControl: read-only query, no DOM mutation.\n const nativeElement = this.elementRef.nativeElement;\n const children = nativeElement.querySelectorAll(\n 'input, select, textarea, [solaris-input], [solaris-select], [solaris-textarea]',\n );\n if (children.length > 1) {\n console.warn(\n `[SolarisFormField] Multiple form controls detected inside <solaris-form-field id=\"${this.fieldId}\">. ` +\n 'Form Field v1 supports one main control. Multiple controls may cause unexpected behavior.',\n );\n }\n }\n}\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 @if (showCharacterCounter()) {\n <span\n class=\"solaris-form-field__character-counter\"\n aria-live=\"polite\"\n [attr.aria-label]=\"characterCounterText()\"\n [attr.data-severity]=\"characterCounterSeverity()\"\n >\n {{ characterCounterText() }}\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@if (showError() || showHint()) {\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}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|