Skip to content

Commit 9466701

Browse files
authored
[mercury][switch][button] Fix focus outline color on button-secondary (updated to primary) and add focus-visible styles to switch. (#626)
* `[mercury][general]` Create a new focus-outline mixin for primary border color * `[mercury][button]` Fix secondary button focus outline color * `[mercury][switch]` Apply focus outline style * Update yarn.lock * `[mercury][tests]` Update bundles tests
1 parent b540641 commit 9466701

File tree

15 files changed

+1910
-1342
lines changed

15 files changed

+1910
-1342
lines changed

packages/mercury/src/base/_common.scss

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,18 @@
1111
// ----------------------
1212
// Focus
1313
// ----------------------
14-
@mixin focus-outline() {
14+
%focus-outline-base {
1515
outline: var(--focus__outline-width) var(--focus__outline-style)
1616
var(--focus__outline-color);
1717
outline-offset: var(--focus__outline-offset);
1818
}
19+
@mixin focus-outline() {
20+
@extend %focus-outline-base;
21+
}
22+
@mixin focus-outline-primary() {
23+
@extend %focus-outline-base;
24+
--focus__outline-color: var(--mer-border-color__primary);
25+
}
1926
@mixin focus-border() {
2027
border-color: var(--borders-un-border-color__focused);
2128
}

packages/mercury/src/base/button/_button-styles.scss

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
&--focus-visible {
1616
@include focus-outline();
1717
}
18+
&--focus-visible-primary {
19+
@include focus-outline-primary();
20+
}
1821
}
1922

2023
%button-primary {
@@ -361,7 +364,7 @@
361364
@extend %button-secondary;
362365

363366
&:focus-visible {
364-
@extend %button-base--focus-visible;
367+
@extend %button-base--focus-visible-primary;
365368
}
366369

367370
&:hover {

packages/mercury/src/components/switch/_switch-styles.scss

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
@use "../../base/common" as *;
12
@use "../../base/typography" as *;
23

34
%switch-basic {
@@ -34,6 +35,11 @@
3435
// Font weight shouldn't change, since it causes a subtle inline-size shift, moving surrounding elements.
3536
}
3637
}
38+
39+
&--focus-visible {
40+
@include focus-outline();
41+
--focus__outline-offset: 1px;
42+
}
3743
}
3844

3945
%switch-small {
@@ -74,6 +80,7 @@
7480
$switch-selector: ".switch-small",
7581
$track-selector: ".switch-small::part(track)",
7682
$track--disabled-selector: ".switch-small::part(track disabled)",
83+
$thumb-selector: ".switch-small::part(thumb)",
7784
$thumb--unchecked-selector: ".switch-small::part(thumb unchecked)",
7885
$thumb--checked-selector: ".switch-small::part(thumb checked)",
7986
$caption--checked-selector: ".switch-small::part(caption checked)",
@@ -94,6 +101,12 @@
94101
}
95102
}
96103

104+
#{$thumb-selector} {
105+
&:focus-visible {
106+
@extend %switch-basic--focus-visible;
107+
}
108+
}
109+
97110
#{$thumb--unchecked-selector} {
98111
@extend %switch-small__thumb--unchecked;
99112
}
@@ -111,6 +124,7 @@
111124
$switch-selector: ".switch-large",
112125
$track-selector: ".switch-large::part(track)",
113126
$track--disabled-selector: ".switch-large::part(track disabled)",
127+
$thumb-selector: ".switch-small::part(thumb)",
114128
$thumb--unchecked-selector: ".switch-large::part(thumb unchecked)",
115129
$thumb--checked-selector: ".switch-large::part(thumb checked)",
116130
$caption--checked-selector: ".switch-large::part(caption checked)",
@@ -131,6 +145,12 @@
131145
}
132146
}
133147

148+
#{$thumb-selector} {
149+
&:focus-visible {
150+
@extend %switch-basic--focus-visible;
151+
}
152+
}
153+
134154
#{$thumb--unchecked-selector} {
135155
@extend %switch-large__thumb--unchecked;
136156
}

packages/mercury/src/tests/bundles/expected-bundle-content/all.json

Lines changed: 5 additions & 16 deletions
Large diffs are not rendered by default.

