UNPKG

@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
/** * 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)) ); }