UNPKG

@lyra/components

Version:
125 lines (109 loc) 2.54 kB
@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; }