Skip to content

Commit 71dbcb0

Browse files
committed
šŸ› Fix issue where switching tabs would transition colors on browser buttons
1 parent 81f2caa commit 71dbcb0

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

ā€Žcomponents/widgets/content/browser-button.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44

55
.browser-button {
66
--button-disabled-opacity: 0.65;
7+
8+
transition: none;
9+
}
10+
11+
.browser-button:is(:hover, :active, :focus, :focus-visible, [was-hover], [was-focus]) {
12+
transition: var(--button-transition);
713
}
814

915
.browser-button:disabled {

ā€Žcomponents/widgets/content/browser-button.js

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,37 @@ class BrowserButton extends BrowserContextualMixin(HTMLButtonElement) {
141141
this.setAttribute("mode", newMode);
142142
}
143143

144+
/**
145+
* Toggles a transitioning psuedo class on the button
146+
* @param {string} name
147+
*/
148+
_toggleTransitionPsuedoClass(name) {
149+
this.toggleAttribute(`was-${name}`, true);
150+
151+
this.addEventListener(
152+
"transitionend",
153+
() => {
154+
this.removeAttribute(`was-${name}`);
155+
},
156+
{ once: true }
157+
);
158+
}
159+
160+
/**
161+
* Handles internal browser button events
162+
* @param {Event} event
163+
*/
164+
_handleBrowserButtonEvent(event) {
165+
switch (event.type) {
166+
case "mouseleave":
167+
this._toggleTransitionPsuedoClass("hover");
168+
break;
169+
case "focusout":
170+
this._toggleTransitionPsuedoClass("focus");
171+
break;
172+
}
173+
}
174+
144175
connectedCallback() {
145176
this.classList.add("browser-button");
146177
this.classList.toggle(
@@ -156,9 +187,27 @@ class BrowserButton extends BrowserContextualMixin(HTMLButtonElement) {
156187
this.elements.label
157188
)
158189
);
190+
191+
this.addEventListener(
192+
"mouseleave",
193+
this._handleBrowserButtonEvent.bind(this)
194+
);
195+
this.addEventListener(
196+
"focusout",
197+
this._handleBrowserButtonEvent.bind(this)
198+
);
159199
}
160200

161-
disconnectedCallback() {}
201+
disconnectedCallback() {
202+
this.removeEventListener(
203+
"mouseleave",
204+
this._handleBrowserButtonEvent.bind(this)
205+
);
206+
this.removeEventListener(
207+
"focusout",
208+
this._handleBrowserButtonEvent.bind(this)
209+
);
210+
}
162211
}
163212

164213
customElements.define("browser-button", BrowserButton);

0 commit comments

Comments
Ā (0)