@utrecht/web-component-library-stencil
Version:
Stencil component library bundle for the Municipality of Utrecht based on the NL Design System architecture
481 lines (436 loc) • 22.9 kB
CSS
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/* stylelint-disable-next-line block-no-empty */
/** @deprecated */
.utrecht-form-field {
break-inside: avoid;
font-family: var(--utrecht-document-font-family, inherit);
margin-block-end: calc(var(--utrecht-space-around, 0) * var(--utrecht-form-field-margin-block-end, 0));
margin-block-start: calc(var(--utrecht-space-around, 0) * var(--utrecht-form-field-margin-block-start, 0));
page-break-inside: avoid;
}
.utrecht-form-field--distanced {
--utrecht-space-around: 1;
}
.utrecht-form-field--invalid {
border-inline-start-color: var(--utrecht-form-field-invalid-border-inline-start-color);
border-inline-start-style: solid;
border-inline-start-width: var(--utrecht-form-field-invalid-border-inline-start-width, 0);
padding-inline-start: var(--utrecht-form-field-invalid-padding-inline-start);
}
.utrecht-form-field--checkbox {
display: grid;
gap: 0 var(--utrecht-checkbox-margin-inline-end, 12px);
grid-template-areas: "input label" "input description" "input error-message";
grid-template-columns: var(--utrecht-checkbox-size) 100fr;
/*
.utrecht-form-field__label .utrecht-form-field__input {
margin-inline-start: calc(
-1 * (var(--utrecht-checkbox-size) + var(--utrecht-checkbox-margin-inline-end, 12px))
);
margin-inline-end: var(--utrecht-checkbox-margin-inline-end, 12px);
}
*/
}
.utrecht-form-field--checkbox .utrecht-form-field__label:has(.utrecht-form-field__input) {
margin-inline-start: calc(-1 * (var(--utrecht-checkbox-size) + var(--utrecht-checkbox-margin-inline-end, 12px)));
}
.utrecht-form-field--checkbox .utrecht-form-field__label .utrecht-form-field__input {
margin-inline-end: var(--utrecht-checkbox-margin-inline-end, 12px);
}
.utrecht-form-field--radio {
display: grid;
gap: 0 var(--utrecht-radio-button-margin-inline-end, 12px);
grid-template-areas: "input label" "input description" "input error-message";
grid-template-columns: var(--utrecht-radio-button-size) 100fr;
/*
.utrecht-form-field__label .utrecht-form-field__input {
margin-inline-start: calc(
-1 * (var(--utrecht-checkbox-size) + var(--utrecht-checkbox-margin-inline-end, 12px))
);
margin-inline-end: var(--utrecht-checkbox-margin-inline-end, 12px);
}
*/
}
.utrecht-form-field--radio .utrecht-form-field__label:has(.utrecht-form-field__input) {
margin-inline-start: calc(-1 * (var(--utrecht-radio-button-size) + var(--utrecht-radio-button-margin-inline-end, 12px)));
}
.utrecht-form-field--radio .utrecht-form-field__label .utrecht-form-field__input {
margin-inline-end: var(--utrecht-radio-button-margin-inline-end, 12px);
}
.utrecht-form-field__input {
margin-block-end: 0;
margin-block-start: 0;
grid-area: input;
order: 5;
}
.utrecht-form-field__label {
/* Assign the margin-block-end to padding instead, so the clickable area of the label increases
and we avoid a small gap between the label and input that cannot be clicked to focus the input. */
grid-area: label;
margin-block-end: var(--utrecht-form-field-label-margin-block-end);
margin-block-start: 0;
order: 1;
}
.utrecht-form-field .utrecht-form-field-description {
grid-area: description;
margin-block-end: var(--utrecht-form-field-description-margin-block-end);
margin-block-start: var(--utrecht-form-field-description-margin-block-start);
order: 2;
}
.utrecht-form-field .utrecht-form-field-description--invalid {
grid-area: error-message;
order: 3;
}
.utrecht-form-field__description {
grid-area: description;
margin-block-end: var(--utrecht-form-field-description-margin-block-end);
margin-block-start: var(--utrecht-form-field-description-margin-block-start);
order: 2;
}
.utrecht-form-field__description--before {
grid-area: description-before;
order: 4;
}
.utrecht-form-field__error-message {
grid-area: error-message;
order: 3;
}
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
.utrecht-form-label {
color: var(--utrecht-form-label-color);
font-size: var(--utrecht-form-label-font-size);
font-weight: var(--utrecht-form-label-font-weight);
}
.utrecht-form-label--checkbox {
color: var(--utrecht-form-label-checkbox-color, var(--utrecht-form-label-color));
cursor: var(--utrecht-action-activate-cursor, revert);
font-weight: var(--utrecht-form-label-checkbox-font-weight, var(--utrecht-form-label-font-weight));
}
.utrecht-form-label--checked {
font-weight: var(--utrecht-form-label-checked-font-weight, var(--utrecht-form-label-font-weight));
}
.utrecht-form-label--disabled {
color: var(--utrecht-form-label-disabled-color, var(--utrecht-form-label-color));
cursor: var(--utrecht-action-disabled-cursor, revert);
}
.utrecht-form-label--radio {
color: var(--utrecht-form-label-checkbox-color, var(--utrecht-form-label-color));
cursor: var(--utrecht-action-activate-cursor, revert);
font-weight: var(--utrecht-form-label-radio-font-weight, var(--utrecht-form-label-font-weight));
}
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
.utrecht-form-field-description {
--utrecht-document-color: currentColor;
color: var(--utrecht-form-field-description-color);
font-family: var(--utrecht-document-font-family, inherit);
font-size: var(--utrecht-form-field-description-font-size, inherit);
font-style: var(--utrecht-form-field-description-font-style);
line-height: var(--utrecht-form-field-description-line-height);
margin-block-end: calc(var(--utrecht-space-around, 0) * var(--utrecht-form-field-description-margin-block-end, var(--utrecht-paragraph-margin-block-end, 0)));
margin-block-start: calc(var(--utrecht-space-around, 0) * var(--utrecht-form-field-description-margin-block-start, var(--utrecht-paragraph-margin-block-start, 0)));
}
.utrecht-form-field-description > * {
--utrecht-space-around: 1;
}
.utrecht-form-field-description--distanced {
--utrecht-space-around: 1;
}
.utrecht-form-field-description--invalid {
color: var(--utrecht-form-field-description-invalid-color, var(--utrecht-feedback-invalid-color, var(--utrecht-feedback-danger-color)));
}
.utrecht-form-field-description--valid {
color: var(--utrecht-form-field-description-valid-color, var(--utrecht-feedback-valid-color, var(--utrecht-feedback-safe-color)));
}
.utrecht-form-field-description--warning {
color: var(--utrecht-form-field-description-warning-color, var(--utrecht-feedback-warning-color));
}
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/* stylelint-disable-next-line block-no-empty */
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/**
* @license EUPL-1.2
* Copyright (c) 2020-2024 Frameless B.V.
* Copyright (c) 2021-2024 Gemeente Utrecht
*/
/* stylelint-disable-next-line block-no-empty */
/* TODO: Enable ordering properties when the plugin supports logical CSS properties
* https://github.com/hudochenkov/stylelint-order/pull/162 */
/* stylelint-disable order/properties-alphabetical-order */
.utrecht-textbox {
/* The average character inline-size is an approximation, with a default that works for Dutch text.
* The average might need to be configured specifically, for other scripts (CJK characters)
* and very wide or very narrow fonts.
* For monospace fonts it can be set to `1ch`.
*/
--_utrecht-textbox-value-char: 0.667em + 0.334ch;
/* Because this element uses `border-box` box-sizing, we need to manually add up the
* border width, padding width and the content width.
*
* Browsers and browser addons can add buttons inside the content box, for example
* for autocomplete. To avoid overlap between the UI and the text, we reserve
* some additional pixels to make space. We use 44px in accordance with the WCAG target size.
*
* When you are certain an element has no such UI, you can set the `autocomplete-ui-size` to `0px` (not to `0`).
*/
--_utrecht-textbox-max-inline-size: calc(
calc(var(--utrecht-textbox-value-max-length) * var(--_utrecht-textbox-value-char)) +
var(--utrecht-textbox-padding-inline-end, var(--utrecht-form-control-padding-inline-end, 0)) +
var(--utrecht-textbox-padding-inline-start, var(--utrecht-form-control-padding-inline-start, 0)) +
var(--utrecht-textbox-border-width, var(--utrecht-form-control-border-width, 0)) +
var(--utrecht-textbox-autocomplete-ui-size, 44px)
);
background-color: var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color));
block-size: initial; /* harden */
border-width: var(--utrecht-textbox-border-width, var(--utrecht-form-control-border-width));
border-block-end-width: var(--utrecht-textbox-border-bottom-width, var(--utrecht-textbox-border-width, var(--utrecht-form-control-border-width)));
border-color: var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color));
border-radius: var(--utrecht-textbox-border-radius, var(--utrecht-form-control-border-radius, 0));
border-style: solid;
box-sizing: border-box;
color: var(--utrecht-textbox-color, var(--utrecht-form-control-color));
font-family: var(--utrecht-textbox-font-family, var(--utrecht-form-control-font-family));
font-size: var(--utrecht-textbox-font-size, var(--utrecht-form-control-font-size, inherit));
font-weight: var(--utrecht-textbox-font-weight, var(--utrecht-form-control-font-weight, initial)); /* harden with `initial` */
inline-size: 100%;
line-height: var(--utrecht-textbox-line-height, var(--utrecht-form-control-line-height, initial));
min-block-size: var(--utrecht-pointer-target-min-size, 44px);
min-inline-size: var(--utrecht-pointer-target-min-size, 44px);
max-inline-size: min(var(--_utrecht-textbox-max-inline-size, 100%), var(--utrecht-textbox-max-inline-size, var(--utrecht-form-control-max-inline-size)));
padding-block-end: var(--utrecht-textbox-padding-block-end, var(--utrecht-form-control-padding-block-end, 0));
padding-block-start: var(--utrecht-textbox-padding-block-start, var(--utrecht-form-control-padding-block-start, 0));
padding-inline-end: var(--utrecht-textbox-padding-inline-end, var(--utrecht-form-control-padding-inline-end, initial));
padding-inline-start: var(--utrecht-textbox-padding-inline-start, var(--utrecht-form-control-padding-inline-start, initial));
}
.utrecht-textbox--invalid {
--_utrecht-textbox-border-width: var(
--utrecht-textbox-invalid-border-width,
var(
--utrecht-form-control-invalid-border-width,
var(--utrecht-textbox-border-width, var(--utrecht-form-control-border-width))
)
);
background-color: var(--utrecht-textbox-invalid-background-color, var(--utrecht-form-control-invalid-background-color, var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color))));
border-width: var(--_utrecht-textbox-border-width);
border-block-end-width: var(--utrecht-textbox-invalid-border-bottom-width, var(--utrecht-form-control-invalid-border-bottom-width, var(--utrecht-textbox-border-bottom-width, var(--utrecht-form-control-border-bottom-width, var(--_utrecht-textbox-border-width)))));
border-color: var(--utrecht-textbox-invalid-border-color, var(--utrecht-form-control-invalid-border-color, var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color))));
color: var(--utrecht-textbox-invalid-color, var(--utrecht-form-control-invalid-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
}
.utrecht-textbox--disabled {
background-color: var(--utrecht-textbox-disabled-background-color, var(--utrecht-form-control-disabled-background-color, var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color))));
border-color: var(--utrecht-textbox-disabled-border-color, var(--utrecht-form-control-disabled-border-color, var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color))));
color: var(--utrecht-textbox-disabled-color, var(--utrecht-form-control-disabled-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
cursor: var(--utrecht-action-disabled-cursor, not-allowed);
}
.utrecht-textbox--focus {
background-color: var(--utrecht-textbox-focus-background-color, var(--utrecht-form-control-focus-background-color, var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color))));
border-color: var(--utrecht-textbox-focus-border-color, var(--utrecht-form-control-focus-border-color, var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color))));
color: var(--utrecht-textbox-focus-color, var(--utrecht-form-control-focus-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
}
.utrecht-textbox--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);
z-index: 1;
}
.utrecht-textbox--read-only {
background-color: var(--utrecht-textbox-read-only-background-color, var(--utrecht-form-control-read-only-background-color, var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color))));
border-color: var(--utrecht-textbox-read-only-border-color, var(--utrecht-form-control-read-only-border-color, var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color))));
color: var(--utrecht-textbox-read-only-color, var(--utrecht-form-control-read-only-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
}
.utrecht-textbox__placeholder {
color: var(--utrecht-textbox-placeholder-color, var(--utrecht-form-control-placeholder-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
font-style: var(--utrecht-form-control-placeholder-font-style);
opacity: 100%;
}
.utrecht-textbox--numeric {
-moz-appearance: textfield; /* avoid spinner input in Firefox */
font-variant-numeric: lining-nums tabular-nums;
}
.utrecht-textbox--password {
font-variant-ligatures: none;
font-variant-numeric: slashed-zero;
}
.utrecht-textbox--postal-code-nl-size {
/* Dutch postal code: 4 numbers, 1 space and 2 letters */
--utrecht-textbox-value-max-length: 7;
}
.utrecht-textbox--house-number-size {
/* Dutch house number is 99999 at most: 5 numbers */
--utrecht-textbox-value-max-length: 5;
}
.utrecht-textbox--house-letter-size {
/* Dutch house letter is 1 letter */
--utrecht-textbox-value-max-length: 1;
}
.utrecht-textbox--house-addition-size {
/* Dutch house addition is optional, between 1 and 4 alphanumeric characters */
--utrecht-textbox-value-max-length: 4;
}
.utrecht-textbox--voorvoegsel-size {
/* "Tabel 36 Voorvoegselstabel" by "Rijksdienst voor Identiteitsgegevens" has a list
* of all allowed values. The longest value is 10 characters.
* The class name is in Dutch because it is a Dutch concept. */
--utrecht-textbox-value-max-length: 10;
}
.utrecht-textbox--tel-size {
/* International telephone number standard E.164 allows 15 numbers, with optional space for 4 spaces */
--utrecht-textbox-value-max-length: 19;
}
.utrecht-textbox--tel-nl-size {
/* Dutch telephone number: 10 number, typically with at most 3 spaces */
--utrecht-textbox-value-max-length: 13;
}
.utrecht-textbox--iban-size {
/* Maximum IBAN: 33 characters, plus 8 spaces (one space after every 4 characters) */
--utrecht-textbox-value-max-length: 41;
}
.utrecht-textbox--iban-nl-size {
/* Dutch IBAN: 18 characters, plus 4 spaces (one space after every 4 characters) */
--utrecht-textbox-value-max-length: 22;
}
/**
* This class name is experimental.
*/
.utrecht-textbox--placeholder-ltr::placeholder, .utrecht-textbox--placeholder-ltr:placeholder-shown {
/* For <input dir="rtr" placeholder="+31 555 1234">,
* behave as `dir="auto"` when the placeholder is shown. */
direction: ltr;
}
/**
* This class name is experimental.
*/
.utrecht-textbox--placeholder-rtl::placeholder, .utrecht-textbox--placeholder-rtl:placeholder-shown {
/* For <input dir="rtr" placeholder="+31 555 1234">,
* behave as `dir="auto"` when the placeholder is shown. */
direction: rtl;
}
.utrecht-textbox--url {
font-variant-ligatures: none;
}
.utrecht-textbox--html-input {
/* The `input:read-only` pseudo selector applies to both `<input readonly>` and `<input disabled>` */
/*
* The `input:disabled` pseudo selector applies to `<input disabled>`, but not to `<input aria-disabled="true">`
*
* We consider `disabled` more specific than `read-only`, so the `:disabled` selector should come after the `:read-only` selector.
*/
}
.utrecht-textbox--html-input:focus {
background-color: var(--utrecht-textbox-focus-background-color, var(--utrecht-form-control-focus-background-color, var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color))));
border-color: var(--utrecht-textbox-focus-border-color, var(--utrecht-form-control-focus-border-color, var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color))));
color: var(--utrecht-textbox-focus-color, var(--utrecht-form-control-focus-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
}
.utrecht-textbox--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);
z-index: 1;
}
.utrecht-textbox--html-input:invalid, .utrecht-textbox--html-input[aria-invalid=true] {
--_utrecht-textbox-border-width: var(
--utrecht-textbox-invalid-border-width,
var(
--utrecht-form-control-invalid-border-width,
var(--utrecht-textbox-border-width, var(--utrecht-form-control-border-width))
)
);
background-color: var(--utrecht-textbox-invalid-background-color, var(--utrecht-form-control-invalid-background-color, var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color))));
border-width: var(--_utrecht-textbox-border-width);
border-block-end-width: var(--utrecht-textbox-invalid-border-bottom-width, var(--utrecht-form-control-invalid-border-bottom-width, var(--utrecht-textbox-border-bottom-width, var(--utrecht-form-control-border-bottom-width, var(--_utrecht-textbox-border-width)))));
border-color: var(--utrecht-textbox-invalid-border-color, var(--utrecht-form-control-invalid-border-color, var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color))));
color: var(--utrecht-textbox-invalid-color, var(--utrecht-form-control-invalid-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
}
.utrecht-textbox--html-input:read-only {
background-color: var(--utrecht-textbox-read-only-background-color, var(--utrecht-form-control-read-only-background-color, var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color))));
border-color: var(--utrecht-textbox-read-only-border-color, var(--utrecht-form-control-read-only-border-color, var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color))));
color: var(--utrecht-textbox-read-only-color, var(--utrecht-form-control-read-only-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
}
.utrecht-textbox--html-input:disabled {
background-color: var(--utrecht-textbox-disabled-background-color, var(--utrecht-form-control-disabled-background-color, var(--utrecht-textbox-background-color, var(--utrecht-form-control-background-color))));
border-color: var(--utrecht-textbox-disabled-border-color, var(--utrecht-form-control-disabled-border-color, var(--utrecht-textbox-border-color, var(--utrecht-form-control-border-color))));
color: var(--utrecht-textbox-disabled-color, var(--utrecht-form-control-disabled-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
cursor: var(--utrecht-action-disabled-cursor, not-allowed);
}
.utrecht-textbox--html-input::placeholder {
color: var(--utrecht-textbox-placeholder-color, var(--utrecht-form-control-placeholder-color, var(--utrecht-textbox-color, var(--utrecht-form-control-color))));
font-style: var(--utrecht-form-control-placeholder-font-style);
opacity: 100%;
}
.utrecht-textbox--html-input[type=password i] {
font-variant-ligatures: none;
font-variant-numeric: slashed-zero;
}
.utrecht-textbox--html-input[type=url i], .utrecht-textbox--html-input[type=email i], .utrecht-textbox--html-input[inputMode=email i], .utrecht-textbox--html-input[inputMode=url i] {
font-variant-ligatures: none;
}
.utrecht-textbox--html-input[pattern="\\d*"], .utrecht-textbox--html-input[pattern="[0-9]*"], .utrecht-textbox--html-input[type=number i], .utrecht-textbox--html-input[type=tel i], .utrecht-textbox--html-input[inputMode=numeric i], .utrecht-textbox--html-input[inputMode=decimal i], .utrecht-textbox--html-input[inputMode=tel i] {
-moz-appearance: textfield; /* avoid spinner input in Firefox */
font-variant-numeric: lining-nums tabular-nums;
}
:host {
display: block;
}
:host([hidden]) {
display: none ;
}