@utrecht/components
Version:
Components for the Municipality of Utrecht based on the NL Design System architecture
339 lines (331 loc) • 17 kB
CSS
/**
* @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)
);
}