From 54c5c634dd3a7a420dd171255677f969948338cf Mon Sep 17 00:00:00 2001 From: michaelmkraus Date: Thu, 17 Apr 2025 11:44:13 +0200 Subject: [PATCH 1/7] feat: change color of label on hovered and active state --- .../src/styles/internal/_form-components.scss | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/packages/components/src/styles/internal/_form-components.scss b/packages/components/src/styles/internal/_form-components.scss index 0841e095c960..008204d2c296 100644 --- a/packages/components/src/styles/internal/_form-components.scss +++ b/packages/components/src/styles/internal/_form-components.scss @@ -428,6 +428,21 @@ $input-valid-types: } } +@mixin get-validity-color-check-label-color($state, $key: "valid") { + $variant: successful; + + @if ($key != "valid") { + $variant: critical; + } + + &:has(input:not([role="switch"])) { + &:is(label), + > label { + color: var(--db-#{$variant}-on-bg-basic-emphasis-100-#{$state}); + } + } +} + // CHECKBOX & RADIO @mixin get-validity-color-check($key: "valid") { @@ -495,6 +510,42 @@ $input-valid-types: @include get-validity-color-check("invalid"); } + @include helpers.hover { + color: colors.$db-adaptive-on-bg-basic-emphasis-100-hovered; + + @include get-validity($selector, "valid") { + @include get-validity-color-check-label-color(hovered, "valid"); + } + + @include get-validity($selector, "invalid") { + @include get-validity-color-check-label-color(hovered, "invalid"); + } + + @if ($selector == radio) { + input { + /* stylelint-disable-next-line db-ux/use-border-width */ + border: #{$check-border-size} + solid + var( + --db-check-element-border-color, + #{colors.$db-adaptive-on-bg-basic-emphasis-100-default} + ); + } + } + } + + @include helpers.active { + color: colors.$db-adaptive-on-bg-basic-emphasis-100-pressed; + + @include get-validity($selector, "valid") { + @include get-validity-color-check-label-color(pressed, "valid"); + } + + @include get-validity($selector, "invalid") { + @include get-validity-color-check-label-color(pressed, "invalid"); + } + } + &:has(input:disabled) { opacity: component.$default-disabled; } From f7a60b270b5f8549f3b03f9653597c9f2972fafc Mon Sep 17 00:00:00 2001 From: michaelmkraus Date: Thu, 17 Apr 2025 12:42:40 +0200 Subject: [PATCH 2/7] test: updated snapshots --- .../DBTag-should-be-a-radio-checked.png | Bin 1396 -> 1438 bytes .../DBTag-should-be-a-radio-checked.png | Bin 1577 -> 1608 bytes .../DBTag-should-be-a-radio-checked.png | Bin 1396 -> 1438 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/__snapshots__/tag/component/chromium/DBTag-should-be-a-radio-checked.png b/__snapshots__/tag/component/chromium/DBTag-should-be-a-radio-checked.png index f440374825dad5a53559b5875d4739843ef53dd1..a60ceae60701a1e9435f77c86b4253920fbecd42 100644 GIT binary patch delta 1406 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 Date: Thu, 17 Apr 2025 14:14:38 +0200 Subject: [PATCH 3/7] refactor: corrected snapshot --- .../__snapshots__/windows/chromium/DBSelect-default-1.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/showcases/screen-reader/__snapshots__/windows/chromium/DBSelect-default-1.txt b/showcases/screen-reader/__snapshots__/windows/chromium/DBSelect-default-1.txt index 1fbca4312ef8..0de3509c1c5a 100644 --- a/showcases/screen-reader/__snapshots__/windows/chromium/DBSelect-default-1.txt +++ b/showcases/screen-reader/__snapshots__/windows/chromium/DBSelect-default-1.txt @@ -1 +1 @@ -["Label, combo box, collapsed, (Default) Regular","expanded","Option 1. list. Option 1, not selected, 1 of 3","Option 2, not selected, 2 of 3"] \ No newline at end of file +["Label, combo box, collapsed, (Default) Regular","expanded. list. list item, 1 of 3","Option 1, not selected, 2 of 3","Option 2, not selected, 3 of 3"] \ No newline at end of file From 24c864a1a788d6037977ca32f538ef8e461b75cc Mon Sep 17 00:00:00 2001 From: Maximilian Franzke Date: Tue, 22 Apr 2025 10:38:58 +0200 Subject: [PATCH 4/7] test: updated that snapshot --- .../__snapshots__/windows/chromium/DBSelect-default-1.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/showcases/screen-reader/__snapshots__/windows/chromium/DBSelect-default-1.txt b/showcases/screen-reader/__snapshots__/windows/chromium/DBSelect-default-1.txt index 0de3509c1c5a..1fbca4312ef8 100644 --- a/showcases/screen-reader/__snapshots__/windows/chromium/DBSelect-default-1.txt +++ b/showcases/screen-reader/__snapshots__/windows/chromium/DBSelect-default-1.txt @@ -1 +1 @@ -["Label, combo box, collapsed, (Default) Regular","expanded. list. list item, 1 of 3","Option 1, not selected, 2 of 3","Option 2, not selected, 3 of 3"] \ No newline at end of file +["Label, combo box, collapsed, (Default) Regular","expanded","Option 1. list. Option 1, not selected, 1 of 3","Option 2, not selected, 2 of 3"] \ No newline at end of file From 701344736996af9c1483b5397575383721f94090 Mon Sep 17 00:00:00 2001 From: Nicolas Merget Date: Tue, 6 May 2025 11:48:45 +0200 Subject: [PATCH 5/7] chore: update styles for radio,checkbox and switch --- .prettierrc.json | 8 +- package-lock.json | 49 +------- package.json | 1 - .../src/components/checkbox/checkbox.scss | 83 ++++++++++-- .../src/components/radio/radio.scss | 46 +++++-- .../src/components/switch/switch.scss | 20 +-- .../src/styles/internal/_form-components.scss | 118 +++--------------- .../foundations/scss/helpers/_functions.scss | 4 +- 8 files changed, 153 insertions(+), 176 deletions(-) diff --git a/.prettierrc.json b/.prettierrc.json index c573b0d62a2d..7f1f6739cc7b 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -7,14 +7,8 @@ "options": { "bracketSameLine": true } - }, - { - "files": [".env"], - "options": { - "parser": "sh" - } } ], "endOfLine": "auto", - "plugins": ["prettier-plugin-sh", "prettier-plugin-pkg"] + "plugins": ["prettier-plugin-pkg"] } diff --git a/package-lock.json b/package-lock.json index 03c8d4e4261f..ed06cb858478 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,6 @@ "postcss-cli": "^11.0.1", "prettier": "^3.5.3", "prettier-plugin-pkg": "0.19.0", - "prettier-plugin-sh": "^0.17.2", "replace-in-file": "^8.3.0", "rimraf": "6.0.1", "rxjs": "~7.8.2", @@ -9584,16 +9583,6 @@ "node": ">= 10" } }, - "node_modules/@reteps/dockerfmt": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@reteps/dockerfmt/-/dockerfmt-0.3.4.tgz", - "integrity": "sha512-IHIyUHVsASQmUheWTmIVxnMdOayvIa4e9XGyt1qpuz6l+dv89H8WXg/jV6PNMX9286O0m2wd3zvmNfgpp7IsCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^v12.20.0 || ^14.13.0 || >=16.0.0" - } - }, "node_modules/@rollup/plugin-alias": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz", @@ -30372,26 +30361,6 @@ "prettier": "^3.0.3" } }, - "node_modules/prettier-plugin-sh": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/prettier-plugin-sh/-/prettier-plugin-sh-0.17.2.tgz", - "integrity": "sha512-7+dEo/IYbhrUj4qP+1QXj41/5Hv9ZkxBuEatI1jywrcAlVF1aGhdYJF4Sn+M67nkA16iRL53W4FSRe1bitTdmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@reteps/dockerfmt": "^0.3.2", - "sh-syntax": "^0.5.6" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - }, - "peerDependencies": { - "prettier": "^3.0.3" - } - }, "node_modules/pretty-bytes": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", @@ -32645,22 +32614,6 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/sh-syntax": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/sh-syntax/-/sh-syntax-0.5.6.tgz", - "integrity": "sha512-hUprXSSgi3HLdIxufSsr0lceThj6vKsgOHcVVGujDGLWg9RD5Mt6j2m642qkTAU/7GFX65ed/g9h2jeURGuTlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/sh-syntax" - } - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -40766,7 +40719,7 @@ }, "showcases/next-showcase": { "dependencies": { - "next": "*", + "next": "latest", "react": "18.3.1", "react-dom": "18.3.1" }, diff --git a/package.json b/package.json index a0f369816991..976cede4819d 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,6 @@ "postcss-cli": "^11.0.1", "prettier": "^3.5.3", "prettier-plugin-pkg": "0.19.0", - "prettier-plugin-sh": "^0.17.2", "replace-in-file": "^8.3.0", "rimraf": "6.0.1", "rxjs": "~7.8.2", diff --git a/packages/components/src/components/checkbox/checkbox.scss b/packages/components/src/components/checkbox/checkbox.scss index 207ae3ee97e7..7f85d64b0b7d 100644 --- a/packages/components/src/components/checkbox/checkbox.scss +++ b/packages/components/src/components/checkbox/checkbox.scss @@ -24,10 +24,75 @@ } } +@mixin get-validity-color-check($key: "valid") { + $variant: successful; + + @if ($key != "valid") { + $variant: critical; + } + + --db-check-element-border-color: var( + --db-#{$variant}-on-bg-basic-emphasis-70-default + ); + --db-adaptive-on-bg-basic-emphasis-100-default: var( + --db-#{$variant}-on-bg-basic-emphasis-80-default + ); + --db-adaptive-on-bg-basic-emphasis-100-hovered: var( + --db-#{$variant}-on-bg-basic-emphasis-80-hovered + ); + --db-adaptive-on-bg-basic-emphasis-100-pressed: var( + --db-#{$variant}-on-bg-basic-emphasis-80-pressed + ); + + @include form-components.get-validity-message($key); + + input { + &:not(:checked) { + --db-adaptive-bg-basic-transparent-default: var( + --db-#{$variant}-bg-basic-transparent-default + ); + --db-adaptive-bg-basic-transparent-hovered: var( + --db-#{$variant}-bg-basic-transparent-hovered + ); + --db-adaptive-bg-basic-transparent-pressed: var( + --db-#{$variant}-bg-basic-transparent-pressed + ); + } + + &:checked { + --db-icon-color: var(--db-#{$variant}-on-bg-inverted-default); + --db-adaptive-bg-basic-transparent-full-default: var( + --db-#{$variant}-bg-inverted-contrast-high-default + ); + --db-adaptive-bg-basic-transparent-hovered: var( + --db-#{$variant}-bg-inverted-contrast-high-hovered + ); + --db-adaptive-bg-basic-transparent-pressed: var( + --db-#{$variant}-bg-inverted-contrast-high-pressed + ); + } + } +} + .db-checkbox { @extend %helper-message; - @include form-components.set-default-check-element(check); + @include form-components.set-default-check-element(); + + &:not(:has(input:disabled)) { + @include form-components.get-state(); + @include form-components.get-state("active"); + } + + @include form-components.get-validity(check) { + &:has(.db-infotext[data-semantic="successful"]) { + @include get-validity-color-check("valid"); + } + } + + @include form-components.get-validity(check, "invalid") { + @include get-validity-color-check("invalid"); + } input { display: flex; @@ -37,17 +102,21 @@ &:checked { --db-check-element-border-color: #{colors.$db-adaptive-on-bg-basic-emphasis-70-default}; + --db-icon-color: var(--db-adaptive-on-bg-inverted-default); + --db-adaptive-bg-basic-transparent-full-default: var( + --db-adaptive-bg-inverted-contrast-max-default + ); + --db-adaptive-bg-basic-transparent-hovered: var( + --db-adaptive-bg-inverted-contrast-max-hovered + ); + --db-adaptive-bg-basic-transparent-pressed: var( + --db-adaptive-bg-inverted-contrast-max-pressed + ); @extend %center-icon; // Check icon @include icons.set-icon("check"); - @include colors.set-current-colors( - colors.$db-adaptive-bg-inverted-contrast-max-default, - colors.$db-adaptive-on-bg-inverted-default, - colors.$db-adaptive-bg-inverted-contrast-max-hovered, - colors.$db-adaptive-bg-inverted-contrast-max-pressed - ); // The icon within the checkbox has the same dimensions as the checkbox itself and that for there can't be any border border-width: 0; diff --git a/packages/components/src/components/radio/radio.scss b/packages/components/src/components/radio/radio.scss index b27d462ab678..2901f7880bb7 100644 --- a/packages/components/src/components/radio/radio.scss +++ b/packages/components/src/components/radio/radio.scss @@ -1,12 +1,49 @@ @use "@db-ux/core-foundations/build/styles/variables"; @use "@db-ux/core-foundations/build/styles/colors"; +@use "@db-ux/core-foundations/build/styles/helpers"; @use "../../styles/internal/form-components"; +@mixin get-radio-validity-colors($variant: "successful") { + --db-check-element-border-color: var( + --db-#{$variant}-on-bg-basic-emphasis-70-default + ); + --db-adaptive-on-bg-basic-emphasis-100-default: var( + --db-#{$variant}-on-bg-basic-emphasis-80-default + ); + --db-adaptive-on-bg-basic-emphasis-100-hovered: var( + --db-#{$variant}-on-bg-basic-emphasis-80-hovered + ); + --db-adaptive-on-bg-basic-emphasis-100-pressed: var( + --db-#{$variant}-on-bg-basic-emphasis-80-pressed + ); + --db-adaptive-bg-basic-transparent-default: var( + --db-#{$variant}-bg-basic-transparent-default + ); + --db-adaptive-bg-basic-transparent-hovered: var( + --db-#{$variant}-bg-basic-transparent-hovered + ); + --db-adaptive-bg-basic-transparent-pressed: var( + --db-#{$variant}-bg-basic-transparent-pressed + ); +} + .db-radio { - @include form-components.set-default-check-element(radio); + @include form-components.set-default-check-element(); + + &:not(:has(input:checked, input:disabled)) { + @include form-components.get-state(); + @include form-components.get-state("active"); + } + + @include form-components.get-validity(radio) { + @include get-radio-validity-colors(); + } + + @include form-components.get-validity(radio, "invalid") { + @include get-radio-validity-colors("critical"); + } input { - border-color: currentcolor; border-radius: variables.$db-border-radius-full; @media screen and (prefers-reduced-motion: no-preference) { @@ -15,11 +52,6 @@ } &:checked { - // The radio element still has the default background for the dot on :hover when in checked state - &:not(:disabled):is(:hover, :focus) { - background-color: colors.$db-adaptive-bg-basic-transparent-full-default; - } - &:not([data-size="small"]) { border-width: calc( ( diff --git a/packages/components/src/components/switch/switch.scss b/packages/components/src/components/switch/switch.scss index 7a56a01ff9d7..9f5cb546d503 100644 --- a/packages/components/src/components/switch/switch.scss +++ b/packages/components/src/components/switch/switch.scss @@ -36,13 +36,14 @@ $checked-active-transition-size: calc( } .db-switch { - @include form-components.set-default-check-element(switch); + @include form-components.set-default-check-element(); user-select: none; - // This is needed when clicking on the label instead of the input - @include helpers.active { - > input { + &:not(:has(input:disabled)) { + @include form-components.get-state(); + + @include form-components.get-state("active") { @extend %active-transition; } } @@ -65,10 +66,11 @@ $checked-active-transition-size: calc( align-items: center; /* stylelint-disable-next-line db-ux/use-spacings */ gap: $switch-fixed-padding; - background-color: colors.$db-adaptive-bg-basic-transparent-full-default; border-radius: variables.$db-border-radius-full; &::after { + --db-icon-color: #{colors.$db-adaptive-on-bg-basic-emphasis-100-default}; + visibility: hidden; align-self: center; aspect-ratio: 1; @@ -81,8 +83,8 @@ $checked-active-transition-size: calc( align-content: center; aspect-ratio: 1; block-size: $switch-inactive-thumb-size; - background-color: colors.$db-adaptive-bg-inverted-contrast-max-default; - color: colors.$db-adaptive-bg-inverted-contrast-max-default; + background-color: colors.$db-adaptive-on-bg-basic-emphasis-100-default; + color: colors.$db-adaptive-on-bg-basic-emphasis-100-default; border-radius: variables.$db-border-radius-full; transform: translateX(var(--thumb-offset-x)); margin-inline-end: calc( @@ -123,6 +125,10 @@ $checked-active-transition-size: calc( border-color: colors.$db-adaptive-on-bg-basic-emphasis-100-pressed; } + &::after { + --db-icon-color: #{colors.$db-adaptive-on-bg-inverted-default}; + } + &::before { block-size: $switch-active-thumb-size; background-color: colors.$db-adaptive-on-bg-inverted-default; diff --git a/packages/components/src/styles/internal/_form-components.scss b/packages/components/src/styles/internal/_form-components.scss index 008204d2c296..86d458cbb56b 100644 --- a/packages/components/src/styles/internal/_form-components.scss +++ b/packages/components/src/styles/internal/_form-components.scss @@ -445,107 +445,38 @@ $input-valid-types: // CHECKBOX & RADIO -@mixin get-validity-color-check($key: "valid") { - $variant: successful; +@mixin get-state($state: "hover") { + $variant: "hovered"; - @if ($key != "valid") { - $variant: critical; + @if ($state != "hover") { + $variant: "pressed"; } - @include get-validity-message($key); - - input:not([role="switch"]) { - --db-adaptive-bg-basic-transparent-semi: var( - --db-#{$variant}-bg-basic-transparent-semi-default - ); - --db-adaptive-bg-basic-transparent-hovered: var( - --db-#{$variant}-bg-basic-transparent-hovered - ); - --db-adaptive-bg-basic-transparent-pressed: var( - --db-#{$variant}-bg-basic-transparent-pressed + &:has(input:#{$state}, > label:#{$state}, :is(label):#{$state}) { + --db-check-element-label-color: var( + --db-adaptive-on-bg-basic-emphasis-100-#{$variant} ); - &:not(:checked), - &:is([type="radio"]) { - --db-check-element-border-color: var( - --db-#{$variant}-on-bg-basic-emphasis-70-default - ); + &:is(label), + > label { + cursor: helpers.$cursor-pointer; } - &:not([type="radio"]):checked { - @include colors.set-current-colors( - colors.$db-successful-bg-inverted-contrast-high-default, - colors.$db-successful-on-bg-inverted-default, - colors.$db-successful-bg-inverted-contrast-high-hovered, - colors.$db-successful-bg-inverted-contrast-high-pressed + input { + cursor: helpers.$cursor-pointer; + background-color: var( + --db-adaptive-bg-basic-transparent-#{$variant} ); - } - } - - &:has(input:not([role="switch"])) { - &:is(label), - > label { - color: var(--db-#{$variant}-on-bg-basic-emphasis-80-default); + @content; } } } -@mixin set-default-check-element($selector) { +@mixin set-default-check-element() { @extend %db-overwrite-font-size-md; @include set-required-label(input); - @include get-validity($selector) { - @if ($selector == check) { - &:has(.db-infotext[data-semantic="successful"]) { - @include get-validity-color-check("valid"); - } - /* stylelint-disable-next-line at-rule-empty-line-before */ - } @else { - @include get-validity-color-check("valid"); - } - } - - @include get-validity($selector, "invalid") { - @include get-validity-color-check("invalid"); - } - - @include helpers.hover { - color: colors.$db-adaptive-on-bg-basic-emphasis-100-hovered; - - @include get-validity($selector, "valid") { - @include get-validity-color-check-label-color(hovered, "valid"); - } - - @include get-validity($selector, "invalid") { - @include get-validity-color-check-label-color(hovered, "invalid"); - } - - @if ($selector == radio) { - input { - /* stylelint-disable-next-line db-ux/use-border-width */ - border: #{$check-border-size} - solid - var( - --db-check-element-border-color, - #{colors.$db-adaptive-on-bg-basic-emphasis-100-default} - ); - } - } - } - - @include helpers.active { - color: colors.$db-adaptive-on-bg-basic-emphasis-100-pressed; - - @include get-validity($selector, "valid") { - @include get-validity-color-check-label-color(pressed, "valid"); - } - - @include get-validity($selector, "invalid") { - @include get-validity-color-check-label-color(pressed, "invalid"); - } - } - &:has(input:disabled) { opacity: component.$default-disabled; } @@ -556,11 +487,10 @@ $input-valid-types: align-items: flex-start; position: relative; gap: variables.$db-spacing-fixed-xs; - - &:not(:has(input:disabled)) { - @include helpers.hover; - @include helpers.active; - } + color: var( + --db-check-element-label-color, + #{colors.$db-adaptive-on-bg-basic-emphasis-100-default} + ); } input { @@ -577,14 +507,6 @@ $input-valid-types: block-size: $font-size-height; inline-size: $font-size-height; padding: 0; - - @include helpers.hover { - background-color: colors.$db-adaptive-bg-basic-transparent-hovered; - } - - @include helpers.active { - background-color: colors.$db-adaptive-bg-basic-transparent-pressed; - } } &[data-size="small"] { diff --git a/packages/foundations/scss/helpers/_functions.scss b/packages/foundations/scss/helpers/_functions.scss index 975a79783035..88042863cf50 100644 --- a/packages/foundations/scss/helpers/_functions.scss +++ b/packages/foundations/scss/helpers/_functions.scss @@ -10,8 +10,10 @@ @return #{$pxValue * 0.0625}em; } +$cursor-pointer: var(--db-overwrite-cursor, pointer); + @mixin cursor-pointer() { - cursor: var(--db-overwrite-cursor, pointer); + cursor: $cursor-pointer; @content; &:is(textarea), From 4e5776554480d74f3829462e39ba82617b44195f Mon Sep 17 00:00:00 2001 From: Maximilian Franzke Date: Tue, 6 May 2025 13:02:54 +0200 Subject: [PATCH 6/7] refactor: reverted unrelated changes --- .prettierrc.json | 8 +++++++- package-lock.json | 47 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/.prettierrc.json b/.prettierrc.json index 7f1f6739cc7b..c573b0d62a2d 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -7,8 +7,14 @@ "options": { "bracketSameLine": true } + }, + { + "files": [".env"], + "options": { + "parser": "sh" + } } ], "endOfLine": "auto", - "plugins": ["prettier-plugin-pkg"] + "plugins": ["prettier-plugin-sh", "prettier-plugin-pkg"] } diff --git a/package-lock.json b/package-lock.json index adfea4189dcc..edc3be924327 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,6 +61,7 @@ "postcss-cli": "^11.0.1", "prettier": "^3.5.3", "prettier-plugin-pkg": "0.19.0", + "prettier-plugin-sh": "^0.17.2", "replace-in-file": "^8.3.0", "rimraf": "6.0.1", "rxjs": "~7.8.2", @@ -9663,6 +9664,16 @@ "node": ">= 10" } }, + "node_modules/@reteps/dockerfmt": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@reteps/dockerfmt/-/dockerfmt-0.3.6.tgz", + "integrity": "sha512-Tb5wIMvBf/nLejTQ61krK644/CEMB/cpiaIFXqGApfGqO3GwcR3qnI0DbmkFVCl2OyEp8LnLX3EkucoL0+tbFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^v12.20.0 || ^14.13.0 || >=16.0.0" + } + }, "node_modules/@rollup/plugin-alias": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz", @@ -30402,6 +30413,26 @@ "prettier": "^3.0.3" } }, + "node_modules/prettier-plugin-sh": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/prettier-plugin-sh/-/prettier-plugin-sh-0.17.2.tgz", + "integrity": "sha512-7+dEo/IYbhrUj4qP+1QXj41/5Hv9ZkxBuEatI1jywrcAlVF1aGhdYJF4Sn+M67nkA16iRL53W4FSRe1bitTdmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@reteps/dockerfmt": "^0.3.2", + "sh-syntax": "^0.5.6" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + }, + "peerDependencies": { + "prettier": "^3.0.3" + } + }, "node_modules/pretty-bytes": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", @@ -32655,6 +32686,22 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/sh-syntax": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/sh-syntax/-/sh-syntax-0.5.7.tgz", + "integrity": "sha512-74m9dt91konrF5+m0kASugzi37VxKsnTJQ6yvdDZu3IijG5/vIZpImP6FadsJLWNt2X2YD0VaTwW5W7Ox7mFVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/sh-syntax" + } + }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", diff --git a/package.json b/package.json index d3ce17c1f0b2..ffa9efb27791 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "postcss-cli": "^11.0.1", "prettier": "^3.5.3", "prettier-plugin-pkg": "0.19.0", + "prettier-plugin-sh": "^0.17.2", "replace-in-file": "^8.3.0", "rimraf": "6.0.1", "rxjs": "~7.8.2", From b319459c0a45db944705af0060f9836333a842bd Mon Sep 17 00:00:00 2001 From: Nicolas Merget Date: Tue, 6 May 2025 13:03:25 +0200 Subject: [PATCH 7/7] chore: update snapshots --- .../DBTag-should-be-a-radio-checked.png | Bin 1438 -> 1396 bytes .../DBTag-should-be-a-radio-checked.png | Bin 1608 -> 1577 bytes .../DBTag-should-be-a-radio-checked.png | Bin 1438 -> 1396 bytes .../src/components/switch/switch.scss | 8 ++++++++ 4 files changed, 8 insertions(+) diff --git a/__snapshots__/tag/component/chromium/DBTag-should-be-a-radio-checked.png b/__snapshots__/tag/component/chromium/DBTag-should-be-a-radio-checked.png index a60ceae60701a1e9435f77c86b4253920fbecd42..f440374825dad5a53559b5875d4739843ef53dd1 100644 GIT binary patch delta 1364 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