Skip to content

Commit 82d80a3

Browse files
authored
fix(splitter): handle focus while resize trigger is hovered (#3226)
2 parents 90742c9 + 6d457de commit 82d80a3

3 files changed

Lines changed: 34 additions & 0 deletions

File tree

.changeset/splitter-hover-focus.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@zag-js/splitter": patch
3+
---
4+
5+
Fix keyboard resizing when a resize trigger receives focus while hovered.

e2e/splitter.e2e.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,27 @@ test.describe("splitter", () => {
2828
expect(page.locator(part("resize-trigger")).nth(1)).toHaveAttribute("aria-valuenow", "36")
2929
})
3030

31+
test("should resize with keyboard when focused after hover", async ({ page }) => {
32+
const trigger = page.locator(part("resize-trigger")).first()
33+
34+
await page.locator("main").evaluate((main) => {
35+
const button = document.createElement("button")
36+
button.textContent = "Before splitter"
37+
main.prepend(button)
38+
button.focus()
39+
})
40+
41+
await trigger.hover()
42+
await page.keyboard.press("Tab")
43+
44+
await expect(trigger).toBeFocused()
45+
const value = Number(await trigger.getAttribute("aria-valuenow"))
46+
47+
await page.keyboard.press("ArrowRight")
48+
49+
await expect(trigger).toHaveAttribute("aria-valuenow", String(value + 1))
50+
})
51+
3152
test("should decrease panel when arrow left pressed", async ({ page }) => {
3253
await page.click("main")
3354

packages/machines/splitter/src/splitter.machine.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,10 @@ export const machine = createMachine<SplitterSchema>({
155155
HOVER_DELAY: {
156156
target: "hover",
157157
},
158+
FOCUS: {
159+
target: "focused",
160+
actions: ["setKeyboardState"],
161+
},
158162
POINTER_DOWN: {
159163
target: "dragging",
160164
actions: ["setDraggingState"],
@@ -168,6 +172,10 @@ export const machine = createMachine<SplitterSchema>({
168172
hover: {
169173
tags: ["focus"],
170174
on: {
175+
FOCUS: {
176+
target: "focused",
177+
actions: ["setKeyboardState"],
178+
},
171179
POINTER_DOWN: {
172180
target: "dragging",
173181
actions: ["setDraggingState"],

0 commit comments

Comments
 (0)