packages/mercury/src/tests/bundles/expected-bundle-content/components/button.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
".button-primary-success:hover { --button-background-color: var(--accent-success-hover); --button-color: var(--mer-text__on-primary); }",
1414
".button-primary:active { --button-background-color: var(--mer-accent__primary--active); --button-color: var(--button-color--active); }",
1515
".button-primary:disabled, .button-primary-destructive:disabled, .button-primary-success:disabled { --button-background-color: var(--mer-accent__primary--disabled); --button-color: var(--mer-text__on-disabled); }",
16-
".button-primary:focus-visible, .button-primary-destructive:focus-visible, .button-primary-success:focus-visible, .button-secondary:focus-visible, .button-secondary-destructive:focus-visible, .button-tertiary:focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
16+
".button-primary:focus-visible, .button-primary-destructive:focus-visible, .button-primary-success:focus-visible, .button-secondary-destructive:focus-visible, .button-tertiary:focus-visible, .button-secondary:focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
1717
".button-primary:hover { --button-background-color: var(--mer-accent__primary--hover); --button-color: var(--mer-text__on-primary); }",
1818
".button-secondary, .button-secondary-destructive { --button-background-color: transparent; --control__border-color: var(--button-color); --button-color: var(--mer-text__neutral); --button-color--enabled: var(--mer-text__neutral); --button-color--active: var(--mer-text__on-primary--active); }",
1919
".button-secondary-destructive { --button-color: var(--mer-text__highlighted); --control__border-color: var(--mer-border-color__error); }",
2020
".button-secondary-destructive:active { --button-color: var(--mer-text__highlighted); --control__border-color: var(--mer-border-color__error--active); }",
2121
".button-secondary-destructive:hover { --button-color: var(--mer-accent__primary--destructive-hover); --control__border-color: var(--mer-border-color__error--hover); }",
2222
".button-secondary:active { --control__border-color: var(--mer-border-color__primary--active); --button-color: var(--button-color--active); }",
2323
".button-secondary:disabled, .button-secondary-destructive:disabled { --button-color: var(--mer-text__on-disabled); }",
24+
".button-secondary:focus-visible { --focus__outline-color: var(--mer-border-color__primary); }",
2425
".button-secondary:hover { --button-color: var(--mer-text__primary--hover); }",
2526
".button-tertiary { --button-background-color: transparent; --control__border-color: transparent; --button-color: var(--mer-text__primary); }",
2627
".button-tertiary { font-size: var(--font-size-body-m); line-height: var(--line-height-tight); font-weight: var(--font-weight-regular); }",

packages/mercury/src/tests/bundles/expected-bundle-content/components/chat.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
".chat::part(send-button):active, .chat::part(stop-generating-answer-button):active { --control__border-color: var(--mer-border-color__primary--active); --button-color: var(--button-color--active); }",
4040
".chat::part(send-button):disabled, .chat::part(stop-generating-answer-button):disabled { --button-color: var(--mer-text__on-disabled); }",
4141
".chat::part(send-button):focus { --icon-path: var(--icon__system_send_neutral--enabled); }",
42-
".chat::part(send-button):focus-visible, .chat::part(stop-generating-answer-button):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
42+
".chat::part(send-button):focus-visible, .chat::part(stop-generating-answer-button):focus-visible { --focus__outline-color: var(--mer-border-color__primary); }",
4343
".chat::part(send-button):hover { --icon-path: var(--icon__system_send_neutral--active); }",
4444
".chat::part(send-button):hover, .chat::part(stop-generating-answer-button):hover { --button-color: var(--mer-text__primary--hover); }",
4545
".chat::part(send-container) { background-color: var(--mer-surface__elevation--02); border-radius: 4px; gap: var(--mer-spacing--xs); margin: var(--mer-spacing--md); padding: 10px; }",
@@ -49,11 +49,11 @@
4949
".chat::part(send-input), .chat::part(send-button), .chat::part(stop-generating-answer-button) { font-size: var(--font-size-body-m); }",
5050
".chat::part(send-input), .chat::part(send-button), .chat::part(stop-generating-answer-button) { line-height: var(--line-height-tight); }",
5151
".chat::part(send-input):focus { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
52-
".chat::part(send-input):focus { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
52+
".chat::part(send-input):focus, .chat::part(send-button):focus-visible, .chat::part(stop-generating-answer-button):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
5353
".chat::part(send-input):hover { --control__border-color: var(--control__border-color--hover); }",
5454
".chat::part(send-input):hover { --control__border-color: var(--control__border-color--hover); }",
5555
".chat::part(stop-generating-answer-button) { --icon-path: var(--icon__system_cancel-circle_neutral--enabled); transform: translateX(calc(100% + var(--mer-spacing--xs))) translateY(2px); inset-inline-end: 0px; background-color: var(--mer-surface__elevation--02); font-size: 0px !important; }",
5656
".chat::part(stop-generating-answer-button):focus { --icon-path: var(--icon__system_cancel-circle_neutral--enabled); }",
5757
".chat::part(stop-generating-answer-button):hover { --icon-path: var(--icon__system_cancel-circle_neutral--active); }",
5858
"@keyframes spin { \n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}"
59-
]
59+
]

