diff --git a/packages/theme/styles/components.scss b/packages/theme/styles/components.scss index c205a76ca7..096572fb28 100644 --- a/packages/theme/styles/components.scss +++ b/packages/theme/styles/components.scss @@ -301,6 +301,74 @@ } .ac-column__list-item + .ac-column__list-item { margin-top: .75rem; } +/* Radio Button */ +.antiRadio { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + border: 0; + padding: 0; + clip: rect(0 0 0 0); + overflow: hidden; + + & + label { + position: relative; + margin-top: .375rem; + padding-left: 1.375rem; + font-size: .8125rem; + + &.gap-none { margin-bottom: .375rem; } + &.gap-small { margin-bottom: .625rem; } + &.gap-medium { margin-bottom: .875rem; } + + &::before, + &::after { + position: absolute; + border-radius: 50%; + } + &::before { + content: ''; + top: .0625rem; + left: 0; + width: 1rem; + height: 1rem; + background-color: var(--theme-button-default); + border: 1px solid var(--theme-button-border); + } + &::after { + top: .3125rem; + left: .25rem; + width: .5rem; + height: .5rem; + background-color: var(--accented-button-color); + } + } + &:not(:disabled, :checked) + label:hover::before { background-color: var(--theme-button-hovered); } + &:not(:disabled):active + label::before { background-color: var(--theme-button-pressed); } + &:disabled + label::before { + background-color: var(--theme-button-border); + border-color: transparent; + } + &:focus + label::before { box-shadow: 0 0 0 2px var(--accented-button-outline); } + &:focus:not(:checked) + label::before { + background-color: var(--theme-button-focused); + border-color: var(--theme-button-focused-border); + } + &:checked + label::before { + background-color: var(--accented-button-default); + border-color: var(--accented-button-border); + } + &:checked:focus + label::before { background-color: var(--accented-button-focused); } + &:checked:hover + label::before { background-color: var(--accented-button-hovered); } + &:checked:active + label::before { background-color: var(--accented-button-pressed); } + &:checked:disabled + label::before { + background-color: var(--accented-button-disabled); + border-color: var(--theme-button-border); + } + &:checked + label::after { content: ''; } +} + /* StatesBar */ .antiStatesBar { overflow-x: auto; diff --git a/packages/ui/src/components/RadioButton.svelte b/packages/ui/src/components/RadioButton.svelte new file mode 100644 index 0000000000..918380f0ba --- /dev/null +++ b/packages/ui/src/components/RadioButton.svelte @@ -0,0 +1,49 @@ + + + + { + if (!disabled && group !== value) action() + }} +/> + diff --git a/packages/ui/src/components/RadioGroup.svelte b/packages/ui/src/components/RadioGroup.svelte new file mode 100644 index 0000000000..301bc8dad3 --- /dev/null +++ b/packages/ui/src/components/RadioGroup.svelte @@ -0,0 +1,41 @@ + + + +{#if items && items.length > 0} +