@inkline/inkline
Version:
Inkline is the intuitive UI Components library that gives you a developer-friendly foundation for building high-quality, accessible, and customizable Vue.js 3 Design Systems.
221 lines (219 loc) • 8.85 kB
CSS
/**
* Radio
*/
.radio {
position: relative;
display: inline-flex;
align-items: center;
white-space: nowrap;
outline: none;
margin-right: var(--radio--margin-right, var(--margin-right));
}
.radio:last-of-type {
margin-right: 0;
}
.radio.-disabled {
cursor: default;
}
.radio.-disabled .radio-label::before, .radio.-disabled .radio-label::after {
cursor: not-allowed;
}
.radio .radio-label {
cursor: pointer;
margin-bottom: 0;
display: inline-flex;
align-items: center;
position: relative;
transition-property: var(--radio--transition-property, color);
transition-duration: var(--radio--transition-duration, var(--transition-duration));
transition-timing-function: var(--radio--transition-timing-function, var(--transition-timing-function));
color: var(--radio--label--color);
font-size: var(--radio--label--font-size);
}
.radio .radio-label::before, .radio .radio-label::after {
width: var(--radio--size);
height: var(--radio--size);
display: inline-flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
.radio .radio-label::before {
content: "";
user-select: none;
border-color: var(--radio--border-color, var(--radio--border-top-color, var(--border-top-color)) var(--radio--border-right-color, var(--border-right-color)) var(--radio--border-bottom-color, var(--border-bottom-color)) var(--radio--border-left-color, var(--border-left-color)));
border-style: var(--radio--border-style, var(--radio--border-top-style, var(--border-top-style)) var(--radio--border-right-style, var(--border-right-style)) var(--radio--border-bottom-style, var(--border-bottom-style)) var(--radio--border-left-style, var(--border-left-style)));
border-width: var(--radio--border-width, var(--radio--border-top-width, var(--border-top-width)) var(--radio--border-right-width, var(--border-right-width)) var(--radio--border-bottom-width, var(--border-bottom-width)) var(--radio--border-left-width, var(--border-left-width)));
border-radius: 100%;
box-shadow: var(--radio--box-shadow, var(--radio--box-shadow-x-offset, var(--box-shadow-offset-x)) var(--radio--box-shadow-y-offset, var(--box-shadow-offset-y)) var(--radio--box-shadow-blur-radius, var(--box-shadow-blur-radius)) var(--radio--box-shadow-spread-radius, var(--box-shadow-spread-radius)) var(--radio--box-shadow-color, var(--box-shadow-color)));
margin-right: var(--radio--margin-right, var(--margin-right-1-2));
transition-property: var(--radio--transition-property, background-color, border-color);
transition-duration: var(--radio--transition-duration, var(--transition-duration));
transition-timing-function: var(--radio--transition-timing-function, var(--transition-timing-function));
background-color: var(--radio--background);
}
.radio .radio-label::after {
position: absolute;
top: 50%;
left: 0;
z-index: 1;
text-align: center;
background-color: var(--radio--color);
margin-top: calc(var(--radio--size) / -2);
mask-image: url('data:image/svg+xml; utf8, <svg fill="currentColor" version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="28" viewBox="0 0 24 28"><title>circle</title><path d="M24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z"></path></svg>');
-webkit-mask-image: url('data:image/svg+xml; utf8, <svg fill="currentColor" version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="28" viewBox="0 0 24 28"><title>circle</title><path d="M24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z"></path></svg>');
mask-size: var(--radio--checkmark--size) var(--radio--checkmark--size);
-webkit-mask-size: var(--radio--checkmark--size) var(--radio--checkmark--size);
}
.radio input {
top: 0;
left: 0;
position: absolute;
z-index: 0;
opacity: 0;
height: 0;
width: 0;
}
.radio input:focus, .radio input:active {
outline: none;
}
.radio input:checked ~ .radio-label::before {
border-color: var(--radio--checked--border-color, var(--radio--border-color));
background: var(--radio--checked--background, var(--radio--background));
}
.radio input:checked ~ .radio-label::after {
content: "";
mask-position: center center;
-webkit-mask-position: center center;
mask-repeat: no-repeat;
-webkit-mask-repeat: no-repeat;
}
.radio input:disabled ~ .radio-label, .radio input[readonly] ~ .radio-label {
color: var(--radio--disabled--label--color, var(--radio--label--color));
}
.radio input:disabled:checked ~ .radio-label::before, .radio input[readonly]:checked ~ .radio-label::before {
border-color: var(--radio--checked--disabled--border-color, var(--radio--border-color));
background: var(--radio--checked--disabled--background, var(--radio--background));
}
.radio input:disabled:checked ~ .radio-label::after, .radio input[readonly]:checked ~ .radio-label::after {
cursor: not-allowed;
background: var(--radio--disabled--color, var(--radio--color));
}
.radio.-native input {
top: auto;
left: auto;
position: relative;
opacity: 1;
height: auto;
width: auto;
margin-right: var(--radio--margin-right, var(--margin-right-1-2));
}
.radio.-native .radio-label::after, .radio.-native .radio-label::before {
display: none;
}
/**
* Color variants
*/
.radio.-light {
--radio--background: var(--radio--light--background, var(--color-white));
--radio--checked--background: var(
--radio--light--checked--background,
var(--color-primary)
);
--radio--disabled--background: var(
--radio--light--disabled--background,
var(--color-light-200)
);
--radio--checked--disabled--background: var(
--radio--light--checked--disabled--background,
var(--color-primary-200)
);
--radio--border-color: var(--radio--light--border-color, var(--color-light-shade-50));
--radio--checked--border-color: var(
--radio--light--checked--border-color,
var(--color-primary-shade-50)
);
--radio--disabled--border-color: var(
--radio--light--disabled--border-color,
var(--color-light)
);
--radio--checked--disabled--border-color: var(
--radio--light--checked--disabled--border-color,
var(--color-primary-300)
);
--radio--color: var(--radio--light--color, var(--color-white));
--radio--disabled--color: var(--radio--light--disabled--color, var(--color-light-200));
--radio--label--color: var(--radio--light--label--color, var(--contrast-text-color-light));
--radio--disabled--label--color: var(
--radio--light--disabled--label--color,
var(--color-light-700)
);
}
.radio.-dark {
--radio--background: var(--radio--dark--background, var(--color-dark));
--radio--checked--background: var(--radio--dark--checked--background, var(--color-primary));
--radio--disabled--background: var(
--radio--dark--disabled--background,
var(--color-dark-200)
);
--radio--checked--disabled--background: var(
--radio--dark--checked--disabled--background,
var(--color-primary-700)
);
--radio--border-color: var(--radio--dark--border-color, var(--color-dark-tint-50));
--radio--checked--border-color: var(
--radio--dark--checked--border-color,
var(--color-primary-lighten-50)
);
--radio--disabled--border-color: var(
--radio--dark--disabled--border-color,
var(--color-dark)
);
--radio--checked--disabled--border-color: var(
--radio--dark--checked--disabled--border-color,
var(--color-primary-700)
);
--radio--color: var(--radio--light--color, var(--color-white));
--radio--disabled--color: var(--radio--dark--disabled--color, var(--color-dark-200));
--radio--label--color: var(--radio--dark--label--color, var(--contrast-text-color-dark));
--radio--disabled--label--color: var(
--radio--dark--disabled--label--color,
var(--color-dark-300)
);
}
/**
* Size variants
*/
.radio.-sm {
--radio--size: var(--radio--sm--size, calc(1rem * var(--size-multiplier-sm)));
--radio--checkmark--size: var(
--radio--sm--checkmark--size,
calc(8px * var(--size-multiplier-sm))
);
--radio--label--font-size: var(
--radio--sm--label--font-size,
calc(var(--font-size) * var(--size-multiplier-sm))
);
}
.radio.-md {
--radio--size: var(--radio--md--size, calc(1rem * var(--size-multiplier-md)));
--radio--checkmark--size: var(
--radio--md--checkmark--size,
calc(8px * var(--size-multiplier-md))
);
--radio--label--font-size: var(
--radio--md--label--font-size,
calc(var(--font-size) * var(--size-multiplier-md))
);
}
.radio.-lg {
--radio--size: var(--radio--lg--size, calc(1rem * var(--size-multiplier-lg)));
--radio--checkmark--size: var(
--radio--lg--checkmark--size,
calc(8px * var(--size-multiplier-lg))
);
--radio--label--font-size: var(
--radio--lg--label--font-size,
calc(var(--font-size) * var(--size-multiplier-lg))
);
}