packages/mercury/src/tests/bundles/expected-bundle-content/components/dropdown.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
".dropdown.button-primary::part(expandable-button), .dropdown.button-secondary::part(expandable-button) { font-weight: var(--font-weight-semi-bold); }",
77
".dropdown.button-primary::part(expandable-button):active { --button-background-color: var(--mer-accent__primary--active); --button-color: var(--button-color--active); }",
88
".dropdown.button-primary::part(expandable-button):disabled { --button-background-color: var(--mer-accent__primary--disabled); --button-color: var(--mer-text__on-disabled); }",
9-
".dropdown.button-primary::part(expandable-button):focus-visible, .dropdown.button-secondary::part(expandable-button):focus-visible, .dropdown.button-tertiary::part(expandable-button):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
109
".dropdown.button-primary::part(expandable-button):hover { --button-background-color: var(--mer-accent__primary--hover); --button-color: var(--mer-text__on-primary); }",
1110
".dropdown.button-secondary::part(expandable-button) { --button-background-color: transparent; --control__border-color: var(--button-color); --button-color: var(--mer-text__neutral); --button-color--enabled: var(--mer-text__neutral); --button-color--active: var(--mer-text__on-primary--active); }",
1211
".dropdown.button-secondary::part(expandable-button):active { --control__border-color: var(--mer-border-color__primary--active); --button-color: var(--button-color--active); }",
1312
".dropdown.button-secondary::part(expandable-button):disabled { --button-color: var(--mer-text__on-disabled); }",
13+
".dropdown.button-secondary::part(expandable-button):focus-visible { --focus__outline-color: var(--mer-border-color__primary); }",
1414
".dropdown.button-secondary::part(expandable-button):hover { --button-color: var(--mer-text__primary--hover); }",
1515
".dropdown.button-tertiary::part(expandable-button) { --button-background-color: transparent; --control__border-color: transparent; --button-color: var(--mer-text__primary); }",
1616
".dropdown.button-tertiary::part(expandable-button) { font-size: var(--font-size-body-m); line-height: var(--line-height-tight); font-weight: var(--font-weight-regular); }",
@@ -28,9 +28,8 @@
2828
".dropdown::part(action), .dropdown.button-primary::part(expandable-button), .dropdown.button-secondary::part(expandable-button) { font-size: var(--font-size-body-m); }",
2929
".dropdown::part(action), .dropdown.button-primary::part(expandable-button), .dropdown.button-secondary::part(expandable-button) { line-height: var(--line-height-tight); }",
3030
".dropdown::part(action):active { --item__bg-color: var(--item__bg-color--selected); --item__border-color: var(--item__border-color--selected); --item__color: var(--item__color--selected); }",
31-
".dropdown::part(action):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
3231
".dropdown::part(action):hover { --item__bg-color: var(--item__bg-color--hover); --item__border-color: var(--item__border-color--hover); --item__color: var(--item__color--hover); }",
33-
".dropdown::part(expandable-button):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
32+
".dropdown::part(expandable-button):focus-visible, .dropdown::part(action):focus-visible, .dropdown.button-primary::part(expandable-button):focus-visible, .dropdown.button-tertiary::part(expandable-button):focus-visible, .dropdown.button-secondary::part(expandable-button):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
3433
".dropdown::part(window) { background-color: var(--elevation-background-color, var(--items-container__bg-color)); border-color: var(--elevation-border-color, var(--items-container__border-color)); padding-block: var(--items-container__padding-block); padding-inline: var(--items-container__padding-inline); border-style: var(--items-container__border-style); border-width: var(--items-container__border-width); box-shadow: var(--items-container__box-shadow); border-radius: var(--items-container__border-radius); gap: var(--items-container__gap); }",
3534
"@keyframes spin { \n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}"
36-
]
35+
]

