UNPKG

@utrecht/components

Version:

Components for the Municipality of Utrecht based on the NL Design System architecture

339 lines (331 loc) 17 kB
/** * @license EUPL-1.2 * Copyright (c) 2021 Robbert Broersma */ /** * @license EUPL-1.2 * Copyright (c) 2021 Robbert Broersma */ /** * @license EUPL-1.2 * Copyright (c) 2021 Gemeente Utrecht * Copyright (c) 2021 Robbert Broersma */ /* stylelint-disable-next-line block-no-empty */ /* stylelint-disable-next-line block-no-empty */ .utrecht-radio-button { /* * Use 24x24px as hardcoded minimum target size, to meet WCAG 2.5.8 standards. * https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html */ /* * For the `radial-gradient()` use a 5% gradient size to improve anti-aliasing. * With a 0% gradient, the circle will have jagged edges. */ -webkit-appearance: none; -moz-appearance: none; appearance: none; margin-block-end: 0; margin-block-start: 0; margin-inline-end: 0; margin-inline-start: 0; --_utrecht-radio-button-background-color: var( --_utrecht-radio-button-interactive-background-color, var(--_utrecht-radio-button-state-background-color, var(--utrecht-radio-button-background-color)) ); --_utrecht-radio-button-border-color: var( --_utrecht-radio-button-interactive-border-color, var(--_utrecht-radio-button-state-border-color, var(--utrecht-radio-button-border-color, currentColor)) ); --_utrecht-radio-button-border-width: var( --_utrecht-radio-button-interactive-border-width, var(--_utrecht-radio-button-state-border-width, var(--utrecht-radio-button-border-width)) ); --_utrecht-radio-button-color: var( --_utrecht-radio-button-interactive-color, var(--_utrecht-radio-button-state-color, var(--utrecht-radio-button-color, currentColor)) ); --_utrecht-radio-button-icon-size: 0; background-color: var(--_utrecht-radio-button-background-color); background-image: radial-gradient(circle, var(--_utrecht-radio-button-color, transparent) calc(var(--_utrecht-radio-button-icon-size, 50%) - 5%), var(--_utrecht-radio-button-background-color, currentColor) var(--_utrecht-radio-button-icon-size, 50%)); background-position: center; background-repeat: no-repeat; background-size: contain; block-size: var(--utrecht-radio-button-size, 1em); border-color: var(--_utrecht-radio-button-border-color); border-radius: 50%; border-style: solid; border-width: var(--_utrecht-radio-button-border-width); cursor: var(--utrecht-action-activate-cursor, revert); inline-size: var(--utrecht-radio-button-size, 1em); margin-inline-end: var(--utrecht-radio-button-margin-inline-end); min-block-size: 24px; min-inline-size: 24px; -webkit-print-color-adjust: exact; print-color-adjust: exact; -webkit-user-select: none; user-select: none; vertical-align: top; } .utrecht-radio-button--checked { --_utrecht-radio-button-icon-size: var(--utrecht-radio-button-icon-size, 50%); --_utrecht-radio-button-state-background-color: var(--utrecht-radio-button-checked-background-color); --_utrecht-radio-button-state-border-color: var(--utrecht-radio-button-checked-border-color); --_utrecht-radio-button-state-border-width: var(--utrecht-radio-button-checked-border-width); --_utrecht-radio-button-state-color: var(--utrecht-radio-button-checked-color); --_utrecht-radio-button-state-active-background-color: var(--utrecht-radio-button-checked-active-background-color); --_utrecht-radio-button-state-active-border-color: var(--utrecht-radio-button-checked-active-border-color); --_utrecht-radio-button-state-active-border-width: var(--utrecht-radio-button-checked-active-border-width); --_utrecht-radio-button-state-active-color: var(--utrecht-radio-button-checked-active-color); --_utrecht-radio-button-state-focus-background-color: var(--utrecht-radio-button-checked-focus-background-color); --_utrecht-radio-button-state-focus-border-color: var(--utrecht-radio-button-checked-focus-border-color); --_utrecht-radio-button-state-focus-border-width: var(--utrecht-radio-button-checked-focus-border-width); --_utrecht-radio-button-state-focus-color: var(--utrecht-radio-button-checked-focus-color); --_utrecht-radio-button-state-hover-background-color: var(--utrecht-radio-button-checked-hover-background-color); --_utrecht-radio-button-state-hover-border-color: var(--utrecht-radio-button-checked-hover-border-color); --_utrecht-radio-button-state-hover-border-width: var(--utrecht-radio-button-checked-hover-border-width); --_utrecht-radio-button-state-hover-color: var(--utrecht-radio-button-checked-hover-color); } .utrecht-radio-button--hover { --_utrecht-radio-button-interactive-background-color: var( --_utrecht-radio-button-state-hover-background-color, var(--utrecht-radio-button-hover-background-color) ); --_utrecht-radio-button-interactive-border-color: var( --_utrecht-radio-button-state-hover-border-color, var(--utrecht-radio-button-hover-border-color) ); --_utrecht-radio-button-interactive-border-width: var( --_utrecht-radio-button-state-hover-border-width, var(--utrecht-radio-button-hover-border-width) ); --_utrecht-radio-button-interactive-color: var( --_utrecht-radio-button-state-hover-color, var(--utrecht-radio-button-hover-color) ); } .utrecht-radio-button--focus { --_utrecht-radio-button-interactive-background-color: var( --utrecht-radio-button-focus-background-color, var(--utrecht-radio-button-focus-background-color) ); --_utrecht-radio-button-interactive-border-color: var( --utrecht-radio-button-focus-border-color, var(--utrecht-radio-button-focus-border-color) ); --_utrecht-radio-button-interactive-border-width: var( --utrecht-radio-button-focus-border-width, var(--utrecht-radio-button-focus-border-width) ); --_utrecht-radio-button-interactive-color: var( --utrecht-radio-button-focus-color, var(--utrecht-radio-button-focus-color) ); } .utrecht-radio-button--focus-visible { /* - The browser default focus ring should apply when these CSS custom properties are not set. * - Make the `box-shadow` value available, so components that have their own `box-shadow` * can combine it with the focus ring box shadow. */ --_utrecht-focus-ring-box-shadow: 0 0 0 var(--utrecht-focus-outline-width, 0) var(--utrecht-focus-inverse-outline-color, transparent); box-shadow: var(--_utrecht-focus-ring-box-shadow); outline-color: var(--utrecht-focus-outline-color, revert); outline-offset: var(--utrecht-focus-outline-offset, revert); outline-style: var(--utrecht-focus-outline-style, revert); outline-width: var(--utrecht-focus-outline-width, revert); } .utrecht-radio-button--active { --_utrecht-radio-button-interactive-background-color: var( --_utrecht-radio-button-state-active-background-color, var(--utrecht-radio-button-active-background-color) ); --_utrecht-radio-button-interactive-border-color: var( --_utrecht-radio-button-state-active-border-color, var(--utrecht-radio-button-active-border-color) ); --_utrecht-radio-button-interactive-border-width: var( --_utrecht-radio-button-state-active-border-width, var(--utrecht-radio-button-active-border-width) ); --_utrecht-radio-button-interactive-color: var( --_utrecht-radio-button-state-active-color, var(--utrecht-radio-button-active-color) ); } .utrecht-radio-button--disabled { /* * The disabled radio button should have: * - should have no active effect * - should have no focus effect * - should have no hover effect * - should have a working focus-visible effect, in case someone sets `<input type="radio" disabled tabindex="0">` */ --_utrecht-radio-button-background-color: var( --utrecht-radio-button-disabled-background-color, var(--utrecht-radio-button-background-color) ); --_utrecht-radio-button-border-color: var( --utrecht-radio-button-disabled-border-color, var(--utrecht-radio-button-border-color) ); --_utrecht-radio-button-border-width: var( --utrecht-radio-button-disabled-border-width, var(--utrecht-radio-button-border-width) ); --_utrecht-radio-button-color: var(--utrecht-radio-button-disabled-color, var(--utrecht-radio-button-color)); /* no focus effect */ --_utrecht-radio-button-focus-background-color: var(--_utrecht-radio-button-background-color); --_utrecht-radio-button-focus-border-color: var(--_utrecht-radio-button-border-color); --_utrecht-radio-button-focus-border-width: var(--_utrecht-radio-button-border-width); --_utrecht-radio-button-focus-color: var(--_utrecht-radio-button-color); /* no active effect */ --_utrecht-radio-button-active-background-color: var(--_utrecht-radio-button-background-color); --_utrecht-radio-button-active-border-color: var(--_utrecht-radio-button-border-color); --_utrecht-radio-button-active-border-width: var(--_utrecht-radio-button-border-width); --_utrecht-radio-button-active-color: var(--_utrecht-radio-button-color); /* no hover effect */ --_utrecht-radio-button-hover-background-color: var(--_utrecht-radio-button-background-color); --_utrecht-radio-button-hover-border-color: var(--_utrecht-radio-button-border-color); --_utrecht-radio-button-hover-border-width: var(--_utrecht-radio-button-border-width); --_utrecht-radio-button-hover-color: var(--_utrecht-radio-button-color); cursor: var(--utrecht-action-disabled-cursor, not-allowed); } .utrecht-radio-button--invalid { border-color: var(--utrecht-radio-button-invalid-border-color, var(--utrecht-radio-button-border-color)); border-width: var(--utrecht-radio-button-invalid-border-width, var(--utrecht-radio-button-border-width)); color: var(--utrecht-radio-button-invalid-color, var(--utrecht-radio-button-color)); } .utrecht-radio-button--html-input { /* override the `:focus` selector above */ /* stylelint-disable-next-line no-descending-specificity */ } .utrecht-radio-button--html-input:checked { --_utrecht-radio-button-icon-size: var(--utrecht-radio-button-icon-size, 50%); --_utrecht-radio-button-state-background-color: var(--utrecht-radio-button-checked-background-color); --_utrecht-radio-button-state-border-color: var(--utrecht-radio-button-checked-border-color); --_utrecht-radio-button-state-border-width: var(--utrecht-radio-button-checked-border-width); --_utrecht-radio-button-state-color: var(--utrecht-radio-button-checked-color); --_utrecht-radio-button-state-active-background-color: var(--utrecht-radio-button-checked-active-background-color); --_utrecht-radio-button-state-active-border-color: var(--utrecht-radio-button-checked-active-border-color); --_utrecht-radio-button-state-active-border-width: var(--utrecht-radio-button-checked-active-border-width); --_utrecht-radio-button-state-active-color: var(--utrecht-radio-button-checked-active-color); --_utrecht-radio-button-state-focus-background-color: var(--utrecht-radio-button-checked-focus-background-color); --_utrecht-radio-button-state-focus-border-color: var(--utrecht-radio-button-checked-focus-border-color); --_utrecht-radio-button-state-focus-border-width: var(--utrecht-radio-button-checked-focus-border-width); --_utrecht-radio-button-state-focus-color: var(--utrecht-radio-button-checked-focus-color); --_utrecht-radio-button-state-hover-background-color: var(--utrecht-radio-button-checked-hover-background-color); --_utrecht-radio-button-state-hover-border-color: var(--utrecht-radio-button-checked-hover-border-color); --_utrecht-radio-button-state-hover-border-width: var(--utrecht-radio-button-checked-hover-border-width); --_utrecht-radio-button-state-hover-color: var(--utrecht-radio-button-checked-hover-color); } .utrecht-radio-button--html-input:disabled { /* * The disabled radio button should have: * - should have no active effect * - should have no focus effect * - should have no hover effect * - should have a working focus-visible effect, in case someone sets `<input type="radio" disabled tabindex="0">` */ --_utrecht-radio-button-background-color: var( --utrecht-radio-button-disabled-background-color, var(--utrecht-radio-button-background-color) ); --_utrecht-radio-button-border-color: var( --utrecht-radio-button-disabled-border-color, var(--utrecht-radio-button-border-color) ); --_utrecht-radio-button-border-width: var( --utrecht-radio-button-disabled-border-width, var(--utrecht-radio-button-border-width) ); --_utrecht-radio-button-color: var(--utrecht-radio-button-disabled-color, var(--utrecht-radio-button-color)); /* no focus effect */ --_utrecht-radio-button-focus-background-color: var(--_utrecht-radio-button-background-color); --_utrecht-radio-button-focus-border-color: var(--_utrecht-radio-button-border-color); --_utrecht-radio-button-focus-border-width: var(--_utrecht-radio-button-border-width); --_utrecht-radio-button-focus-color: var(--_utrecht-radio-button-color); /* no active effect */ --_utrecht-radio-button-active-background-color: var(--_utrecht-radio-button-background-color); --_utrecht-radio-button-active-border-color: var(--_utrecht-radio-button-border-color); --_utrecht-radio-button-active-border-width: var(--_utrecht-radio-button-border-width); --_utrecht-radio-button-active-color: var(--_utrecht-radio-button-color); /* no hover effect */ --_utrecht-radio-button-hover-background-color: var(--_utrecht-radio-button-background-color); --_utrecht-radio-button-hover-border-color: var(--_utrecht-radio-button-border-color); --_utrecht-radio-button-hover-border-width: var(--_utrecht-radio-button-border-width); --_utrecht-radio-button-hover-color: var(--_utrecht-radio-button-color); cursor: var(--utrecht-action-disabled-cursor, not-allowed); } .utrecht-radio-button--html-input:invalid, .utrecht-radio-button--html-input[aria-invalid=true] { border-color: var(--utrecht-radio-button-invalid-border-color, var(--utrecht-radio-button-border-color)); border-width: var(--utrecht-radio-button-invalid-border-width, var(--utrecht-radio-button-border-width)); color: var(--utrecht-radio-button-invalid-color, var(--utrecht-radio-button-color)); } .utrecht-radio-button--html-input:focus:not([aria-disabled=true], :disabled) { --_utrecht-radio-button-interactive-background-color: var( --utrecht-radio-button-focus-background-color, var(--utrecht-radio-button-focus-background-color) ); --_utrecht-radio-button-interactive-border-color: var( --utrecht-radio-button-focus-border-color, var(--utrecht-radio-button-focus-border-color) ); --_utrecht-radio-button-interactive-border-width: var( --utrecht-radio-button-focus-border-width, var(--utrecht-radio-button-focus-border-width) ); --_utrecht-radio-button-interactive-color: var( --utrecht-radio-button-focus-color, var(--utrecht-radio-button-focus-color) ); } .utrecht-radio-button--html-input:focus-visible { /* - The browser default focus ring should apply when these CSS custom properties are not set. * - Make the `box-shadow` value available, so components that have their own `box-shadow` * can combine it with the focus ring box shadow. */ --_utrecht-focus-ring-box-shadow: 0 0 0 var(--utrecht-focus-outline-width, 0) var(--utrecht-focus-inverse-outline-color, transparent); box-shadow: var(--_utrecht-focus-ring-box-shadow); outline-color: var(--utrecht-focus-outline-color, revert); outline-offset: var(--utrecht-focus-outline-offset, revert); outline-style: var(--utrecht-focus-outline-style, revert); outline-width: var(--utrecht-focus-outline-width, revert); } .utrecht-radio-button--html-input:hover:not([aria-disabled=true], :disabled) { --_utrecht-radio-button-interactive-background-color: var( --_utrecht-radio-button-state-hover-background-color, var(--utrecht-radio-button-hover-background-color) ); --_utrecht-radio-button-interactive-border-color: var( --_utrecht-radio-button-state-hover-border-color, var(--utrecht-radio-button-hover-border-color) ); --_utrecht-radio-button-interactive-border-width: var( --_utrecht-radio-button-state-hover-border-width, var(--utrecht-radio-button-hover-border-width) ); --_utrecht-radio-button-interactive-color: var( --_utrecht-radio-button-state-hover-color, var(--utrecht-radio-button-hover-color) ); } .utrecht-radio-button--html-input:active:not([aria-disabled=true], :disabled) { --_utrecht-radio-button-interactive-background-color: var( --_utrecht-radio-button-state-active-background-color, var(--utrecht-radio-button-active-background-color) ); --_utrecht-radio-button-interactive-border-color: var( --_utrecht-radio-button-state-active-border-color, var(--utrecht-radio-button-active-border-color) ); --_utrecht-radio-button-interactive-border-width: var( --_utrecht-radio-button-state-active-border-width, var(--utrecht-radio-button-active-border-width) ); --_utrecht-radio-button-interactive-color: var( --_utrecht-radio-button-state-active-color, var(--utrecht-radio-button-active-color) ); }