import React, { useState } from "react" type StoryProps = Record type Story = (props: StoryProps) => React.ReactNode | Promise const mermaidGantt = `gantt title Project plan dateFormat YYYY-MM-DD section Planning Define scope :done, scope, 2026-08-01, 3d section Delivery Ship release :active, release, after scope, 3d` export const stories: Record = { "terminal-settings": async () => { const [{ AppProviders }, { TerminalSettings }] = await Promise.all([ import("../AppProviders"), import("@/components/settings/TerminalSettings"), ]) function Settings() { const [collapsed, setCollapsed] = useState(false) return (
{ if (field === "collapseCommandOutputByDefault") setCollapsed(Boolean(value)) }} />
) } return ( ) }, "bedrock-output-budget": async ({ model = "anthropic.claude-opus-5" }) => { const [{ AppProviders }, { ThinkingBudget }, { bedrockModels, providerIdentifiers }] = await Promise.all([ import("../AppProviders"), import("@/components/settings/ThinkingBudget"), import("@roo-code/types"), ]) const apiModelId = model === "anthropic.claude-opus-4-8" ? model : "anthropic.claude-opus-5" function Budget() { const [config, setConfig] = useState({ apiProvider: providerIdentifiers.bedrock, apiModelId, enableReasoningEffort: true, }) return (

{apiModelId}

setConfig((previous) => ({ ...previous, [field]: value })) } />
) } return ( ) }, "bedrock-custom-arn": async ({ baseModelId = "" }) => { const [{ AppProviders }, { BedrockCustomArn }, { providerIdentifiers }] = await Promise.all([ import("../AppProviders"), import("@/components/settings/providers/BedrockCustomArn"), import("@roo-code/types"), ]) function CustomArn() { const [config, setConfig] = useState({ apiProvider: providerIdentifiers.bedrock, apiModelId: "custom-arn", awsRegion: "us-west-2", awsCustomArn: "arn:aws:bedrock:us-west-2:123456789012:application-inference-profile/abcd1234efgh", awsCustomArnBaseModelId: String(baseModelId), }) return (
setConfig((previous) => ({ ...previous, [field]: value })) } />
) } return ( ) }, "accessibility-contrast": async () => { const { AccessibilityContrastGallery } = await import("@/components/ui/__tests__/AccessibilityContrast.visual.fixture") return }, "announcement-links": async () => { const [{ AppProviders }, { default: Announcement }] = await Promise.all([ import("../AppProviders"), import("@/components/chat/Announcement"), ]) return (
control undefined} />
) }, "api-config-manager": async () => { const [{ AppProviders }, { default: ApiConfigManager }] = await Promise.all([ import("../AppProviders"), import("@/components/settings/ApiConfigManager"), ]) return (
undefined} onDeleteConfig={() => undefined} onRenameConfig={() => undefined} onUpsertConfig={() => undefined} />
) }, "auto-approve-settings": async () => { const { AutoApproveSettingsStory } = await import("@/components/settings/__tests__/AutoApproveSettings.visual.fixture") return }, "chat-text-area": async () => { const { ChatTextAreaStory } = await import("@/components/chat/__tests__/ChatTextArea.visual.fixture") return }, "history-empty": async () => { const [{ AppProviders }, { default: HistoryView }] = await Promise.all([ import("../AppProviders"), import("@/components/history/HistoryView"), ]) return (
undefined} />
) }, "history-rename": async () => { const [{ AppProviders }, { default: HistoryView }] = await Promise.all([ import("../AppProviders"), import("@/components/history/HistoryView"), ]) // The visual test freezes the clock at this time so "time ago" labels stay stable. const now = new Date("2026-06-01T12:00:00Z").getTime() const workspace = "/workspace/demo" const baseItem = { tokensIn: 1200, tokensOut: 800, totalCost: 0.12, workspace } return (
undefined} />
) }, "ignored-disabled-tools-warning": async () => { const [{ AppProviders }, { ChatRowContent }] = await Promise.all([ import("../AppProviders"), import("@/components/chat/ChatRow"), ]) // Same payload shape Task.startTask emits, so the snapshot covers ChatRow's // dispatch and locale lookup, not just the isolated warning row. const message: import("@roo-code/types").ClineMessage = { type: "say", say: "ignored_disabled_tools_warning", ts: 0, text: JSON.stringify({ ignoredTools: ["attempt_completion"] }), } return (
undefined} onSuggestionClick={() => undefined} onBatchFileResponse={() => undefined} onFollowUpUnmount={() => undefined} isFollowUpAnswered={false} />
) }, "io-intelligence-settings": async () => { const [{ AppProviders }, { IOIntelligence }, { providerIdentifiers }] = await Promise.all([ import("../AppProviders"), import("@/components/settings/providers/IOIntelligence"), import("@roo-code/types"), ]) type ProviderSettings = React.ComponentProps["apiConfiguration"] function IOIntelligenceSettingsStory() { const [apiConfiguration, setApiConfiguration] = useState({ apiProvider: providerIdentifiers.ioIntelligence, }) return (
setApiConfiguration((current) => ({ ...current, [field]: value })) } organizationAllowList={{ allowAll: true, providers: {} }} />
) } return ( ) }, "layout-clipped-text": () => (
Clipped direct text
), "layout-screen-reader-only": () => (
), "mermaid-gantt": async () => { const { default: MermaidBlock } = await import("@/components/common/MermaidBlock") return }, "model-info": async () => { const { ModelInfoViewFixture } = await import("@/components/settings/__tests__/ModelInfoView.visual.fixture") return }, "ollama-api-key-help": async () => { const { OllamaApiKeyHelpFixture } = await import("@/components/settings/providers/__tests__/Ollama.visual.fixture") return }, "openai-codex": async () => { const { OpenAICodexFixture } = await import("@/components/settings/providers/__tests__/OpenAICodex.visual.fixture") return }, "openai-compatible-azure": async () => { const { OpenAICompatibleAzureFixture } = await import("@/components/settings/providers/__tests__/OpenAICompatible.visual.fixture") return }, "openai-compatible-extra-body": async () => { const { OpenAICompatibleExtraBodyFixture } = await import("@/components/settings/providers/__tests__/OpenAICompatible.visual.fixture") return }, "opencode-go-temperature": async () => { const { OpencodeGoTemperatureFixture } = await import("@/components/settings/__tests__/OpencodeGoTemperature.visual.fixture") return }, "rendered-content-contrast": async () => { const [{ AppProviders }, { RenderedContentContrastFixture }] = await Promise.all([ import("../AppProviders"), import("@/components/common/__tests__/RenderedContentContrast.visual.fixture"), ]) return ( ) }, "roo-hero": async () => { const { default: RooHero } = await import("@/components/welcome/RooHero") return }, "telemetry-banner": async () => { const [{ TelemetryBannerFixture }, { visualTestI18nReady }] = await Promise.all([ import("@/components/common/__tests__/TelemetryBanner.visual.fixture"), import("@/components/common/__tests__/TelemetryBanner.visual.i18n"), ]) await visualTestI18nReady return }, "theme-aware-controls": async () => { const [{ SelectDropdown }, { default: UpdateTodoListToolBlock }] = await Promise.all([ import("@/components/ui/select-dropdown"), import("@/components/chat/UpdateTodoListToolBlock"), ]) type Todo = NonNullable["todos"]>[number] function ThemeAwareControlsStory() { const [value, setValue] = useState("code") const [todos, setTodos] = useState([ { id: "todo-1", content: "Ship the follow-up", status: "in_progress" }, ]) return (
) } return }, "theme-sensitive-status": async () => { const [{ AppProviders }, { ThemeSensitiveStatusFixture }] = await Promise.all([ import("../AppProviders"), import("@/components/chat/__tests__/ThemeSensitiveStatus.visual.fixture"), ]) return ( ) }, "theme-token-cleanup": async () => { const [{ Checkbox }, { enabledChatControlClassName }] = await Promise.all([ import("@/components/ui/checkbox"), import("@/components/chat/chatControlStyles"), ]) return (
) }, "github-copilot-settings": async () => { const [{ AppProviders }, { VSCodeLM }, { providerIdentifiers }] = await Promise.all([ import("../AppProviders"), import("@/components/settings/providers/VSCodeLM"), import("@roo-code/types"), ]) function CopilotSettings() { const [config, setConfig] = useState({ apiProvider: providerIdentifiers.githubCopilot, vsCodeLmModelSelector: { vendor: "copilot", id: "gpt-5.5", family: "gpt-5.5", version: "1" }, }) return (
setConfig((previous) => ({ ...previous, [field]: value })) } />
) } return ( ) }, "anthropic-settings": async () => { const [{ AppProviders }, { Anthropic }, { providerIdentifiers }] = await Promise.all([ import("../AppProviders"), import("@/components/settings/providers/Anthropic"), import("@roo-code/types"), ]) function AnthropicSettings() { const [config, setConfig] = useState({ apiProvider: providerIdentifiers.anthropic, apiKey: "sk-ant-example-key", }) return (
setConfig((previous) => ({ ...previous, [field]: value })) } />
) } return ( ) }, "ui-settings": async () => { const { UISettingsStory } = await import("@/components/settings/__tests__/UISettings.visual.fixture") return }, "ui-settings-long-locale": async () => { const { UISettingsStory } = await import("@/components/settings/__tests__/UISettings.visual.fixture") return }, welcome: async () => { const [{ AppProviders }, { WelcomeLanding }] = await Promise.all([ import("../AppProviders"), import("@/components/welcome/WelcomeLanding"), ]) return ( undefined} onImportSettings={() => undefined} /> ) }, }