packages/mercury/src/tests/bundles/expected-bundle-content/components/flexible-layout.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
".flexible-layout { --flexible-layout--tab-list-block__background-color: var( --mer-surface__elevation--01 ); --flexible-layout--tab-list-inline__background-color: var( --mer-surface__elevation--02 ); --flexible-layout--tab-list-inline__inline-size: 48px; --flexible-layout--tab-button-block-start__background-color: var( --flexible-layout--tab-list-block__background-color ); --flexible-layout--tab-button-block-end__background-color: var( --flexible-layout--tab-list-block__background-color ); --flexible-layout--tab-button-inline-start__background-color: var( --flexible-layout--tab-list-inline__background-color ); --flexible-layout--tab-button-inline-end__background-color: var( --flexible-layout--tab-list-inline__background-color ); --flexible-layout--tab-button-block-start__background-color--selected: var( --mer-surface ); --flexible-layout--tab-button-block-end__background-color--selected: var( --mer-surface ); }",
33
".flexible-layout::part(bar) { color: var(--mer-border-color__on-surface); }",
44
".flexible-layout::part(close-button) { padding: var(--mer-spacing--2xs); border-radius: 4px; margin-inline-start: calc(1px - var(--mer-spacing--2xs)); }",
5-
".flexible-layout::part(close-button):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
5+
".flexible-layout::part(close-button):focus-visible, .flexible-layout::part(tab block-start):focus-visible, .flexible-layout::part(tab block-end):focus-visible, .flexible-layout::part(tab inline-start):focus-visible, .flexible-layout::part(tab inline-end):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
66
".flexible-layout::part(close-button):hover { background-color: var(--mer-color__tinted-primary--20); }",
77
".flexible-layout::part(droppable-area) { background-color: color-mix(in srgb, var(--mer-accent__primary) 25%, transparent); }",
88
".flexible-layout::part(leaf) { --ch-tab-close-button__background-image-size: var(--mer-icon__size--md); --ch-tab-close-button__image-size: var(--mer-spacing--md); --ch-tab-button__image-size: var(--mer-icon__box--md); --spacing-body-block-start: var(--mer-spacing--md); --spacing-body-block-end: var(--mer-spacing--md); --spacing-body-inline-start: var(--mer-spacing--md); --spacing-body-inline-end: var(--mer-spacing--md); }",
@@ -22,7 +22,6 @@
2222
".flexible-layout::part(tab block-start selected)::before, .flexible-layout::part(tab block-end selected)::before { color: var(--mer-accent__primary); }",
2323
".flexible-layout::part(tab block-start) { background-color: var(--flexible-layout--tab-button-block-start__background-color); }",
2424
".flexible-layout::part(tab block-start):active { --tab-caption__bg-color: var(--tab-caption__bg-color--hover); }",
25-
".flexible-layout::part(tab block-start):focus-visible, .flexible-layout::part(tab block-end):focus-visible, .flexible-layout::part(tab inline-start):focus-visible, .flexible-layout::part(tab inline-end):focus-visible { outline: var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color); outline-offset: var(--focus__outline-offset); }",
2625
".flexible-layout::part(tab block-start):hover { --tab-caption__bg-color: var(--tab-caption__bg-color--hover); }",
2726
".flexible-layout::part(tab inline-end selected) { border-inline-end-color: var(--mer-accent__primary); color: var(--mer-accent__primary); }",
2827
".flexible-layout::part(tab inline-end) { background-color: var(--flexible-layout--tab-button-inline-end__background-color); inline-size: var(--flexible-layout--tab-list-inline__inline-size); }",
@@ -36,4 +35,4 @@
3635
".flexible-layout::part(tab-list block) { background-color: var(--flexible-layout--tab-list-block__background-color); overflow: auto; }",
3736
".flexible-layout::part(tab-list inline) { background-color: var(--flexible-layout--tab-list-inline__background-color); inline-size: var(--flexible-layout--tab-list-inline__inline-size); gap: 4px; }",
3837
"@keyframes spin { \n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}"
39-
]
38+
]

0 commit comments

Comments
 (0)