diff --git a/.bundlewatch.config.json b/.bundlewatch.config.json index 0e4240e0d0..12519c822b 100644 --- a/.bundlewatch.config.json +++ b/.bundlewatch.config.json @@ -2,11 +2,11 @@ "files": [ { "path": "./packages/orange/dist/css/ouds-web-bootstrap.css", - "maxSize": "83.25 kB" + "maxSize": "85.25 kB" }, { "path": "./packages/orange/dist/css/ouds-web-bootstrap.min.css", - "maxSize": "79.75 kB" + "maxSize": "81.5 kB" }, { "path": "./packages/orange/dist/css/ouds-web-grid.css", @@ -34,11 +34,11 @@ }, { "path": "./packages/orange/dist/css/ouds-web.css", - "maxSize": "67.0 kB" + "maxSize": "68.75 kB" }, { "path": "./packages/orange/dist/css/ouds-web.min.css", - "maxSize": "62.75 kB" + "maxSize": "64.75 kB" }, { "path": "./dist/js/ouds-web.bundle.js", @@ -70,4 +70,4 @@ "main" ] } -} \ No newline at end of file +} diff --git a/package.json b/package.json index dfb02b0967..c33729efae 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "css-lint": "npm-run-all --aggregate-output --continue-on-error --parallel css-lint-*", "css-lint-stylelint": "stylelint \"**/*.{css,scss}\" --ignore-pattern \"__snapshots__\" --cache --cache-location .cache/.stylelintcache", "css-prefix-examples": "postcss --config build/postcss.config.mjs --replace \"site/src/assets/examples/**/*.css\"", - "css-snapshot-refresh": "npm run css && cp packages/orange/dist/css/ouds-web.css scss/tests/snapshot-tests/__snapshots__/ouds-web.css && cp packages/orange/dist/css/ouds-web-bootstrap.css scss/tests/snapshot-tests/__snapshots__/ouds-web-bootstrap.css && git restore packages/*/dist", + "css-snapshot-refresh": "npm run css-dev-orange && cp packages/orange/dist/css/ouds-web.css scss/tests/snapshot-tests/__snapshots__/ouds-web.css && cp packages/orange/dist/css/ouds-web-bootstrap.css scss/tests/snapshot-tests/__snapshots__/ouds-web-bootstrap.css && git restore packages/**/dist", "css-test": "jasmine --config=scss/tests/jasmine.js", "css-snapshot-test": "vitest --config=scss/tests/snapshot-tests/vitest.config.ts", "js": "npm-run-all js-compile js-minify", diff --git a/packages/orange-compact/config.yml b/packages/orange-compact/config.yml index 5396d8fa68..d781860e99 100644 --- a/packages/orange-compact/config.yml +++ b/packages/orange-compact/config.yml @@ -57,7 +57,7 @@ cdn: anchors: min: 2 - max: 5 + max: 6 toc: min: 2 diff --git a/packages/orange-compact/scss/ouds-web.scss b/packages/orange-compact/scss/ouds-web.scss index ac4b885dff..9b41a0a30f 100644 --- a/packages/orange-compact/scss/ouds-web.scss +++ b/packages/orange-compact/scss/ouds-web.scss @@ -39,6 +39,7 @@ @import "@ouds/web-common/scss/alert"; @import "@ouds/web-common/scss/progress"; @import "@ouds/web-common/scss/list-group"; +@import "@ouds/web-common/scss/list-item"; // OUDS mod: no @import "@ouds/web-common/scss/close"; @import "@ouds/web-common/scss/toasts"; @import "@ouds/web-common/scss/modal"; diff --git a/packages/orange-compact/scss/tokens/_composite.scss b/packages/orange-compact/scss/tokens/_composite.scss index d75feab528..a72045045a 100644 --- a/packages/orange-compact/scss/tokens/_composite.scss +++ b/packages/orange-compact/scss/tokens/_composite.scss @@ -133,6 +133,11 @@ $badge-icon-warning-internal: url("data:image/svg+xml,") !default; +// Navigation list item +$list-item-external-icon: url("data:image/svg+xml,") !default; +$list-item-next-icon: url("data:image/svg+xml,") !default; +$list-item-previous-icon: url("data:image/svg+xml,") !default; + //// SVG used several times $svg-as-custom-props: ( "chevron": $chevron-icon, diff --git a/packages/orange/config.yml b/packages/orange/config.yml index 0ffb5013c3..9a9142674b 100644 --- a/packages/orange/config.yml +++ b/packages/orange/config.yml @@ -57,7 +57,7 @@ cdn: anchors: min: 2 - max: 5 + max: 6 toc: min: 2 diff --git a/packages/orange/scss/ouds-web.scss b/packages/orange/scss/ouds-web.scss index 92cbe10b3e..a1552aa0f0 100644 --- a/packages/orange/scss/ouds-web.scss +++ b/packages/orange/scss/ouds-web.scss @@ -39,6 +39,7 @@ @import "@ouds/web-common/scss/alert"; @import "@ouds/web-common/scss/progress"; @import "@ouds/web-common/scss/list-group"; +@import "@ouds/web-common/scss/list-item"; // OUDS mod: no @import "@ouds/web-common/scss/close"; @import "@ouds/web-common/scss/toasts"; @import "@ouds/web-common/scss/modal"; diff --git a/packages/orange/scss/tokens/_composite.scss b/packages/orange/scss/tokens/_composite.scss index f86e362e96..4d2dd91625 100644 --- a/packages/orange/scss/tokens/_composite.scss +++ b/packages/orange/scss/tokens/_composite.scss @@ -133,6 +133,11 @@ $badge-icon-warning-internal: url("data:image/svg+xml,") !default; +// Navigation list item +$list-item-external-icon: url("data:image/svg+xml,") !default; +$list-item-next-icon: url("data:image/svg+xml,") !default; +$list-item-previous-icon: url("data:image/svg+xml,") !default; + //// SVG used several times $svg-as-custom-props: ( "chevron": $chevron-icon, diff --git a/packages/sosh/config.yml b/packages/sosh/config.yml index 98a8564877..cbcb71825d 100644 --- a/packages/sosh/config.yml +++ b/packages/sosh/config.yml @@ -57,7 +57,7 @@ cdn: anchors: min: 2 - max: 5 + max: 6 toc: min: 2 diff --git a/packages/sosh/scss/ouds-web.scss b/packages/sosh/scss/ouds-web.scss index c59f318311..235875a421 100644 --- a/packages/sosh/scss/ouds-web.scss +++ b/packages/sosh/scss/ouds-web.scss @@ -39,6 +39,7 @@ @import "@ouds/web-common/scss/alert"; @import "@ouds/web-common/scss/progress"; @import "@ouds/web-common/scss/list-group"; +@import "@ouds/web-common/scss/list-item"; // OUDS mod: no @import "@ouds/web-common/scss/close"; @import "@ouds/web-common/scss/toasts"; @import "@ouds/web-common/scss/modal"; diff --git a/packages/sosh/scss/tokens/_composite.scss b/packages/sosh/scss/tokens/_composite.scss index 3b59ba8be3..1b8a8fb93d 100644 --- a/packages/sosh/scss/tokens/_composite.scss +++ b/packages/sosh/scss/tokens/_composite.scss @@ -124,6 +124,11 @@ $badge-icon-warning-internal: url("data:image/svg+xml,") !default; +// Navigation list item +$list-item-external-icon: url("data:image/svg+xml,") !default; +$list-item-next-icon: url("data:image/svg+xml,") !default; +$list-item-previous-icon: url("data:image/svg+xml,") !default; + //// SVG used several times $svg-as-custom-props: ( "chevron": $chevron-icon, diff --git a/scss/_list-item.scss b/scss/_list-item.scss new file mode 100644 index 0000000000..6971a7ed8c --- /dev/null +++ b/scss/_list-item.scss @@ -0,0 +1,405 @@ +// +// Base styles +// + +.item { + display: block; + background-color: var(--#{$prefix}list-item-outlined-bg, var(--#{$prefix}list-item-disabled-bg, var(--#{$prefix}list-item-bg, $ouds-color-action-support-enabled))); + border-color: var(--#{$prefix}list-item-disabled-border-color, var(--#{$prefix}list-item-border-color, transparent)) var(--#{$prefix}list-item-disabled-border-color, var(--#{$prefix}list-item-border-color, transparent)) var(--#{$prefix}list-item-disabled-border-color, var(--#{$prefix}list-item-border-color, $ouds-color-border-default)); + border-style: solid; + border-width: var(--#{$prefix}list-item-border-width, 0) var(--#{$prefix}list-item-border-width, 0) var(--#{$prefix}list-item-border-width, $ouds-control-item-border-width-default); + @include border-radius(var(--#{$prefix}list-item-border-radius, $ouds-control-item-border-radius-default), var(--#{$prefix}list-item-border-radius, $ouds-control-item-border-radius-default)); + + &.item-interactive:focus-visible, + &:has(.item-interactive:focus-visible) { + @include focus-visible(); + } +} + +.item-main { + display: flex; + column-gap: $ouds-control-item-space-column-gap; + align-items: var(--#{$prefix}list-item-align-items, center); + min-height: calc(var(--#{$prefix}list-item-min-height, $ouds-control-item-size-min-height-default) - 2 * var(--#{$prefix}list-item-border-width, $ouds-control-item-border-width-default / 2)); + padding: calc(var(--#{$prefix}list-item-padding-top, $ouds-control-item-space-padding-block-density-default) - var(--#{$prefix}list-item-border-width, 0px)) calc($ouds-control-item-space-padding-inline - var(--#{$prefix}list-item-border-width, 0px)) calc(var(--#{$prefix}list-item-padding-bottom, $ouds-control-item-space-padding-block-density-default) - var(--#{$prefix}list-item-border-width, $ouds-control-item-border-width-default)); +} + +.item-list, +.item-wrapper { + &.component-max-width { + max-width: px-to-rem($ouds-control-item-size-max-width); + } +} + + +// +// Building blocks +// + +// Slots + +.item > .item-slot { + width: calc(100% - $ouds-control-item-space-padding-inline * 2); + min-height: $ouds-control-item-size-asset-medium; + margin: 0 $ouds-control-item-space-padding-inline 16px; // TODO: Add token when available +} + +.item-text-container .item-slot { + width: 100%; + margin-top: 4px; // TODO: Add token when available + margin-bottom: 4px; // TODO: Add token when available + + &:last-child:not(:only-child) { + margin-top: $ouds-control-item-space-padding-block-default; + margin-bottom: $ouds-control-item-space-padding-block-bottom-slot; + } +} + +.item-leading-container, +.item-trailing-container { + &.item-slot { + box-sizing: content-box; + max-width: px-to-rem(96px); // TODO: Add token when available + height: unset; + max-height: px-to-rem(96px); // TODO: Add token when available + aspect-ratio: unset; + } + + img, + video { + opacity: var(--#{$prefix}list-item-disabled-opacity, 1); + } +} + +.item-slot-clickable { + position: relative; + z-index: 2; + padding: calc($focus-visible-outer-width + $focus-visible-inner-width); // Workaround to handle focus outline correctly + margin: calc(-1 * ($focus-visible-outer-width + $focus-visible-inner-width)); +} + +// Containers + +.item-leading-container { + flex-shrink: 0; + height: var(--#{$prefix}list-item-leading-container-size, px-to-rem($ouds-control-item-size-asset-medium)); + aspect-ratio: 1; + overflow: hidden; + color: var(--#{$prefix}list-item-disabled-color, $ouds-color-content-default); + @include border-radius(var(--#{$prefix}list-item-leading-container-border-radius, $ouds-control-item-border-radius-media), var(--#{$prefix}list-item-leading-container-border-radius, $ouds-control-item-border-radius-media)); +} + +.item-text-container { + display: flex; + flex-grow: 1; + flex-direction: column; + row-gap: var(--#{$prefix}list-item-container-row-gap, $ouds-control-item-space-row-gap); + justify-content: center; + margin-top: var(--#{$prefix}list-item-top-text-container-margin-top, 0); +} + +.item-trailing-container { + display: flex; + flex-shrink: 0; + flex-direction: column; + row-gap: var(--#{$prefix}list-item-container-row-gap, $ouds-control-item-space-row-gap); + align-items: flex-end; + justify-content: center; + min-height: var(--#{$prefix}list-item-trailing-container-size, px-to-rem($ouds-control-item-size-asset-medium)); + overflow: hidden; + color: var(--#{$prefix}list-item-disabled-color, $ouds-color-content-default); + white-space: nowrap; + @include border-radius(var(--#{$prefix}list-item-trailing-container-border-radius, $ouds-control-item-border-radius-media), var(--#{$prefix}list-item-trailing-container-border-radius, $ouds-control-item-border-radius-media)); + + &:has(svg, img, .icon, .item-icon, video) { + height: var(--#{$prefix}list-item-trailing-container-size, px-to-rem($ouds-control-item-size-asset-medium)); + aspect-ratio: 1; + } + + &:has(.item-label) { + margin-top: var(--#{$prefix}list-item-top-text-container-margin-top, 0); + } +} + +// Texts + +.item-overline { + display: block; + margin-bottom: 0; + @include get-font-size("label-small"); + font-weight: $ouds-font-weight-web-label-moderate; + color: var(--#{$prefix}list-item-disabled-color, $ouds-color-content-muted); +} + +.item-label { + display: block; + margin-bottom: 0; + @include get-font-size("label-large"); + font-weight: $ouds-font-weight-web-label-default; + color: var(--#{$prefix}list-item-disabled-color, $ouds-color-content-default); +} + +.item-extra-label { + display: block; + margin-bottom: 0; + @include get-font-size("label-medium"); + font-weight: $ouds-font-weight-web-label-strong; + color: var(--#{$prefix}list-item-disabled-color, $ouds-color-content-default); +} + +.item-description { + display: block; + margin-bottom: 0; + @include get-font-size("label-medium"); + font-weight: $ouds-font-weight-web-label-default; + color: var(--#{$prefix}list-item-disabled-color, $ouds-color-content-muted); +} + +.item-helper { + display: block; + padding: $ouds-control-item-space-padding-block-top-helper-text $ouds-control-item-space-padding-inline 0; + margin-bottom: 0; + @include get-font-size("label-medium"); + font-weight: $ouds-font-weight-web-label-default; + color: var(--#{$prefix}list-item-disabled-color, $ouds-color-content-muted); +} + +// Icon + +.item-icon { + position: relative; + width: 100%; + height: 100%; + + &::before { + position: absolute; + inset: 0; + content: ""; + background-color: var(--#{$prefix}list-item-disabled-icon-color, var(--#{$prefix}list-item-icon-color)); + mask: var(--#{$prefix}list-item-icon) center / contain no-repeat; + } + + &::after { + position: absolute; + inset: 0; + content: ""; + background-color: var(--#{$prefix}list-item-disabled-icon-color-internal, var(--#{$prefix}list-item-icon-color-internal)); + mask: var(--#{$prefix}list-item-icon-internal) center / contain no-repeat; + } +} + +// Interactive + +.item-interactive { + text-decoration: none; + pointer-events: var(--#{$prefix}list-item-disabled-interactive, auto); + + &::before { + position: absolute; + inset: 0; + z-index: 1; + content: ""; + } + + &, + &:hover, + &:focus-visible, + &:active { + color: var(--#{$prefix}list-item-disabled-color, $ouds-color-content-default); + outline: 0; + box-shadow: none; + } +} + + +// +// Variants +// + +// States + +:disabled, +[aria-disabled="true"], +.disabled { + --#{$prefix}list-item-disabled-bg: #{$ouds-color-action-support-disabled}; + --#{$prefix}list-item-disabled-border-color: #{$ouds-color-border-muted}; + --#{$prefix}list-item-disabled-color: #{$ouds-color-action-disabled}; + --#{$prefix}list-item-disabled-opacity: #{$ouds-opacity-disabled}; + --#{$prefix}list-item-disabled-icon-color: #{$ouds-color-action-disabled}; + --#{$prefix}list-item-disabled-icon-color-internal: transparent; + --#{$prefix}list-item-disabled-interactive: none; +} + +// Structure + +.use-rounded-corner-items { + --#{$prefix}list-item-border-radius: #{$ouds-control-item-border-radius-rounded}; +} + +.item-list { // Needs to be after .use-rounded-corner-items to override the variable + --#{$prefix}list-item-border-radius: #{$ouds-border-radius-none}; + --#{$prefix}list-item-bg: transparent; + + @include list-unstyled(); + box-sizing: content-box; + padding: calc($focus-visible-outer-width + $focus-visible-inner-width); // Workaround to handle focus outline correctly + margin: calc(-1 * ($focus-visible-outer-width + $focus-visible-inner-width)); +} + +.item-bg { // Needs to be after .item-list to override the variable + --#{$prefix}list-item-bg: #{$ouds-color-action-support-enabled}; +} + +.item-no-bg { // Needs to be after .item-list to override the variable + --#{$prefix}list-item-bg: transparent; +} + +.item-outlined { + --#{$prefix}list-item-outlined-bg: transparent; + --#{$prefix}list-item-border-width: #{$ouds-control-item-border-width-default}; + --#{$prefix}list-item-border-color: #{$ouds-color-border-default}; +} + +.item-no-outline { // Needs to be after .item-outlined to override the variable + --#{$prefix}list-item-border-color: initial; +} + +.item-no-divider { // Needs to be after .item-outlined to override the variable + --#{$prefix}list-item-border-color: transparent; +} + +.item-top { + --#{$prefix}list-item-align-items: flex-start; + --#{$prefix}list-item-padding-top: var(--#{$prefix}list-item-counterweight-padding-top, #{$ouds-control-item-space-padding-block-density-default-top-alignment-top-counterweight}); + --#{$prefix}list-item-top-text-container-margin-top: var(--#{$prefix}list-item-text-container-margin-top, #{$ouds-control-item-space-padding-block-density-default-top-alignment-top-text-container}); +} + +// Assets + +.item-leading-large { + --#{$prefix}list-item-leading-container-size: #{px-to-rem($ouds-control-item-size-asset-large)}; +} + +.item-leading-xlarge { + --#{$prefix}list-item-leading-container-size: #{px-to-rem($ouds-control-item-size-asset-xlarge)}; +} + +.item-leading-rounded { + --#{$prefix}list-item-leading-container-border-radius: #{$ouds-control-item-border-radius-media-rounded-corner}; +} + +.item-trailing-large { + --#{$prefix}list-item-trailing-container-size: #{px-to-rem($ouds-control-item-size-asset-large)}; +} + +.item-trailing-xlarge { + --#{$prefix}list-item-trailing-container-size: #{px-to-rem($ouds-control-item-size-asset-xlarge)}; +} + +.item-trailing-rounded { + --#{$prefix}list-item-trailing-container-border-radius: #{$ouds-control-item-border-radius-media-rounded-corner}; +} + +.item-status-positive { + --#{$prefix}list-item-icon: var(--#{$prefix}success-icon); + --#{$prefix}list-item-icon-color: #{$ouds-color-content-status-positive}; +} + +.item-status-info { + --#{$prefix}list-item-icon: var(--#{$prefix}info-icon); + --#{$prefix}list-item-icon-color: #{$ouds-color-content-status-info}; +} + +.item-status-warning { + --#{$prefix}list-item-icon: var(--#{$prefix}warning-icon); + --#{$prefix}list-item-icon-color: var(--#{$prefix}icon-color-content-status-warning-external-shape); + --#{$prefix}list-item-icon-internal: var(--#{$prefix}warning-internal-icon); + --#{$prefix}list-item-icon-color-internal: var(--#{$prefix}icon-color-content-status-warning-internal-shape); +} + +.item-status-negative { + --#{$prefix}list-item-icon: var(--#{$prefix}error-icon); + --#{$prefix}list-item-icon-color: #{$ouds-color-content-status-negative}; +} + +// Size + +.item-small { + --#{$prefix}list-item-min-height: #{$ouds-control-item-size-min-height-compact}; + --#{$prefix}list-item-padding-top: #{$ouds-control-item-space-padding-block-density-compact}; + --#{$prefix}list-item-counterweight-padding-top: #{$ouds-control-item-space-padding-block-density-compact-top-alignment-top-counterweight}; + --#{$prefix}list-item-padding-bottom: #{$ouds-control-item-space-padding-block-density-compact}; + --#{$prefix}list-item-container-row-gap: 0; + --#{$prefix}list-item-text-container-margin-top: #{$ouds-control-item-space-padding-block-density-compact-top-alignment-top-text-container}; + --#{$prefix}list-item-leading-container-size: #{px-to-rem($ouds-control-item-size-asset-small)}; +} + + +// +// Navigation specific styles +// + +.item-navigation { + .item { + position: relative; + } + + .item-main::after { + display: flex; + flex-shrink: 0; + order: var(--#{$prefix}list-item-nav-order, 1); + width: px-to-rem($ouds-control-item-size-asset-small); + min-height: px-to-rem($ouds-control-item-size-asset-medium); + content: ""; + background-color: var(--#{$prefix}list-item-disabled-icon-color, var(--#{$prefix}list-item-chevron-color, $ouds-link-color-chevron-enabled)); + mask: var(--#{$prefix}list-item-nav-icon, $list-item-next-icon) center / contain no-repeat; + } + + &.item-interactive:hover, + &:has(.item-interactive:hover) { + --#{$prefix}list-item-chevron-color: #{$ouds-color-action-hover}; + --#{$prefix}list-item-bg: #{$ouds-color-action-support-hover}; + } + + &.item-interactive:focus-visible, + &:has(.item-interactive:focus-visible) { + --#{$prefix}list-item-chevron-color: #{$ouds-color-action-focus}; + --#{$prefix}list-item-bg: #{$ouds-color-action-support-focus}; + } + + &.item-interactive:active, + &:has(.item-interactive:active) { + --#{$prefix}list-item-chevron-color: #{$ouds-color-action-pressed}; + --#{$prefix}list-item-bg: #{$ouds-color-action-support-pressed}; + } +} + +// Needed outside since the outlined could be project wide +.item-outlined.item-navigation, +.item-outlined .item-navigation { + &.item-interactive:hover, + &:has(.item-interactive:hover) { + --#{$prefix}list-item-border-color: #{$ouds-color-action-hover}; + } + + &.item-interactive:focus-visible, + &:has(.item-interactive:focus-visible) { + --#{$prefix}list-item-border-color: #{$ouds-color-action-focus}; + } + + &.item-interactive:active, + &:has(.item-interactive:active) { + --#{$prefix}list-item-border-color: #{$ouds-color-action-pressed}; + } +} + +// Navigation variants + +.item-external { + --#{$prefix}list-item-nav-icon: #{$list-item-external-icon}; +} + +.item-previous { + --#{$prefix}list-item-nav-order: -1; + --#{$prefix}list-item-nav-icon: #{$list-item-previous-icon}; +} diff --git a/scss/_skeleton.scss b/scss/_skeleton.scss index 473fab7a34..c76c56301f 100644 --- a/scss/_skeleton.scss +++ b/scss/_skeleton.scss @@ -57,7 +57,7 @@ } // List of components with security margins - :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item) { + :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper) { @extend %skeleton-placeholder; } } diff --git a/scss/tests/snapshot-tests/__snapshots__/ouds-web-bootstrap.css b/scss/tests/snapshot-tests/__snapshots__/ouds-web-bootstrap.css index ba48824c9f..76e757a66e 100644 --- a/scss/tests/snapshot-tests/__snapshots__/ouds-web-bootstrap.css +++ b/scss/tests/snapshot-tests/__snapshots__/ouds-web-bootstrap.css @@ -12270,6 +12270,369 @@ ol.bullet-list > li > ol > li > ol > li::before { --bs-list-group-item-padding-x: var(--bs-card-spacer-x); } +.item { + display: block; + background-color: var(--bs-list-item-outlined-bg, var(--bs-list-item-disabled-bg, var(--bs-list-item-bg, var(--bs-color-action-support-enabled)))); + border-color: var(--bs-list-item-disabled-border-color, var(--bs-list-item-border-color, transparent)) var(--bs-list-item-disabled-border-color, var(--bs-list-item-border-color, transparent)) var(--bs-list-item-disabled-border-color, var(--bs-list-item-border-color, var(--bs-color-border-default))); + border-style: solid; + border-width: var(--bs-list-item-border-width, 0) var(--bs-list-item-border-width, 0) var(--bs-list-item-border-width, 1px); + border-radius: var(--bs-list-item-border-radius, 0px); +} +.item.item-interactive:focus-visible, .item:has(.item-interactive:focus-visible) { + isolation: isolate; + outline: 3px solid var(--bs-color-border-focus); + outline-offset: 2px; + box-shadow: 0 0 0 2px var(--bs-color-border-focus-inset); +} + +.item-main { + display: flex; + -moz-column-gap: 12px; + column-gap: 12px; + align-items: var(--bs-list-item-align-items, center); + min-height: calc(var(--bs-list-item-min-height, 60px) - 2 * var(--bs-list-item-border-width, 0.5px)); + padding: calc(var(--bs-list-item-padding-top, 12px) - var(--bs-list-item-border-width, 0px)) calc(16px - var(--bs-list-item-border-width, 0px)) calc(var(--bs-list-item-padding-bottom, 12px) - var(--bs-list-item-border-width, 1px)); +} + +.item-list.component-max-width, +.item-wrapper.component-max-width { + max-width: 30rem; +} + +.item > .item-slot { + width: calc(100% - 32px); + min-height: 28px; + margin: 0 16px 16px; +} + +.item-text-container .item-slot { + width: 100%; + margin-top: 4px; + margin-bottom: 4px; +} +.item-text-container .item-slot:last-child:not(:only-child) { + margin-top: 12px; + margin-bottom: 4px; +} + +.item-leading-container.item-slot, +.item-trailing-container.item-slot { + box-sizing: content-box; + max-width: 6rem; + height: unset; + max-height: 6rem; + aspect-ratio: unset; +} +.item-leading-container img, +.item-leading-container video, +.item-trailing-container img, +.item-trailing-container video { + opacity: var(--bs-list-item-disabled-opacity, 1); +} + +.item-slot-clickable { + position: relative; + z-index: 2; + padding: 5px; + margin: -5px; +} + +.item-leading-container { + flex-shrink: 0; + height: var(--bs-list-item-leading-container-size, 1.75rem); + aspect-ratio: 1; + overflow: hidden; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); + border-radius: var(--bs-list-item-leading-container-border-radius, 0px); +} + +.item-text-container { + display: flex; + flex-grow: 1; + flex-direction: column; + row-gap: var(--bs-list-item-container-row-gap, 0px); + justify-content: center; + margin-top: var(--bs-list-item-top-text-container-margin-top, 0); +} + +.item-trailing-container { + display: flex; + flex-shrink: 0; + flex-direction: column; + row-gap: var(--bs-list-item-container-row-gap, 0px); + align-items: flex-end; + justify-content: center; + min-height: var(--bs-list-item-trailing-container-size, 1.75rem); + overflow: hidden; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); + white-space: nowrap; + border-radius: var(--bs-list-item-trailing-container-border-radius, 0px); +} +.item-trailing-container:has(svg, img, .icon, .item-icon, video) { + height: var(--bs-list-item-trailing-container-size, 1.75rem); + aspect-ratio: 1; +} +.item-trailing-container:has(.item-label) { + margin-top: var(--bs-list-item-top-text-container-margin-top, 0); +} + +.item-overline { + display: block; + margin-bottom: 0; + font-size: var(--bs-font-size-label-small); + line-height: var(--bs-font-line-height-label-small); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-small); + font-weight: 500; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-muted)); +} + +.item-label { + display: block; + margin-bottom: 0; + font-size: var(--bs-font-size-label-large); + line-height: var(--bs-font-line-height-label-large); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-large); + font-weight: 400; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); +} + +.item-extra-label { + display: block; + margin-bottom: 0; + font-size: var(--bs-font-size-label-medium); + line-height: var(--bs-font-line-height-label-medium); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-medium); + font-weight: 700; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); +} + +.item-description { + display: block; + margin-bottom: 0; + font-size: var(--bs-font-size-label-medium); + line-height: var(--bs-font-line-height-label-medium); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-medium); + font-weight: 400; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-muted)); +} + +.item-helper { + display: block; + padding: 8px 16px 0; + margin-bottom: 0; + font-size: var(--bs-font-size-label-medium); + line-height: var(--bs-font-line-height-label-medium); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-medium); + font-weight: 400; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-muted)); +} + +.item-icon { + position: relative; + width: 100%; + height: 100%; +} +.item-icon::before { + position: absolute; + inset: 0; + content: ""; + background-color: var(--bs-list-item-disabled-icon-color, var(--bs-list-item-icon-color)); + -webkit-mask: var(--bs-list-item-icon) center/contain no-repeat; + mask: var(--bs-list-item-icon) center/contain no-repeat; +} +.item-icon::after { + position: absolute; + inset: 0; + content: ""; + background-color: var(--bs-list-item-disabled-icon-color-internal, var(--bs-list-item-icon-color-internal)); + -webkit-mask: var(--bs-list-item-icon-internal) center/contain no-repeat; + mask: var(--bs-list-item-icon-internal) center/contain no-repeat; +} + +.item-interactive { + text-decoration: none; + pointer-events: var(--bs-list-item-disabled-interactive, auto); +} +.item-interactive::before { + position: absolute; + inset: 0; + z-index: 1; + content: ""; +} +.item-interactive, .item-interactive:hover, .item-interactive:focus-visible, .item-interactive:active { + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); + outline: 0; + box-shadow: none; +} + +:disabled, +[aria-disabled=true], +.disabled { + --bs-list-item-disabled-bg: var(--bs-color-action-support-disabled); + --bs-list-item-disabled-border-color: var(--bs-color-border-muted); + --bs-list-item-disabled-color: var(--bs-color-action-disabled); + --bs-list-item-disabled-opacity: 0.2; + --bs-list-item-disabled-icon-color: var(--bs-color-action-disabled); + --bs-list-item-disabled-icon-color-internal: transparent; + --bs-list-item-disabled-interactive: none; +} + +.use-rounded-corner-items { + --bs-list-item-border-radius: 8px; +} + +.item-list { + --bs-list-item-border-radius: 0px; + --bs-list-item-bg: transparent; + max-width: initial; + padding-left: 0; + list-style: none; + box-sizing: content-box; + padding: 5px; + margin: -5px; +} + +.item-bg { + --bs-list-item-bg: var(--bs-color-action-support-enabled); +} + +.item-no-bg { + --bs-list-item-bg: transparent; +} + +.item-outlined { + --bs-list-item-outlined-bg: transparent; + --bs-list-item-border-width: 1px; + --bs-list-item-border-color: var(--bs-color-border-default); +} + +.item-no-outline { + --bs-list-item-border-color: initial; +} + +.item-no-divider { + --bs-list-item-border-color: transparent; +} + +.item-top { + --bs-list-item-align-items: flex-start; + --bs-list-item-padding-top: var(--bs-list-item-counterweight-padding-top, 10px); + --bs-list-item-top-text-container-margin-top: var(--bs-list-item-text-container-margin-top, 2px); +} + +.item-leading-large { + --bs-list-item-leading-container-size: 2.5rem; +} + +.item-leading-xlarge { + --bs-list-item-leading-container-size: 3.5rem; +} + +.item-leading-rounded { + --bs-list-item-leading-container-border-radius: 4px; +} + +.item-trailing-large { + --bs-list-item-trailing-container-size: 2.5rem; +} + +.item-trailing-xlarge { + --bs-list-item-trailing-container-size: 3.5rem; +} + +.item-trailing-rounded { + --bs-list-item-trailing-container-border-radius: 4px; +} + +.item-status-positive { + --bs-list-item-icon: var(--bs-success-icon); + --bs-list-item-icon-color: var(--bs-color-content-status-positive); +} + +.item-status-info { + --bs-list-item-icon: var(--bs-info-icon); + --bs-list-item-icon-color: var(--bs-color-content-status-info); +} + +.item-status-warning { + --bs-list-item-icon: var(--bs-warning-icon); + --bs-list-item-icon-color: var(--bs-icon-color-content-status-warning-external-shape); + --bs-list-item-icon-internal: var(--bs-warning-internal-icon); + --bs-list-item-icon-color-internal: var(--bs-icon-color-content-status-warning-internal-shape); +} + +.item-status-negative { + --bs-list-item-icon: var(--bs-error-icon); + --bs-list-item-icon-color: var(--bs-color-content-status-negative); +} + +.item-small { + --bs-list-item-min-height: 48px; + --bs-list-item-padding-top: 8px; + --bs-list-item-counterweight-padding-top: 8px; + --bs-list-item-padding-bottom: 8px; + --bs-list-item-container-row-gap: 0; + --bs-list-item-text-container-margin-top: 0px; + --bs-list-item-leading-container-size: 1.5rem; +} + +.item-navigation .item { + position: relative; +} +.item-navigation .item-main::after { + display: flex; + flex-shrink: 0; + order: var(--bs-list-item-nav-order, 1); + width: 1.5rem; + min-height: 1.75rem; + content: ""; + background-color: var(--bs-list-item-disabled-icon-color, var(--bs-list-item-chevron-color, var(--bs-color-content-brand-primary))); + -webkit-mask: var(--bs-list-item-nav-icon, url("data:image/svg+xml,")) center/contain no-repeat; + mask: var(--bs-list-item-nav-icon, url("data:image/svg+xml,")) center/contain no-repeat; +} +.item-navigation.item-interactive:hover, .item-navigation:has(.item-interactive:hover) { + --bs-list-item-chevron-color: var(--bs-color-action-hover); + --bs-list-item-bg: var(--bs-color-action-support-hover); +} +.item-navigation.item-interactive:focus-visible, .item-navigation:has(.item-interactive:focus-visible) { + --bs-list-item-chevron-color: var(--bs-color-action-focus); + --bs-list-item-bg: var(--bs-color-action-support-focus); +} +.item-navigation.item-interactive:active, .item-navigation:has(.item-interactive:active) { + --bs-list-item-chevron-color: var(--bs-color-action-pressed); + --bs-list-item-bg: var(--bs-color-action-support-pressed); +} + +.item-outlined.item-navigation.item-interactive:hover, .item-outlined.item-navigation:has(.item-interactive:hover), +.item-outlined .item-navigation.item-interactive:hover, +.item-outlined .item-navigation:has(.item-interactive:hover) { + --bs-list-item-border-color: var(--bs-color-action-hover); +} +.item-outlined.item-navigation.item-interactive:focus-visible, .item-outlined.item-navigation:has(.item-interactive:focus-visible), +.item-outlined .item-navigation.item-interactive:focus-visible, +.item-outlined .item-navigation:has(.item-interactive:focus-visible) { + --bs-list-item-border-color: var(--bs-color-action-focus); +} +.item-outlined.item-navigation.item-interactive:active, .item-outlined.item-navigation:has(.item-interactive:active), +.item-outlined .item-navigation.item-interactive:active, +.item-outlined .item-navigation:has(.item-interactive:active) { + --bs-list-item-border-color: var(--bs-color-action-pressed); +} + +.item-external { + --bs-list-item-nav-icon: url("data:image/svg+xml,"); +} + +.item-previous { + --bs-list-item-nav-order: -1; + --bs-list-item-nav-icon: url("data:image/svg+xml,"); +} + .toast { --bs-toast-zindex: 1090; --bs-toast-padding-x: 0.5rem; @@ -14163,7 +14526,7 @@ ol.bullet-list > li > ol > li > ol > li::before { transform: translate3d(100%, 0, 0); } } -.skeleton, .placeholder, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item), [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input) { +.skeleton, .placeholder, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper), [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input) { position: relative; height: var(--bs-skeleton-height); overflow: hidden; @@ -14171,10 +14534,10 @@ ol.bullet-list > li > ol > li > ol > li::before { background-color: transparent; border: 0; } -.skeleton > *, .placeholder > *, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item) > *, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input) > * { +.skeleton > *, .placeholder > *, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper) > *, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input) > * { visibility: hidden; } -.skeleton::before, .placeholder::before, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item)::before, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input)::before, .skeleton::after, .placeholder::after, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item)::after, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input)::after { +.skeleton::before, .placeholder::before, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper)::before, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input)::before, .skeleton::after, .placeholder::after, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper)::after, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input)::after { all: unset; position: absolute; inset: var(--bs-skeleton-margin-block, 4px) 0; @@ -14182,14 +14545,14 @@ ol.bullet-list > li > ol > li > ol > li::before { display: block; content: ""; } -.skeleton::before, .placeholder::before, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item)::before, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input)::before { +.skeleton::before, .placeholder::before, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper)::before, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input)::before { width: unset !important; height: unset !important; background-color: var(--bs-color-opacity-lowest) !important; -webkit-mask: unset !important; mask: unset !important; } -.skeleton::after, .placeholder::after, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item)::after, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input)::after { +.skeleton::after, .placeholder::after, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper)::after, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .icon-link, .radio-button-standalone, .select-input, .form-select, .switch-standalone > .control-item-indicator, .switch-standalone > .form-check-input, .tag, .text-area, .text-input)::after { background: linear-gradient(270deg, var(--bs-color-opacity-transparent) 3%, var(--bs-color-opacity-lower) 47%, var(--bs-color-opacity-transparent) 97%); transform: translate3d(-100%, 0, 0); animation: skeleton-wave 1.25s 2s ease-in-out infinite; diff --git a/scss/tests/snapshot-tests/__snapshots__/ouds-web.css b/scss/tests/snapshot-tests/__snapshots__/ouds-web.css index 20693e3bf3..ceb1663bb0 100644 --- a/scss/tests/snapshot-tests/__snapshots__/ouds-web.css +++ b/scss/tests/snapshot-tests/__snapshots__/ouds-web.css @@ -10058,6 +10058,369 @@ ol.bullet-list > li > ol > li > ol > li::before { --bs-list-group-item-padding-x: var(--bs-card-spacer-x); } +.item { + display: block; + background-color: var(--bs-list-item-outlined-bg, var(--bs-list-item-disabled-bg, var(--bs-list-item-bg, var(--bs-color-action-support-enabled)))); + border-color: var(--bs-list-item-disabled-border-color, var(--bs-list-item-border-color, transparent)) var(--bs-list-item-disabled-border-color, var(--bs-list-item-border-color, transparent)) var(--bs-list-item-disabled-border-color, var(--bs-list-item-border-color, var(--bs-color-border-default))); + border-style: solid; + border-width: var(--bs-list-item-border-width, 0) var(--bs-list-item-border-width, 0) var(--bs-list-item-border-width, 1px); + border-radius: var(--bs-list-item-border-radius, 0px); +} +.item.item-interactive:focus-visible, .item:has(.item-interactive:focus-visible) { + isolation: isolate; + outline: 3px solid var(--bs-color-border-focus); + outline-offset: 2px; + box-shadow: 0 0 0 2px var(--bs-color-border-focus-inset); +} + +.item-main { + display: flex; + -moz-column-gap: 12px; + column-gap: 12px; + align-items: var(--bs-list-item-align-items, center); + min-height: calc(var(--bs-list-item-min-height, 60px) - 2 * var(--bs-list-item-border-width, 0.5px)); + padding: calc(var(--bs-list-item-padding-top, 12px) - var(--bs-list-item-border-width, 0px)) calc(16px - var(--bs-list-item-border-width, 0px)) calc(var(--bs-list-item-padding-bottom, 12px) - var(--bs-list-item-border-width, 1px)); +} + +.item-list.component-max-width, +.item-wrapper.component-max-width { + max-width: 30rem; +} + +.item > .item-slot { + width: calc(100% - 32px); + min-height: 28px; + margin: 0 16px 16px; +} + +.item-text-container .item-slot { + width: 100%; + margin-top: 4px; + margin-bottom: 4px; +} +.item-text-container .item-slot:last-child:not(:only-child) { + margin-top: 12px; + margin-bottom: 4px; +} + +.item-leading-container.item-slot, +.item-trailing-container.item-slot { + box-sizing: content-box; + max-width: 6rem; + height: unset; + max-height: 6rem; + aspect-ratio: unset; +} +.item-leading-container img, +.item-leading-container video, +.item-trailing-container img, +.item-trailing-container video { + opacity: var(--bs-list-item-disabled-opacity, 1); +} + +.item-slot-clickable { + position: relative; + z-index: 2; + padding: 5px; + margin: -5px; +} + +.item-leading-container { + flex-shrink: 0; + height: var(--bs-list-item-leading-container-size, 1.75rem); + aspect-ratio: 1; + overflow: hidden; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); + border-radius: var(--bs-list-item-leading-container-border-radius, 0px); +} + +.item-text-container { + display: flex; + flex-grow: 1; + flex-direction: column; + row-gap: var(--bs-list-item-container-row-gap, 0px); + justify-content: center; + margin-top: var(--bs-list-item-top-text-container-margin-top, 0); +} + +.item-trailing-container { + display: flex; + flex-shrink: 0; + flex-direction: column; + row-gap: var(--bs-list-item-container-row-gap, 0px); + align-items: flex-end; + justify-content: center; + min-height: var(--bs-list-item-trailing-container-size, 1.75rem); + overflow: hidden; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); + white-space: nowrap; + border-radius: var(--bs-list-item-trailing-container-border-radius, 0px); +} +.item-trailing-container:has(svg, img, .icon, .item-icon, video) { + height: var(--bs-list-item-trailing-container-size, 1.75rem); + aspect-ratio: 1; +} +.item-trailing-container:has(.item-label) { + margin-top: var(--bs-list-item-top-text-container-margin-top, 0); +} + +.item-overline { + display: block; + margin-bottom: 0; + font-size: var(--bs-font-size-label-small); + line-height: var(--bs-font-line-height-label-small); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-small); + font-weight: 500; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-muted)); +} + +.item-label { + display: block; + margin-bottom: 0; + font-size: var(--bs-font-size-label-large); + line-height: var(--bs-font-line-height-label-large); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-large); + font-weight: 400; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); +} + +.item-extra-label { + display: block; + margin-bottom: 0; + font-size: var(--bs-font-size-label-medium); + line-height: var(--bs-font-line-height-label-medium); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-medium); + font-weight: 700; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); +} + +.item-description { + display: block; + margin-bottom: 0; + font-size: var(--bs-font-size-label-medium); + line-height: var(--bs-font-line-height-label-medium); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-medium); + font-weight: 400; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-muted)); +} + +.item-helper { + display: block; + padding: 8px 16px 0; + margin-bottom: 0; + font-size: var(--bs-font-size-label-medium); + line-height: var(--bs-font-line-height-label-medium); + /* rtl:remove */ + letter-spacing: var(--bs-font-letter-spacing-label-medium); + font-weight: 400; + color: var(--bs-list-item-disabled-color, var(--bs-color-content-muted)); +} + +.item-icon { + position: relative; + width: 100%; + height: 100%; +} +.item-icon::before { + position: absolute; + inset: 0; + content: ""; + background-color: var(--bs-list-item-disabled-icon-color, var(--bs-list-item-icon-color)); + -webkit-mask: var(--bs-list-item-icon) center/contain no-repeat; + mask: var(--bs-list-item-icon) center/contain no-repeat; +} +.item-icon::after { + position: absolute; + inset: 0; + content: ""; + background-color: var(--bs-list-item-disabled-icon-color-internal, var(--bs-list-item-icon-color-internal)); + -webkit-mask: var(--bs-list-item-icon-internal) center/contain no-repeat; + mask: var(--bs-list-item-icon-internal) center/contain no-repeat; +} + +.item-interactive { + text-decoration: none; + pointer-events: var(--bs-list-item-disabled-interactive, auto); +} +.item-interactive::before { + position: absolute; + inset: 0; + z-index: 1; + content: ""; +} +.item-interactive, .item-interactive:hover, .item-interactive:focus-visible, .item-interactive:active { + color: var(--bs-list-item-disabled-color, var(--bs-color-content-default)); + outline: 0; + box-shadow: none; +} + +:disabled, +[aria-disabled=true], +.disabled { + --bs-list-item-disabled-bg: var(--bs-color-action-support-disabled); + --bs-list-item-disabled-border-color: var(--bs-color-border-muted); + --bs-list-item-disabled-color: var(--bs-color-action-disabled); + --bs-list-item-disabled-opacity: 0.2; + --bs-list-item-disabled-icon-color: var(--bs-color-action-disabled); + --bs-list-item-disabled-icon-color-internal: transparent; + --bs-list-item-disabled-interactive: none; +} + +.use-rounded-corner-items { + --bs-list-item-border-radius: 8px; +} + +.item-list { + --bs-list-item-border-radius: 0px; + --bs-list-item-bg: transparent; + max-width: initial; + padding-left: 0; + list-style: none; + box-sizing: content-box; + padding: 5px; + margin: -5px; +} + +.item-bg { + --bs-list-item-bg: var(--bs-color-action-support-enabled); +} + +.item-no-bg { + --bs-list-item-bg: transparent; +} + +.item-outlined { + --bs-list-item-outlined-bg: transparent; + --bs-list-item-border-width: 1px; + --bs-list-item-border-color: var(--bs-color-border-default); +} + +.item-no-outline { + --bs-list-item-border-color: initial; +} + +.item-no-divider { + --bs-list-item-border-color: transparent; +} + +.item-top { + --bs-list-item-align-items: flex-start; + --bs-list-item-padding-top: var(--bs-list-item-counterweight-padding-top, 10px); + --bs-list-item-top-text-container-margin-top: var(--bs-list-item-text-container-margin-top, 2px); +} + +.item-leading-large { + --bs-list-item-leading-container-size: 2.5rem; +} + +.item-leading-xlarge { + --bs-list-item-leading-container-size: 3.5rem; +} + +.item-leading-rounded { + --bs-list-item-leading-container-border-radius: 4px; +} + +.item-trailing-large { + --bs-list-item-trailing-container-size: 2.5rem; +} + +.item-trailing-xlarge { + --bs-list-item-trailing-container-size: 3.5rem; +} + +.item-trailing-rounded { + --bs-list-item-trailing-container-border-radius: 4px; +} + +.item-status-positive { + --bs-list-item-icon: var(--bs-success-icon); + --bs-list-item-icon-color: var(--bs-color-content-status-positive); +} + +.item-status-info { + --bs-list-item-icon: var(--bs-info-icon); + --bs-list-item-icon-color: var(--bs-color-content-status-info); +} + +.item-status-warning { + --bs-list-item-icon: var(--bs-warning-icon); + --bs-list-item-icon-color: var(--bs-icon-color-content-status-warning-external-shape); + --bs-list-item-icon-internal: var(--bs-warning-internal-icon); + --bs-list-item-icon-color-internal: var(--bs-icon-color-content-status-warning-internal-shape); +} + +.item-status-negative { + --bs-list-item-icon: var(--bs-error-icon); + --bs-list-item-icon-color: var(--bs-color-content-status-negative); +} + +.item-small { + --bs-list-item-min-height: 48px; + --bs-list-item-padding-top: 8px; + --bs-list-item-counterweight-padding-top: 8px; + --bs-list-item-padding-bottom: 8px; + --bs-list-item-container-row-gap: 0; + --bs-list-item-text-container-margin-top: 0px; + --bs-list-item-leading-container-size: 1.5rem; +} + +.item-navigation .item { + position: relative; +} +.item-navigation .item-main::after { + display: flex; + flex-shrink: 0; + order: var(--bs-list-item-nav-order, 1); + width: 1.5rem; + min-height: 1.75rem; + content: ""; + background-color: var(--bs-list-item-disabled-icon-color, var(--bs-list-item-chevron-color, var(--bs-color-content-brand-primary))); + -webkit-mask: var(--bs-list-item-nav-icon, url("data:image/svg+xml,")) center/contain no-repeat; + mask: var(--bs-list-item-nav-icon, url("data:image/svg+xml,")) center/contain no-repeat; +} +.item-navigation.item-interactive:hover, .item-navigation:has(.item-interactive:hover) { + --bs-list-item-chevron-color: var(--bs-color-action-hover); + --bs-list-item-bg: var(--bs-color-action-support-hover); +} +.item-navigation.item-interactive:focus-visible, .item-navigation:has(.item-interactive:focus-visible) { + --bs-list-item-chevron-color: var(--bs-color-action-focus); + --bs-list-item-bg: var(--bs-color-action-support-focus); +} +.item-navigation.item-interactive:active, .item-navigation:has(.item-interactive:active) { + --bs-list-item-chevron-color: var(--bs-color-action-pressed); + --bs-list-item-bg: var(--bs-color-action-support-pressed); +} + +.item-outlined.item-navigation.item-interactive:hover, .item-outlined.item-navigation:has(.item-interactive:hover), +.item-outlined .item-navigation.item-interactive:hover, +.item-outlined .item-navigation:has(.item-interactive:hover) { + --bs-list-item-border-color: var(--bs-color-action-hover); +} +.item-outlined.item-navigation.item-interactive:focus-visible, .item-outlined.item-navigation:has(.item-interactive:focus-visible), +.item-outlined .item-navigation.item-interactive:focus-visible, +.item-outlined .item-navigation:has(.item-interactive:focus-visible) { + --bs-list-item-border-color: var(--bs-color-action-focus); +} +.item-outlined.item-navigation.item-interactive:active, .item-outlined.item-navigation:has(.item-interactive:active), +.item-outlined .item-navigation.item-interactive:active, +.item-outlined .item-navigation:has(.item-interactive:active) { + --bs-list-item-border-color: var(--bs-color-action-pressed); +} + +.item-external { + --bs-list-item-nav-icon: url("data:image/svg+xml,"); +} + +.item-previous { + --bs-list-item-nav-order: -1; + --bs-list-item-nav-icon: url("data:image/svg+xml,"); +} + .toast { --bs-toast-zindex: 1090; --bs-toast-padding-x: 0.5rem; @@ -11846,7 +12209,7 @@ ol.bullet-list > li > ol > li > ol > li::before { transform: translate3d(100%, 0, 0); } } -.skeleton, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item), [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input) { +.skeleton, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper), [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input) { position: relative; height: var(--bs-skeleton-height); overflow: hidden; @@ -11854,10 +12217,10 @@ ol.bullet-list > li > ol > li > ol > li::before { background-color: transparent; border: 0; } -.skeleton > *, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item) > *, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input) > * { +.skeleton > *, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper) > *, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input) > * { visibility: hidden; } -.skeleton::before, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item)::before, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input)::before, .skeleton::after, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item)::after, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input)::after { +.skeleton::before, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper)::before, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input)::before, .skeleton::after, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper)::after, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input)::after { all: unset; position: absolute; inset: var(--bs-skeleton-margin-block, 4px) 0; @@ -11865,14 +12228,14 @@ ol.bullet-list > li > ol > li > ol > li::before { display: block; content: ""; } -.skeleton::before, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item)::before, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input)::before { +.skeleton::before, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper)::before, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input)::before { width: unset !important; height: unset !important; background-color: var(--bs-color-opacity-lowest) !important; -webkit-mask: unset !important; mask: unset !important; } -.skeleton::after, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item)::after, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input)::after { +.skeleton::after, [aria-busy=true] :is(.bullet-list > li, .checkbox-item, .radio-button-item, .switch-item, .item-wrapper)::after, [aria-busy=true] :is(.alert, .btn, .btn-close, .checkbox-standalone, .chip-interactive, .link, .link-chevron, .radio-button-standalone, .select-input, .switch-standalone > .control-item-indicator, .tag, .text-area, .text-input)::after { background: linear-gradient(270deg, var(--bs-color-opacity-transparent) 3%, var(--bs-color-opacity-lower) 47%, var(--bs-color-opacity-transparent) 97%); transform: translate3d(-100%, 0, 0); animation: skeleton-wave 1.25s 2s ease-in-out infinite; diff --git a/site/data/components-details.ts b/site/data/components-details.ts index a1cca06d11..b36f95c601 100644 --- a/site/data/components-details.ts +++ b/site/data/components-details.ts @@ -192,6 +192,40 @@ export const componentsDetails: ComponentCardData[] = [ category: 'Navigation', snippet: `Label` }, + { + name: 'Navigation card item', + slug: 'navigation-list-item', + link: 'list-item#navigation-list-item', + category: 'Control', + snippet: ` +
` + }, + { + name: 'Navigation list item', + slug: 'navigation-list-item', + link: 'list-item#navigation-list-item', + category: 'Control', + snippet: ` +Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Overline
+Label
+Extra label
+Description
+Overline
+Label
+Extra label
+Description
+Overline
+Label
Extra label
+Description
+Overline
+Label
+Extra label
+Description
+Slot
Label
+Label
+Extra label
+Label
+Label
+Label
+Label
+Label
+12errors
+Label
+Label
+Tag
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Helper text
+ `} /> + +### Background + +By default, [card items](#card-item) have a background-color, while [list items](#list-item) don't. This behavior can be modified by using `.item-no-bg` or `.item-bg` on the `.item-wrapper` or `.item-list` container. These modifiers only modify the no interaction background of the items. + +Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Extra label
+Tag
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+Label
+