UNPKG

@oslokommune/punkt-css

Version:

CSS-rammeverket til Punkt, et designsystem laget av Oslo Origo

293 lines (291 loc) 12.5 kB
/* * Checkbox and radio * * */ .pkt-input-check { display: flex; flex-direction: column; row-gap: 1rem; } .pkt-input-check__input { display: flex; } .pkt-input-check__input-label { color: var(--pkt-color-text-body-default); padding-left: 0.5rem; letter-spacing: -0.2px; font-weight: 300; font-size: 1rem; line-height: 1.5rem; } .pkt-input-check__input-label--left { padding-left: 0; padding-right: 0.5rem; } .pkt-input-check__input-helptext { padding-top: 0.5rem; max-width: 21.875rem; color: var(--pkt-color-text-body-default); letter-spacing: -0.2px; font-weight: 300; font-size: 0.875rem; line-height: 1.375rem; } .pkt-input-check__input:hover > .pkt-input-check__input-checkbox:not(:disabled) + .pkt-input-check__input-label { color: var(--pkt-color-input-check-text-hover); } .pkt-input-check__input-checkbox { appearance: none; background-color: var(--pkt-color-input-check-background); border: 2px solid var(--pkt-color-input-check-border); width: 1.5rem; height: 1.5rem; flex-shrink: 0; transition: all 0.3s ease-out; } .pkt-input-check__input-checkbox[type=checkbox] { border-radius: 0; } .pkt-input-check__input-checkbox[type=checkbox][role=switch] { position: relative; height: calc(1.5rem + 2px); width: 2.5rem; border-radius: calc(0.75rem + 2px); } .pkt-input-check__input-checkbox[type=checkbox][role=switch]:after { display: block; content: ""; border: 2px solid var(--pkt-color-input-check-border); background-color: var(--pkt-color-input-check-background); position: absolute; top: -1px; bottom: -1px; left: -1px; width: 1.5rem; border-radius: 0.75rem; transition: all 0.3s ease-out; } .pkt-input-check__input-checkbox[type=radio] { border-radius: 50%; border: none; width: 1.25rem; height: 1.25rem; box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-normal); } .pkt-input-check__input-checkbox:focus-visible:not(:disabled) + .pkt-input-check__input-label { color: var(--pkt-color-input-check-text-hover); } .pkt-input-check__input-checkbox[type=checkbox]:hover { --pkt-color-input-check-border: var(--pkt-color-input-border-hover); } .pkt-input-check__input-checkbox[type=checkbox]:active:not(:disabled) { --pkt-color-input-check-border: var(--pkt-color-input-border-active); outline: 6px solid var(--pkt-color-input-border-active); } .pkt-input-check__input-checkbox[type=checkbox]:focus-visible { --pkt-color-input-check-border: var(--pkt-color-input-border-active); outline: 4px solid var(--pkt-color-border-states-focus); outline-offset: 0; } .pkt-input-check__input-checkbox[type=radio]:hover { box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-hover); outline-color: var(--pkt-color-input-border-hover); } .pkt-input-check__input-checkbox:indeterminate[type=checkbox]:not([role=switch]) { --svg: url(https://punkt-cdn.oslo.kommune.no/13.18/icons/minus-sign.svg); position: relative; background-color: var(--pkt-color-input-border-normal); } .pkt-input-check__input-checkbox:indeterminate[type=checkbox]:not([role=switch]):before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; } .pkt-input-check__input-checkbox:indeterminate[type=checkbox]:not([role=switch]):after { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 24px; height: 24px; background-image: var(--svg); background-repeat: no-repeat; filter: brightness(0) saturate(100%) invert(100%) sepia(0%) saturate(0%) hue-rotate(271deg) brightness(105%) contrast(101%); } .pkt-input-check__input-checkbox:checked[type=checkbox] { --svg: url(https://punkt-cdn.oslo.kommune.no/13.18/icons/check-medium.svg); position: relative; background-color: var(--pkt-color-input-border-normal); } .pkt-input-check__input-checkbox:checked:not([role=switch])[type=checkbox]:before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; } .pkt-input-check__input-checkbox:checked:not([role=switch])[type=checkbox]:after { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 24px; height: 24px; background-image: var(--svg); background-repeat: no-repeat; filter: brightness(0) saturate(100%) invert(100%) sepia(0%) saturate(0%) hue-rotate(271deg) brightness(105%) contrast(101%); } .pkt-input-check__input-checkbox:checked[role=switch]:after { left: calc(100% + 1px); transform: translate(-100%, 0); background-image: var(--svg); background-repeat: no-repeat; } .pkt-input-check__input-checkbox:checked[type=radio] { background-color: var(--pkt-color-input-border-normal); border: 3px solid var(--pkt-color-input-check-background); box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-normal); } .pkt-input-check__input-checkbox:checked[type=checkbox]:focus-visible { background-color: var(--pkt-color-input-border-active); } .pkt-input-check__input-checkbox:checked[type=checkbox]:hover { background-color: var(--pkt-color-input-border-hover); } .pkt-input-check__input-checkbox:checked[type=radio]:focus-visible { background-color: var(--pkt-color-input-border-active); border: 3px solid var(--pkt-color-input-check-background); outline: none; box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-active), 0px 0px 0px 0.375rem var(--pkt-color-border-states-focus); } .pkt-input-check__input-checkbox:checked[type=radio]:hover { box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-hover); background-color: var(--pkt-color-input-border-hover); } .pkt-input-check__input-checkbox:disabled[type=checkbox] { background-color: var(--pkt-color-surface-default-gray); --pkt-color-input-check-border: var(--pkt-color-input-border-disabled); cursor: not-allowed; } .pkt-input-check__input-checkbox:disabled[type=checkbox][role=switch]:checked:after { --svg: url(https://punkt-cdn.oslo.kommune.no/13.18/icons/check-medium.svg); --pkt-color-input-check-border: var(--pkt-color-input-border-normal); filter: grayscale(100%) brightness(400%); } .pkt-input-check__input-checkbox:disabled[type=radio] { box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-disabled); background-color: var(--pkt-color-surface-default-gray); cursor: not-allowed; outline-color: var(--pkt-color-input-border-disabled); } .pkt-input-check__input-checkbox:disabled:checked[type=checkbox] { background-color: var(--pkt-color-input-border-disabled); --pkt-color-input-check-border: var(--pkt-color-input-border-disabled); } .pkt-input-check__input-checkbox:disabled:checked[type=radio] { box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-disabled); background-color: var(--pkt-color-input-border-disabled); } .pkt-input-check__input-label--disabled, .pkt-input-check__input-label--disabled .pkt-input-check__input-helptext, .pkt-input-check__input-checkbox:disabled + .pkt-inputwrapper, .pkt-input-check__input-checkbox:disabled + .pkt-inputwrapper .pkt-input-check__input-helptext, .pkt-input-check__input-checkbox:disabled + .pkt-input-check__input-label, .pkt-input-check__input-checkbox:disabled + .pkt-input-check__input-label .pkt-input-check__input-helptext { color: var(--pkt-color-input-text-disabled); cursor: not-allowed; } .pkt-input-check__input-checkbox--error[type=checkbox]:not([role=switch]):checked:after { filter: brightness(0) saturate(100%) invert(15%) sepia(11%) saturate(5273%) hue-rotate(212deg) brightness(96%) contrast(94%); } .pkt-input-check__input-checkbox--error[type=checkbox], .pkt-input-check__input-checkbox--error[type=checkbox]:hover, .pkt-input-check__input-checkbox--error[type=checkbox]:focus-visible, .pkt-input-check__input-checkbox--error[type=checkbox]:checked, .pkt-input-check__input-checkbox--error[type=checkbox]:checked:focus-visible, .pkt-input-check__input-checkbox--error[type=checkbox]:checked:hover, .pkt-input-check__input-checkbox--error[type=checkbox]:active:not(:disabled), .pkt-input-check__input-checkbox--error:checked[type=checkbox]:checked:before { background-color: var(--pkt-color-surface-default-faded-red); --pkt-color-input-check-border: var(--pkt-color-input-border-error); outline-color: var(--pkt-color-input-border-error); } .pkt-input-check__input-checkbox--error[type=radio], .pkt-input-check__input-checkbox--error[type=radio]:hover, .pkt-input-check__input-checkbox--error[type=radio]:focus-visible, .pkt-input-check__input-checkbox--error[type=radio]:hover, .pkt-input-check__input-checkbox--error[type=radio]:active:not(:disabled) { box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-error); background-color: var(--pkt-color-surface-default-faded-red); } .pkt-input-check__input-checkbox--error[type=radio]:checked, .pkt-input-check__input-checkbox--error[type=radio]:checked:focus-visible, .pkt-input-check__input-checkbox--error[type=radio]:checked:hover, .pkt-input-check__input-checkbox--error[type=radio]:checked:focus-visible + .pkt-input-check__input--tile { box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-input-border-error); background-color: var(--pkt-color-input-border-active); } .pkt-input-check__input-checkbox--error[type=radio]:checked:hover, .pkt-input-check__input-checkbox--error[type=radio]:checked:focus-visible { background-color: var(--pkt-color-input-border-active); } .pkt-input-check__input--tile { border: 2px solid var(--pkt-color-border-subtle); width: 21.875rem; position: relative; } .pkt-input-check__input--tile .pkt-input-check__input-label:before { content: ""; } .pkt-input-check__input--tile > .pkt-input-check__input-label { padding: 1rem 1rem 1rem 0.5rem; width: 100%; } .pkt-input-check__input--tile > .pkt-input-check__input-checkbox { margin: 1rem 0 1rem 1rem; } .pkt-input-check__input--tile .pkt-input-check__input-checkbox:checked:not(:disabled) + .pkt-input-check__input-label:before { content: ""; position: absolute; left: -2px; right: -2px; bottom: -2px; top: -2px; border: 2px solid var(--pkt-color-border-default); pointer-events: none; } .pkt-input-check__input--tile { /* TODO - Wait on firefox-support! &:has(:checked) { border-color: var(--choice-checked-rb-bc); }*/ } .pkt-input-check__input--tile:focus-within { background-color: var(--pkt-color-input-background-normal); border-color: var(--pkt-color-border-states-active); outline: 4px solid var(--pkt-color-border-states-focus); } .pkt-input-check__input--tile:hover:not(.pkt-input-check__input--tile-disabled) { border-color: var(--pkt-color-border-states-hover); } .pkt-input-check__input--tile:hover > .pkt-input-check__input-checkbox:checked + .pkt-input-check__input-label:before { border-color: var(--pkt-color-border-states-hover); } .pkt-input-check__input--tile:active:not(:disabled) > .pkt-input-check__input-checkbox:checked + .pkt-input-check__input-label:before { border-color: var(--pkt-color-border-states-active); } .pkt-input-check__input--tile:disabled { border-color: var(--pkt-color-border-states-disabled); } .pkt-input-check__input--tile .pkt-input-check__input-checkbox:not(.pkt-input-check__input-checkbox--error):checked[type=radio]:focus-visible { box-shadow: 0px 0px 0px 0.125rem var(--pkt-color-border-states-active); } .pkt-input-check__input--tile .pkt-input-check__input-checkbox[type=checkbox]:focus-visible { outline: none; } [data-mode=dark] .pkt-input-check__input-checkbox[type=checkbox]:not([role=switch]):after { filter: brightness(0) saturate(100%) invert(15%) sepia(11%) saturate(5273%) hue-rotate(212deg) brightness(96%) contrast(94%); } [data-mode=dark] .pkt-input-check__input-checkbox[type=checkbox][role=switch]:checked:not(:disabled) { background-color: var(--pkt-color-input-border-hover); border-color: var(--pkt-color-input-border-hover); } [data-mode=dark] .pkt-input-check__input-checkbox[type=checkbox][role=switch]:checked:after { background-color: var(--pkt-color-brand-neutrals-white); } [data-mode=dark] .pkt-input-check__input-checkbox[type=checkbox][role=switch]:disabled:not(:checked) { background-color: transparent; } [data-mode=dark] .pkt-input-check__input-checkbox--error[type=checkbox][role=switch]:is(input), [data-mode=dark] .pkt-input-check__input-checkbox--error[type=checkbox][role=switch]:is(input):checked:checked { background-color: var(--pkt-color-surface-default-faded-red); border-color: var(--pkt-color-input-border-error); }