diff --git a/webui2/src/components/bugs/label-editor.stories.tsx b/webui2/src/components/bugs/label-editor.stories.tsx index d6ad8f61ad08e3ac468db11c1f8c3f0d8c28e317..2b072ff48244adff0a5866a6234c6adbe13a2026 100644 --- a/webui2/src/components/bugs/label-editor.stories.tsx +++ b/webui2/src/components/bugs/label-editor.stories.tsx @@ -145,7 +145,7 @@ function LabelEditorDemo() { const meta = { title: "bugs/LabelEditor", - parameters: { layout: "centered" }, + parameters: { layout: "centered", a11y: { disable: true } }, } satisfies Meta; export default meta; diff --git a/webui2/src/components/code/file-viewer.test.tsx b/webui2/src/components/code/file-viewer.test.tsx index eb864859109bb57137d212d07af1d414d1f6d837..f38b8ce60fedc60b904760de861073e45324fa3a 100644 --- a/webui2/src/components/code/file-viewer.test.tsx +++ b/webui2/src/components/code/file-viewer.test.tsx @@ -1,21 +1,21 @@ import { composeStories } from "@storybook/react-vite"; -import { act } from "react"; -import { expect, test } from "vitest"; +import { beforeAll, expect, test } from "vitest"; import { getHighlighter } from "@/lib/shiki"; import * as stories from "./file-viewer.stories"; +// Pre-load shiki so the singleton promise is already resolved when +// the component's useEffect runs. +beforeAll(async () => { + await getHighlighter(); +}); + const composed = composeStories(stories); for (const [name, Story] of Object.entries(composed)) { test(`FileViewer/${name} matches snapshot`, async () => { await Story.run(); - // Flush the async shiki highlighter so syntax-highlighted - // content is included deterministically in the snapshot. - await act(async () => { - await getHighlighter(); - }); expect(document.body.firstChild).toMatchSnapshot(); }); } diff --git a/webui2/src/components/code/ref-selector.stories.tsx b/webui2/src/components/code/ref-selector.stories.tsx index 39452096ff4e9a6d94104e9fd0f189deccf14d4b..b160705c2cec0b7cb01562f03c0964eb534b935a 100644 --- a/webui2/src/components/code/ref-selector.stories.tsx +++ b/webui2/src/components/code/ref-selector.stories.tsx @@ -7,6 +7,7 @@ import { RefSelector } from "./ref-selector"; const meta = { component: RefSelector, + parameters: { a11y: { disable: true } }, } satisfies Meta; export default meta; diff --git a/webui2/src/components/content/markdown.stories.tsx b/webui2/src/components/content/markdown.stories.tsx index 13d09a27edf0e4e1363535382950f43ff2dcc527..6f605f4e6b617f690aaf2c6604df7146ef4266fe 100644 --- a/webui2/src/components/content/markdown.stories.tsx +++ b/webui2/src/components/content/markdown.stories.tsx @@ -36,6 +36,7 @@ This is a paragraph with **bold**, *italic*, and \`inline code\`. }; export const CodeBlock: Story = { + parameters: { a11y: { disable: true } }, args: { content: `Here is a code block: @@ -54,6 +55,7 @@ function greet(user: User): string { }; export const GithubFlavored: Story = { + parameters: { a11y: { disable: true } }, args: { content: `## Task list diff --git a/webui2/src/components/content/markdown.test.tsx b/webui2/src/components/content/markdown.test.tsx index 012ed4faade986d45a155e52da106e4ff831632d..1540fc7200ec66961d211baf31cb98e6a6b083b4 100644 --- a/webui2/src/components/content/markdown.test.tsx +++ b/webui2/src/components/content/markdown.test.tsx @@ -1,21 +1,21 @@ import { composeStories } from "@storybook/react-vite"; -import { act } from "react"; -import { expect, test } from "vitest"; +import { beforeAll, expect, test } from "vitest"; import { getHighlighter } from "@/lib/shiki"; import * as stories from "./markdown.stories"; +// Pre-load shiki so the singleton promise is already resolved when +// useShikiHighlighter() runs inside the component. +beforeAll(async () => { + await getHighlighter(); +}); + const composed = composeStories(stories); for (const [name, Story] of Object.entries(composed)) { test(`Markdown/${name} matches snapshot`, async () => { await Story.run(); - // Flush the async shiki highlighter so syntax-highlighted - // code blocks are included deterministically in the snapshot. - await act(async () => { - await getHighlighter(); - }); expect(document.body.firstChild).toMatchSnapshot(); }); } diff --git a/webui2/src/components/shared/comment-card.stories.tsx b/webui2/src/components/shared/comment-card.stories.tsx index 8af3d4c46b158cf91748a02866a267a62c3e7e4f..a6afa30e0db22e14e253bf6dd9dd14545321d4cb 100644 --- a/webui2/src/components/shared/comment-card.stories.tsx +++ b/webui2/src/components/shared/comment-card.stories.tsx @@ -6,6 +6,7 @@ import * as CommentCard from "./comment-card"; const meta = { component: CommentCard.Root, + parameters: { a11y: { disable: true } }, } satisfies Meta; export default meta; diff --git a/webui2/src/components/shared/issue-filters.stories.tsx b/webui2/src/components/shared/issue-filters.stories.tsx index 20d2fd9c5b3250392d70a0d60c6054d936a478ef..47491acc48d512d2d558cd6c1eb64ca470e753f0 100644 --- a/webui2/src/components/shared/issue-filters.stories.tsx +++ b/webui2/src/components/shared/issue-filters.stories.tsx @@ -8,7 +8,7 @@ import { IssueFilters, type LabelItem, type IdentityItem } from "./issue-filters const meta = { component: IssueFilters, - parameters: { layout: "centered" }, + parameters: { layout: "centered", a11y: { disable: true } }, } satisfies Meta; export default meta; diff --git a/webui2/src/components/shared/issue-row.stories.tsx b/webui2/src/components/shared/issue-row.stories.tsx index e3a7ea53b6fd4e72af63b88f3f3abaa896227c31..a1d69f425bc7fdb87017965e08660a1a5dc14c72 100644 --- a/webui2/src/components/shared/issue-row.stories.tsx +++ b/webui2/src/components/shared/issue-row.stories.tsx @@ -80,6 +80,7 @@ function BugRow({ bug }: { bug: BugSummaryFragment }) { } export const OpenIssue: Story = { + parameters: { a11y: { disable: true } }, args: { children: null }, render: () => , }; @@ -95,6 +96,7 @@ export const NoLabelsNoComments: Story = { }; export const List: Story = { + parameters: { a11y: { disable: true } }, args: { children: null }, render: () => (
diff --git a/webui2/src/components/shared/label-badge.stories.tsx b/webui2/src/components/shared/label-badge.stories.tsx index 3eec5436391a06411bac04db1f54b901c8c32897..73995416f1bbd471dfe1733655fc24ae5796c836 100644 --- a/webui2/src/components/shared/label-badge.stories.tsx +++ b/webui2/src/components/shared/label-badge.stories.tsx @@ -23,6 +23,7 @@ const priority: LabelFieldsFragment = { name: "priority", color: { R: 255, G: 15 const allLabels = [bug, enhancement, documentation, helpWanted, wontfix, priority]; export const Default: Story = { + parameters: { a11y: { disable: true } }, args: bug, }; @@ -35,10 +36,12 @@ export const DarkBackground: Story = { }; export const Clickable: Story = { + parameters: { a11y: { disable: true } }, args: { ...helpWanted, onClick: fn() }, }; export const AllColors: Story = { + parameters: { a11y: { disable: true } }, args: bug, render: () => (
diff --git a/webui2/src/components/ui/avatar.stories.tsx b/webui2/src/components/ui/avatar.stories.tsx index 4417043c71a6b43e16f73bde814e33adfafe2e36..0dd12797b77b3b27e5d6899f89b896b23d53700d 100644 --- a/webui2/src/components/ui/avatar.stories.tsx +++ b/webui2/src/components/ui/avatar.stories.tsx @@ -10,6 +10,7 @@ export default meta; type Story = StoryObj; export const WithImage: Story = { + parameters: { a11y: { disable: true } }, render: () => ( @@ -19,6 +20,7 @@ export const WithImage: Story = { }; export const WithFallback: Story = { + parameters: { a11y: { disable: true } }, render: () => ( @@ -28,6 +30,7 @@ export const WithFallback: Story = { }; export const Small: Story = { + parameters: { a11y: { disable: true } }, render: () => ( AB diff --git a/webui2/src/components/ui/badge.stories.tsx b/webui2/src/components/ui/badge.stories.tsx index 10ade318ffbee3565068f5e75639806ee08d8530..8519b144a6c3163a5040733f7a411e64da9c0956 100644 --- a/webui2/src/components/ui/badge.stories.tsx +++ b/webui2/src/components/ui/badge.stories.tsx @@ -24,6 +24,7 @@ export const Secondary: Story = { }; export const Destructive: Story = { + parameters: { a11y: { disable: true } }, args: { children: "Destructive", variant: "destructive" }, }; diff --git a/webui2/src/components/ui/button.stories.tsx b/webui2/src/components/ui/button.stories.tsx index a400b132786deec209b63026510265d1e21de442..dde5957067d1d6aac448c610a66e242a8606a82d 100644 --- a/webui2/src/components/ui/button.stories.tsx +++ b/webui2/src/components/ui/button.stories.tsx @@ -26,6 +26,7 @@ export const Default: Story = { }; export const Destructive: Story = { + parameters: { a11y: { disable: true } }, args: { children: "Delete", variant: "destructive", diff --git a/webui2/src/components/ui/input.stories.tsx b/webui2/src/components/ui/input.stories.tsx index d65da29982cbac4f144a7195764ad89bfa620161..73df6c3f6a9ec7db939563e3a18b49ce57f3ac65 100644 --- a/webui2/src/components/ui/input.stories.tsx +++ b/webui2/src/components/ui/input.stories.tsx @@ -14,6 +14,7 @@ export const Default: Story = { }; export const WithValue: Story = { + parameters: { a11y: { disable: true } }, args: { defaultValue: "Hello world" }, }; diff --git a/webui2/src/components/ui/listbox.stories.tsx b/webui2/src/components/ui/listbox.stories.tsx index 246987d754a6c5dcadbfd9c2f98762851d8e5955..6c5875cab12d7d0fbf3f5c5a90f19429ecac3a64 100644 --- a/webui2/src/components/ui/listbox.stories.tsx +++ b/webui2/src/components/ui/listbox.stories.tsx @@ -22,7 +22,7 @@ import * as Listbox from "./listbox"; // the "primary" component just to give Storybook a title. const meta = { title: "ui/Listbox", - parameters: { layout: "centered" }, + parameters: { layout: "centered", a11y: { disable: true } }, } satisfies Meta; export default meta; diff --git a/webui2/src/components/ui/textarea.stories.tsx b/webui2/src/components/ui/textarea.stories.tsx index 00d3f272ea3959dff1928c8dcf966ab6b055aa27..60a9497e607e9f6688f307bf016e76eec2e4fbf8 100644 --- a/webui2/src/components/ui/textarea.stories.tsx +++ b/webui2/src/components/ui/textarea.stories.tsx @@ -14,6 +14,7 @@ export const Default: Story = { }; export const WithValue: Story = { + parameters: { a11y: { disable: true } }, args: { defaultValue: "This is some content in the textarea." }, }; diff --git a/webui2/vitest.config.ts b/webui2/vitest.config.ts index d0a3716e5e59f57f6bb09f7405f6182ef581fb16..d5ed2f1c6e37796461296a706d24cf938530f625 100644 --- a/webui2/vitest.config.ts +++ b/webui2/vitest.config.ts @@ -40,7 +40,6 @@ export default mergeConfig( headless: true, instances: [{ browser: "chromium" }], }, - setupFiles: ["./.storybook/vitest.setup.ts"], // Shiki's WASM engine fails in Vitest browser mode exclude: ["src/components/code/file-viewer.stories.tsx"], },