From 7faa2f5a69e5c4311ee2b06952a7851f97d52ed5 Mon Sep 17 00:00:00 2001 From: Matthew Lipski Date: Tue, 20 Oct 2026 20:02:09 +0200 Subject: [PATCH 1/2] Made file panel input/upload button autofocus --- packages/ariakit/src/panel/PanelFileInput.tsx | 17 +++++++-- packages/ariakit/src/panel/PanelTextInput.tsx | 17 +++++++-- packages/mantine/src/panel/PanelFileInput.tsx | 17 +++++++-- packages/mantine/src/panel/PanelTextInput.tsx | 17 +++++++-- .../FilePanel/DefaultTabs/EmbedTab.tsx | 1 + .../FilePanel/DefaultTabs/UploadTab.tsx | 1 + .../FilePanel/FilePanelController.tsx | 9 ++++- .../FilePanel/a11y/FilePanel.a11y.test.ts | 36 ++++++++++++++++++ .../visual/focus-embed-url-chromium-linux.png | Bin 0 -> 4240 bytes .../focus-upload-button-chromium-linux.png | Bin 0 -> 3887 bytes .../react/src/editor/ComponentsContext.tsx | 2 + packages/shadcn/src/panel/PanelFileInput.tsx | 17 +++++++-- packages/shadcn/src/panel/PanelTextInput.tsx | 17 +++++++-- tests/a11y/helpers.tsx | 14 +++++-- 14 files changed, 142 insertions(+), 23 deletions(-) create mode 100644 packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts create mode 100644 packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-embed-url-chromium-linux.png create mode 100644 packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-upload-button-chromium-linux.png diff --git a/packages/ariakit/src/panel/PanelFileInput.tsx b/packages/ariakit/src/panel/PanelFileInput.tsx index 12aef33147..29bc9560c5 100644 --- a/packages/ariakit/src/panel/PanelFileInput.tsx +++ b/packages/ariakit/src/panel/PanelFileInput.tsx @@ -4,22 +4,33 @@ import { } from "@ariakit/react"; import { assertEmpty } from "@blocknote/core"; -import { ComponentProps } from "@blocknote/react"; +import { ComponentProps, useAutoFocus, useMergeRefs } from "@blocknote/react"; import { forwardRef, type ChangeEvent } from "react"; export const PanelFileInput = forwardRef< HTMLInputElement, ComponentProps["FilePanel"]["FileInput"] >((props, ref) => { - const { className, accept, value, placeholder, onChange, ...rest } = props; + const { + autoFocus, + className, + accept, + value, + placeholder, + onChange, + ...rest + } = props; assertEmpty(rest); + const inputRef = useAutoFocus(autoFocus); + const mergedRef = useMergeRefs([ref, inputRef]); + return ( ((props, ref) => { - const { className, value, placeholder, onKeyDown, onChange, ...rest } = props; + const { + autoFocus, + className, + value, + placeholder, + onKeyDown, + onChange, + ...rest + } = props; assertEmpty(rest); + const inputRef = useAutoFocus(autoFocus); + const mergedRef = useMergeRefs([ref, inputRef]); + return ( ); diff --git a/packages/mantine/src/panel/PanelFileInput.tsx b/packages/mantine/src/panel/PanelFileInput.tsx index ed2efe8eb1..a1e5ae9ba2 100644 --- a/packages/mantine/src/panel/PanelFileInput.tsx +++ b/packages/mantine/src/panel/PanelFileInput.tsx @@ -1,22 +1,33 @@ import { FileInput as MantineFileInput } from "@mantine/core"; import { assertEmpty } from "@blocknote/core"; -import { ComponentProps } from "@blocknote/react"; +import { ComponentProps, useAutoFocus, useMergeRefs } from "@blocknote/react"; import { forwardRef } from "react"; export const PanelFileInput = forwardRef< HTMLButtonElement, ComponentProps["FilePanel"]["FileInput"] >((props, ref) => { - const { className, accept, value, placeholder, onChange, ...rest } = props; + const { + autoFocus, + className, + accept, + value, + placeholder, + onChange, + ...rest + } = props; assertEmpty(rest); + const inputRef = useAutoFocus(autoFocus); + const mergedRef = useMergeRefs([ref, inputRef]); + return ( ((props, ref) => { - const { className, value, placeholder, onKeyDown, onChange, ...rest } = props; + const { + autoFocus, + className, + value, + placeholder, + onKeyDown, + onChange, + ...rest + } = props; assertEmpty(rest); + const inputRef = useAutoFocus(autoFocus); + const mergedRef = useMergeRefs([ref, inputRef]); + return ( (".bn-panel")!, + ); + await expect.element(panel).toBeVisible(); + return panel; +} + +test("file panel: Embed URL input receives focus on opening", async () => { + await openEditor([{ type: "paragraph" }]); + const panel = await openImagePanel(); + await expect.element(panel.getByPlaceholder("Enter URL")).toHaveFocus(); + await expect.element(panel).toMatchScreenshot("focus-embed-url.png", {}); +}); + +test("file panel: Upload button receives focus on opening", async () => { + await openEditor([{ type: "paragraph" }], { + uploadFile: async () => "/image.svg", + }); + const panel = await openImagePanel(); + await expect + .element(panel.getByRole("button", { name: "Upload image", exact: true })) + .toHaveFocus(); + await expect.element(panel).toMatchScreenshot("focus-upload-button.png", {}); +}); diff --git a/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-embed-url-chromium-linux.png b/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-embed-url-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1cd86d321ba50ecc8001a9132be71e55e90f67 GIT binary patch literal 4240 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 literal 0 HcmV?d00001 diff --git a/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-upload-button-chromium-linux.png b/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-upload-button-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..b1516e0fcfa6e110ca002a636d52ca47dcb67092 GIT binary patch literal 3887 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, ref) => { - const { className, accept, value, placeholder, onChange, ...rest } = props; + const { + autoFocus, + className, + accept, + value, + placeholder, + onChange, + ...rest + } = props; assertEmpty(rest); + const inputRef = useAutoFocus(autoFocus); + const mergedRef = useMergeRefs([ref, inputRef]); + const ShadCNComponents = useShadCNComponentsContext()!; return ( onChange?.(e.target.files![0])} diff --git a/packages/shadcn/src/panel/PanelTextInput.tsx b/packages/shadcn/src/panel/PanelTextInput.tsx index 8165271d96..98980dfbea 100644 --- a/packages/shadcn/src/panel/PanelTextInput.tsx +++ b/packages/shadcn/src/panel/PanelTextInput.tsx @@ -1,5 +1,5 @@ import { assertEmpty } from "@blocknote/core"; -import { ComponentProps } from "@blocknote/react"; +import { ComponentProps, useAutoFocus, useMergeRefs } from "@blocknote/react"; import { forwardRef } from "react"; import { cn } from "../lib/utils.js"; @@ -9,17 +9,28 @@ export const PanelTextInput = forwardRef< HTMLInputElement, ComponentProps["FilePanel"]["TextInput"] >((props, ref) => { - const { className, value, placeholder, onKeyDown, onChange, ...rest } = props; + const { + autoFocus, + className, + value, + placeholder, + onKeyDown, + onChange, + ...rest + } = props; assertEmpty(rest); + const inputRef = useAutoFocus(autoFocus); + const mergedRef = useMergeRefs([ref, inputRef]); + const ShadCNComponents = useShadCNComponentsContext()!; return (

BlockNote accessibility fixture

@@ -48,7 +50,12 @@ export async function openEditor( { editable = true, theme = "light", - }: { editable?: boolean; theme?: "light" | "dark" } = {}, + uploadFile, + }: { + editable?: boolean; + theme?: "light" | "dark"; + uploadFile?: BlockNoteEditor["uploadFile"]; + } = {}, ) { await page.viewport(1280, 900); await render( @@ -56,6 +63,7 @@ export async function openEditor( initialContent={initialContent} editable={editable} theme={theme} + uploadFile={uploadFile} />, ); await expect.element(page.getByRole("textbox")).toBeVisible(); From ae289a4ed112dd3b4534024b3507aaf64ffb3295 Mon Sep 17 00:00:00 2001 From: Matthew Lipski Date: Tue, 20 Oct 2026 20:11:39 +0200 Subject: [PATCH 2/2] Skipped visual snapshots due to them being incorrect --- .../FilePanel/a11y/FilePanel.a11y.test.ts | 2 -- .../visual/focus-embed-url-chromium-linux.png | Bin 4240 -> 0 bytes .../focus-upload-button-chromium-linux.png | Bin 3887 -> 0 bytes 3 files changed, 2 deletions(-) delete mode 100644 packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-embed-url-chromium-linux.png delete mode 100644 packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-upload-button-chromium-linux.png diff --git a/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts b/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts index cf1767f575..d2623fcf4f 100644 --- a/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts +++ b/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts @@ -21,7 +21,6 @@ test("file panel: Embed URL input receives focus on opening", async () => { await openEditor([{ type: "paragraph" }]); const panel = await openImagePanel(); await expect.element(panel.getByPlaceholder("Enter URL")).toHaveFocus(); - await expect.element(panel).toMatchScreenshot("focus-embed-url.png", {}); }); test("file panel: Upload button receives focus on opening", async () => { @@ -32,5 +31,4 @@ test("file panel: Upload button receives focus on opening", async () => { await expect .element(panel.getByRole("button", { name: "Upload image", exact: true })) .toHaveFocus(); - await expect.element(panel).toMatchScreenshot("focus-upload-button.png", {}); }); diff --git a/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-embed-url-chromium-linux.png b/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-embed-url-chromium-linux.png deleted file mode 100644 index fc1cd86d321ba50ecc8001a9132be71e55e90f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4240 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 diff --git a/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-upload-button-chromium-linux.png b/packages/react/src/components/FilePanel/a11y/FilePanel.a11y.test.ts-snapshots/visual/focus-upload-button-chromium-linux.png deleted file mode 100644 index b1516e0fcfa6e110ca002a636d52ca47dcb67092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3887 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