From 1b097eb721de40e4dd9058d732afd2da6a94eadc Mon Sep 17 00:00:00 2001 From: Abel Toledano Date: Thu, 8 May 2025 16:46:28 +0200 Subject: [PATCH 1/2] WEB-2190 feat(mistica-css): switch --- css/mistica-common.css | 87 ++++++++++++++++++ examples/css/index.html | 196 +++++++++++++++++++++++++++++++--------- 2 files changed, 241 insertions(+), 42 deletions(-) diff --git a/css/mistica-common.css b/css/mistica-common.css index 592e7ae77b..1c77982d72 100644 --- a/css/mistica-common.css +++ b/css/mistica-common.css @@ -921,6 +921,10 @@ button.mistica-display-card:has(.mistica-card__media):active:after { transition: background-color 0.1s ease-in-out; } +.mistica-accordion-item__summary::-webkit-details-marker { + display: none; +} + .mistica-accordion-item__summary-body { display: flex; flex-direction: column; @@ -1164,3 +1168,86 @@ button.mistica-display-card:has(.mistica-card__media):active:after { margin-top: 24px; } } + +/* Switch */ +.mistica-switch { + --switch-border-width: 2px; + --switch-transition: 300ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + appearance: none; + position: relative; + width: 52px; + height: 32px; + border-radius: 16px; + background-color: var(--mistica-color-backgroundContainerAlternative); + border: var(--switch-border-width) solid var(--mistica-color-control); + padding: 0; + margin: 0; + box-sizing: border-box; + cursor: pointer; + transition: + background-color var(--switch-transition), + border-color var(--switch-transition); +} + +.mistica-switch:after { + content: ''; + position: absolute; + top: calc(8px - var(--switch-border-width)); + left: calc(8px - var(--switch-border-width)); + width: 16px; + height: 16px; + border-radius: 50%; + background-color: var(--mistica-color-control); + transition: + transform var(--switch-transition), + background-color var(--switch-transition); +} + +.mistica-switch:hover:after { + background-color: var(--mistica-color-neutralMedium); +} + +.mistica-switch:checked { + background-color: var(--mistica-color-controlActivated); + border-color: var(--mistica-color-controlActivated); +} +.mistica-switch:checked:after { + background-color: var(--mistica-color-backgroundContainer); + transform: translateX(20px) scale(1.5); +} + +.mistica-switch:checked:hover:after { + background-color: var(--mistica-color-backgroundContainerAlternative); +} + +.mistica-switch:active:after { + transform: scale(1.75); +} +.mistica-switch:checked:active:after { + transform: translateX(20px) scale(1.75); +} + +.mistica-switch:before { + content: ''; + position: absolute; + top: calc(-8px + var(--switch-border-width)); + left: calc(-8px + var(--switch-border-width)); + width: 40px; + height: 40px; + opacity: 0; + border-radius: 50%; + background-color: var(--mistica-color-neutralMedium); + transition: + transform var(--switch-transition), + background-color var(--switch-transition), + opacity var(--switch-transition); +} + +.mistica-switch:hover:before { + opacity: 0.1; +} + +.mistica-switch:checked:before { + background-color: var(--mistica-color-controlActivated); + transform: translateX(20px); +} diff --git a/examples/css/index.html b/examples/css/index.html index a4cb3031b3..9bfe20bcbd 100644 --- a/examples/css/index.html +++ b/examples/css/index.html @@ -83,6 +83,9 @@

Tag

Error
+

Switch

+ +

Table

Column headings

@@ -438,11 +441,25 @@

Cards

MediaCard / DataCard / SnapCard

-
+
- + + +
Headline
@@ -468,8 +485,13 @@

Title

-
- +
+
Headline

Pretitle

@@ -495,7 +517,7 @@

Title

- +

Title

Subtitle

@@ -646,106 +668,196 @@

Title

-

Grid Layout

+

Grid Layout

6 + 6

-
+
-
+
- +
-
+
- +
-
+

5 + 4

-
-
+
+
-
+
- +
-
+
- +
-
-
+
+

4 + 6

-
-
+
+
-
+
-
+
-
-
+
+

8 + 4

-
+
-
+
- +
-
+
-
+

3 + 9

