@lyra/components
Version:
Basic UX components
125 lines (109 loc) • 2.54 kB
CSS
@import 'part:@lyra/base/theme/variables-style';
:root {
--radio-label-height: 1rem;
--radio-off-color: var(--brand-primary);
--radio-color: var(--brand-primary);
--radio-button-size: 1rem;
--radio-top-offset: 0;
--radio-focus-color: magenta;
--radio-label-font-size: 1em;
--radio-padding: 0.25em;
}
.root {
user-select: none;
position: relative;
z-index: 1;
vertical-align: middle;
display: inline-block;
box-sizing: border-box;
width: 100%;
height: var(--radio-label-height);
margin: 0;
padding: 0;
padding-left: calc(var(--radio-button-size) + var(--radio-padding));
}
.isChecked {
composes: root;
}
.unChecked {
composes: root;
}
.isDisabled {
opacity: 0.5;
pointer-events: none;
}
.input {
line-height: var(--radio-label-height);
/* Hide input element, while still making it respond to focus. */
position: absolute;
width: 0;
height: 0;
margin: 0;
padding: 0;
opacity: 0;
appearance: none;
border: none;
}
.circleOutline {
position: absolute;
top: var(--radio-top-offset);
left: 0;
display: inline-block;
box-sizing: border-box;
width: var(--radio-button-size);
height: var(--radio-button-size);
margin: 0;
cursor: default;
overflow: hidden;
border: 2px solid var(--radio-off-color);
border-radius: 100%;
z-index: 2;
@nest .isChecked & {
border: 2px solid var(--radio-color);
}
}
.focusHelper {
position: absolute;
top: calc(var(--radio-button-size) * -0.25);
left: calc(var(--radio-button-size) * -0.25);
display: inline-block;
box-sizing: border-box;
width: calc(var(--radio-button-size) * 1.5);
height: calc(var(--radio-button-size) * 1.5);
border-radius: 50%;
background-color: transparent;
transform: scale(0.5);
transition: background-color 0.1s linear, transform 0.15s linear;
@nest .isFocused & {
background-color: var(--focus-color);
transform: scale(1);
}
@nest .root:active & {
background-color: var(--focus-color);
transform: scale(1);
}
}
.tickOutline {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background: transparent;
transition-timing-function: linear;
transition-duration: 0.2s;
transition-property: background, transform;
transform: scale(0.1);
border-radius: 50%;
@nest .isChecked & {
background-color: var(--radio-color);
transform: scale(0.7);
}
}
.label {
position: relative;
cursor: default;
font-size: var(--radio-label-font-size);
line-height: var(--radio-label-height);
margin: 0;
}