diff --git a/packages/ui-library/src/components/radio/index.css.ts b/packages/ui-library/src/components/radio/index.css.ts index 5413cfba1..bf5a10e46 100644 --- a/packages/ui-library/src/components/radio/index.css.ts +++ b/packages/ui-library/src/components/radio/index.css.ts @@ -1,6 +1,6 @@ import { css } from "../../utils/css-in-ts/nested-typesafe-css-literals.js"; -import { ComponentThemeIterator } from "../../foundation/_tokens-generated/iterator.generated.js"; +import { ComponentThemeIterator, SemanticThemeIterator } from "../../foundation/_tokens-generated/iterator.generated.js"; export const staticStyles = css` ${ComponentThemeIterator((theme, cmp, css) => { @@ -10,6 +10,7 @@ export const staticStyles = css` .blr-radio.${theme} { all: initial; margin: 0 !important; + max-width: 100%; display: flex; flex-grow: 1; transition: all 0.25s ease 0s; @@ -56,6 +57,122 @@ export const staticStyles = css` .input-control { margin-top: ${radio.controlwrapper.paddingtop.sm}; + background-color: ${radio.control.container.bgcolor.inactive.rest}; + width: ${radio.control.container.size.sm}; + min-width: ${radio.control.container.size.sm}; + height: ${radio.control.container.size.sm}; + min-height: ${radio.control.container.size.sm}; + + &::before { + background-color: ${radio.control.icon.iconcolor.inactive.rest}; + width: ${radio.control.icon.iconsize.sm.inactive.rest}; + height: ${radio.control.icon.iconsize.sm.inactive.rest}; + } + + &:not(.disabled) { + &:hover { + background-color: ${radio.control.container.bgcolor.inactive.hover}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.hover}; + width: ${radio.control.icon.iconsize.sm.inactive.hover}; + height: ${radio.control.icon.iconsize.sm.inactive.hover}; + } + } + + &:active { + background-color: ${radio.control.container.bgcolor.inactive.pressed}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.pressed}; + width: ${radio.control.icon.iconsize.sm.inactive.pressed}; + height: ${radio.control.icon.iconsize.sm.inactive.pressed}; + } + } + + &:focus:not(:active) { + background-color: ${radio.control.container.bgcolor.inactive.focus}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.focus}; + width: ${radio.control.icon.iconsize.sm.inactive.focus}; + height: ${radio.control.icon.iconsize.sm.inactive.focus}; + } + } + } + + &.checked, + &:checked { + background-color: ${radio.control.container.bgcolor.active.rest}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.rest}; + width: ${radio.control.icon.iconsize.sm.active.rest}; + height: ${radio.control.icon.iconsize.sm.active.rest}; + } + + &:not(.disabled) { + &:hover { + background-color: ${radio.control.container.bgcolor.active.hover}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.hover}; + width: ${radio.control.icon.iconsize.sm.active.hover}; + height: ${radio.control.icon.iconsize.sm.active.hover}; + } + } + + &:active { + background-color: ${radio.control.container.bgcolor.active.pressed}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.pressed}; + width: ${radio.control.icon.iconsize.sm.active.pressed}; + height: ${radio.control.icon.iconsize.sm.active.pressed}; + } + } + + &:focus:not(:active) { + background-color: ${radio.control.container.bgcolor.active.focus}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.focus}; + width: ${radio.control.icon.iconsize.sm.active.focus}; + height: ${radio.control.icon.iconsize.sm.active.focus}; + } + } + } + + &:disabled { + background-color: ${radio.control.container.bgcolor.active.disabled}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.disabled}; + width: ${radio.control.icon.iconsize.sm.active.disabled}; + height: ${radio.control.icon.iconsize.sm.active.disabled}; + } + } + } + + &:disabled { + cursor: not-allowed; + background-color: ${radio.control.container.bgcolor.inactive.disabled}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.disabled}; + width: ${radio.control.icon.iconsize.sm.inactive.disabled}; + height: ${radio.control.icon.iconsize.sm.inactive.disabled}; + } + } } .label-wrapper { @@ -82,6 +199,122 @@ export const staticStyles = css` .input-control { margin-top: ${radio.controlwrapper.paddingtop.md}; + background-color: ${radio.control.container.bgcolor.inactive.rest}; + width: ${radio.control.container.size.md}; + min-width: ${radio.control.container.size.md}; + height: ${radio.control.container.size.md}; + min-height: ${radio.control.container.size.md}; + + &::before { + background-color: ${radio.control.icon.iconcolor.inactive.rest}; + width: ${radio.control.icon.iconsize.md.inactive.rest}; + height: ${radio.control.icon.iconsize.md.inactive.rest}; + } + + &:not(.disabled) { + &:hover { + background-color: ${radio.control.container.bgcolor.inactive.hover}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.hover}; + width: ${radio.control.icon.iconsize.md.inactive.hover}; + height: ${radio.control.icon.iconsize.md.inactive.hover}; + } + } + + &:active { + background-color: ${radio.control.container.bgcolor.inactive.pressed}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.pressed}; + width: ${radio.control.icon.iconsize.md.inactive.pressed}; + height: ${radio.control.icon.iconsize.md.inactive.pressed}; + } + } + + &:focus:not(:active) { + background-color: ${radio.control.container.bgcolor.inactive.focus}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.focus}; + width: ${radio.control.icon.iconsize.md.inactive.focus}; + height: ${radio.control.icon.iconsize.md.inactive.focus}; + } + } + } + + &.checked, + &:checked { + background-color: ${radio.control.container.bgcolor.active.rest}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.rest}; + width: ${radio.control.icon.iconsize.md.active.rest}; + height: ${radio.control.icon.iconsize.md.active.rest}; + } + + &:not(.disabled) { + &:hover { + background-color: ${radio.control.container.bgcolor.active.hover}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.hover}; + width: ${radio.control.icon.iconsize.md.active.hover}; + height: ${radio.control.icon.iconsize.md.active.hover}; + } + } + + &:active { + background-color: ${radio.control.container.bgcolor.active.pressed}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.pressed}; + width: ${radio.control.icon.iconsize.md.active.pressed}; + height: ${radio.control.icon.iconsize.md.active.pressed}; + } + } + + &:focus:not(:active) { + background-color: ${radio.control.container.bgcolor.active.focus}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.focus}; + width: ${radio.control.icon.iconsize.md.active.focus}; + height: ${radio.control.icon.iconsize.md.active.focus}; + } + } + } + + &:disabled { + background-color: ${radio.control.container.bgcolor.active.disabled}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.disabled}; + width: ${radio.control.icon.iconsize.md.active.disabled}; + height: ${radio.control.icon.iconsize.md.active.disabled}; + } + } + } + + &:disabled { + cursor: not-allowed; + background-color: ${radio.control.container.bgcolor.inactive.disabled}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.disabled}; + width: ${radio.control.icon.iconsize.md.inactive.disabled}; + height: ${radio.control.icon.iconsize.md.inactive.disabled}; + } + } } .label-wrapper { @@ -108,168 +341,138 @@ export const staticStyles = css` .input-control { margin-top: ${radio.controlwrapper.paddingtop.lg}; - } - - .label-wrapper { - padding-top: ${radio.contentcol.paddingtop.lg}; - gap: ${radio.contentcol.itemspacing.lg}; + background-color: ${radio.control.container.bgcolor.inactive.rest}; + width: ${radio.control.container.size.lg}; + min-width: ${radio.control.container.size.lg}; + height: ${radio.control.container.size.lg}; + min-height: ${radio.control.container.size.lg}; - .caption-wrapper { - padding: ${formcaption.container.padding.lg}; - gap: ${formcaption.container.itemspacing.lg}; - } - - .blr-form-label-inline { - font-family: ${formlabel.inlinelabel.typography.lg.fontFamily}, sans-serif; - font-weight: ${formlabel.inlinelabel.typography.lg.fontWeight}; - line-height: ${formlabel.inlinelabel.typography.lg.lineHeight}; - font-size: ${formlabel.inlinelabel.typography.lg.fontSize}; + &::before { + background-color: ${radio.control.icon.iconcolor.inactive.rest}; + width: ${radio.control.icon.iconsize.lg.inactive.rest}; + height: ${radio.control.icon.iconsize.lg.inactive.rest}; } - } - } - .input-control { - background-color: ${radio.control.container.bgcolor.inactive.rest}; - width: ${radio.control.container.size.sm}; - min-width: ${radio.control.container.size.sm}; - height: ${radio.control.container.size.sm}; - min-height: ${radio.control.container.size.sm}; - - &::before { - background-color: ${radio.control.icon.iconcolor.inactive.rest}; - width: ${radio.control.icon.iconsize.sm.inactive.rest}; - height: ${radio.control.icon.iconsize.sm.inactive.rest}; - } - - &:not(.disabled) { - &:hover { - background-color: ${radio.control.container.bgcolor.inactive.hover}; - - &::before { - content: ""; - background-color: ${radio.control.icon.iconcolor.inactive.hover}; - width: ${radio.control.icon.iconsize.sm.inactive.hover}; - height: ${radio.control.icon.iconsize.sm.inactive.hover}; - } + &:not(.disabled) { + &:hover { + background-color: ${radio.control.container.bgcolor.inactive.hover}; - & + .label-wrapper { - .blr-form-label-inline { - color: ${formlabel.inlinelabel.textcolor.hover}; + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.hover}; + width: ${radio.control.icon.iconsize.lg.inactive.hover}; + height: ${radio.control.icon.iconsize.lg.inactive.hover}; } } - } - &:active { - background-color: ${radio.control.container.bgcolor.inactive.pressed}; + &:active { + background-color: ${radio.control.container.bgcolor.inactive.pressed}; - &::before { - content: ""; - background-color: ${radio.control.icon.iconcolor.inactive.pressed}; - width: ${radio.control.icon.iconsize.sm.inactive.pressed}; - height: ${radio.control.icon.iconsize.sm.inactive.pressed}; + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.pressed}; + width: ${radio.control.icon.iconsize.lg.inactive.pressed}; + height: ${radio.control.icon.iconsize.lg.inactive.pressed}; + } } - & + .label-wrapper { - .blr-form-label-inline { - color: ${formlabel.inlinelabel.textcolor.pressed}; + &:focus:not(:active) { + background-color: ${radio.control.container.bgcolor.inactive.focus}; + + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.inactive.focus}; + width: ${radio.control.icon.iconsize.lg.inactive.focus}; + height: ${radio.control.icon.iconsize.lg.inactive.focus}; } } } - &:focus { - background-color: ${radio.control.container.bgcolor.inactive.focus}; - outline: black solid 2px; - outline-offset: 2px; + &.checked, + &:checked { + background-color: ${radio.control.container.bgcolor.active.rest}; &::before { content: ""; - background-color: ${radio.control.icon.iconcolor.inactive.focus}; - width: ${radio.control.icon.iconsize.sm.inactive.focus}; - height: ${radio.control.icon.iconsize.sm.inactive.focus}; + background-color: ${radio.control.icon.iconcolor.active.rest}; + width: ${radio.control.icon.iconsize.lg.active.rest}; + height: ${radio.control.icon.iconsize.lg.active.rest}; } - & + .label-wrapper { - .blr-form-label-inline { - color: ${formlabel.inlinelabel.textcolor.focus}; - } - } - } - } - - &.checked, - &:checked { - background-color: ${radio.control.container.bgcolor.active.rest}; + &:not(.disabled) { + &:hover { + background-color: ${radio.control.container.bgcolor.active.hover}; - &::before { - content: ""; - background-color: ${radio.control.icon.iconcolor.active.rest}; - width: ${radio.control.icon.iconsize.sm.active.rest}; - height: ${radio.control.icon.iconsize.sm.active.rest}; - } + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.hover}; + width: ${radio.control.icon.iconsize.lg.active.hover}; + height: ${radio.control.icon.iconsize.lg.active.hover}; + } + } - &:not(.disabled) { - &:hover { - background-color: ${radio.control.container.bgcolor.active.hover}; + &:active { + background-color: ${radio.control.container.bgcolor.active.pressed}; - &::before { - content: ""; - background-color: ${radio.control.icon.iconcolor.active.hover}; - width: ${radio.control.icon.iconsize.sm.active.hover}; - height: ${radio.control.icon.iconsize.sm.active.hover}; + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.pressed}; + width: ${radio.control.icon.iconsize.lg.active.pressed}; + height: ${radio.control.icon.iconsize.lg.active.pressed}; + } } - } - &:active { - background-color: ${radio.control.container.bgcolor.active.pressed}; + &:focus:not(:active) { + background-color: ${radio.control.container.bgcolor.active.focus}; - &::before { - content: ""; - background-color: ${radio.control.icon.iconcolor.active.pressed}; - width: ${radio.control.icon.iconsize.sm.active.pressed}; - height: ${radio.control.icon.iconsize.sm.active.pressed}; + &::before { + content: ""; + background-color: ${radio.control.icon.iconcolor.active.focus}; + width: ${radio.control.icon.iconsize.lg.active.focus}; + height: ${radio.control.icon.iconsize.lg.active.focus}; + } } } - &:focus { - background-color: ${radio.control.container.bgcolor.active.focus}; + &:disabled { + background-color: ${radio.control.container.bgcolor.active.disabled}; &::before { content: ""; - background-color: ${radio.control.icon.iconcolor.active.focus}; - width: ${radio.control.icon.iconsize.sm.active.focus}; - height: ${radio.control.icon.iconsize.sm.active.focus}; + background-color: ${radio.control.icon.iconcolor.active.disabled}; + width: ${radio.control.icon.iconsize.lg.active.disabled}; + height: ${radio.control.icon.iconsize.lg.active.disabled}; } } } &:disabled { - background-color: ${radio.control.container.bgcolor.active.disabled}; + cursor: not-allowed; + background-color: ${radio.control.container.bgcolor.inactive.disabled}; &::before { content: ""; - background-color: ${radio.control.icon.iconcolor.active.disabled}; - width: ${radio.control.icon.iconsize.sm.active.disabled}; - height: ${radio.control.icon.iconsize.sm.active.disabled}; + background-color: ${radio.control.icon.iconcolor.inactive.disabled}; + width: ${radio.control.icon.iconsize.lg.inactive.disabled}; + height: ${radio.control.icon.iconsize.lg.inactive.disabled}; } } } - &:disabled { - cursor: not-allowed; - background-color: ${radio.control.container.bgcolor.inactive.disabled}; + .label-wrapper { + padding-top: ${radio.contentcol.paddingtop.lg}; + gap: ${radio.contentcol.itemspacing.lg}; - &::before { - content: ""; - background-color: ${radio.control.icon.iconcolor.inactive.disabled}; - width: ${radio.control.icon.iconsize.sm.inactive.disabled}; - height: ${radio.control.icon.iconsize.sm.inactive.disabled}; + .caption-wrapper { + padding: ${formcaption.container.padding.lg}; + gap: ${formcaption.container.itemspacing.lg}; } - & + .label-wrapper { - .blr-form-label-inline { - cursor: not-allowed; - color: ${formlabel.inlinelabel.textcolor.disabled}; - } + .blr-form-label-inline { + font-family: ${formlabel.inlinelabel.typography.lg.fontFamily}, sans-serif; + font-weight: ${formlabel.inlinelabel.typography.lg.fontWeight}; + line-height: ${formlabel.inlinelabel.typography.lg.lineHeight}; + font-size: ${formlabel.inlinelabel.typography.lg.fontSize}; } } } @@ -280,8 +483,6 @@ export const staticStyles = css` &::before { background-color: ${radio.control.icon.iconcolor.inactive.error}; - width: ${radio.control.icon.iconsize.sm.inactive.error}; - height: ${radio.control.icon.iconsize.sm.inactive.error}; } & + .label-wrapper { @@ -293,16 +494,58 @@ export const staticStyles = css` &.checked, &:checked { &::before { - width: ${radio.control.icon.iconsize.sm.active.error}; - height: ${radio.control.icon.iconsize.sm.active.error}; + background-color: ${radio.control.icon.iconcolor.active.error}; } } + } - &.checked, - &:checked { + &.sm { + .input-control { + &::before { + width: ${radio.control.icon.iconsize.sm.inactive.error}; + height: ${radio.control.icon.iconsize.sm.inactive.error}; + } + + &.checked, + &:checked { + &::before { + width: ${radio.control.icon.iconsize.sm.active.error}; + height: ${radio.control.icon.iconsize.sm.active.error}; + } + } + } + } + + &.md { + .input-control { + &::before { + width: ${radio.control.icon.iconsize.md.inactive.error}; + height: ${radio.control.icon.iconsize.md.inactive.error}; + } + + &.checked, + &:checked { + &::before { + width: ${radio.control.icon.iconsize.md.active.error}; + height: ${radio.control.icon.iconsize.md.active.error}; + } + } + } + } + + &.lg { + .input-control { &::before { - width: ${radio.control.icon.iconsize.sm.active.error}; - height: ${radio.control.icon.iconsize.sm.active.error}; + width: ${radio.control.icon.iconsize.lg.inactive.error}; + height: ${radio.control.icon.iconsize.lg.inactive.error}; + } + + &.checked, + &:checked { + &::before { + width: ${radio.control.icon.iconsize.lg.active.error}; + height: ${radio.control.icon.iconsize.lg.active.error}; + } } } } @@ -313,14 +556,10 @@ export const staticStyles = css` .input-control { background-color: ${radio.control.container.bgcolor.inactive.disabled}; - width: ${radio.control.container.size.sm}; - height: ${radio.control.container.size.sm}; &::before { content: ""; background-color: ${radio.control.icon.iconcolor.inactive.disabled}; - width: ${radio.control.icon.iconsize.sm.inactive.rest}; - height: ${radio.control.icon.iconsize.sm.inactive.rest}; } & + .label-wrapper { @@ -329,6 +568,42 @@ export const staticStyles = css` } } } + + &.sm { + .input-control { + width: ${radio.control.container.size.sm}; + height: ${radio.control.container.size.sm}; + + &::before { + width: ${radio.control.icon.iconsize.sm.inactive.rest}; + height: ${radio.control.icon.iconsize.sm.inactive.rest}; + } + } + } + + &.md { + .input-control { + width: ${radio.control.container.size.md}; + height: ${radio.control.container.size.md}; + + &::before { + width: ${radio.control.icon.iconsize.md.inactive.rest}; + height: ${radio.control.icon.iconsize.md.inactive.rest}; + } + } + } + + &.lg { + .input-control { + width: ${radio.control.container.size.lg}; + height: ${radio.control.container.size.lg}; + + &::before { + width: ${radio.control.icon.iconsize.lg.inactive.rest}; + height: ${radio.control.icon.iconsize.lg.inactive.rest}; + } + } + } } .blr-form-caption { @@ -358,4 +633,19 @@ export const staticStyles = css` } `; })} + + ${SemanticThemeIterator((theme, sem, css) => { + const { global } = sem; + + return css` + .blr-radio.${theme} { + .input-control { + &:focus:not(:active) { + outline: ${global.focusring.border.color} ${global.focusring.border.width} ${global.focusring.border.style}; + outline-offset: 2px; + } + } + } + `; + })} `; diff --git a/packages/ui-library/src/components/radio/index.stories.ts b/packages/ui-library/src/components/radio/index.stories.ts index 19bf1da0d..5705c9eea 100644 --- a/packages/ui-library/src/components/radio/index.stories.ts +++ b/packages/ui-library/src/components/radio/index.stories.ts @@ -113,24 +113,6 @@ export default { category: 'Validations', }, }, - errorMessage: { - name: 'errorMessage', - description: 'Enter string used used as error message.', - table: { - category: 'Validations', - }, - if: { arg: 'hasError', eq: true }, - }, - errorMessageIcon: { - name: 'errorMessageIcon', - description: 'Select an icon which is displayed in front of the error message.', - table: { - category: 'Validations', - }, - options: [undefined, ...PureIconKeys], - control: { type: 'select' }, - if: { arg: 'hasError', eq: true }, - }, ariaLabel: { name: 'ariaLabel', description: @@ -229,14 +211,10 @@ const args: BlrRadioType & { disabled: false, required: false, hasError: false, - errorMessage: '', ariaLabel: '', - errorMessageIcon: undefined, + optionId: 'optionId', radioId: 'radioId', name: 'Radio Button', - blrSelectedValueChange: () => action('blrSelectedValueChangeEvent'), - blrFocus: () => action('focused'), - blrBlur: () => action('blrBlr'), }; BlrRadio.args = args; @@ -254,6 +232,9 @@ export const SizeVariant = () => { ...args, sizeVariant: 'sm', label: 'Radio SM', + blrFocus: action('blrFocus'), + blrBlur: action('blrBlur'), + blrChange: action('blrChange'), })}