-
+
-
+
- +
-
+
- +
-
+
- + - - + + From 2226542dae3f962dfc97d1735ab11511286ad2c2 Mon Sep 17 00:00:00 2001 From: Abel Toledano Date: Mon, 19 May 2025 12:00:17 +0200 Subject: [PATCH 2/2] change colors --- css/mistica-common.css | 45 ++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/css/mistica-common.css b/css/mistica-common.css index 1fcb593ba9..68fd83a804 100644 --- a/css/mistica-common.css +++ b/css/mistica-common.css @@ -43,6 +43,10 @@ --vcolor-controlActivated: var(--mistica-color-controlActivatedInverse); --vcolor-checkbox-tick: var(--mistica-color-controlKnobInverse); --vcolor-checkbox-background: transparent; + + --vcolor-switch-trackBackground: transparent; + --vcolor-switch-handleChecked: var(--mistica-color-controlKnobInverse); + --vcolor-switch-handleHover: var(--mistica-color-inverse); } [data-mistica-skin] > *, @@ -92,6 +96,10 @@ --vcolor-controlActivated: var(--mistica-color-controlActivated); --vcolor-checkbox-tick: var(--mistica-color-inverse); --vcolor-checkbox-background: var(--mistica-color-background); + + --vcolor-switch-trackBackground: var(--mistica-color-backgroundAlternative); + --vcolor-switch-handleChecked: var(--mistica-color-inverse); + --vcolor-switch-handleHover: var(--mistica-color-neutralHigh); } @media (prefers-color-scheme: dark) { @@ -1213,8 +1221,8 @@ button.mistica-display-card:has(.mistica-card__media):active:after { width: 52px; height: 32px; border-radius: 16px; - background-color: var(--mistica-color-backgroundContainerAlternative); - border: var(--switch-border-width) solid var(--mistica-color-control); + background-color: var(--vcolor-switch-trackBackground); + border: var(--switch-border-width) solid var(--vcolor-control); padding: 0; margin: 0; box-sizing: border-box; @@ -1224,6 +1232,7 @@ button.mistica-display-card:has(.mistica-card__media):active:after { border-color var(--switch-transition); } +/* :after is the switch handle (bolita) */ .mistica-switch:after { content: ''; position: absolute; @@ -1232,29 +1241,25 @@ button.mistica-display-card:has(.mistica-card__media):active:after { width: 16px; height: 16px; border-radius: 50%; - background-color: var(--mistica-color-control); + background-color: var(--vcolor-control); transition: transform var(--switch-transition), background-color var(--switch-transition); } .mistica-switch:hover:after { - background-color: var(--mistica-color-neutralMedium); + background-color: var(--vcolor-switch-handleHover); } .mistica-switch:checked { - background-color: var(--mistica-color-controlActivated); - border-color: var(--mistica-color-controlActivated); + background-color: var(--vcolor-controlActivated); + border-color: var(--vcolor-controlActivated); } .mistica-switch:checked:after { - background-color: var(--mistica-color-backgroundContainer); + background-color: var(--vcolor-switch-handleChecked); transform: translateX(20px) scale(1.5); } -.mistica-switch:checked:hover:after { - background-color: var(--mistica-color-backgroundContainerAlternative); -} - .mistica-switch:active:after { transform: scale(1.75); } @@ -1262,6 +1267,7 @@ button.mistica-display-card:has(.mistica-card__media):active:after { transform: translateX(20px) scale(1.75); } +/* :before is the ripple effect overlay on hover */ .mistica-switch:before { content: ''; position: absolute; @@ -1269,22 +1275,23 @@ button.mistica-display-card:has(.mistica-card__media):active:after { left: calc(-8px + var(--switch-border-width)); width: 40px; height: 40px; - opacity: 0; border-radius: 50%; - background-color: var(--mistica-color-neutralMedium); + background-color: transparent; transition: transform var(--switch-transition), - background-color var(--switch-transition), - opacity var(--switch-transition); + background-color var(--switch-transition); +} + +.mistica-switch:checked:before { + transform: translateX(20px); } .mistica-switch:hover:before { - opacity: 0.1; + background-color: var(--mistica-color-backgroundContainerHover); } -.mistica-switch:checked:before { - background-color: var(--mistica-color-controlActivated); - transform: translateX(20px); +.mistica-switch:active:before { + background-color: var(--mistica-color-backgroundContainerPressed); } /* Checkbox */