diff --git a/.gitignore b/.gitignore index f85999f1..3002a72a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,7 @@ pnpm-debug.log # Workspace packages packages/*/node_modules/ + +# Storybook +storybook-static/ +debug-storybook.log diff --git a/.prettierignore b/.prettierignore index 280fe92f..8ab111db 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,3 +9,4 @@ flake.lock pnpm-debug.log pnpm-lock.yaml +/storybook-static/ \ No newline at end of file diff --git a/.storybook/css.d.ts b/.storybook/css.d.ts new file mode 100644 index 00000000..7304a422 --- /dev/null +++ b/.storybook/css.d.ts @@ -0,0 +1,5 @@ +declare module "*.css"; +declare module "*.css?url" { + const url: string; + export default url; +} diff --git a/.storybook/global.css b/.storybook/global.css new file mode 100644 index 00000000..0ca6719f --- /dev/null +++ b/.storybook/global.css @@ -0,0 +1,108 @@ +html { + background: var(--vscode-sideBar-background); +} + +body { + margin: 0; + padding: 0; + overflow: hidden; +} + +#storybook-preview-wrapper { + background-color: var(--vscode-sideBar-background); +} + +#root { + overscroll-behavior-x: none; + background-color: var(--vscode-sideBar-background); + color: var(--vscode-editor-foreground); + font-family: var(--vscode-font-family); + font-weight: var(--vscode-font-weight); + font-size: var(--vscode-font-size); + margin: 0; + max-width: 100%; + /* arbitrary size choice for the rough VSCode sidebar size */ + width: 300px; +} + +img, +video { + max-width: 100%; + max-height: 100%; +} + +a, +a code { + color: var(--vscode-textLink-foreground); +} + +p > a { + text-decoration: var(--text-link-decoration); +} + +a:hover { + color: var(--vscode-textLink-activeForeground); +} + +a:focus, +input:focus, +select:focus, +textarea:focus { + outline: 1px solid -webkit-focus-ring-color; + outline-offset: -1px; +} + +code { + font-family: var(--monaco-monospace-font); + color: var(--vscode-textPreformat-foreground); + background-color: var(--vscode-textPreformat-background); + padding: 1px 3px; + border-radius: 4px; +} + +pre code { + padding: 0; +} + +blockquote { + background: var(--vscode-textBlockQuote-background); + border-color: var(--vscode-textBlockQuote-border); +} + +kbd { + background-color: var(--vscode-keybindingLabel-background); + color: var(--vscode-keybindingLabel-foreground); + border-style: solid; + border-width: 1px; + border-radius: 3px; + border-color: var(--vscode-keybindingLabel-border); + border-bottom-color: var(--vscode-keybindingLabel-bottomBorder); + box-shadow: inset 0 -1px 0 var(--vscode-widget-shadow); + vertical-align: middle; + padding: 1px 3px; +} + +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +::-webkit-scrollbar-corner { + background-color: var(--vscode-editor-background); +} + +::-webkit-scrollbar-thumb { + background-color: var(--vscode-scrollbarSlider-background); +} +::-webkit-scrollbar-thumb:hover { + background-color: var(--vscode-scrollbarSlider-hoverBackground); +} +::-webkit-scrollbar-thumb:active { + background-color: var(--vscode-scrollbarSlider-activeBackground); +} +::highlight(find-highlight) { + background-color: var(--vscode-editor-findMatchHighlightBackground); +} +::highlight(current-find-highlight) { + background-color: var(--vscode-editor-findMatchBackground); +} diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 00000000..f36bf1ac --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,19 @@ +import { mergeConfig } from "vite"; + +import type { StorybookConfig } from "@storybook/react-vite"; + +const config: StorybookConfig = { + stories: ["../packages/*/src/**/*.stories.@(ts|tsx)"], + addons: ["@storybook/addon-a11y", "@storybook/addon-docs"], + framework: { + name: "@storybook/react-vite", + options: {}, + }, + viteFinal(baseConfig) { + return mergeConfig(baseConfig, { + assetsInclude: ["**/*.ttf", "**/*.woff", "**/*.woff2"], + }); + }, +}; + +export default config; diff --git a/.storybook/preview.ts b/.storybook/preview.ts new file mode 100644 index 00000000..349e0c4b --- /dev/null +++ b/.storybook/preview.ts @@ -0,0 +1,99 @@ +/// + +import codiconCssUrl from "@vscode/codicons/dist/codicon.css?url"; +import { createElement, useEffect } from "react"; + +import "./global.css"; +import { darkTheme } from "./themes/dark-v2"; +import { lightTheme } from "./themes/light-v2"; + +import type { Preview } from "@storybook/react-vite"; +import type { WebviewApi } from "vscode-webview"; + +// Auto-import per-package Storybook CSS entry points +import.meta.glob("../packages/*/storybook.preview.ts", { eager: true }); + +declare global { + interface Window { + acquireVsCodeApi?: () => WebviewApi; + } +} + +// Mock the acquireVsCodeApi function for Storybook, so that components +// that rely on it can function without errors. +if (typeof window !== "undefined") { + window.acquireVsCodeApi ??= () => ({ + postMessage: () => undefined, + getState: () => undefined, + setState: (state) => state, + }); +} + +// Inject codicon stylesheet immediately (before any components render) +// Must be a element with id "vscode-codicon-stylesheet" for vscode-elements +if ( + typeof document !== "undefined" && + !document.getElementById("vscode-codicon-stylesheet") +) { + const link = document.createElement("link"); + link.id = "vscode-codicon-stylesheet"; + link.rel = "stylesheet"; + link.href = codiconCssUrl; + document.head.appendChild(link); +} + +// VS Code injects --vscode-font-family at runtime, but the upstream +// vscode-elements theme data omits it. Set a static default so +// Storybook (and Chromatic) renders with a predictable sans-serif +// stack instead of falling back to the browser default (Times). +const VSCODE_FONT_FAMILY = + '"Segoe WPC", "Segoe UI", system-ui, "Ubuntu", "Droid Sans", sans-serif'; + +const preview: Preview = { + parameters: { + layout: "centered", + }, + globalTypes: { + theme: { + description: "Global theme for components", + defaultValue: "dark", + toolbar: { + title: "Theme", + icon: "circlehollow", + items: [ + { value: "light", icon: "circlehollow", title: "Light" }, + { value: "dark", icon: "circle", title: "Dark" }, + ], + dynamicTitle: true, + }, + }, + }, + decorators: [ + (Story, context) => { + const selectedTheme = + context.globals.theme === "light" ? lightTheme : darkTheme; + + useEffect(() => { + const root = document.documentElement.style; + root.setProperty("--vscode-font-family", VSCODE_FONT_FAMILY); + + // Apply CSS custom properties to the document root + selectedTheme.forEach(([property, value]) => { + root.setProperty(property, value); + }); + + // Cleanup function to remove properties when unmounting + return () => { + selectedTheme.forEach(([property]) => { + root.removeProperty(property); + }); + root.removeProperty("--vscode-font-family"); + }; + }, [selectedTheme]); + + return createElement("div", { id: "root" }, createElement(Story)); + }, + ], +}; + +export default preview; diff --git a/.storybook/themes/dark-v2.ts b/.storybook/themes/dark-v2.ts new file mode 100644 index 00000000..a6d3c682 --- /dev/null +++ b/.storybook/themes/dark-v2.ts @@ -0,0 +1,959 @@ +// Sourced from `vscode-elements/webview-playground`. +// https://github.com/vscode-elements/webview-playground/blob/f9a6f90413d0cc535839fb92445b7a5eebc540d7/dist/themes/dark-v2.js + +export const darkTheme: Array<[string, string]> = [ + ["--vscode-actionBar-toggledBackground", "#383a49"], + ["--vscode-activityBar-activeBorder", "#0078d4"], + ["--vscode-activityBar-background", "#181818"], + ["--vscode-activityBar-border", "#2b2b2b"], + ["--vscode-activityBar-dropBorder", "#d7d7d7"], + ["--vscode-activityBar-foreground", "#d7d7d7"], + ["--vscode-activityBar-inactiveForeground", "#868686"], + ["--vscode-activityBarBadge-background", "#0078d4"], + ["--vscode-activityBarBadge-foreground", "#ffffff"], + ["--vscode-activityBarTop-activeBorder", "#e7e7e7"], + ["--vscode-activityBarTop-dropBorder", "#e7e7e7"], + ["--vscode-activityBarTop-foreground", "#e7e7e7"], + ["--vscode-activityBarTop-inactiveForeground", "rgba(231, 231, 231, 0.6)"], + ["--vscode-activityErrorBadge-background", "#f14c4c"], + ["--vscode-activityErrorBadge-foreground", "#000000"], + ["--vscode-activityWarningBadge-background", "#b27c00"], + ["--vscode-activityWarningBadge-foreground", "#ffffff"], + ["--vscode-agentSessionReadIndicator-foreground", "rgba(204, 204, 204, 0.2)"], + ["--vscode-agentSessionSelectedBadge-border", "rgba(255, 255, 255, 0.3)"], + [ + "--vscode-agentSessionSelectedUnfocusedBadge-border", + "rgba(204, 204, 204, 0.3)", + ], + ["--vscode-agentStatusIndicator-background", "rgba(255, 255, 255, 0.05)"], + ["--vscode-aiCustomizationManagement-sashBorder", "#2b2b2b"], + ["--vscode-badge-background", "#616161"], + ["--vscode-badge-foreground", "#f8f8f8"], + ["--vscode-banner-background", "#04395e"], + ["--vscode-banner-foreground", "#ffffff"], + ["--vscode-banner-iconForeground", "#59a4f9"], + ["--vscode-bodyFontSize", "13px"], + ["--vscode-bodyFontSize-small", "12px"], + ["--vscode-bodyFontSize-xSmall", "11px"], + ["--vscode-breadcrumb-activeSelectionForeground", "#e0e0e0"], + ["--vscode-breadcrumb-background", "#1f1f1f"], + ["--vscode-breadcrumb-focusForeground", "#e0e0e0"], + ["--vscode-breadcrumb-foreground", "rgba(204, 204, 204, 0.8)"], + ["--vscode-breadcrumbPicker-background", "#202020"], + ["--vscode-browser-border", "#2b2b2b"], + ["--vscode-button-background", "#0078d4"], + ["--vscode-button-border", "rgba(255, 255, 255, 0.1)"], + ["--vscode-button-foreground", "#ffffff"], + ["--vscode-button-hoverBackground", "#026ec1"], + ["--vscode-button-secondaryBackground", "rgba(0, 0, 0, 0)"], + ["--vscode-button-secondaryForeground", "#cccccc"], + ["--vscode-button-secondaryHoverBackground", "#2b2b2b"], + ["--vscode-button-separator", "rgba(255, 255, 255, 0.4)"], + ["--vscode-chart-axis", "rgba(191, 191, 191, 0.4)"], + ["--vscode-chart-guide", "rgba(191, 191, 191, 0.2)"], + ["--vscode-chart-line", "#236b8e"], + ["--vscode-charts-blue", "#59a4f9"], + ["--vscode-charts-foreground", "#cccccc"], + ["--vscode-charts-green", "#89d185"], + ["--vscode-charts-lines", "rgba(204, 204, 204, 0.5)"], + ["--vscode-charts-orange", "rgba(234, 92, 0, 0.33)"], + ["--vscode-charts-purple", "#b180d7"], + ["--vscode-charts-red", "#f14c4c"], + ["--vscode-charts-yellow", "#cca700"], + ["--vscode-chat-avatarBackground", "#1f1f1f"], + ["--vscode-chat-avatarForeground", "#cccccc"], + ["--vscode-chat-checkpointSeparator", "#585858"], + ["--vscode-chat-editedFileForeground", "#e2c08d"], + ["--vscode-chat-linesAddedForeground", "#54b054"], + ["--vscode-chat-linesRemovedForeground", "#fc6a6a"], + ["--vscode-chat-requestBackground", "rgba(31, 31, 31, 0.62)"], + ["--vscode-chat-requestBorder", "rgba(255, 255, 255, 0.1)"], + ["--vscode-chat-requestBubbleBackground", "rgba(38, 79, 120, 0.3)"], + ["--vscode-chat-requestBubbleHoverBackground", "rgba(38, 79, 120, 0.6)"], + ["--vscode-chat-requestCodeBorder", "rgba(0, 73, 114, 0.72)"], + ["--vscode-chat-slashCommandBackground", "rgba(38, 71, 120, 0.4)"], + ["--vscode-chat-slashCommandForeground", "#85b6ff"], + ["--vscode-chat-thinkingShimmer", "#ffffff"], + ["--vscode-chatManagement-sashBorder", "#2b2b2b"], + ["--vscode-checkbox-background", "#313131"], + ["--vscode-checkbox-border", "#3c3c3c"], + ["--vscode-checkbox-disabled.background", "#646464"], + ["--vscode-checkbox-disabled.foreground", "#989898"], + ["--vscode-checkbox-foreground", "#cccccc"], + ["--vscode-checkbox-selectBackground", "#202020"], + ["--vscode-checkbox-selectBorder", "#cccccc"], + ["--vscode-codiconFontSize", "16px"], + ["--vscode-commandCenter-activeBackground", "rgba(255, 255, 255, 0.08)"], + ["--vscode-commandCenter-activeBorder", "rgba(204, 204, 204, 0.3)"], + ["--vscode-commandCenter-activeForeground", "#cccccc"], + ["--vscode-commandCenter-background", "rgba(255, 255, 255, 0.05)"], + ["--vscode-commandCenter-border", "rgba(204, 204, 204, 0.2)"], + ["--vscode-commandCenter-debuggingBackground", "rgba(0, 120, 212, 0.26)"], + ["--vscode-commandCenter-foreground", "#cccccc"], + ["--vscode-commandCenter-inactiveBorder", "rgba(157, 157, 157, 0.25)"], + ["--vscode-commandCenter-inactiveForeground", "#9d9d9d"], + ["--vscode-commentsView-resolvedIcon", "rgba(204, 204, 204, 0.5)"], + ["--vscode-commentsView-unresolvedIcon", "#0078d4"], + ["--vscode-cornerRadius-circle", "9999px"], + ["--vscode-cornerRadius-large", "8px"], + ["--vscode-cornerRadius-medium", "6px"], + ["--vscode-cornerRadius-small", "4px"], + ["--vscode-cornerRadius-xLarge", "12px"], + ["--vscode-cornerRadius-xSmall", "2px"], + ["--vscode-debugConsole-errorForeground", "#f85149"], + ["--vscode-debugConsole-infoForeground", "#59a4f9"], + ["--vscode-debugConsole-sourceForeground", "#cccccc"], + ["--vscode-debugConsole-warningForeground", "#cca700"], + ["--vscode-debugConsoleInputIcon-foreground", "#cccccc"], + ["--vscode-debugExceptionWidget-background", "#420b0d"], + ["--vscode-debugExceptionWidget-border", "#a31515"], + ["--vscode-debugIcon-breakpointCurrentStackframeForeground", "#ffcc00"], + ["--vscode-debugIcon-breakpointDisabledForeground", "#848484"], + ["--vscode-debugIcon-breakpointForeground", "#e51400"], + ["--vscode-debugIcon-breakpointStackframeForeground", "#89d185"], + ["--vscode-debugIcon-breakpointUnverifiedForeground", "#848484"], + ["--vscode-debugIcon-continueForeground", "#75beff"], + ["--vscode-debugIcon-disconnectForeground", "#f48771"], + ["--vscode-debugIcon-pauseForeground", "#75beff"], + ["--vscode-debugIcon-restartForeground", "#89d185"], + ["--vscode-debugIcon-startForeground", "#89d185"], + ["--vscode-debugIcon-stepBackForeground", "#75beff"], + ["--vscode-debugIcon-stepIntoForeground", "#75beff"], + ["--vscode-debugIcon-stepOutForeground", "#75beff"], + ["--vscode-debugIcon-stepOverForeground", "#75beff"], + ["--vscode-debugIcon-stopForeground", "#f48771"], + ["--vscode-debugTokenExpression-boolean", "#4e94ce"], + ["--vscode-debugTokenExpression-error", "#f48771"], + ["--vscode-debugTokenExpression-name", "#c586c0"], + ["--vscode-debugTokenExpression-number", "#b5cea8"], + ["--vscode-debugTokenExpression-string", "#ce9178"], + ["--vscode-debugTokenExpression-type", "#4a90e2"], + ["--vscode-debugTokenExpression-value", "rgba(204, 204, 204, 0.6)"], + ["--vscode-debugToolBar-background", "#181818"], + ["--vscode-debugView-exceptionLabelBackground", "#6c2022"], + ["--vscode-debugView-exceptionLabelForeground", "#cccccc"], + ["--vscode-debugView-stateLabelBackground", "rgba(136, 136, 136, 0.27)"], + ["--vscode-debugView-stateLabelForeground", "#cccccc"], + ["--vscode-debugView-valueChangedHighlight", "#569cd6"], + ["--vscode-descriptionForeground", "#9d9d9d"], + ["--vscode-diffEditor-diagonalFill", "rgba(204, 204, 204, 0.2)"], + ["--vscode-diffEditor-insertedLineBackground", "rgba(155, 185, 85, 0.2)"], + ["--vscode-diffEditor-insertedTextBackground", "rgba(156, 204, 44, 0.2)"], + ["--vscode-diffEditor-move.border", "rgba(139, 139, 139, 0.61)"], + ["--vscode-diffEditor-moveActive.border", "#ffa500"], + ["--vscode-diffEditor-removedLineBackground", "rgba(255, 0, 0, 0.2)"], + ["--vscode-diffEditor-removedTextBackground", "rgba(255, 0, 0, 0.2)"], + ["--vscode-diffEditor-unchangedCodeBackground", "rgba(116, 116, 116, 0.16)"], + ["--vscode-diffEditor-unchangedRegionBackground", "#181818"], + ["--vscode-diffEditor-unchangedRegionForeground", "#cccccc"], + ["--vscode-diffEditor-unchangedRegionShadow", "#000000"], + ["--vscode-disabledForeground", "rgba(204, 204, 204, 0.5)"], + ["--vscode-dropdown-background", "#313131"], + ["--vscode-dropdown-border", "#3c3c3c"], + ["--vscode-dropdown-foreground", "#cccccc"], + ["--vscode-dropdown-listBackground", "#1f1f1f"], + ["--vscode-editor-background", "#1f1f1f"], + ["--vscode-editor-compositionBorder", "#ffffff"], + ["--vscode-editor-findMatchBackground", "#9e6a03"], + ["--vscode-editor-findMatchHighlightBackground", "rgba(234, 92, 0, 0.33)"], + ["--vscode-editor-findRangeHighlightBackground", "rgba(58, 61, 65, 0.4)"], + [ + "--vscode-editor-focusedStackFrameHighlightBackground", + "rgba(122, 189, 122, 0.3)", + ], + ["--vscode-editor-foldBackground", "rgba(38, 79, 120, 0.3)"], + ["--vscode-editor-foldPlaceholderForeground", "#808080"], + ["--vscode-editor-font-feature-settings", '"liga" off, "calt" off'], + ["--vscode-editor-font-size", "14px"], + ["--vscode-editor-font-weight", "normal"], + ["--vscode-editor-foreground", "#cccccc"], + ["--vscode-editor-hoverHighlightBackground", "rgba(38, 79, 120, 0.25)"], + ["--vscode-editor-inactiveSelectionBackground", "#3a3d41"], + ["--vscode-editor-inlineValuesBackground", "rgba(255, 200, 0, 0.2)"], + ["--vscode-editor-inlineValuesForeground", "rgba(255, 255, 255, 0.5)"], + ["--vscode-editor-lineHighlightBorder", "#282828"], + ["--vscode-editor-linkedEditingBackground", "rgba(255, 0, 0, 0.3)"], + ["--vscode-editor-placeholder.foreground", "rgba(255, 255, 255, 0.34)"], + ["--vscode-editor-rangeHighlightBackground", "rgba(255, 255, 255, 0.04)"], + ["--vscode-editor-selectionBackground", "#264f78"], + ["--vscode-editor-selectionHighlightBackground", "rgba(173, 214, 255, 0.15)"], + ["--vscode-editor-snippetFinalTabstopHighlightBorder", "#525252"], + [ + "--vscode-editor-snippetTabstopHighlightBackground", + "rgba(124, 124, 124, 0.3)", + ], + ["--vscode-editor-stackFrameHighlightBackground", "rgba(255, 255, 0, 0.2)"], + ["--vscode-editor-symbolHighlightBackground", "rgba(234, 92, 0, 0.33)"], + ["--vscode-editor-wordHighlightBackground", "rgba(87, 87, 87, 0.72)"], + ["--vscode-editor-wordHighlightStrongBackground", "rgba(0, 73, 114, 0.72)"], + ["--vscode-editor-wordHighlightTextBackground", "rgba(87, 87, 87, 0.72)"], + ["--vscode-editorActionList-background", "#202020"], + ["--vscode-editorActionList-focusBackground", "#04395e"], + ["--vscode-editorActionList-focusForeground", "#ffffff"], + ["--vscode-editorActionList-foreground", "#cccccc"], + ["--vscode-editorActiveLineNumber-foreground", "#c6c6c6"], + ["--vscode-editorBracketHighlight-foreground1", "#ffd700"], + ["--vscode-editorBracketHighlight-foreground2", "#da70d6"], + ["--vscode-editorBracketHighlight-foreground3", "#179fff"], + ["--vscode-editorBracketHighlight-foreground4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketHighlight-foreground5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketHighlight-foreground6", "rgba(0, 0, 0, 0)"], + [ + "--vscode-editorBracketHighlight-unexpectedBracket.foreground", + "rgba(255, 18, 18, 0.8)", + ], + ["--vscode-editorBracketMatch-background", "rgba(0, 100, 0, 0.1)"], + ["--vscode-editorBracketMatch-border", "#888888"], + ["--vscode-editorBracketPairGuide-activeBackground1", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground2", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground3", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground6", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background1", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background2", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background3", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background6", "rgba(0, 0, 0, 0)"], + ["--vscode-editorCodeLens-foreground", "#999999"], + [ + "--vscode-editorCommentsWidget-rangeActiveBackground", + "rgba(0, 120, 212, 0.1)", + ], + ["--vscode-editorCommentsWidget-rangeBackground", "rgba(0, 120, 212, 0.1)"], + ["--vscode-editorCommentsWidget-replyInputBackground", "#252526"], + ["--vscode-editorCommentsWidget-resolvedBorder", "rgba(204, 204, 204, 0.5)"], + ["--vscode-editorCommentsWidget-unresolvedBorder", "#0078d4"], + ["--vscode-editorCursor-foreground", "#aeafad"], + ["--vscode-editorError-foreground", "#f14c4c"], + ["--vscode-editorGhostText-foreground", "rgba(255, 255, 255, 0.34)"], + ["--vscode-editorGroup-border", "rgba(255, 255, 255, 0.09)"], + ["--vscode-editorGroup-dropBackground", "rgba(83, 89, 93, 0.5)"], + ["--vscode-editorGroup-dropIntoPromptBackground", "#202020"], + ["--vscode-editorGroup-dropIntoPromptForeground", "#cccccc"], + ["--vscode-editorGroupHeader-noTabsBackground", "#1f1f1f"], + ["--vscode-editorGroupHeader-tabsBackground", "#181818"], + ["--vscode-editorGroupHeader-tabsBorder", "#2b2b2b"], + ["--vscode-editorGutter-addedBackground", "#2ea043"], + ["--vscode-editorGutter-addedSecondaryBackground", "#175021"], + ["--vscode-editorGutter-background", "#1f1f1f"], + ["--vscode-editorGutter-commentDraftGlyphForeground", "#cccccc"], + ["--vscode-editorGutter-commentGlyphForeground", "#cccccc"], + ["--vscode-editorGutter-commentRangeForeground", "#37373d"], + ["--vscode-editorGutter-commentUnresolvedGlyphForeground", "#cccccc"], + ["--vscode-editorGutter-deletedBackground", "#f85149"], + ["--vscode-editorGutter-deletedSecondaryBackground", "#b91007"], + ["--vscode-editorGutter-foldingControlForeground", "#cccccc"], + ["--vscode-editorGutter-itemBackground", "#37373d"], + ["--vscode-editorGutter-itemGlyphForeground", "#cccccc"], + ["--vscode-editorGutter-modifiedBackground", "#0078d4"], + ["--vscode-editorGutter-modifiedSecondaryBackground", "#003c6a"], + ["--vscode-editorHint-foreground", "rgba(238, 238, 238, 0.7)"], + ["--vscode-editorHoverWidget-background", "#202020"], + ["--vscode-editorHoverWidget-border", "#454545"], + ["--vscode-editorHoverWidget-foreground", "#cccccc"], + ["--vscode-editorHoverWidget-highlightForeground", "#2aaaff"], + ["--vscode-editorHoverWidget-statusBarBackground", "#262626"], + ["--vscode-editorIndentGuide-activeBackground", "rgba(227, 228, 226, 0.16)"], + ["--vscode-editorIndentGuide-activeBackground1", "#707070"], + ["--vscode-editorIndentGuide-activeBackground2", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-activeBackground3", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-activeBackground4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-activeBackground5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-activeBackground6", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background", "rgba(227, 228, 226, 0.16)"], + ["--vscode-editorIndentGuide-background1", "#404040"], + ["--vscode-editorIndentGuide-background2", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background3", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background6", "rgba(0, 0, 0, 0)"], + ["--vscode-editorInfo-foreground", "#59a4f9"], + ["--vscode-editorInlayHint-background", "rgba(97, 97, 97, 0.1)"], + ["--vscode-editorInlayHint-foreground", "#969696"], + ["--vscode-editorInlayHint-parameterBackground", "rgba(97, 97, 97, 0.1)"], + ["--vscode-editorInlayHint-parameterForeground", "#969696"], + ["--vscode-editorInlayHint-typeBackground", "rgba(97, 97, 97, 0.1)"], + ["--vscode-editorInlayHint-typeForeground", "#969696"], + ["--vscode-editorLightBulb-foreground", "#ffcc00"], + ["--vscode-editorLightBulbAi-foreground", "#ffcc00"], + ["--vscode-editorLightBulbAutoFix-foreground", "#75beff"], + ["--vscode-editorLineNumber-activeForeground", "#cccccc"], + ["--vscode-editorLineNumber-foreground", "#6e7681"], + ["--vscode-editorLink-activeForeground", "#4e94ce"], + ["--vscode-editorMarkerNavigation-background", "#1f1f1f"], + ["--vscode-editorMarkerNavigationError-background", "#f14c4c"], + [ + "--vscode-editorMarkerNavigationError-headerBackground", + "rgba(241, 76, 76, 0.1)", + ], + ["--vscode-editorMarkerNavigationInfo-background", "#59a4f9"], + [ + "--vscode-editorMarkerNavigationInfo-headerBackground", + "rgba(89, 164, 249, 0.1)", + ], + ["--vscode-editorMarkerNavigationWarning-background", "#cca700"], + [ + "--vscode-editorMarkerNavigationWarning-headerBackground", + "rgba(204, 167, 0, 0.1)", + ], + ["--vscode-editorMinimap-inlineChatInserted", "rgba(156, 204, 44, 0.12)"], + ["--vscode-editorMultiCursor-primary.foreground", "#aeafad"], + ["--vscode-editorMultiCursor-secondary.foreground", "#aeafad"], + ["--vscode-editorOverviewRuler-addedForeground", "rgba(46, 160, 67, 0.6)"], + ["--vscode-editorOverviewRuler-border", "#010409"], + ["--vscode-editorOverviewRuler-bracketMatchForeground", "#a0a0a0"], + ["--vscode-editorOverviewRuler-commentDraftForeground", "#37373d"], + ["--vscode-editorOverviewRuler-commentForeground", "#37373d"], + ["--vscode-editorOverviewRuler-commentUnresolvedForeground", "#37373d"], + [ + "--vscode-editorOverviewRuler-commonContentForeground", + "rgba(96, 96, 96, 0.4)", + ], + [ + "--vscode-editorOverviewRuler-currentContentForeground", + "rgba(64, 200, 174, 0.5)", + ], + ["--vscode-editorOverviewRuler-deletedForeground", "rgba(248, 81, 73, 0.6)"], + ["--vscode-editorOverviewRuler-errorForeground", "rgba(255, 18, 18, 0.7)"], + [ + "--vscode-editorOverviewRuler-findMatchForeground", + "rgba(209, 134, 22, 0.49)", + ], + [ + "--vscode-editorOverviewRuler-incomingContentForeground", + "rgba(64, 166, 255, 0.5)", + ], + ["--vscode-editorOverviewRuler-infoForeground", "#59a4f9"], + [ + "--vscode-editorOverviewRuler-inlineChatInserted", + "rgba(156, 204, 44, 0.12)", + ], + ["--vscode-editorOverviewRuler-inlineChatRemoved", "rgba(255, 0, 0, 0.12)"], + ["--vscode-editorOverviewRuler-modifiedForeground", "rgba(0, 120, 212, 0.6)"], + [ + "--vscode-editorOverviewRuler-rangeHighlightForeground", + "rgba(0, 122, 204, 0.6)", + ], + [ + "--vscode-editorOverviewRuler-selectionHighlightForeground", + "rgba(160, 160, 160, 0.8)", + ], + ["--vscode-editorOverviewRuler-warningForeground", "#cca700"], + [ + "--vscode-editorOverviewRuler-wordHighlightForeground", + "rgba(160, 160, 160, 0.8)", + ], + [ + "--vscode-editorOverviewRuler-wordHighlightStrongForeground", + "rgba(192, 160, 192, 0.8)", + ], + [ + "--vscode-editorOverviewRuler-wordHighlightTextForeground", + "rgba(160, 160, 160, 0.8)", + ], + ["--vscode-editorPane-background", "#1f1f1f"], + ["--vscode-editorRuler-foreground", "#5a5a5a"], + ["--vscode-editorStickyScroll-background", "#1f1f1f"], + ["--vscode-editorStickyScroll-shadow", "#000000"], + ["--vscode-editorStickyScrollGutter-background", "#1f1f1f"], + ["--vscode-editorStickyScrollHover-background", "#2a2d2e"], + ["--vscode-editorSuggestWidget-background", "#202020"], + ["--vscode-editorSuggestWidget-border", "#454545"], + ["--vscode-editorSuggestWidget-focusHighlightForeground", "#2aaaff"], + ["--vscode-editorSuggestWidget-foreground", "#cccccc"], + ["--vscode-editorSuggestWidget-highlightForeground", "#2aaaff"], + ["--vscode-editorSuggestWidget-selectedBackground", "#04395e"], + ["--vscode-editorSuggestWidget-selectedForeground", "#ffffff"], + ["--vscode-editorSuggestWidget-selectedIconForeground", "#ffffff"], + ["--vscode-editorSuggestWidgetStatus-foreground", "rgba(204, 204, 204, 0.5)"], + ["--vscode-editorUnicodeHighlight-border", "#cca700"], + ["--vscode-editorUnnecessaryCode-opacity", "rgba(0, 0, 0, 0.67)"], + ["--vscode-editorWarning-foreground", "#cca700"], + ["--vscode-editorWhitespace-foreground", "rgba(227, 228, 226, 0.16)"], + ["--vscode-editorWidget-background", "#202020"], + ["--vscode-editorWidget-border", "#454545"], + ["--vscode-editorWidget-foreground", "#cccccc"], + ["--vscode-errorForeground", "#f85149"], + ["--vscode-extensionBadge-remoteBackground", "#0078d4"], + ["--vscode-extensionBadge-remoteForeground", "#ffffff"], + ["--vscode-extensionButton-background", "rgba(0, 0, 0, 0)"], + ["--vscode-extensionButton-border", "rgba(255, 255, 255, 0.1)"], + ["--vscode-extensionButton-foreground", "#cccccc"], + ["--vscode-extensionButton-hoverBackground", "#2b2b2b"], + ["--vscode-extensionButton-prominentBackground", "#0078d4"], + ["--vscode-extensionButton-prominentForeground", "#ffffff"], + ["--vscode-extensionButton-prominentHoverBackground", "#026ec1"], + ["--vscode-extensionButton-separator", "rgba(255, 255, 255, 0.4)"], + ["--vscode-extensionIcon-preReleaseForeground", "#1d9271"], + ["--vscode-extensionIcon-privateForeground", "rgba(255, 255, 255, 0.38)"], + ["--vscode-extensionIcon-sponsorForeground", "#d758b3"], + ["--vscode-extensionIcon-starForeground", "#ff8e00"], + ["--vscode-extensionIcon-verifiedForeground", "#4daafc"], + ["--vscode-focusBorder", "#0078d4"], + ["--vscode-font-size", "13px"], + ["--vscode-font-weight", "normal"], + ["--vscode-foreground", "#cccccc"], + ["--vscode-gauge-background", "rgba(0, 122, 204, 0.3)"], + ["--vscode-gauge-errorBackground", "rgba(190, 17, 0, 0.3)"], + ["--vscode-gauge-errorForeground", "#be1100"], + ["--vscode-gauge-foreground", "#007acc"], + ["--vscode-gauge-warningBackground", "rgba(184, 149, 0, 0.3)"], + ["--vscode-gauge-warningForeground", "#b89500"], + ["--vscode-icon-foreground", "#cccccc"], + ["--vscode-inlineChat-background", "#202020"], + ["--vscode-inlineChat-border", "#454545"], + ["--vscode-inlineChat-foreground", "#cccccc"], + ["--vscode-inlineChat-shadow", "rgba(0, 0, 0, 0.36)"], + ["--vscode-inlineChatDiff-inserted", "rgba(156, 204, 44, 0.1)"], + ["--vscode-inlineChatDiff-removed", "rgba(255, 0, 0, 0.1)"], + ["--vscode-inlineChatInput-background", "#313131"], + ["--vscode-inlineChatInput-border", "#454545"], + ["--vscode-inlineChatInput-focusBorder", "#0078d4"], + ["--vscode-inlineChatInput-placeholderForeground", "#989898"], + ["--vscode-inlineEdit-gutterIndicator.background", "rgba(24, 24, 24, 0.5)"], + [ + "--vscode-inlineEdit-gutterIndicator.primaryBackground", + "rgba(0, 120, 212, 0.4)", + ], + ["--vscode-inlineEdit-gutterIndicator.primaryBorder", "#0078d4"], + ["--vscode-inlineEdit-gutterIndicator.primaryForeground", "#ffffff"], + ["--vscode-inlineEdit-gutterIndicator.secondaryBackground", "#202020"], + ["--vscode-inlineEdit-gutterIndicator.secondaryBorder", "#454545"], + ["--vscode-inlineEdit-gutterIndicator.secondaryForeground", "#cccccc"], + ["--vscode-inlineEdit-gutterIndicator.successfulBackground", "#0078d4"], + ["--vscode-inlineEdit-gutterIndicator.successfulBorder", "#0078d4"], + ["--vscode-inlineEdit-gutterIndicator.successfulForeground", "#ffffff"], + ["--vscode-inlineEdit-modifiedBackground", "rgba(156, 204, 44, 0.06)"], + ["--vscode-inlineEdit-modifiedBorder", "rgba(156, 204, 44, 0.2)"], + [ + "--vscode-inlineEdit-modifiedChangedLineBackground", + "rgba(155, 185, 85, 0.14)", + ], + [ + "--vscode-inlineEdit-modifiedChangedTextBackground", + "rgba(156, 204, 44, 0.14)", + ], + ["--vscode-inlineEdit-originalBackground", "rgba(255, 0, 0, 0.04)"], + ["--vscode-inlineEdit-originalBorder", "rgba(255, 0, 0, 0.2)"], + [ + "--vscode-inlineEdit-originalChangedLineBackground", + "rgba(255, 0, 0, 0.16)", + ], + [ + "--vscode-inlineEdit-originalChangedTextBackground", + "rgba(255, 0, 0, 0.16)", + ], + [ + "--vscode-inlineEdit-tabWillAcceptModifiedBorder", + "rgba(156, 204, 44, 0.2)", + ], + ["--vscode-inlineEdit-tabWillAcceptOriginalBorder", "rgba(255, 0, 0, 0.2)"], + ["--vscode-input-background", "#313131"], + ["--vscode-input-border", "#3c3c3c"], + ["--vscode-input-foreground", "#cccccc"], + ["--vscode-input-placeholderForeground", "#989898"], + ["--vscode-inputOption-activeBackground", "rgba(36, 137, 219, 0.51)"], + ["--vscode-inputOption-activeBorder", "#2488db"], + ["--vscode-inputOption-activeForeground", "#ffffff"], + ["--vscode-inputOption-hoverBackground", "rgba(90, 93, 94, 0.5)"], + ["--vscode-inputValidation-errorBackground", "#5a1d1d"], + ["--vscode-inputValidation-errorBorder", "#be1100"], + ["--vscode-inputValidation-infoBackground", "#063b49"], + ["--vscode-inputValidation-infoBorder", "#007acc"], + ["--vscode-inputValidation-warningBackground", "#352a05"], + ["--vscode-inputValidation-warningBorder", "#b89500"], + ["--vscode-interactive-activeCodeBorder", "#007acc"], + ["--vscode-interactive-inactiveCodeBorder", "#37373d"], + ["--vscode-keybindingLabel-background", "rgba(128, 128, 128, 0.17)"], + ["--vscode-keybindingLabel-border", "rgba(51, 51, 51, 0.6)"], + ["--vscode-keybindingLabel-bottomBorder", "rgba(68, 68, 68, 0.6)"], + ["--vscode-keybindingLabel-foreground", "#cccccc"], + ["--vscode-keybindingTable-headerBackground", "rgba(204, 204, 204, 0.04)"], + ["--vscode-keybindingTable-rowsBackground", "rgba(204, 204, 204, 0.04)"], + ["--vscode-list-activeSelectionBackground", "#04395e"], + ["--vscode-list-activeSelectionForeground", "#ffffff"], + ["--vscode-list-activeSelectionIconForeground", "#ffffff"], + ["--vscode-list-deemphasizedForeground", "#8c8c8c"], + ["--vscode-list-dropBackground", "#383b3d"], + ["--vscode-list-dropBetweenBackground", "#cccccc"], + ["--vscode-list-errorForeground", "#f88070"], + ["--vscode-list-filterMatchBackground", "rgba(234, 92, 0, 0.33)"], + ["--vscode-list-focusHighlightForeground", "#2aaaff"], + ["--vscode-list-focusOutline", "#0078d4"], + ["--vscode-list-highlightForeground", "#2aaaff"], + ["--vscode-list-hoverBackground", "#2a2d2e"], + ["--vscode-list-inactiveSelectionBackground", "#37373d"], + ["--vscode-list-invalidItemForeground", "#b89500"], + ["--vscode-list-warningForeground", "#cca700"], + ["--vscode-listFilterWidget-background", "#202020"], + ["--vscode-listFilterWidget-noMatchesOutline", "#be1100"], + ["--vscode-listFilterWidget-outline", "rgba(0, 0, 0, 0)"], + ["--vscode-listFilterWidget-shadow", "rgba(0, 0, 0, 0.36)"], + ["--vscode-markdownAlert-caution.foreground", "#f14c4c"], + ["--vscode-markdownAlert-important.foreground", "#b180d7"], + ["--vscode-markdownAlert-note.foreground", "#59a4f9"], + ["--vscode-markdownAlert-tip.foreground", "#89d185"], + ["--vscode-markdownAlert-warning.foreground", "#cca700"], + ["--vscode-mcpIcon-starForeground", "#ff8e00"], + ["--vscode-menu-background", "#1f1f1f"], + ["--vscode-menu-border", "#454545"], + ["--vscode-menu-foreground", "#cccccc"], + ["--vscode-menu-selectionBackground", "#0078d4"], + ["--vscode-menu-selectionForeground", "#ffffff"], + ["--vscode-menu-separatorBackground", "#454545"], + ["--vscode-menubar-selectionBackground", "rgba(90, 93, 94, 0.31)"], + ["--vscode-menubar-selectionForeground", "#cccccc"], + ["--vscode-merge-commonContentBackground", "rgba(96, 96, 96, 0.16)"], + ["--vscode-merge-commonHeaderBackground", "rgba(96, 96, 96, 0.4)"], + ["--vscode-merge-currentContentBackground", "rgba(64, 200, 174, 0.2)"], + ["--vscode-merge-currentHeaderBackground", "rgba(64, 200, 174, 0.5)"], + ["--vscode-merge-incomingContentBackground", "rgba(64, 166, 255, 0.2)"], + ["--vscode-merge-incomingHeaderBackground", "rgba(64, 166, 255, 0.5)"], + ["--vscode-mergeEditor-change.background", "rgba(155, 185, 85, 0.2)"], + ["--vscode-mergeEditor-change.word.background", "rgba(156, 204, 44, 0.2)"], + ["--vscode-mergeEditor-changeBase.background", "#4b1818"], + ["--vscode-mergeEditor-changeBase.word.background", "#6f1313"], + [ + "--vscode-mergeEditor-conflict.handled.minimapOverViewRuler", + "rgba(173, 172, 168, 0.93)", + ], + [ + "--vscode-mergeEditor-conflict.handledFocused.border", + "rgba(193, 193, 193, 0.8)", + ], + [ + "--vscode-mergeEditor-conflict.handledUnfocused.border", + "rgba(134, 134, 134, 0.29)", + ], + [ + "--vscode-mergeEditor-conflict.input1.background", + "rgba(64, 200, 174, 0.2)", + ], + [ + "--vscode-mergeEditor-conflict.input2.background", + "rgba(64, 166, 255, 0.2)", + ], + ["--vscode-mergeEditor-conflict.unhandled.minimapOverViewRuler", "#fcba03"], + ["--vscode-mergeEditor-conflict.unhandledFocused.border", "#ffa600"], + [ + "--vscode-mergeEditor-conflict.unhandledUnfocused.border", + "rgba(255, 166, 0, 0.48)", + ], + [ + "--vscode-mergeEditor-conflictingLines.background", + "rgba(255, 234, 0, 0.28)", + ], + ["--vscode-minimap-chatEditHighlight", "rgba(31, 31, 31, 0.6)"], + ["--vscode-minimap-errorHighlight", "rgba(255, 18, 18, 0.7)"], + ["--vscode-minimap-findMatchHighlight", "rgba(234, 92, 0, 0.33)"], + ["--vscode-minimap-foregroundOpacity", "#000000"], + ["--vscode-minimap-infoHighlight", "#59a4f9"], + ["--vscode-minimap-selectionHighlight", "#264f78"], + [ + "--vscode-minimap-selectionOccurrenceHighlight", + "rgba(173, 214, 255, 0.15)", + ], + ["--vscode-minimap-warningHighlight", "#cca700"], + ["--vscode-minimapGutter-addedBackground", "#2ea043"], + ["--vscode-minimapGutter-deletedBackground", "#f85149"], + ["--vscode-minimapGutter-modifiedBackground", "#0078d4"], + ["--vscode-minimapSlider-activeBackground", "rgba(191, 191, 191, 0.2)"], + ["--vscode-minimapSlider-background", "rgba(121, 121, 121, 0.2)"], + ["--vscode-minimapSlider-hoverBackground", "rgba(100, 100, 100, 0.35)"], + ["--vscode-multiDiffEditor-background", "#1f1f1f"], + ["--vscode-multiDiffEditor-border", "#2b2b2b"], + ["--vscode-multiDiffEditor-headerBackground", "#262626"], + ["--vscode-notebook-cellBorderColor", "#37373d"], + ["--vscode-notebook-cellEditorBackground", "#181818"], + ["--vscode-notebook-cellInsertionIndicator", "#0078d4"], + [ + "--vscode-notebook-cellStatusBarItemHoverBackground", + "rgba(255, 255, 255, 0.15)", + ], + ["--vscode-notebook-cellToolbarSeparator", "rgba(128, 128, 128, 0.35)"], + ["--vscode-notebook-editorBackground", "#1f1f1f"], + ["--vscode-notebook-focusedCellBorder", "#0078d4"], + ["--vscode-notebook-focusedEditorBorder", "#0078d4"], + ["--vscode-notebook-inactiveFocusedCellBorder", "#37373d"], + ["--vscode-notebook-selectedCellBackground", "#37373d"], + ["--vscode-notebook-selectedCellBorder", "#37373d"], + ["--vscode-notebook-symbolHighlightBackground", "rgba(255, 255, 255, 0.04)"], + ["--vscode-notebookEditorOverviewRuler-runningCellForeground", "#89d185"], + [ + "--vscode-notebookScrollbarSlider-activeBackground", + "rgba(191, 191, 191, 0.4)", + ], + ["--vscode-notebookScrollbarSlider-background", "rgba(121, 121, 121, 0.4)"], + [ + "--vscode-notebookScrollbarSlider-hoverBackground", + "rgba(100, 100, 100, 0.7)", + ], + ["--vscode-notebookStatusErrorIcon-foreground", "#f85149"], + ["--vscode-notebookStatusRunningIcon-foreground", "#cccccc"], + ["--vscode-notebookStatusSuccessIcon-foreground", "#89d185"], + ["--vscode-notificationCenter-border", "#313131"], + ["--vscode-notificationCenterHeader-background", "#1f1f1f"], + ["--vscode-notificationCenterHeader-foreground", "#cccccc"], + ["--vscode-notificationLink-foreground", "#4daafc"], + ["--vscode-notifications-background", "#1f1f1f"], + ["--vscode-notifications-border", "#2b2b2b"], + ["--vscode-notifications-foreground", "#cccccc"], + ["--vscode-notificationsErrorIcon-foreground", "#f14c4c"], + ["--vscode-notificationsInfoIcon-foreground", "#59a4f9"], + ["--vscode-notificationsWarningIcon-foreground", "#cca700"], + ["--vscode-notificationToast-border", "#313131"], + ["--vscode-panel-background", "#181818"], + ["--vscode-panel-border", "#2b2b2b"], + ["--vscode-panel-dropBorder", "#cccccc"], + ["--vscode-panelInput-border", "#2b2b2b"], + ["--vscode-panelSection-border", "#2b2b2b"], + ["--vscode-panelSection-dropBackground", "rgba(83, 89, 93, 0.5)"], + ["--vscode-panelSectionHeader-background", "rgba(128, 128, 128, 0.2)"], + ["--vscode-panelStickyScroll-background", "#181818"], + ["--vscode-panelStickyScroll-shadow", "#000000"], + ["--vscode-panelTitle-activeBorder", "#0078d4"], + ["--vscode-panelTitle-activeForeground", "#cccccc"], + ["--vscode-panelTitle-inactiveForeground", "#9d9d9d"], + ["--vscode-panelTitleBadge-background", "#0078d4"], + ["--vscode-panelTitleBadge-foreground", "#ffffff"], + ["--vscode-peekView-border", "#59a4f9"], + ["--vscode-peekViewEditor-background", "#1f1f1f"], + [ + "--vscode-peekViewEditor-matchHighlightBackground", + "rgba(187, 128, 9, 0.4)", + ], + ["--vscode-peekViewEditorGutter-background", "#1f1f1f"], + ["--vscode-peekViewEditorStickyScroll-background", "#1f1f1f"], + ["--vscode-peekViewEditorStickyScrollGutter-background", "#1f1f1f"], + ["--vscode-peekViewResult-background", "#1f1f1f"], + ["--vscode-peekViewResult-fileForeground", "#ffffff"], + ["--vscode-peekViewResult-lineForeground", "#bbbbbb"], + [ + "--vscode-peekViewResult-matchHighlightBackground", + "rgba(187, 128, 9, 0.4)", + ], + ["--vscode-peekViewResult-selectionBackground", "rgba(51, 153, 255, 0.2)"], + ["--vscode-peekViewResult-selectionForeground", "#ffffff"], + ["--vscode-peekViewTitle-background", "#252526"], + ["--vscode-peekViewTitleDescription-foreground", "rgba(204, 204, 204, 0.7)"], + ["--vscode-peekViewTitleLabel-foreground", "#ffffff"], + ["--vscode-pickerGroup-border", "#3c3c3c"], + ["--vscode-pickerGroup-foreground", "#3794ff"], + ["--vscode-ports-iconRunningProcessForeground", "#369432"], + ["--vscode-problemsErrorIcon-foreground", "#f14c4c"], + ["--vscode-problemsInfoIcon-foreground", "#59a4f9"], + ["--vscode-problemsWarningIcon-foreground", "#cca700"], + ["--vscode-profileBadge-background", "#4d4d4d"], + ["--vscode-profileBadge-foreground", "#ffffff"], + ["--vscode-profiles-sashBorder", "#2b2b2b"], + ["--vscode-progressBar-background", "#0078d4"], + ["--vscode-quickInput-background", "#222222"], + ["--vscode-quickInput-foreground", "#cccccc"], + ["--vscode-quickInputList-focusBackground", "#04395e"], + ["--vscode-quickInputList-focusForeground", "#ffffff"], + ["--vscode-quickInputList-focusIconForeground", "#ffffff"], + ["--vscode-quickInputTitle-background", "rgba(255, 255, 255, 0.1)"], + ["--vscode-radio-activeBackground", "rgba(36, 137, 219, 0.51)"], + ["--vscode-radio-activeBorder", "#2488db"], + ["--vscode-radio-activeForeground", "#ffffff"], + ["--vscode-radio-inactiveBorder", "rgba(255, 255, 255, 0.2)"], + ["--vscode-radio-inactiveHoverBackground", "rgba(90, 93, 94, 0.5)"], + ["--vscode-remoteHub-decorations.addedForegroundColor", "#81b88b"], + ["--vscode-remoteHub-decorations.conflictForegroundColor", "#e4676b"], + ["--vscode-remoteHub-decorations.deletedForegroundColor", "#c74e39"], + ["--vscode-remoteHub-decorations.ignoredResourceForeground", "#8c8c8c"], + ["--vscode-remoteHub-decorations.incomingAddedForegroundColor", "#81b88b"], + ["--vscode-remoteHub-decorations.incomingDeletedForegroundColor", "#c74e39"], + ["--vscode-remoteHub-decorations.incomingModifiedForegroundColor", "#e2c08d"], + ["--vscode-remoteHub-decorations.incomingRenamedForegroundColor", "#73c991"], + ["--vscode-remoteHub-decorations.modifiedForegroundColor", "#e2c08d"], + ["--vscode-remoteHub-decorations.possibleConflictForegroundColor", "#cca700"], + ["--vscode-remoteHub-decorations.submoduleForegroundColor", "#8db9e2"], + [ + "--vscode-remoteHub-decorations.workspaceRepositoriesView.hasUncommittedChangesForegroundColor", + "#e2c08d", + ], + ["--vscode-sash-hoverBorder", "#0078d4"], + ["--vscode-scmGraph-foreground1", "#ffb000"], + ["--vscode-scmGraph-foreground2", "#dc267f"], + ["--vscode-scmGraph-foreground3", "#994f00"], + ["--vscode-scmGraph-foreground4", "#40b0a6"], + ["--vscode-scmGraph-foreground5", "#b66dff"], + ["--vscode-scmGraph-historyItemBaseRefColor", "#ea5c00"], + ["--vscode-scmGraph-historyItemHoverAdditionsForeground", "#81b88b"], + ["--vscode-scmGraph-historyItemHoverDefaultLabelBackground", "#616161"], + ["--vscode-scmGraph-historyItemHoverDefaultLabelForeground", "#cccccc"], + ["--vscode-scmGraph-historyItemHoverDeletionsForeground", "#c74e39"], + ["--vscode-scmGraph-historyItemHoverLabelForeground", "#181818"], + ["--vscode-scmGraph-historyItemRefColor", "#59a4f9"], + ["--vscode-scmGraph-historyItemRemoteRefColor", "#b180d7"], + ["--vscode-scrollbar-shadow", "#000000"], + ["--vscode-scrollbarSlider-activeBackground", "rgba(191, 191, 191, 0.4)"], + ["--vscode-scrollbarSlider-background", "rgba(121, 121, 121, 0.4)"], + ["--vscode-scrollbarSlider-hoverBackground", "rgba(100, 100, 100, 0.7)"], + ["--vscode-search-resultsInfoForeground", "rgba(204, 204, 204, 0.65)"], + ["--vscode-searchEditor-findMatchBackground", "rgba(234, 92, 0, 0.22)"], + ["--vscode-searchEditor-textInputBorder", "#3c3c3c"], + ["--vscode-settings-checkboxBackground", "#313131"], + ["--vscode-settings-checkboxBorder", "#3c3c3c"], + ["--vscode-settings-checkboxForeground", "#cccccc"], + ["--vscode-settings-dropdownBackground", "#313131"], + ["--vscode-settings-dropdownBorder", "#3c3c3c"], + ["--vscode-settings-dropdownForeground", "#cccccc"], + ["--vscode-settings-dropdownListBorder", "#454545"], + ["--vscode-settings-focusedRowBackground", "rgba(42, 45, 46, 0.6)"], + ["--vscode-settings-focusedRowBorder", "#0078d4"], + ["--vscode-settings-headerBorder", "#2b2b2b"], + ["--vscode-settings-headerForeground", "#ffffff"], + ["--vscode-settings-modifiedItemIndicator", "rgba(187, 128, 9, 0.4)"], + ["--vscode-settings-numberInputBackground", "#313131"], + ["--vscode-settings-numberInputBorder", "#3c3c3c"], + ["--vscode-settings-numberInputForeground", "#cccccc"], + ["--vscode-settings-rowHoverBackground", "rgba(42, 45, 46, 0.3)"], + ["--vscode-settings-sashBorder", "#2b2b2b"], + [ + "--vscode-settings-settingsHeaderHoverForeground", + "rgba(255, 255, 255, 0.7)", + ], + ["--vscode-settings-textInputBackground", "#313131"], + ["--vscode-settings-textInputBorder", "#3c3c3c"], + ["--vscode-settings-textInputForeground", "#cccccc"], + ["--vscode-sideBar-background", "#181818"], + ["--vscode-sideBar-border", "#2b2b2b"], + ["--vscode-sideBar-dropBackground", "rgba(83, 89, 93, 0.5)"], + ["--vscode-sideBar-foreground", "#cccccc"], + ["--vscode-sideBarActivityBarTop-border", "#2b2b2b"], + ["--vscode-sideBarSectionHeader-background", "#181818"], + ["--vscode-sideBarSectionHeader-border", "#2b2b2b"], + ["--vscode-sideBarSectionHeader-foreground", "#cccccc"], + ["--vscode-sideBarStickyScroll-background", "#181818"], + ["--vscode-sideBarStickyScroll-shadow", "#000000"], + ["--vscode-sideBarTitle-background", "#181818"], + ["--vscode-sideBarTitle-foreground", "#cccccc"], + ["--vscode-sideBySideEditor-horizontalBorder", "rgba(255, 255, 255, 0.09)"], + ["--vscode-sideBySideEditor-verticalBorder", "rgba(255, 255, 255, 0.09)"], + ["--vscode-simpleFindWidget-sashBorder", "#454545"], + ["--vscode-statusBar-background", "#181818"], + ["--vscode-statusBar-border", "#2b2b2b"], + ["--vscode-statusBar-debuggingBackground", "#0078d4"], + ["--vscode-statusBar-debuggingBorder", "#2b2b2b"], + ["--vscode-statusBar-debuggingForeground", "#ffffff"], + ["--vscode-statusBar-focusBorder", "#0078d4"], + ["--vscode-statusBar-foreground", "#cccccc"], + ["--vscode-statusBar-noFolderBackground", "#1f1f1f"], + ["--vscode-statusBar-noFolderBorder", "#2b2b2b"], + ["--vscode-statusBar-noFolderForeground", "#cccccc"], + ["--vscode-statusBarItem-activeBackground", "rgba(255, 255, 255, 0.18)"], + [ + "--vscode-statusBarItem-compactHoverBackground", + "rgba(255, 255, 255, 0.12)", + ], + ["--vscode-statusBarItem-errorBackground", "#b91007"], + ["--vscode-statusBarItem-errorForeground", "#ffffff"], + ["--vscode-statusBarItem-errorHoverBackground", "rgba(241, 241, 241, 0.2)"], + ["--vscode-statusBarItem-errorHoverForeground", "#ffffff"], + ["--vscode-statusBarItem-focusBorder", "#0078d4"], + ["--vscode-statusBarItem-hoverBackground", "rgba(241, 241, 241, 0.2)"], + ["--vscode-statusBarItem-hoverForeground", "#ffffff"], + ["--vscode-statusBarItem-offlineBackground", "#6c1717"], + ["--vscode-statusBarItem-offlineForeground", "#ffffff"], + ["--vscode-statusBarItem-offlineHoverBackground", "rgba(241, 241, 241, 0.2)"], + ["--vscode-statusBarItem-offlineHoverForeground", "#ffffff"], + ["--vscode-statusBarItem-prominentBackground", "rgba(110, 118, 129, 0.4)"], + ["--vscode-statusBarItem-prominentForeground", "#cccccc"], + [ + "--vscode-statusBarItem-prominentHoverBackground", + "rgba(241, 241, 241, 0.2)", + ], + ["--vscode-statusBarItem-prominentHoverForeground", "#ffffff"], + ["--vscode-statusBarItem-remoteBackground", "#0078d4"], + ["--vscode-statusBarItem-remoteForeground", "#ffffff"], + ["--vscode-statusBarItem-remoteHoverBackground", "rgba(241, 241, 241, 0.2)"], + ["--vscode-statusBarItem-remoteHoverForeground", "#ffffff"], + ["--vscode-statusBarItem-warningBackground", "#7a6400"], + ["--vscode-statusBarItem-warningForeground", "#ffffff"], + ["--vscode-statusBarItem-warningHoverBackground", "rgba(241, 241, 241, 0.2)"], + ["--vscode-statusBarItem-warningHoverForeground", "#ffffff"], + ["--vscode-strokeThickness", "1px"], + ["--vscode-symbolIcon-arrayForeground", "#cccccc"], + ["--vscode-symbolIcon-booleanForeground", "#cccccc"], + ["--vscode-symbolIcon-classForeground", "#ee9d28"], + ["--vscode-symbolIcon-colorForeground", "#cccccc"], + ["--vscode-symbolIcon-constantForeground", "#cccccc"], + ["--vscode-symbolIcon-constructorForeground", "#b180d7"], + ["--vscode-symbolIcon-enumeratorForeground", "#ee9d28"], + ["--vscode-symbolIcon-enumeratorMemberForeground", "#75beff"], + ["--vscode-symbolIcon-eventForeground", "#ee9d28"], + ["--vscode-symbolIcon-fieldForeground", "#75beff"], + ["--vscode-symbolIcon-fileForeground", "#cccccc"], + ["--vscode-symbolIcon-folderForeground", "#cccccc"], + ["--vscode-symbolIcon-functionForeground", "#b180d7"], + ["--vscode-symbolIcon-interfaceForeground", "#75beff"], + ["--vscode-symbolIcon-keyForeground", "#cccccc"], + ["--vscode-symbolIcon-keywordForeground", "#cccccc"], + ["--vscode-symbolIcon-methodForeground", "#b180d7"], + ["--vscode-symbolIcon-moduleForeground", "#cccccc"], + ["--vscode-symbolIcon-namespaceForeground", "#cccccc"], + ["--vscode-symbolIcon-nullForeground", "#cccccc"], + ["--vscode-symbolIcon-numberForeground", "#cccccc"], + ["--vscode-symbolIcon-objectForeground", "#cccccc"], + ["--vscode-symbolIcon-operatorForeground", "#cccccc"], + ["--vscode-symbolIcon-packageForeground", "#cccccc"], + ["--vscode-symbolIcon-propertyForeground", "#cccccc"], + ["--vscode-symbolIcon-referenceForeground", "#cccccc"], + ["--vscode-symbolIcon-snippetForeground", "#cccccc"], + ["--vscode-symbolIcon-stringForeground", "#cccccc"], + ["--vscode-symbolIcon-structForeground", "#cccccc"], + ["--vscode-symbolIcon-textForeground", "#cccccc"], + ["--vscode-symbolIcon-typeParameterForeground", "#cccccc"], + ["--vscode-symbolIcon-unitForeground", "#cccccc"], + ["--vscode-symbolIcon-variableForeground", "#75beff"], + ["--vscode-tab-activeBackground", "#1f1f1f"], + ["--vscode-tab-activeBorder", "#1f1f1f"], + ["--vscode-tab-activeBorderTop", "#0078d4"], + ["--vscode-tab-activeForeground", "#ffffff"], + ["--vscode-tab-activeModifiedBorder", "#3399cc"], + ["--vscode-tab-border", "#2b2b2b"], + ["--vscode-tab-dragAndDropBorder", "#ffffff"], + ["--vscode-tab-hoverBackground", "#1f1f1f"], + ["--vscode-tab-inactiveBackground", "#181818"], + ["--vscode-tab-inactiveForeground", "#9d9d9d"], + ["--vscode-tab-inactiveModifiedBorder", "rgba(51, 153, 204, 0.5)"], + ["--vscode-tab-lastPinnedBorder", "rgba(204, 204, 204, 0.2)"], + ["--vscode-tab-selectedBackground", "#222222"], + ["--vscode-tab-selectedBorderTop", "#6caddf"], + ["--vscode-tab-selectedForeground", "rgba(255, 255, 255, 0.63)"], + ["--vscode-tab-unfocusedActiveBackground", "#1f1f1f"], + ["--vscode-tab-unfocusedActiveBorder", "#1f1f1f"], + ["--vscode-tab-unfocusedActiveBorderTop", "#2b2b2b"], + ["--vscode-tab-unfocusedActiveForeground", "rgba(255, 255, 255, 0.5)"], + ["--vscode-tab-unfocusedActiveModifiedBorder", "rgba(51, 153, 204, 0.5)"], + ["--vscode-tab-unfocusedHoverBackground", "#1f1f1f"], + ["--vscode-tab-unfocusedInactiveBackground", "#181818"], + ["--vscode-tab-unfocusedInactiveForeground", "rgba(157, 157, 157, 0.5)"], + ["--vscode-tab-unfocusedInactiveModifiedBorder", "rgba(51, 153, 204, 0.25)"], + ["--vscode-terminal-ansiBlack", "#000000"], + ["--vscode-terminal-ansiBlue", "#2472c8"], + ["--vscode-terminal-ansiBrightBlack", "#666666"], + ["--vscode-terminal-ansiBrightBlue", "#3b8eea"], + ["--vscode-terminal-ansiBrightCyan", "#29b8db"], + ["--vscode-terminal-ansiBrightGreen", "#23d18b"], + ["--vscode-terminal-ansiBrightMagenta", "#d670d6"], + ["--vscode-terminal-ansiBrightRed", "#f14c4c"], + ["--vscode-terminal-ansiBrightWhite", "#e5e5e5"], + ["--vscode-terminal-ansiBrightYellow", "#f5f543"], + ["--vscode-terminal-ansiCyan", "#11a8cd"], + ["--vscode-terminal-ansiGreen", "#0dbc79"], + ["--vscode-terminal-ansiMagenta", "#bc3fbc"], + ["--vscode-terminal-ansiRed", "#cd3131"], + ["--vscode-terminal-ansiWhite", "#e5e5e5"], + ["--vscode-terminal-ansiYellow", "#e5e510"], + ["--vscode-terminal-border", "#2b2b2b"], + ["--vscode-terminal-dropBackground", "rgba(83, 89, 93, 0.5)"], + ["--vscode-terminal-findMatchBackground", "#9e6a03"], + ["--vscode-terminal-findMatchHighlightBackground", "rgba(234, 92, 0, 0.33)"], + ["--vscode-terminal-foreground", "#cccccc"], + ["--vscode-terminal-hoverHighlightBackground", "rgba(38, 79, 120, 0.13)"], + ["--vscode-terminal-inactiveSelectionBackground", "#3a3d41"], + ["--vscode-terminal-initialHintForeground", "rgba(255, 255, 255, 0.34)"], + ["--vscode-terminal-selectionBackground", "#264f78"], + ["--vscode-terminal-tab.activeBorder", "#0078d4"], + [ + "--vscode-terminalCommandDecoration-defaultBackground", + "rgba(255, 255, 255, 0.25)", + ], + ["--vscode-terminalCommandDecoration-errorBackground", "#f14c4c"], + ["--vscode-terminalCommandDecoration-successBackground", "#1b81a8"], + ["--vscode-terminalCommandGuide-foreground", "#37373d"], + ["--vscode-terminalOverviewRuler-border", "#010409"], + [ + "--vscode-terminalOverviewRuler-cursorForeground", + "rgba(160, 160, 160, 0.8)", + ], + [ + "--vscode-terminalOverviewRuler-findMatchForeground", + "rgba(209, 134, 22, 0.49)", + ], + ["--vscode-terminalStickyScrollHover-background", "#2a2d2e"], + ["--vscode-terminalSymbolIcon-aliasForeground", "#b180d7"], + ["--vscode-terminalSymbolIcon-argumentForeground", "#75beff"], + ["--vscode-terminalSymbolIcon-branchForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-commitForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-fileForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-flagForeground", "#ee9d28"], + ["--vscode-terminalSymbolIcon-folderForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-methodForeground", "#b180d7"], + ["--vscode-terminalSymbolIcon-optionForeground", "#ee9d28"], + ["--vscode-terminalSymbolIcon-optionValueForeground", "#75beff"], + ["--vscode-terminalSymbolIcon-pullRequestDoneForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-pullRequestForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-remoteForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-stashForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-symbolicLinkFileForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-symbolicLinkFolderForeground", "#cccccc"], + ["--vscode-terminalSymbolIcon-symbolText", "#cccccc"], + ["--vscode-terminalSymbolIcon-tagForeground", "#cccccc"], + ["--vscode-testing-coverCountBadgeBackground", "#616161"], + ["--vscode-testing-coverCountBadgeForeground", "#f8f8f8"], + ["--vscode-testing-coveredBackground", "rgba(156, 204, 44, 0.2)"], + ["--vscode-testing-coveredBorder", "rgba(156, 204, 44, 0.15)"], + ["--vscode-testing-coveredGutterBackground", "rgba(156, 204, 44, 0.12)"], + ["--vscode-testing-iconErrored", "#f14c4c"], + ["--vscode-testing-iconErrored.retired", "rgba(241, 76, 76, 0.7)"], + ["--vscode-testing-iconFailed", "#f14c4c"], + ["--vscode-testing-iconFailed.retired", "rgba(241, 76, 76, 0.7)"], + ["--vscode-testing-iconPassed", "#73c991"], + ["--vscode-testing-iconPassed.retired", "rgba(115, 201, 145, 0.7)"], + ["--vscode-testing-iconQueued", "#cca700"], + ["--vscode-testing-iconQueued.retired", "rgba(204, 167, 0, 0.7)"], + ["--vscode-testing-iconSkipped", "#848484"], + ["--vscode-testing-iconSkipped.retired", "rgba(132, 132, 132, 0.7)"], + ["--vscode-testing-iconUnset", "#848484"], + ["--vscode-testing-iconUnset.retired", "rgba(132, 132, 132, 0.7)"], + ["--vscode-testing-message.error.badgeBackground", "#f14c4c"], + ["--vscode-testing-message.error.badgeBorder", "#f14c4c"], + ["--vscode-testing-message.error.badgeForeground", "#000000"], + [ + "--vscode-testing-message.info.decorationForeground", + "rgba(204, 204, 204, 0.5)", + ], + ["--vscode-testing-messagePeekBorder", "#59a4f9"], + ["--vscode-testing-messagePeekHeaderBackground", "rgba(89, 164, 249, 0.1)"], + ["--vscode-testing-peekBorder", "#f14c4c"], + ["--vscode-testing-peekHeaderBackground", "rgba(241, 76, 76, 0.1)"], + ["--vscode-testing-runAction", "#73c991"], + ["--vscode-testing-uncoveredBackground", "rgba(255, 0, 0, 0.2)"], + ["--vscode-testing-uncoveredBorder", "rgba(255, 0, 0, 0.15)"], + ["--vscode-testing-uncoveredBranchBackground", "#781212"], + ["--vscode-testing-uncoveredGutterBackground", "rgba(255, 0, 0, 0.3)"], + ["--vscode-textBlockQuote-background", "#2b2b2b"], + ["--vscode-textBlockQuote-border", "#616161"], + ["--vscode-textCodeBlock-background", "#2b2b2b"], + ["--vscode-textLink-activeForeground", "#4daafc"], + ["--vscode-textLink-foreground", "#4daafc"], + ["--vscode-textPreformat-background", "#3c3c3c"], + ["--vscode-textPreformat-foreground", "#d0d0d0"], + ["--vscode-textSeparator-foreground", "#21262d"], + ["--vscode-titleBar-activeBackground", "#181818"], + ["--vscode-titleBar-activeForeground", "#cccccc"], + ["--vscode-titleBar-border", "#2b2b2b"], + ["--vscode-titleBar-inactiveBackground", "#1f1f1f"], + ["--vscode-titleBar-inactiveForeground", "#9d9d9d"], + ["--vscode-toolbar-activeBackground", "rgba(99, 102, 103, 0.31)"], + ["--vscode-toolbar-hoverBackground", "rgba(90, 93, 94, 0.31)"], + ["--vscode-tree-inactiveIndentGuidesStroke", "rgba(88, 88, 88, 0.4)"], + ["--vscode-tree-indentGuidesStroke", "#585858"], + ["--vscode-tree-tableColumnsBorder", "rgba(204, 204, 204, 0.13)"], + ["--vscode-tree-tableOddRowsBackground", "rgba(204, 204, 204, 0.04)"], + ["--vscode-walkThrough-embeddedEditorBackground", "rgba(0, 0, 0, 0.4)"], + ["--vscode-walkthrough-stepTitle.foreground", "#ffffff"], + ["--vscode-welcomePage-progress.background", "#313131"], + ["--vscode-welcomePage-progress.foreground", "#0078d4"], + ["--vscode-welcomePage-tileBackground", "#2b2b2b"], + ["--vscode-welcomePage-tileBorder", "rgba(255, 255, 255, 0.1)"], + ["--vscode-welcomePage-tileHoverBackground", "#262626"], + ["--vscode-widget-border", "#313131"], + ["--vscode-widget-shadow", "rgba(0, 0, 0, 0.36)"], +]; diff --git a/.storybook/themes/light-v2.ts b/.storybook/themes/light-v2.ts new file mode 100644 index 00000000..81bbc804 --- /dev/null +++ b/.storybook/themes/light-v2.ts @@ -0,0 +1,943 @@ +// Sourced from `vscode-elements/webview-playground`. +// https://github.com/vscode-elements/webview-playground/blob/f9a6f90413d0cc535839fb92445b7a5eebc540d7/dist/themes/light-v2.js + +export const lightTheme: Array<[string, string]> = [ + ["--vscode-actionBar-toggledBackground", "#dddddd"], + ["--vscode-activityBar-activeBorder", "#005fb8"], + ["--vscode-activityBar-background", "#f8f8f8"], + ["--vscode-activityBar-border", "#e5e5e5"], + ["--vscode-activityBar-dropBorder", "#1f1f1f"], + ["--vscode-activityBar-foreground", "#1f1f1f"], + ["--vscode-activityBar-inactiveForeground", "#616161"], + ["--vscode-activityBarBadge-background", "#005fb8"], + ["--vscode-activityBarBadge-foreground", "#ffffff"], + ["--vscode-activityBarTop-activeBorder", "#424242"], + ["--vscode-activityBarTop-dropBorder", "#424242"], + ["--vscode-activityBarTop-foreground", "#424242"], + ["--vscode-activityBarTop-inactiveForeground", "rgba(66, 66, 66, 0.75)"], + ["--vscode-activityErrorBadge-background", "#e51400"], + ["--vscode-activityErrorBadge-foreground", "#ffffff"], + ["--vscode-activityWarningBadge-background", "#b27c00"], + ["--vscode-activityWarningBadge-foreground", "#ffffff"], + ["--vscode-agentSessionReadIndicator-foreground", "rgba(59, 59, 59, 0.2)"], + ["--vscode-agentSessionSelectedBadge-border", "rgba(0, 0, 0, 0.3)"], + [ + "--vscode-agentSessionSelectedUnfocusedBadge-border", + "rgba(59, 59, 59, 0.3)", + ], + ["--vscode-agentStatusIndicator-background", "rgba(0, 0, 0, 0.05)"], + ["--vscode-aiCustomizationManagement-sashBorder", "#e5e5e5"], + ["--vscode-badge-background", "#cccccc"], + ["--vscode-badge-foreground", "#3b3b3b"], + ["--vscode-banner-background", "#a2a2a2"], + ["--vscode-banner-foreground", "#000000"], + ["--vscode-banner-iconForeground", "#0063d3"], + ["--vscode-bodyFontSize", "13px"], + ["--vscode-bodyFontSize-small", "12px"], + ["--vscode-bodyFontSize-xSmall", "11px"], + ["--vscode-breadcrumb-activeSelectionForeground", "#2f2f2f"], + ["--vscode-breadcrumb-background", "#ffffff"], + ["--vscode-breadcrumb-focusForeground", "#2f2f2f"], + ["--vscode-breadcrumb-foreground", "rgba(59, 59, 59, 0.8)"], + ["--vscode-breadcrumbPicker-background", "#f8f8f8"], + ["--vscode-browser-border", "#e5e5e5"], + ["--vscode-button-background", "#005fb8"], + ["--vscode-button-border", "rgba(0, 0, 0, 0.1)"], + ["--vscode-button-foreground", "#ffffff"], + ["--vscode-button-hoverBackground", "#0258a8"], + ["--vscode-button-secondaryBackground", "#e5e5e5"], + ["--vscode-button-secondaryForeground", "#3b3b3b"], + ["--vscode-button-secondaryHoverBackground", "#cccccc"], + ["--vscode-button-separator", "rgba(255, 255, 255, 0.4)"], + ["--vscode-chart-axis", "rgba(0, 0, 0, 0.6)"], + ["--vscode-chart-guide", "rgba(0, 0, 0, 0.2)"], + ["--vscode-chart-line", "#236b8e"], + ["--vscode-charts-blue", "#0063d3"], + ["--vscode-charts-foreground", "#3b3b3b"], + ["--vscode-charts-green", "#388a34"], + ["--vscode-charts-lines", "rgba(59, 59, 59, 0.5)"], + ["--vscode-charts-orange", "rgba(234, 92, 0, 0.33)"], + ["--vscode-charts-purple", "#652d90"], + ["--vscode-charts-red", "#e51400"], + ["--vscode-charts-yellow", "#bf8803"], + ["--vscode-chat-avatarBackground", "#f2f2f2"], + ["--vscode-chat-avatarForeground", "#3b3b3b"], + ["--vscode-chat-checkpointSeparator", "#a9a9a9"], + ["--vscode-chat-editedFileForeground", "#895503"], + ["--vscode-chat-linesAddedForeground", "#107c10"], + ["--vscode-chat-linesRemovedForeground", "#bc2f32"], + ["--vscode-chat-requestBackground", "rgba(255, 255, 255, 0.62)"], + ["--vscode-chat-requestBorder", "rgba(0, 0, 0, 0.1)"], + ["--vscode-chat-requestBubbleBackground", "rgba(173, 214, 255, 0.3)"], + ["--vscode-chat-requestBubbleHoverBackground", "rgba(173, 214, 255, 0.6)"], + ["--vscode-chat-requestCodeBorder", "rgba(14, 99, 156, 0.25)"], + ["--vscode-chat-slashCommandBackground", "rgba(173, 206, 255, 0.48)"], + ["--vscode-chat-slashCommandForeground", "#26569e"], + ["--vscode-chat-thinkingShimmer", "#000000"], + ["--vscode-chatManagement-sashBorder", "#e5e5e5"], + ["--vscode-checkbox-background", "#f8f8f8"], + ["--vscode-checkbox-border", "#cecece"], + ["--vscode-checkbox-disabled.background", "#b9b9b9"], + ["--vscode-checkbox-disabled.foreground", "#797979"], + ["--vscode-checkbox-foreground", "#3b3b3b"], + ["--vscode-checkbox-selectBackground", "#f8f8f8"], + ["--vscode-checkbox-selectBorder", "#3b3b3b"], + ["--vscode-codiconFontSize", "16px"], + ["--vscode-commandCenter-activeBackground", "rgba(0, 0, 0, 0.08)"], + ["--vscode-commandCenter-activeBorder", "rgba(30, 30, 30, 0.3)"], + ["--vscode-commandCenter-activeForeground", "#1e1e1e"], + ["--vscode-commandCenter-background", "rgba(0, 0, 0, 0.05)"], + ["--vscode-commandCenter-border", "rgba(30, 30, 30, 0.2)"], + ["--vscode-commandCenter-debuggingBackground", "rgba(253, 113, 108, 0.26)"], + ["--vscode-commandCenter-foreground", "#1e1e1e"], + ["--vscode-commandCenter-inactiveBorder", "rgba(139, 148, 158, 0.25)"], + ["--vscode-commandCenter-inactiveForeground", "#8b949e"], + ["--vscode-commentsView-resolvedIcon", "rgba(97, 97, 97, 0.5)"], + ["--vscode-commentsView-unresolvedIcon", "#005fb8"], + ["--vscode-cornerRadius-circle", "9999px"], + ["--vscode-cornerRadius-large", "8px"], + ["--vscode-cornerRadius-medium", "6px"], + ["--vscode-cornerRadius-small", "4px"], + ["--vscode-cornerRadius-xLarge", "12px"], + ["--vscode-cornerRadius-xSmall", "2px"], + ["--vscode-debugConsole-errorForeground", "#f85149"], + ["--vscode-debugConsole-infoForeground", "#0063d3"], + ["--vscode-debugConsole-sourceForeground", "#3b3b3b"], + ["--vscode-debugConsole-warningForeground", "#bf8803"], + ["--vscode-debugConsoleInputIcon-foreground", "#3b3b3b"], + ["--vscode-debugExceptionWidget-background", "#f1dfde"], + ["--vscode-debugExceptionWidget-border", "#a31515"], + ["--vscode-debugIcon-breakpointCurrentStackframeForeground", "#be8700"], + ["--vscode-debugIcon-breakpointDisabledForeground", "#848484"], + ["--vscode-debugIcon-breakpointForeground", "#e51400"], + ["--vscode-debugIcon-breakpointStackframeForeground", "#89d185"], + ["--vscode-debugIcon-breakpointUnverifiedForeground", "#848484"], + ["--vscode-debugIcon-continueForeground", "#007acc"], + ["--vscode-debugIcon-disconnectForeground", "#a1260d"], + ["--vscode-debugIcon-pauseForeground", "#007acc"], + ["--vscode-debugIcon-restartForeground", "#388a34"], + ["--vscode-debugIcon-startForeground", "#388a34"], + ["--vscode-debugIcon-stepBackForeground", "#007acc"], + ["--vscode-debugIcon-stepIntoForeground", "#007acc"], + ["--vscode-debugIcon-stepOutForeground", "#007acc"], + ["--vscode-debugIcon-stepOverForeground", "#007acc"], + ["--vscode-debugIcon-stopForeground", "#a1260d"], + ["--vscode-debugTokenExpression-boolean", "#0000ff"], + ["--vscode-debugTokenExpression-error", "#e51400"], + ["--vscode-debugTokenExpression-name", "#9b46b0"], + ["--vscode-debugTokenExpression-number", "#098658"], + ["--vscode-debugTokenExpression-string", "#a31515"], + ["--vscode-debugTokenExpression-type", "#4a90e2"], + ["--vscode-debugTokenExpression-value", "rgba(108, 108, 108, 0.8)"], + ["--vscode-debugToolBar-background", "#f3f3f3"], + ["--vscode-debugView-exceptionLabelBackground", "#a31515"], + ["--vscode-debugView-exceptionLabelForeground", "#ffffff"], + ["--vscode-debugView-stateLabelBackground", "rgba(136, 136, 136, 0.27)"], + ["--vscode-debugView-stateLabelForeground", "#3b3b3b"], + ["--vscode-debugView-valueChangedHighlight", "#569cd6"], + ["--vscode-descriptionForeground", "#3b3b3b"], + ["--vscode-diffEditor-diagonalFill", "rgba(34, 34, 34, 0.2)"], + ["--vscode-diffEditor-insertedLineBackground", "rgba(155, 185, 85, 0.2)"], + ["--vscode-diffEditor-insertedTextBackground", "rgba(156, 204, 44, 0.25)"], + ["--vscode-diffEditor-move.border", "rgba(139, 139, 139, 0.61)"], + ["--vscode-diffEditor-moveActive.border", "#ffa500"], + ["--vscode-diffEditor-removedLineBackground", "rgba(255, 0, 0, 0.2)"], + ["--vscode-diffEditor-removedTextBackground", "rgba(255, 0, 0, 0.2)"], + ["--vscode-diffEditor-unchangedCodeBackground", "rgba(184, 184, 184, 0.16)"], + ["--vscode-diffEditor-unchangedRegionBackground", "#f8f8f8"], + ["--vscode-diffEditor-unchangedRegionForeground", "#3b3b3b"], + ["--vscode-diffEditor-unchangedRegionShadow", "rgba(115, 115, 115, 0.75)"], + ["--vscode-disabledForeground", "rgba(97, 97, 97, 0.5)"], + ["--vscode-dropdown-background", "#ffffff"], + ["--vscode-dropdown-border", "#cecece"], + ["--vscode-dropdown-foreground", "#3b3b3b"], + ["--vscode-dropdown-listBackground", "#ffffff"], + ["--vscode-editor-background", "#ffffff"], + ["--vscode-editor-compositionBorder", "#000000"], + ["--vscode-editor-findMatchBackground", "#a8ac94"], + ["--vscode-editor-findMatchHighlightBackground", "rgba(234, 92, 0, 0.33)"], + ["--vscode-editor-findRangeHighlightBackground", "rgba(180, 180, 180, 0.3)"], + [ + "--vscode-editor-focusedStackFrameHighlightBackground", + "rgba(206, 231, 206, 0.45)", + ], + ["--vscode-editor-foldBackground", "rgba(173, 214, 255, 0.3)"], + ["--vscode-editor-foldPlaceholderForeground", "#808080"], + ["--vscode-editor-font-feature-settings", '"liga" off, "calt" off'], + ["--vscode-editor-font-size", "14px"], + ["--vscode-editor-font-weight", "normal"], + ["--vscode-editor-foreground", "#3b3b3b"], + ["--vscode-editor-hoverHighlightBackground", "rgba(173, 214, 255, 0.15)"], + ["--vscode-editor-inactiveSelectionBackground", "#e5ebf1"], + ["--vscode-editor-inlineValuesBackground", "rgba(255, 200, 0, 0.2)"], + ["--vscode-editor-inlineValuesForeground", "rgba(0, 0, 0, 0.5)"], + ["--vscode-editor-lineHighlightBorder", "#eeeeee"], + ["--vscode-editor-linkedEditingBackground", "rgba(255, 0, 0, 0.3)"], + ["--vscode-editor-placeholder.foreground", "rgba(0, 0, 0, 0.47)"], + ["--vscode-editor-rangeHighlightBackground", "rgba(253, 255, 0, 0.2)"], + ["--vscode-editor-selectionBackground", "#add6ff"], + ["--vscode-editor-selectionHighlightBackground", "rgba(173, 214, 255, 0.5)"], + [ + "--vscode-editor-snippetFinalTabstopHighlightBorder", + "rgba(10, 50, 100, 0.5)", + ], + [ + "--vscode-editor-snippetTabstopHighlightBackground", + "rgba(10, 50, 100, 0.2)", + ], + [ + "--vscode-editor-stackFrameHighlightBackground", + "rgba(255, 255, 102, 0.45)", + ], + ["--vscode-editor-symbolHighlightBackground", "rgba(234, 92, 0, 0.33)"], + ["--vscode-editor-wordHighlightBackground", "rgba(87, 87, 87, 0.25)"], + ["--vscode-editor-wordHighlightStrongBackground", "rgba(14, 99, 156, 0.25)"], + ["--vscode-editor-wordHighlightTextBackground", "rgba(87, 87, 87, 0.25)"], + ["--vscode-editorActionList-background", "#f8f8f8"], + ["--vscode-editorActionList-focusBackground", "#e8e8e8"], + ["--vscode-editorActionList-focusForeground", "#000000"], + ["--vscode-editorActionList-foreground", "#3b3b3b"], + ["--vscode-editorActiveLineNumber-foreground", "#0b216f"], + ["--vscode-editorBracketHighlight-foreground1", "#0431fa"], + ["--vscode-editorBracketHighlight-foreground2", "#319331"], + ["--vscode-editorBracketHighlight-foreground3", "#7b3814"], + ["--vscode-editorBracketHighlight-foreground4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketHighlight-foreground5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketHighlight-foreground6", "rgba(0, 0, 0, 0)"], + [ + "--vscode-editorBracketHighlight-unexpectedBracket.foreground", + "rgba(255, 18, 18, 0.8)", + ], + ["--vscode-editorBracketMatch-background", "rgba(0, 100, 0, 0.1)"], + ["--vscode-editorBracketMatch-border", "#b9b9b9"], + ["--vscode-editorBracketPairGuide-activeBackground1", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground2", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground3", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-activeBackground6", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background1", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background2", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background3", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorBracketPairGuide-background6", "rgba(0, 0, 0, 0)"], + ["--vscode-editorCodeLens-foreground", "#919191"], + [ + "--vscode-editorCommentsWidget-rangeActiveBackground", + "rgba(0, 95, 184, 0.1)", + ], + ["--vscode-editorCommentsWidget-rangeBackground", "rgba(0, 95, 184, 0.1)"], + ["--vscode-editorCommentsWidget-replyInputBackground", "#f3f3f3"], + ["--vscode-editorCommentsWidget-resolvedBorder", "rgba(97, 97, 97, 0.5)"], + ["--vscode-editorCommentsWidget-unresolvedBorder", "#005fb8"], + ["--vscode-editorCursor-foreground", "#000000"], + ["--vscode-editorError-foreground", "#e51400"], + ["--vscode-editorGhostText-foreground", "rgba(0, 0, 0, 0.47)"], + ["--vscode-editorGroup-border", "#e5e5e5"], + ["--vscode-editorGroup-dropBackground", "rgba(38, 119, 203, 0.18)"], + ["--vscode-editorGroup-dropIntoPromptBackground", "#f8f8f8"], + ["--vscode-editorGroup-dropIntoPromptForeground", "#3b3b3b"], + ["--vscode-editorGroupHeader-noTabsBackground", "#ffffff"], + ["--vscode-editorGroupHeader-tabsBackground", "#f8f8f8"], + ["--vscode-editorGroupHeader-tabsBorder", "#e5e5e5"], + ["--vscode-editorGutter-addedBackground", "#2ea043"], + ["--vscode-editorGutter-addedSecondaryBackground", "#83db93"], + ["--vscode-editorGutter-background", "#ffffff"], + ["--vscode-editorGutter-commentDraftGlyphForeground", "#3b3b3b"], + ["--vscode-editorGutter-commentGlyphForeground", "#3b3b3b"], + ["--vscode-editorGutter-commentRangeForeground", "#d5d8e9"], + ["--vscode-editorGutter-commentUnresolvedGlyphForeground", "#3b3b3b"], + ["--vscode-editorGutter-deletedBackground", "#f85149"], + ["--vscode-editorGutter-deletedSecondaryBackground", "#fcaaa6"], + ["--vscode-editorGutter-foldingControlForeground", "#3b3b3b"], + ["--vscode-editorGutter-itemBackground", "#d5d8e9"], + ["--vscode-editorGutter-itemGlyphForeground", "#3b3b3b"], + ["--vscode-editorGutter-modifiedBackground", "#005fb8"], + ["--vscode-editorGutter-modifiedSecondaryBackground", "#3aa0ff"], + ["--vscode-editorHint-foreground", "#6c6c6c"], + ["--vscode-editorHoverWidget-background", "#f8f8f8"], + ["--vscode-editorHoverWidget-border", "#c8c8c8"], + ["--vscode-editorHoverWidget-foreground", "#3b3b3b"], + ["--vscode-editorHoverWidget-highlightForeground", "#0066bf"], + ["--vscode-editorHoverWidget-statusBarBackground", "#ececec"], + ["--vscode-editorIndentGuide-activeBackground", "rgba(51, 51, 51, 0.2)"], + ["--vscode-editorIndentGuide-activeBackground1", "#939393"], + ["--vscode-editorIndentGuide-activeBackground2", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-activeBackground3", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-activeBackground4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-activeBackground5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-activeBackground6", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background", "rgba(51, 51, 51, 0.2)"], + ["--vscode-editorIndentGuide-background1", "#d3d3d3"], + ["--vscode-editorIndentGuide-background2", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background3", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background4", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background5", "rgba(0, 0, 0, 0)"], + ["--vscode-editorIndentGuide-background6", "rgba(0, 0, 0, 0)"], + ["--vscode-editorInfo-foreground", "#0063d3"], + ["--vscode-editorInlayHint-background", "rgba(204, 204, 204, 0.1)"], + ["--vscode-editorInlayHint-foreground", "#969696"], + ["--vscode-editorInlayHint-parameterBackground", "rgba(204, 204, 204, 0.1)"], + ["--vscode-editorInlayHint-parameterForeground", "#969696"], + ["--vscode-editorInlayHint-typeBackground", "rgba(204, 204, 204, 0.1)"], + ["--vscode-editorInlayHint-typeForeground", "#969696"], + ["--vscode-editorLightBulb-foreground", "#ddb100"], + ["--vscode-editorLightBulbAi-foreground", "#ddb100"], + ["--vscode-editorLightBulbAutoFix-foreground", "#007acc"], + ["--vscode-editorLineNumber-activeForeground", "#171184"], + ["--vscode-editorLineNumber-foreground", "#6e7681"], + ["--vscode-editorLink-activeForeground", "#0000ff"], + ["--vscode-editorMarkerNavigation-background", "#ffffff"], + ["--vscode-editorMarkerNavigationError-background", "#e51400"], + [ + "--vscode-editorMarkerNavigationError-headerBackground", + "rgba(229, 20, 0, 0.1)", + ], + ["--vscode-editorMarkerNavigationInfo-background", "#0063d3"], + [ + "--vscode-editorMarkerNavigationInfo-headerBackground", + "rgba(0, 99, 211, 0.1)", + ], + ["--vscode-editorMarkerNavigationWarning-background", "#bf8803"], + [ + "--vscode-editorMarkerNavigationWarning-headerBackground", + "rgba(191, 136, 3, 0.1)", + ], + ["--vscode-editorMinimap-inlineChatInserted", "rgba(156, 204, 44, 0.2)"], + ["--vscode-editorMultiCursor-primary.foreground", "#000000"], + ["--vscode-editorMultiCursor-secondary.foreground", "#000000"], + ["--vscode-editorOverviewRuler-addedForeground", "rgba(46, 160, 67, 0.6)"], + ["--vscode-editorOverviewRuler-border", "#e5e5e5"], + ["--vscode-editorOverviewRuler-bracketMatchForeground", "#a0a0a0"], + ["--vscode-editorOverviewRuler-commentDraftForeground", "#d5d8e9"], + ["--vscode-editorOverviewRuler-commentForeground", "#d5d8e9"], + ["--vscode-editorOverviewRuler-commentUnresolvedForeground", "#d5d8e9"], + [ + "--vscode-editorOverviewRuler-commonContentForeground", + "rgba(96, 96, 96, 0.4)", + ], + [ + "--vscode-editorOverviewRuler-currentContentForeground", + "rgba(64, 200, 174, 0.5)", + ], + ["--vscode-editorOverviewRuler-deletedForeground", "rgba(248, 81, 73, 0.6)"], + ["--vscode-editorOverviewRuler-errorForeground", "rgba(255, 18, 18, 0.7)"], + [ + "--vscode-editorOverviewRuler-findMatchForeground", + "rgba(209, 134, 22, 0.49)", + ], + [ + "--vscode-editorOverviewRuler-incomingContentForeground", + "rgba(64, 166, 255, 0.5)", + ], + ["--vscode-editorOverviewRuler-infoForeground", "#0063d3"], + [ + "--vscode-editorOverviewRuler-inlineChatInserted", + "rgba(156, 204, 44, 0.2)", + ], + ["--vscode-editorOverviewRuler-inlineChatRemoved", "rgba(255, 0, 0, 0.16)"], + ["--vscode-editorOverviewRuler-modifiedForeground", "rgba(0, 95, 184, 0.6)"], + [ + "--vscode-editorOverviewRuler-rangeHighlightForeground", + "rgba(0, 122, 204, 0.6)", + ], + [ + "--vscode-editorOverviewRuler-selectionHighlightForeground", + "rgba(160, 160, 160, 0.8)", + ], + ["--vscode-editorOverviewRuler-warningForeground", "#bf8803"], + [ + "--vscode-editorOverviewRuler-wordHighlightForeground", + "rgba(160, 160, 160, 0.8)", + ], + [ + "--vscode-editorOverviewRuler-wordHighlightStrongForeground", + "rgba(192, 160, 192, 0.8)", + ], + [ + "--vscode-editorOverviewRuler-wordHighlightTextForeground", + "rgba(160, 160, 160, 0.8)", + ], + ["--vscode-editorPane-background", "#ffffff"], + ["--vscode-editorRuler-foreground", "#d3d3d3"], + ["--vscode-editorStickyScroll-background", "#ffffff"], + ["--vscode-editorStickyScroll-shadow", "#dddddd"], + ["--vscode-editorStickyScrollGutter-background", "#ffffff"], + ["--vscode-editorStickyScrollHover-background", "#f0f0f0"], + ["--vscode-editorSuggestWidget-background", "#f8f8f8"], + ["--vscode-editorSuggestWidget-border", "#c8c8c8"], + ["--vscode-editorSuggestWidget-focusHighlightForeground", "#0066bf"], + ["--vscode-editorSuggestWidget-foreground", "#3b3b3b"], + ["--vscode-editorSuggestWidget-highlightForeground", "#0066bf"], + ["--vscode-editorSuggestWidget-selectedBackground", "#e8e8e8"], + ["--vscode-editorSuggestWidget-selectedForeground", "#000000"], + ["--vscode-editorSuggestWidget-selectedIconForeground", "#000000"], + ["--vscode-editorSuggestWidgetStatus-foreground", "rgba(59, 59, 59, 0.5)"], + ["--vscode-editorUnicodeHighlight-border", "#bf8803"], + ["--vscode-editorUnnecessaryCode-opacity", "rgba(0, 0, 0, 0.47)"], + ["--vscode-editorWarning-foreground", "#bf8803"], + ["--vscode-editorWhitespace-foreground", "rgba(51, 51, 51, 0.2)"], + ["--vscode-editorWidget-background", "#f8f8f8"], + ["--vscode-editorWidget-border", "#c8c8c8"], + ["--vscode-editorWidget-foreground", "#3b3b3b"], + ["--vscode-errorForeground", "#f85149"], + ["--vscode-extensionBadge-remoteBackground", "#005fb8"], + ["--vscode-extensionBadge-remoteForeground", "#ffffff"], + ["--vscode-extensionButton-background", "#e5e5e5"], + ["--vscode-extensionButton-border", "rgba(0, 0, 0, 0.1)"], + ["--vscode-extensionButton-foreground", "#3b3b3b"], + ["--vscode-extensionButton-hoverBackground", "#cccccc"], + ["--vscode-extensionButton-prominentBackground", "#005fb8"], + ["--vscode-extensionButton-prominentForeground", "#ffffff"], + ["--vscode-extensionButton-prominentHoverBackground", "#0258a8"], + ["--vscode-extensionButton-separator", "rgba(255, 255, 255, 0.4)"], + ["--vscode-extensionIcon-preReleaseForeground", "#1d9271"], + ["--vscode-extensionIcon-privateForeground", "rgba(0, 0, 0, 0.38)"], + ["--vscode-extensionIcon-sponsorForeground", "#b51e78"], + ["--vscode-extensionIcon-starForeground", "#df6100"], + ["--vscode-extensionIcon-verifiedForeground", "#005fb8"], + ["--vscode-focusBorder", "#005fb8"], + ["--vscode-font-size", "13px"], + ["--vscode-font-weight", "normal"], + ["--vscode-foreground", "#3b3b3b"], + ["--vscode-gauge-background", "rgba(0, 122, 204, 0.3)"], + ["--vscode-gauge-errorBackground", "rgba(190, 17, 0, 0.3)"], + ["--vscode-gauge-errorForeground", "#be1100"], + ["--vscode-gauge-foreground", "#007acc"], + ["--vscode-gauge-warningBackground", "rgba(184, 149, 0, 0.3)"], + ["--vscode-gauge-warningForeground", "#b89500"], + ["--vscode-icon-foreground", "#3b3b3b"], + ["--vscode-inlineChat-background", "#f8f8f8"], + ["--vscode-inlineChat-border", "#c8c8c8"], + ["--vscode-inlineChat-foreground", "#3b3b3b"], + ["--vscode-inlineChat-shadow", "rgba(0, 0, 0, 0.16)"], + ["--vscode-inlineChatDiff-inserted", "rgba(156, 204, 44, 0.13)"], + ["--vscode-inlineChatDiff-removed", "rgba(255, 0, 0, 0.1)"], + ["--vscode-inlineChatInput-background", "#ffffff"], + ["--vscode-inlineChatInput-border", "#c8c8c8"], + ["--vscode-inlineChatInput-focusBorder", "#005fb8"], + ["--vscode-inlineChatInput-placeholderForeground", "#767676"], + ["--vscode-inlineEdit-gutterIndicator.background", "rgba(95, 95, 95, 0.09)"], + [ + "--vscode-inlineEdit-gutterIndicator.primaryBackground", + "rgba(0, 95, 184, 0.5)", + ], + ["--vscode-inlineEdit-gutterIndicator.primaryBorder", "#005fb8"], + ["--vscode-inlineEdit-gutterIndicator.primaryForeground", "#ffffff"], + ["--vscode-inlineEdit-gutterIndicator.secondaryBackground", "#f8f8f8"], + ["--vscode-inlineEdit-gutterIndicator.secondaryBorder", "#c8c8c8"], + ["--vscode-inlineEdit-gutterIndicator.secondaryForeground", "#3b3b3b"], + ["--vscode-inlineEdit-gutterIndicator.successfulBackground", "#005fb8"], + ["--vscode-inlineEdit-gutterIndicator.successfulBorder", "#005fb8"], + ["--vscode-inlineEdit-gutterIndicator.successfulForeground", "#ffffff"], + ["--vscode-inlineEdit-modifiedBackground", "rgba(156, 204, 44, 0.07)"], + ["--vscode-inlineEdit-modifiedBorder", "rgba(62, 81, 18, 0.25)"], + [ + "--vscode-inlineEdit-modifiedChangedLineBackground", + "rgba(155, 185, 85, 0.14)", + ], + [ + "--vscode-inlineEdit-modifiedChangedTextBackground", + "rgba(156, 204, 44, 0.18)", + ], + ["--vscode-inlineEdit-originalBackground", "rgba(255, 0, 0, 0.04)"], + ["--vscode-inlineEdit-originalBorder", "rgba(255, 0, 0, 0.2)"], + [ + "--vscode-inlineEdit-originalChangedLineBackground", + "rgba(255, 0, 0, 0.16)", + ], + [ + "--vscode-inlineEdit-originalChangedTextBackground", + "rgba(255, 0, 0, 0.16)", + ], + ["--vscode-inlineEdit-tabWillAcceptModifiedBorder", "rgba(62, 81, 18, 0.25)"], + ["--vscode-inlineEdit-tabWillAcceptOriginalBorder", "rgba(255, 0, 0, 0.2)"], + ["--vscode-input-background", "#ffffff"], + ["--vscode-input-border", "#cecece"], + ["--vscode-input-foreground", "#3b3b3b"], + ["--vscode-input-placeholderForeground", "#767676"], + ["--vscode-inputOption-activeBackground", "#bed6ed"], + ["--vscode-inputOption-activeBorder", "#005fb8"], + ["--vscode-inputOption-activeForeground", "#000000"], + ["--vscode-inputOption-hoverBackground", "rgba(184, 184, 184, 0.31)"], + ["--vscode-inputValidation-errorBackground", "#f2dede"], + ["--vscode-inputValidation-errorBorder", "#be1100"], + ["--vscode-inputValidation-infoBackground", "#d6ecf2"], + ["--vscode-inputValidation-infoBorder", "#007acc"], + ["--vscode-inputValidation-warningBackground", "#f6f5d2"], + ["--vscode-inputValidation-warningBorder", "#b89500"], + ["--vscode-interactive-activeCodeBorder", "#007acc"], + ["--vscode-interactive-inactiveCodeBorder", "#e4e6f1"], + ["--vscode-keybindingLabel-background", "rgba(221, 221, 221, 0.4)"], + ["--vscode-keybindingLabel-border", "rgba(204, 204, 204, 0.4)"], + ["--vscode-keybindingLabel-bottomBorder", "rgba(187, 187, 187, 0.4)"], + ["--vscode-keybindingLabel-foreground", "#3b3b3b"], + ["--vscode-keybindingTable-headerBackground", "rgba(59, 59, 59, 0.04)"], + ["--vscode-keybindingTable-rowsBackground", "rgba(59, 59, 59, 0.04)"], + ["--vscode-list-activeSelectionBackground", "#e8e8e8"], + ["--vscode-list-activeSelectionForeground", "#000000"], + ["--vscode-list-activeSelectionIconForeground", "#000000"], + ["--vscode-list-deemphasizedForeground", "#8e8e90"], + ["--vscode-list-dropBackground", "#d6ebff"], + ["--vscode-list-dropBetweenBackground", "#3b3b3b"], + ["--vscode-list-errorForeground", "#b01011"], + ["--vscode-list-filterMatchBackground", "rgba(234, 92, 0, 0.33)"], + ["--vscode-list-focusAndSelectionOutline", "#005fb8"], + ["--vscode-list-focusHighlightForeground", "#0066bf"], + ["--vscode-list-focusOutline", "#005fb8"], + ["--vscode-list-highlightForeground", "#0066bf"], + ["--vscode-list-hoverBackground", "#f2f2f2"], + ["--vscode-list-inactiveSelectionBackground", "#e4e6f1"], + ["--vscode-list-invalidItemForeground", "#b89500"], + ["--vscode-list-warningForeground", "#855f00"], + ["--vscode-listFilterWidget-background", "#f8f8f8"], + ["--vscode-listFilterWidget-noMatchesOutline", "#be1100"], + ["--vscode-listFilterWidget-outline", "rgba(0, 0, 0, 0)"], + ["--vscode-listFilterWidget-shadow", "rgba(0, 0, 0, 0.16)"], + ["--vscode-markdownAlert-caution.foreground", "#e51400"], + ["--vscode-markdownAlert-important.foreground", "#652d90"], + ["--vscode-markdownAlert-note.foreground", "#0063d3"], + ["--vscode-markdownAlert-tip.foreground", "#388a34"], + ["--vscode-markdownAlert-warning.foreground", "#bf8803"], + ["--vscode-mcpIcon-starForeground", "#df6100"], + ["--vscode-menu-background", "#ffffff"], + ["--vscode-menu-border", "#cecece"], + ["--vscode-menu-foreground", "#3b3b3b"], + ["--vscode-menu-selectionBackground", "#005fb8"], + ["--vscode-menu-selectionForeground", "#ffffff"], + ["--vscode-menu-separatorBackground", "#d4d4d4"], + ["--vscode-menubar-selectionBackground", "rgba(184, 184, 184, 0.31)"], + ["--vscode-menubar-selectionForeground", "#1e1e1e"], + ["--vscode-merge-commonContentBackground", "rgba(96, 96, 96, 0.16)"], + ["--vscode-merge-commonHeaderBackground", "rgba(96, 96, 96, 0.4)"], + ["--vscode-merge-currentContentBackground", "rgba(64, 200, 174, 0.2)"], + ["--vscode-merge-currentHeaderBackground", "rgba(64, 200, 174, 0.5)"], + ["--vscode-merge-incomingContentBackground", "rgba(64, 166, 255, 0.2)"], + ["--vscode-merge-incomingHeaderBackground", "rgba(64, 166, 255, 0.5)"], + ["--vscode-mergeEditor-change.background", "rgba(155, 185, 85, 0.2)"], + ["--vscode-mergeEditor-change.word.background", "rgba(156, 204, 44, 0.4)"], + ["--vscode-mergeEditor-changeBase.background", "#ffcccc"], + ["--vscode-mergeEditor-changeBase.word.background", "#ffa3a3"], + [ + "--vscode-mergeEditor-conflict.handled.minimapOverViewRuler", + "rgba(173, 172, 168, 0.93)", + ], + [ + "--vscode-mergeEditor-conflict.handledFocused.border", + "rgba(193, 193, 193, 0.8)", + ], + [ + "--vscode-mergeEditor-conflict.handledUnfocused.border", + "rgba(134, 134, 134, 0.29)", + ], + [ + "--vscode-mergeEditor-conflict.input1.background", + "rgba(64, 200, 174, 0.2)", + ], + [ + "--vscode-mergeEditor-conflict.input2.background", + "rgba(64, 166, 255, 0.2)", + ], + ["--vscode-mergeEditor-conflict.unhandled.minimapOverViewRuler", "#fcba03"], + ["--vscode-mergeEditor-conflict.unhandledFocused.border", "#ffa600"], + ["--vscode-mergeEditor-conflict.unhandledUnfocused.border", "#ffa600"], + [ + "--vscode-mergeEditor-conflictingLines.background", + "rgba(255, 234, 0, 0.28)", + ], + ["--vscode-minimap-chatEditHighlight", "rgba(255, 255, 255, 0.6)"], + ["--vscode-minimap-errorHighlight", "rgba(255, 18, 18, 0.7)"], + ["--vscode-minimap-findMatchHighlight", "rgba(234, 92, 0, 0.33)"], + ["--vscode-minimap-foregroundOpacity", "#000000"], + ["--vscode-minimap-infoHighlight", "#0063d3"], + ["--vscode-minimap-selectionHighlight", "#add6ff"], + ["--vscode-minimap-selectionOccurrenceHighlight", "rgba(173, 214, 255, 0.5)"], + ["--vscode-minimap-warningHighlight", "#bf8803"], + ["--vscode-minimapGutter-addedBackground", "#2ea043"], + ["--vscode-minimapGutter-deletedBackground", "#f85149"], + ["--vscode-minimapGutter-modifiedBackground", "#005fb8"], + ["--vscode-minimapSlider-activeBackground", "rgba(0, 0, 0, 0.3)"], + ["--vscode-minimapSlider-background", "rgba(100, 100, 100, 0.2)"], + ["--vscode-minimapSlider-hoverBackground", "rgba(100, 100, 100, 0.35)"], + ["--vscode-multiDiffEditor-background", "#ffffff"], + ["--vscode-multiDiffEditor-border", "#cccccc"], + ["--vscode-multiDiffEditor-headerBackground", "#f8f8f8"], + ["--vscode-notebook-cellBorderColor", "#e5e5e5"], + ["--vscode-notebook-cellEditorBackground", "#f8f8f8"], + ["--vscode-notebook-cellInsertionIndicator", "#005fb8"], + ["--vscode-notebook-cellStatusBarItemHoverBackground", "rgba(0, 0, 0, 0.08)"], + ["--vscode-notebook-cellToolbarSeparator", "rgba(128, 128, 128, 0.35)"], + ["--vscode-notebook-editorBackground", "#ffffff"], + ["--vscode-notebook-focusedCellBorder", "#005fb8"], + ["--vscode-notebook-focusedEditorBorder", "#005fb8"], + ["--vscode-notebook-inactiveFocusedCellBorder", "#e5e5e5"], + ["--vscode-notebook-selectedCellBackground", "rgba(200, 221, 241, 0.31)"], + ["--vscode-notebook-selectedCellBorder", "#e5e5e5"], + ["--vscode-notebook-symbolHighlightBackground", "rgba(253, 255, 0, 0.2)"], + ["--vscode-notebookEditorOverviewRuler-runningCellForeground", "#388a34"], + ["--vscode-notebookScrollbarSlider-activeBackground", "rgba(0, 0, 0, 0.6)"], + ["--vscode-notebookScrollbarSlider-background", "rgba(100, 100, 100, 0.4)"], + [ + "--vscode-notebookScrollbarSlider-hoverBackground", + "rgba(100, 100, 100, 0.7)", + ], + ["--vscode-notebookStatusErrorIcon-foreground", "#f85149"], + ["--vscode-notebookStatusRunningIcon-foreground", "#3b3b3b"], + ["--vscode-notebookStatusSuccessIcon-foreground", "#388a34"], + ["--vscode-notificationCenter-border", "#e5e5e5"], + ["--vscode-notificationCenterHeader-background", "#ffffff"], + ["--vscode-notificationCenterHeader-foreground", "#3b3b3b"], + ["--vscode-notificationLink-foreground", "#005fb8"], + ["--vscode-notifications-background", "#ffffff"], + ["--vscode-notifications-border", "#e5e5e5"], + ["--vscode-notifications-foreground", "#3b3b3b"], + ["--vscode-notificationsErrorIcon-foreground", "#e51400"], + ["--vscode-notificationsInfoIcon-foreground", "#0063d3"], + ["--vscode-notificationsWarningIcon-foreground", "#bf8803"], + ["--vscode-notificationToast-border", "#e5e5e5"], + ["--vscode-panel-background", "#f8f8f8"], + ["--vscode-panel-border", "#e5e5e5"], + ["--vscode-panel-dropBorder", "#3b3b3b"], + ["--vscode-panelInput-border", "#e5e5e5"], + ["--vscode-panelSection-border", "#e5e5e5"], + ["--vscode-panelSection-dropBackground", "rgba(38, 119, 203, 0.18)"], + ["--vscode-panelSectionHeader-background", "rgba(128, 128, 128, 0.2)"], + ["--vscode-panelStickyScroll-background", "#f8f8f8"], + ["--vscode-panelStickyScroll-shadow", "#dddddd"], + ["--vscode-panelTitle-activeBorder", "#005fb8"], + ["--vscode-panelTitle-activeForeground", "#3b3b3b"], + ["--vscode-panelTitle-inactiveForeground", "#3b3b3b"], + ["--vscode-panelTitleBadge-background", "#005fb8"], + ["--vscode-panelTitleBadge-foreground", "#ffffff"], + ["--vscode-peekView-border", "#0063d3"], + ["--vscode-peekViewEditor-background", "#f2f8fc"], + [ + "--vscode-peekViewEditor-matchHighlightBackground", + "rgba(187, 128, 9, 0.4)", + ], + ["--vscode-peekViewEditorGutter-background", "#f2f8fc"], + ["--vscode-peekViewEditorStickyScroll-background", "#f2f8fc"], + ["--vscode-peekViewEditorStickyScrollGutter-background", "#f2f8fc"], + ["--vscode-peekViewResult-background", "#ffffff"], + ["--vscode-peekViewResult-fileForeground", "#1e1e1e"], + ["--vscode-peekViewResult-lineForeground", "#646465"], + [ + "--vscode-peekViewResult-matchHighlightBackground", + "rgba(187, 128, 9, 0.4)", + ], + ["--vscode-peekViewResult-selectionBackground", "rgba(51, 153, 255, 0.2)"], + ["--vscode-peekViewResult-selectionForeground", "#6c6c6c"], + ["--vscode-peekViewTitle-background", "#f3f3f3"], + ["--vscode-peekViewTitleDescription-foreground", "#616161"], + ["--vscode-peekViewTitleLabel-foreground", "#000000"], + ["--vscode-pickerGroup-border", "#e5e5e5"], + ["--vscode-pickerGroup-foreground", "#8b949e"], + ["--vscode-ports-iconRunningProcessForeground", "#369432"], + ["--vscode-problemsErrorIcon-foreground", "#e51400"], + ["--vscode-problemsInfoIcon-foreground", "#0063d3"], + ["--vscode-problemsWarningIcon-foreground", "#bf8803"], + ["--vscode-profileBadge-background", "#c4c4c4"], + ["--vscode-profileBadge-foreground", "#333333"], + ["--vscode-profiles-sashBorder", "#e5e5e5"], + ["--vscode-progressBar-background", "#005fb8"], + ["--vscode-quickInput-background", "#f8f8f8"], + ["--vscode-quickInput-foreground", "#3b3b3b"], + ["--vscode-quickInputList-focusBackground", "#e8e8e8"], + ["--vscode-quickInputList-focusForeground", "#000000"], + ["--vscode-quickInputList-focusIconForeground", "#000000"], + ["--vscode-quickInputTitle-background", "rgba(0, 0, 0, 0.06)"], + ["--vscode-radio-activeBackground", "#bed6ed"], + ["--vscode-radio-activeBorder", "#005fb8"], + ["--vscode-radio-activeForeground", "#000000"], + ["--vscode-radio-inactiveBorder", "rgba(0, 0, 0, 0.2)"], + ["--vscode-radio-inactiveHoverBackground", "rgba(184, 184, 184, 0.31)"], + ["--vscode-remoteHub-decorations.addedForegroundColor", "#587c0c"], + ["--vscode-remoteHub-decorations.conflictForegroundColor", "#ad0707"], + ["--vscode-remoteHub-decorations.deletedForegroundColor", "#ad0707"], + ["--vscode-remoteHub-decorations.ignoredResourceForeground", "#8e8e90"], + ["--vscode-remoteHub-decorations.incomingAddedForegroundColor", "#587c0c"], + ["--vscode-remoteHub-decorations.incomingDeletedForegroundColor", "#ad0707"], + ["--vscode-remoteHub-decorations.incomingModifiedForegroundColor", "#895503"], + ["--vscode-remoteHub-decorations.incomingRenamedForegroundColor", "#007100"], + ["--vscode-remoteHub-decorations.modifiedForegroundColor", "#895503"], + ["--vscode-remoteHub-decorations.possibleConflictForegroundColor", "#855f00"], + ["--vscode-remoteHub-decorations.submoduleForegroundColor", "#1258a7"], + [ + "--vscode-remoteHub-decorations.workspaceRepositoriesView.hasUncommittedChangesForegroundColor", + "#895503", + ], + ["--vscode-sash-hoverBorder", "#005fb8"], + ["--vscode-scmGraph-foreground1", "#ffb000"], + ["--vscode-scmGraph-foreground2", "#dc267f"], + ["--vscode-scmGraph-foreground3", "#994f00"], + ["--vscode-scmGraph-foreground4", "#40b0a6"], + ["--vscode-scmGraph-foreground5", "#b66dff"], + ["--vscode-scmGraph-historyItemBaseRefColor", "#ea5c00"], + ["--vscode-scmGraph-historyItemHoverAdditionsForeground", "#587c0c"], + ["--vscode-scmGraph-historyItemHoverDefaultLabelBackground", "#cccccc"], + ["--vscode-scmGraph-historyItemHoverDefaultLabelForeground", "#3b3b3b"], + ["--vscode-scmGraph-historyItemHoverDeletionsForeground", "#ad0707"], + ["--vscode-scmGraph-historyItemHoverLabelForeground", "#f8f8f8"], + ["--vscode-scmGraph-historyItemRefColor", "#0063d3"], + ["--vscode-scmGraph-historyItemRemoteRefColor", "#652d90"], + ["--vscode-scrollbar-shadow", "#dddddd"], + ["--vscode-scrollbarSlider-activeBackground", "rgba(0, 0, 0, 0.6)"], + ["--vscode-scrollbarSlider-background", "rgba(100, 100, 100, 0.4)"], + ["--vscode-scrollbarSlider-hoverBackground", "rgba(100, 100, 100, 0.7)"], + ["--vscode-search-resultsInfoForeground", "#3b3b3b"], + ["--vscode-searchEditor-findMatchBackground", "rgba(234, 92, 0, 0.22)"], + ["--vscode-searchEditor-textInputBorder", "#cecece"], + ["--vscode-settings-checkboxBackground", "#f8f8f8"], + ["--vscode-settings-checkboxBorder", "#cecece"], + ["--vscode-settings-checkboxForeground", "#3b3b3b"], + ["--vscode-settings-dropdownBackground", "#ffffff"], + ["--vscode-settings-dropdownBorder", "#cecece"], + ["--vscode-settings-dropdownForeground", "#3b3b3b"], + ["--vscode-settings-dropdownListBorder", "#c8c8c8"], + ["--vscode-settings-focusedRowBackground", "rgba(242, 242, 242, 0.6)"], + ["--vscode-settings-focusedRowBorder", "#005fb8"], + ["--vscode-settings-headerBorder", "#e5e5e5"], + ["--vscode-settings-headerForeground", "#1f1f1f"], + ["--vscode-settings-modifiedItemIndicator", "rgba(187, 128, 9, 0.4)"], + ["--vscode-settings-numberInputBackground", "#ffffff"], + ["--vscode-settings-numberInputBorder", "#cecece"], + ["--vscode-settings-numberInputForeground", "#3b3b3b"], + ["--vscode-settings-rowHoverBackground", "rgba(242, 242, 242, 0.3)"], + ["--vscode-settings-sashBorder", "#e5e5e5"], + ["--vscode-settings-settingsHeaderHoverForeground", "rgba(31, 31, 31, 0.7)"], + ["--vscode-settings-textInputBackground", "#ffffff"], + ["--vscode-settings-textInputBorder", "#cecece"], + ["--vscode-settings-textInputForeground", "#3b3b3b"], + ["--vscode-sideBar-background", "#f8f8f8"], + ["--vscode-sideBar-border", "#e5e5e5"], + ["--vscode-sideBar-dropBackground", "rgba(38, 119, 203, 0.18)"], + ["--vscode-sideBar-foreground", "#3b3b3b"], + ["--vscode-sideBarActivityBarTop-border", "#e5e5e5"], + ["--vscode-sideBarSectionHeader-background", "#f8f8f8"], + ["--vscode-sideBarSectionHeader-border", "#e5e5e5"], + ["--vscode-sideBarSectionHeader-foreground", "#3b3b3b"], + ["--vscode-sideBarStickyScroll-background", "#f8f8f8"], + ["--vscode-sideBarStickyScroll-shadow", "#dddddd"], + ["--vscode-sideBarTitle-background", "#f8f8f8"], + ["--vscode-sideBarTitle-foreground", "#3b3b3b"], + ["--vscode-sideBySideEditor-horizontalBorder", "#e5e5e5"], + ["--vscode-sideBySideEditor-verticalBorder", "#e5e5e5"], + ["--vscode-simpleFindWidget-sashBorder", "#c8c8c8"], + ["--vscode-statusBar-background", "#f8f8f8"], + ["--vscode-statusBar-border", "#e5e5e5"], + ["--vscode-statusBar-debuggingBackground", "#fd716c"], + ["--vscode-statusBar-debuggingBorder", "#e5e5e5"], + ["--vscode-statusBar-debuggingForeground", "#000000"], + ["--vscode-statusBar-focusBorder", "#005fb8"], + ["--vscode-statusBar-foreground", "#3b3b3b"], + ["--vscode-statusBar-noFolderBackground", "#f8f8f8"], + ["--vscode-statusBar-noFolderBorder", "#e5e5e5"], + ["--vscode-statusBar-noFolderForeground", "#3b3b3b"], + ["--vscode-statusBarItem-activeBackground", "rgba(255, 255, 255, 0.18)"], + ["--vscode-statusBarItem-compactHoverBackground", "#cccccc"], + ["--vscode-statusBarItem-errorBackground", "#c72e0f"], + ["--vscode-statusBarItem-errorForeground", "#ffffff"], + ["--vscode-statusBarItem-errorHoverBackground", "rgba(31, 31, 31, 0.07)"], + ["--vscode-statusBarItem-errorHoverForeground", "#000000"], + ["--vscode-statusBarItem-focusBorder", "#005fb8"], + ["--vscode-statusBarItem-hoverBackground", "rgba(31, 31, 31, 0.07)"], + ["--vscode-statusBarItem-hoverForeground", "#000000"], + ["--vscode-statusBarItem-offlineBackground", "#6c1717"], + ["--vscode-statusBarItem-offlineForeground", "#ffffff"], + ["--vscode-statusBarItem-offlineHoverBackground", "rgba(31, 31, 31, 0.07)"], + ["--vscode-statusBarItem-offlineHoverForeground", "#000000"], + ["--vscode-statusBarItem-prominentBackground", "rgba(110, 118, 129, 0.4)"], + ["--vscode-statusBarItem-prominentForeground", "#3b3b3b"], + ["--vscode-statusBarItem-prominentHoverBackground", "rgba(31, 31, 31, 0.07)"], + ["--vscode-statusBarItem-prominentHoverForeground", "#000000"], + ["--vscode-statusBarItem-remoteBackground", "#005fb8"], + ["--vscode-statusBarItem-remoteForeground", "#ffffff"], + ["--vscode-statusBarItem-remoteHoverBackground", "rgba(31, 31, 31, 0.07)"], + ["--vscode-statusBarItem-remoteHoverForeground", "#000000"], + ["--vscode-statusBarItem-warningBackground", "#725102"], + ["--vscode-statusBarItem-warningForeground", "#ffffff"], + ["--vscode-statusBarItem-warningHoverBackground", "rgba(31, 31, 31, 0.07)"], + ["--vscode-statusBarItem-warningHoverForeground", "#000000"], + ["--vscode-strokeThickness", "1px"], + ["--vscode-symbolIcon-arrayForeground", "#3b3b3b"], + ["--vscode-symbolIcon-booleanForeground", "#3b3b3b"], + ["--vscode-symbolIcon-classForeground", "#d67e00"], + ["--vscode-symbolIcon-colorForeground", "#3b3b3b"], + ["--vscode-symbolIcon-constantForeground", "#3b3b3b"], + ["--vscode-symbolIcon-constructorForeground", "#652d90"], + ["--vscode-symbolIcon-enumeratorForeground", "#d67e00"], + ["--vscode-symbolIcon-enumeratorMemberForeground", "#007acc"], + ["--vscode-symbolIcon-eventForeground", "#d67e00"], + ["--vscode-symbolIcon-fieldForeground", "#007acc"], + ["--vscode-symbolIcon-fileForeground", "#3b3b3b"], + ["--vscode-symbolIcon-folderForeground", "#3b3b3b"], + ["--vscode-symbolIcon-functionForeground", "#652d90"], + ["--vscode-symbolIcon-interfaceForeground", "#007acc"], + ["--vscode-symbolIcon-keyForeground", "#3b3b3b"], + ["--vscode-symbolIcon-keywordForeground", "#3b3b3b"], + ["--vscode-symbolIcon-methodForeground", "#652d90"], + ["--vscode-symbolIcon-moduleForeground", "#3b3b3b"], + ["--vscode-symbolIcon-namespaceForeground", "#3b3b3b"], + ["--vscode-symbolIcon-nullForeground", "#3b3b3b"], + ["--vscode-symbolIcon-numberForeground", "#3b3b3b"], + ["--vscode-symbolIcon-objectForeground", "#3b3b3b"], + ["--vscode-symbolIcon-operatorForeground", "#3b3b3b"], + ["--vscode-symbolIcon-packageForeground", "#3b3b3b"], + ["--vscode-symbolIcon-propertyForeground", "#3b3b3b"], + ["--vscode-symbolIcon-referenceForeground", "#3b3b3b"], + ["--vscode-symbolIcon-snippetForeground", "#3b3b3b"], + ["--vscode-symbolIcon-stringForeground", "#3b3b3b"], + ["--vscode-symbolIcon-structForeground", "#3b3b3b"], + ["--vscode-symbolIcon-textForeground", "#3b3b3b"], + ["--vscode-symbolIcon-typeParameterForeground", "#3b3b3b"], + ["--vscode-symbolIcon-unitForeground", "#3b3b3b"], + ["--vscode-symbolIcon-variableForeground", "#007acc"], + ["--vscode-tab-activeBackground", "#ffffff"], + ["--vscode-tab-activeBorder", "#f8f8f8"], + ["--vscode-tab-activeBorderTop", "#005fb8"], + ["--vscode-tab-activeForeground", "#3b3b3b"], + ["--vscode-tab-activeModifiedBorder", "#33aaee"], + ["--vscode-tab-border", "#e5e5e5"], + ["--vscode-tab-dragAndDropBorder", "#3b3b3b"], + ["--vscode-tab-hoverBackground", "#ffffff"], + ["--vscode-tab-inactiveBackground", "#f8f8f8"], + ["--vscode-tab-inactiveForeground", "#868686"], + ["--vscode-tab-inactiveModifiedBorder", "rgba(51, 170, 238, 0.5)"], + ["--vscode-tab-lastPinnedBorder", "#d4d4d4"], + ["--vscode-tab-selectedBackground", "rgba(255, 255, 255, 0.65)"], + ["--vscode-tab-selectedBorderTop", "#68a3da"], + ["--vscode-tab-selectedForeground", "rgba(51, 51, 51, 0.7)"], + ["--vscode-tab-unfocusedActiveBackground", "#ffffff"], + ["--vscode-tab-unfocusedActiveBorder", "#f8f8f8"], + ["--vscode-tab-unfocusedActiveBorderTop", "#e5e5e5"], + ["--vscode-tab-unfocusedActiveForeground", "rgba(59, 59, 59, 0.7)"], + ["--vscode-tab-unfocusedActiveModifiedBorder", "rgba(51, 170, 238, 0.7)"], + ["--vscode-tab-unfocusedHoverBackground", "#f8f8f8"], + ["--vscode-tab-unfocusedInactiveBackground", "#f8f8f8"], + ["--vscode-tab-unfocusedInactiveForeground", "rgba(134, 134, 134, 0.5)"], + ["--vscode-tab-unfocusedInactiveModifiedBorder", "rgba(51, 170, 238, 0.25)"], + ["--vscode-terminal-ansiBlack", "#000000"], + ["--vscode-terminal-ansiBlue", "#0451a5"], + ["--vscode-terminal-ansiBrightBlack", "#666666"], + ["--vscode-terminal-ansiBrightBlue", "#0451a5"], + ["--vscode-terminal-ansiBrightCyan", "#0598bc"], + ["--vscode-terminal-ansiBrightGreen", "#14ce14"], + ["--vscode-terminal-ansiBrightMagenta", "#bc05bc"], + ["--vscode-terminal-ansiBrightRed", "#cd3131"], + ["--vscode-terminal-ansiBrightWhite", "#a5a5a5"], + ["--vscode-terminal-ansiBrightYellow", "#b5ba00"], + ["--vscode-terminal-ansiCyan", "#0598bc"], + ["--vscode-terminal-ansiGreen", "#107c10"], + ["--vscode-terminal-ansiMagenta", "#bc05bc"], + ["--vscode-terminal-ansiRed", "#cd3131"], + ["--vscode-terminal-ansiWhite", "#555555"], + ["--vscode-terminal-ansiYellow", "#949800"], + ["--vscode-terminal-border", "#e5e5e5"], + ["--vscode-terminal-dropBackground", "rgba(38, 119, 203, 0.18)"], + ["--vscode-terminal-findMatchBackground", "#a8ac94"], + ["--vscode-terminal-findMatchHighlightBackground", "rgba(234, 92, 0, 0.33)"], + ["--vscode-terminal-foreground", "#3b3b3b"], + ["--vscode-terminal-hoverHighlightBackground", "rgba(173, 214, 255, 0.07)"], + ["--vscode-terminal-inactiveSelectionBackground", "#e5ebf1"], + ["--vscode-terminal-initialHintForeground", "rgba(0, 0, 0, 0.47)"], + ["--vscode-terminal-selectionBackground", "#add6ff"], + ["--vscode-terminal-tab.activeBorder", "#005fb8"], + [ + "--vscode-terminalCommandDecoration-defaultBackground", + "rgba(0, 0, 0, 0.25)", + ], + ["--vscode-terminalCommandDecoration-errorBackground", "#e51400"], + ["--vscode-terminalCommandDecoration-successBackground", "#2090d3"], + ["--vscode-terminalCommandGuide-foreground", "#e4e6f1"], + ["--vscode-terminalCursor-foreground", "#005fb8"], + ["--vscode-terminalOverviewRuler-border", "#e5e5e5"], + [ + "--vscode-terminalOverviewRuler-cursorForeground", + "rgba(160, 160, 160, 0.8)", + ], + [ + "--vscode-terminalOverviewRuler-findMatchForeground", + "rgba(209, 134, 22, 0.49)", + ], + ["--vscode-terminalStickyScrollHover-background", "#f0f0f0"], + ["--vscode-terminalSymbolIcon-aliasForeground", "#652d90"], + ["--vscode-terminalSymbolIcon-argumentForeground", "#007acc"], + ["--vscode-terminalSymbolIcon-branchForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-commitForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-fileForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-flagForeground", "#d67e00"], + ["--vscode-terminalSymbolIcon-folderForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-methodForeground", "#652d90"], + ["--vscode-terminalSymbolIcon-optionForeground", "#d67e00"], + ["--vscode-terminalSymbolIcon-optionValueForeground", "#007acc"], + ["--vscode-terminalSymbolIcon-pullRequestDoneForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-pullRequestForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-remoteForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-stashForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-symbolicLinkFileForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-symbolicLinkFolderForeground", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-symbolText", "#3b3b3b"], + ["--vscode-terminalSymbolIcon-tagForeground", "#3b3b3b"], + ["--vscode-testing-coverCountBadgeBackground", "#cccccc"], + ["--vscode-testing-coverCountBadgeForeground", "#3b3b3b"], + ["--vscode-testing-coveredBackground", "rgba(156, 204, 44, 0.25)"], + ["--vscode-testing-coveredBorder", "rgba(156, 204, 44, 0.19)"], + ["--vscode-testing-coveredGutterBackground", "rgba(156, 204, 44, 0.15)"], + ["--vscode-testing-iconErrored", "#f14c4c"], + ["--vscode-testing-iconErrored.retired", "rgba(241, 76, 76, 0.7)"], + ["--vscode-testing-iconFailed", "#f14c4c"], + ["--vscode-testing-iconFailed.retired", "rgba(241, 76, 76, 0.7)"], + ["--vscode-testing-iconPassed", "#73c991"], + ["--vscode-testing-iconPassed.retired", "rgba(115, 201, 145, 0.7)"], + ["--vscode-testing-iconQueued", "#cca700"], + ["--vscode-testing-iconQueued.retired", "rgba(204, 167, 0, 0.7)"], + ["--vscode-testing-iconSkipped", "#848484"], + ["--vscode-testing-iconSkipped.retired", "rgba(132, 132, 132, 0.7)"], + ["--vscode-testing-iconUnset", "#848484"], + ["--vscode-testing-iconUnset.retired", "rgba(132, 132, 132, 0.7)"], + ["--vscode-testing-message.error.badgeBackground", "#e51400"], + ["--vscode-testing-message.error.badgeBorder", "#e51400"], + ["--vscode-testing-message.error.badgeForeground", "#ffffff"], + [ + "--vscode-testing-message.info.decorationForeground", + "rgba(59, 59, 59, 0.5)", + ], + ["--vscode-testing-messagePeekBorder", "#0063d3"], + ["--vscode-testing-messagePeekHeaderBackground", "rgba(0, 99, 211, 0.1)"], + ["--vscode-testing-peekBorder", "#e51400"], + ["--vscode-testing-peekHeaderBackground", "rgba(229, 20, 0, 0.1)"], + ["--vscode-testing-runAction", "#73c991"], + ["--vscode-testing-uncoveredBackground", "rgba(255, 0, 0, 0.2)"], + ["--vscode-testing-uncoveredBorder", "rgba(255, 0, 0, 0.15)"], + ["--vscode-testing-uncoveredBranchBackground", "#ff9999"], + ["--vscode-testing-uncoveredGutterBackground", "rgba(255, 0, 0, 0.3)"], + ["--vscode-textBlockQuote-background", "#f8f8f8"], + ["--vscode-textBlockQuote-border", "#e5e5e5"], + ["--vscode-textCodeBlock-background", "#f8f8f8"], + ["--vscode-textLink-activeForeground", "#005fb8"], + ["--vscode-textLink-foreground", "#005fb8"], + ["--vscode-textPreformat-background", "rgba(0, 0, 0, 0.12)"], + ["--vscode-textPreformat-foreground", "#3b3b3b"], + ["--vscode-textSeparator-foreground", "#21262d"], + ["--vscode-titleBar-activeBackground", "#f8f8f8"], + ["--vscode-titleBar-activeForeground", "#1e1e1e"], + ["--vscode-titleBar-border", "#e5e5e5"], + ["--vscode-titleBar-inactiveBackground", "#f8f8f8"], + ["--vscode-titleBar-inactiveForeground", "#8b949e"], + ["--vscode-toolbar-activeBackground", "rgba(166, 166, 166, 0.31)"], + ["--vscode-toolbar-hoverBackground", "rgba(184, 184, 184, 0.31)"], + ["--vscode-tree-inactiveIndentGuidesStroke", "rgba(169, 169, 169, 0.4)"], + ["--vscode-tree-indentGuidesStroke", "#a9a9a9"], + ["--vscode-tree-tableColumnsBorder", "rgba(97, 97, 97, 0.13)"], + ["--vscode-tree-tableOddRowsBackground", "rgba(59, 59, 59, 0.04)"], + ["--vscode-walkThrough-embeddedEditorBackground", "#f4f4f4"], + ["--vscode-walkthrough-stepTitle.foreground", "#000000"], + ["--vscode-welcomePage-progress.background", "#ffffff"], + ["--vscode-welcomePage-progress.foreground", "#005fb8"], + ["--vscode-welcomePage-tileBackground", "#f3f3f3"], + ["--vscode-welcomePage-tileBorder", "rgba(0, 0, 0, 0.1)"], + ["--vscode-welcomePage-tileHoverBackground", "#dfdfdf"], + ["--vscode-widget-border", "#e5e5e5"], + ["--vscode-widget-shadow", "rgba(0, 0, 0, 0.16)"], +]; diff --git a/.storybook/tsconfig.json b/.storybook/tsconfig.json new file mode 100644 index 00000000..0d9ba5e8 --- /dev/null +++ b/.storybook/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../packages/tsconfig.packages.json", + "compilerOptions": { + "types": ["node"], + "jsx": "react-jsx", + "noEmit": true, + "rootDir": ".." + }, + "include": ["*.ts", "themes/**/*.ts", "../packages/*/storybook.preview.ts"], + "exclude": ["node_modules"] +} diff --git a/.vscodeignore b/.vscodeignore index a11bbd98..d2dd533c 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -53,3 +53,8 @@ AGENTS.md # Build artifacts *.vsix + +# Storybook +.storybook/** +storybook-static/** +**/*.stories.* \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs index 6c282a69..8198aae6 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,3 +1,5 @@ +import storybook from "eslint-plugin-storybook"; + // @ts-check import eslint from "@eslint/js"; import { defineConfig, globalIgnores } from "eslint/config"; @@ -19,6 +21,7 @@ export default defineConfig( "**/vite.config*.ts", ".vscode-test/**", "test/fixtures/scripts/**", + "storybook-static/**", ]), // Base ESLint recommended rules (for JS/TS/TSX files only) @@ -180,6 +183,31 @@ export default defineConfig( }, }, + // Prevent runtime package code from importing test/storybook-only packages + { + files: ["packages/*/src/**/*.ts", "packages/*/src/**/*.tsx"], + ignores: ["**/*.stories.*"], + rules: { + "no-restricted-imports": [ + "error", + { + patterns: [ + { + group: ["@repo/mocks", "@repo/mocks/*"], + message: + "@repo/mocks is for tests and stories only. Do not import it from runtime code.", + }, + { + group: ["@repo/storybook-utils", "@repo/storybook-utils/*"], + message: + "@repo/storybook-utils is for stories only. Do not import it from runtime code.", + }, + ], + }, + ], + }, + }, + // React rules with type-checked analysis (covers hooks, JSX, DOM) { files: ["packages/**/*.{ts,tsx}"], @@ -221,6 +249,9 @@ export default defineConfig( }, }, + // Storybook recommended rules for story files + ...storybook.configs["flat/recommended"], + // Prettier must be last to override other formatting rules prettierConfig, ); diff --git a/package.json b/package.json index d96accb6..54d15887 100644 --- a/package.json +++ b/package.json @@ -28,11 +28,13 @@ "lint:fix": "pnpm lint --fix", "package": "pnpm build:production && vsce package --no-dependencies", "package:prerelease": "pnpm build:production && vsce package --pre-release --no-dependencies", + "storybook": "storybook dev -p 6006 --config-dir .storybook", + "storybook:build": "storybook build --config-dir .storybook", "test": "cross-env CI=true ELECTRON_RUN_AS_NODE=1 electron node_modules/vitest/vitest.mjs", "test:extension": "cross-env ELECTRON_RUN_AS_NODE=1 electron node_modules/vitest/vitest.mjs --project extension", "test:integration": "pnpm compile-tests:integration && node esbuild.mjs && vscode-test", "test:webview": "cross-env ELECTRON_RUN_AS_NODE=1 electron node_modules/vitest/vitest.mjs --project webview", - "typecheck": "concurrently -g -n extension,tests,packages \"tsc --noEmit\" \"tsc --noEmit -p test\" \"pnpm typecheck:packages\"", + "typecheck": "concurrently -g -n extension,tests,packages \"tsc --noEmit\" \"tsc --noEmit -p test\" \"pnpm typecheck:packages\" \"tsc --noEmit -p .storybook\"", "typecheck:packages": "pnpm -r --filter \"./packages/*\" --parallel typecheck", "watch": "concurrently -g -n extension,webviews \"pnpm watch:extension\" \"pnpm watch:webviews\"", "watch:extension": "node esbuild.mjs --watch", @@ -693,7 +695,11 @@ "@eslint-react/eslint-plugin": "^5.7.4", "@eslint/js": "^10.0.1", "@eslint/markdown": "^8.0.1", + "@repo/mocks": "workspace:*", "@rolldown/plugin-babel": "catalog:", + "@storybook/addon-a11y": "catalog:", + "@storybook/addon-docs": "catalog:", + "@storybook/react-vite": "catalog:", "@tanstack/react-query": "catalog:", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", @@ -706,11 +712,13 @@ "@types/semver": "^7.7.1", "@types/ua-parser-js": "0.7.39", "@types/vscode": "1.106.0", + "@types/vscode-webview": "catalog:", "@types/ws": "^8.18.1", "@typescript-eslint/eslint-plugin": "^8.59.2", "@typescript-eslint/parser": "^8.59.2", "@vitejs/plugin-react": "catalog:", "@vitest/coverage-v8": "^4.1.5", + "@vscode/codicons": "catalog:", "@vscode/test-cli": "^0.0.12", "@vscode/test-electron": "^2.5.2", "@vscode/vsce": "^3.9.1", @@ -727,6 +735,7 @@ "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-import-x": "^4.16.2", "eslint-plugin-package-json": "^0.91.2", + "eslint-plugin-storybook": "catalog:", "globals": "^17.6.0", "jsdom": "^29.1.1", "jsonc-eslint-parser": "^3.1.0", @@ -734,6 +743,7 @@ "prettier": "^3.8.3", "react": "catalog:", "react-dom": "catalog:", + "storybook": "catalog:", "typescript": "catalog:", "typescript-eslint": "^8.59.2", "utf-8-validate": "^6.0.6", diff --git a/packages/mocks/package.json b/packages/mocks/package.json new file mode 100644 index 00000000..1dfedbd9 --- /dev/null +++ b/packages/mocks/package.json @@ -0,0 +1,22 @@ +{ + "name": "@repo/mocks", + "version": "1.0.0", + "description": "Mocking utilities for storybook and testing", + "private": true, + "type": "module", + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/shared": "workspace:*" + }, + "devDependencies": { + "typescript": "catalog:" + } +} diff --git a/packages/mocks/src/index.ts b/packages/mocks/src/index.ts new file mode 100644 index 00000000..bf3d4e3a --- /dev/null +++ b/packages/mocks/src/index.ts @@ -0,0 +1,2 @@ +export * from "./tasks"; +export * from "./workspaces"; diff --git a/test/mocks/tasks.ts b/packages/mocks/src/tasks.ts similarity index 99% rename from test/mocks/tasks.ts rename to packages/mocks/src/tasks.ts index 3231a48e..07421ce9 100644 --- a/test/mocks/tasks.ts +++ b/packages/mocks/src/tasks.ts @@ -3,6 +3,7 @@ * Use these to create test data with sensible defaults. */ +import type { TaskDetails, TaskTemplate } from "@repo/shared"; import type { Task, TaskLogEntry, @@ -11,8 +12,6 @@ import type { TaskState, } from "coder/site/src/api/typesGenerated"; -import type { TaskDetails, TaskTemplate } from "@repo/shared"; - /** * Create a Task with sensible defaults. * The defaults represent a typical active task with a running workspace. diff --git a/test/mocks/workspace.ts b/packages/mocks/src/workspaces.ts similarity index 100% rename from test/mocks/workspace.ts rename to packages/mocks/src/workspaces.ts diff --git a/packages/mocks/tsconfig.json b/packages/mocks/tsconfig.json new file mode 100644 index 00000000..70ff23ea --- /dev/null +++ b/packages/mocks/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../tsconfig.packages.json", + "include": ["src"] +} diff --git a/packages/storybook-utils/package.json b/packages/storybook-utils/package.json new file mode 100644 index 00000000..7bbdc644 --- /dev/null +++ b/packages/storybook-utils/package.json @@ -0,0 +1,24 @@ +{ + "name": "@repo/storybook-utils", + "version": "1.0.0", + "description": "Shared utilities for storybook", + "private": true, + "type": "module", + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@tanstack/react-query": "catalog:", + "react": "catalog:" + }, + "devDependencies": { + "@storybook/react-vite": "catalog:", + "typescript": "catalog:" + } +} diff --git a/packages/storybook-utils/src/decorators/withQueryClient.tsx b/packages/storybook-utils/src/decorators/withQueryClient.tsx new file mode 100644 index 00000000..bc9be99f --- /dev/null +++ b/packages/storybook-utils/src/decorators/withQueryClient.tsx @@ -0,0 +1,33 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { useState } from "react"; + +import type { Decorator } from "@storybook/react-vite"; + +function QueryClientDecorator({ children }: { children: React.ReactNode }) { + const [client] = useState( + () => + new QueryClient({ + defaultOptions: { + queries: { + retry: false, + staleTime: Infinity, + }, + mutations: { + retry: false, + }, + }, + }), + ); + + return {children}; +} + +/** + * Decorator that wraps stories with a QueryClientProvider. + * Use this for components that use React Query hooks (useQuery, useMutation, etc.) + */ +export const withQueryClient: Decorator = (Story) => ( + + + +); diff --git a/packages/storybook-utils/src/index.ts b/packages/storybook-utils/src/index.ts new file mode 100644 index 00000000..4e4fdb78 --- /dev/null +++ b/packages/storybook-utils/src/index.ts @@ -0,0 +1 @@ +export * from "./decorators/withQueryClient"; diff --git a/packages/storybook-utils/tsconfig.json b/packages/storybook-utils/tsconfig.json new file mode 100644 index 00000000..70ff23ea --- /dev/null +++ b/packages/storybook-utils/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../tsconfig.packages.json", + "include": ["src"] +} diff --git a/packages/tasks/package.json b/packages/tasks/package.json index b834a544..7912d55f 100644 --- a/packages/tasks/package.json +++ b/packages/tasks/package.json @@ -20,6 +20,8 @@ "react-dom": "catalog:" }, "devDependencies": { + "@repo/mocks": "workspace:*", + "@repo/storybook-utils": "workspace:*", "@rolldown/plugin-babel": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", diff --git a/packages/tasks/src/components/ActionMenu.stories.tsx b/packages/tasks/src/components/ActionMenu.stories.tsx new file mode 100644 index 00000000..f214ca01 --- /dev/null +++ b/packages/tasks/src/components/ActionMenu.stories.tsx @@ -0,0 +1,50 @@ +import { fn } from "storybook/test"; + +import { ActionMenu } from "./ActionMenu"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/ActionMenu", + component: ActionMenu, + args: { + items: [ + { + label: "Run Task", + onClick: fn(), + icon: "play", + }, + { + label: "Configure Task", + onClick: fn(), + icon: "settings", + }, + { + label: "Delete Task", + onClick: fn(), + icon: "trash", + danger: true, + }, + { + label: "Disabled Action", + onClick: fn(), + icon: "ban", + disabled: true, + }, + { + separator: true, + }, + { + label: "Loading Action", + onClick: fn(), + icon: "spinner", + loading: true, + }, + ], + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/packages/tasks/src/components/AgentChatHistory.stories.tsx b/packages/tasks/src/components/AgentChatHistory.stories.tsx new file mode 100644 index 00000000..9fd8c135 --- /dev/null +++ b/packages/tasks/src/components/AgentChatHistory.stories.tsx @@ -0,0 +1,79 @@ +import { logEntry } from "@repo/mocks"; + +import { AgentChatHistory } from "./AgentChatHistory"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const defaultLogs = [ + logEntry({ + id: 1, + type: "input", + content: "What is the weather today?", + }), + logEntry({ + id: 2, + type: "output", + content: "The weather today is sunny with a high of 25°C.", + }), +]; + +const meta: Meta = { + title: "Tasks/AgentChatHistory", + component: AgentChatHistory, + args: { + isThinking: false, + taskLogs: { + status: "ok", + logs: defaultLogs, + }, + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; + +export const Empty: Story = { + args: { + taskLogs: { + status: "ok", + snapshot: false, + logs: [], + }, + }, +}; + +export const Thinking: Story = { + args: { + isThinking: true, + }, +}; + +export const Error: Story = { + args: { + isThinking: false, + taskLogs: { + status: "error", + }, + }, +}; + +export const Snapshot: Story = { + args: { + taskLogs: { + status: "ok", + logs: [], + snapshot: true, + snapshotAt: "2024-01-01T12:00:00Z", + }, + }, +}; + +export const NotAvailable: Story = { + args: { + taskLogs: { + status: "not_available", + }, + }, +}; diff --git a/packages/tasks/src/components/CreateTaskSection.stories.tsx b/packages/tasks/src/components/CreateTaskSection.stories.tsx new file mode 100644 index 00000000..593c4080 --- /dev/null +++ b/packages/tasks/src/components/CreateTaskSection.stories.tsx @@ -0,0 +1,21 @@ +import { taskTemplate } from "@repo/mocks"; +import { withQueryClient } from "@repo/storybook-utils"; + +import { CreateTaskSection } from "./CreateTaskSection"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/CreateTaskSection", + component: CreateTaskSection, + decorators: [withQueryClient], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + templates: [taskTemplate()], + }, +}; diff --git a/packages/tasks/src/components/ErrorBanner.stories.tsx b/packages/tasks/src/components/ErrorBanner.stories.tsx new file mode 100644 index 00000000..b98b103f --- /dev/null +++ b/packages/tasks/src/components/ErrorBanner.stories.tsx @@ -0,0 +1,32 @@ +import { task } from "@repo/mocks"; + +import { ErrorBanner } from "./ErrorBanner"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/ErrorBanner", + component: ErrorBanner, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + task: task(), + }, +}; + +export const WithMessage: Story = { + args: { + task: task({ + current_state: { + state: "failed", + message: "Could not calculate the square root of a negative number.", + timestamp: "2024-06-01T12:00:00Z", + uri: "", + }, + }), + }, +}; diff --git a/packages/tasks/src/components/ErrorState.stories.tsx b/packages/tasks/src/components/ErrorState.stories.tsx new file mode 100644 index 00000000..5622b9f6 --- /dev/null +++ b/packages/tasks/src/components/ErrorState.stories.tsx @@ -0,0 +1,20 @@ +import { fn } from "storybook/test"; + +import { ErrorState } from "./ErrorState"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/ErrorState", + component: ErrorState, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + message: "Task failed", + onRetry: fn(), + }, +}; diff --git a/packages/tasks/src/components/LogViewer.stories.tsx b/packages/tasks/src/components/LogViewer.stories.tsx new file mode 100644 index 00000000..f343d681 --- /dev/null +++ b/packages/tasks/src/components/LogViewer.stories.tsx @@ -0,0 +1,40 @@ +import { LogViewer, LogViewerPlaceholder } from "./LogViewer"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/LogViewer", + component: LogViewer, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + header: "Task Logs", + children: ( +
+
Entry 1
+
Entry 2
+
Entry 3
+
+ ), + }, +}; + +export const Loading: Story = { + args: { + header: "Task Logs", + children: Loading logs..., + }, +}; + +export const WithError: Story = { + args: { + header: "Task Logs", + children: ( + Failed to load logs. + ), + }, +}; diff --git a/packages/tasks/src/components/NoTemplateState.stories.tsx b/packages/tasks/src/components/NoTemplateState.stories.tsx new file mode 100644 index 00000000..3f31c8b7 --- /dev/null +++ b/packages/tasks/src/components/NoTemplateState.stories.tsx @@ -0,0 +1,13 @@ +import { NoTemplateState } from "./NoTemplateState"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/NoTemplateState", + component: NoTemplateState, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/packages/tasks/src/components/NotSupportedState.stories.tsx b/packages/tasks/src/components/NotSupportedState.stories.tsx new file mode 100644 index 00000000..9bdbebfe --- /dev/null +++ b/packages/tasks/src/components/NotSupportedState.stories.tsx @@ -0,0 +1,13 @@ +import { NotSupportedState } from "./NotSupportedState"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/NotSupportedState", + component: NotSupportedState, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/packages/tasks/src/components/PromptInput.stories.tsx b/packages/tasks/src/components/PromptInput.stories.tsx new file mode 100644 index 00000000..ea294584 --- /dev/null +++ b/packages/tasks/src/components/PromptInput.stories.tsx @@ -0,0 +1,61 @@ +import { expect, fn, userEvent } from "storybook/test"; + +import { PromptInput } from "./PromptInput"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/PromptInput", + component: PromptInput, + args: { + value: "", + onChange: fn(), + onSubmit: fn(), + actionIcon: "send", + actionLabel: "Submit", + actionEnabled: true, + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + placeholder: "Enter your prompt here...", + }, + play: async ({ canvasElement, args }) => { + const textarea = + canvasElement.querySelector(".prompt-input"); + if (!textarea) throw new Error("textarea not found"); + + await userEvent.type(textarea, "hello"); + await userEvent.keyboard("{Control>}{Enter}{/Control}"); + await expect(args.onSubmit).toHaveBeenCalledOnce(); + }, +}; + +export const Loading: Story = { + args: { + placeholder: "Loading prompt...", + loading: true, + }, +}; + +export const Disabled: Story = { + args: { + placeholder: "Prompt input disabled", + disabled: true, + }, + play: async ({ canvasElement, args }) => { + const textarea = + canvasElement.querySelector(".prompt-input"); + if (!textarea) throw new Error("textarea not found"); + + // The textarea is disabled so userEvent.type won't work; fire the + // key combo directly and verify onSubmit is never called. + textarea.focus(); + await userEvent.keyboard("{Control>}{Enter}{/Control}"); + await expect(args.onSubmit).not.toHaveBeenCalled(); + }, +}; diff --git a/packages/tasks/src/components/StatePanel.stories.tsx b/packages/tasks/src/components/StatePanel.stories.tsx new file mode 100644 index 00000000..6eb464d5 --- /dev/null +++ b/packages/tasks/src/components/StatePanel.stories.tsx @@ -0,0 +1,32 @@ +import { VscodeButton, VscodeIcon } from "@vscode-elements/react-elements"; + +import { StatePanel } from "./StatePanel"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/StatePanel", + component: StatePanel, + args: { + title: "Tasks not available", + description: "This Coder server does not support tasks.", + action: ( + + Learn more + + ), + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; + +export const Error: Story = { + args: { + className: "error-state", + description: "Unable to load tasks right now.", + action: Retry, + }, +}; diff --git a/packages/tasks/src/components/StatusIndicator.stories.tsx b/packages/tasks/src/components/StatusIndicator.stories.tsx new file mode 100644 index 00000000..0eae2a7a --- /dev/null +++ b/packages/tasks/src/components/StatusIndicator.stories.tsx @@ -0,0 +1,62 @@ +import { task } from "@repo/mocks"; + +import { StatusIndicator } from "./StatusIndicator"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/StatusIndicator", + component: StatusIndicator, + decorators: [ + (Story) => ( +
+ +
+ ), + ], +}; + +export default meta; +type Story = StoryObj; + +export const Active: Story = { + args: { + task: task(), + }, +}; + +export const Error: Story = { + args: { + task: task({ status: "error" }), + }, +}; + +export const Initializing: Story = { + args: { + task: task({ status: "initializing" }), + }, +}; + +export const Paused: Story = { + args: { + task: task({ status: "paused" }), + }, +}; + +export const Pending: Story = { + args: { + task: task({ status: "pending" }), + }, +}; + +export const Unknown: Story = { + args: { + task: task({ status: "unknown" }), + }, +}; diff --git a/packages/tasks/src/components/TaskDetailHeader.stories.tsx b/packages/tasks/src/components/TaskDetailHeader.stories.tsx new file mode 100644 index 00000000..d76e4c0e --- /dev/null +++ b/packages/tasks/src/components/TaskDetailHeader.stories.tsx @@ -0,0 +1,23 @@ +import { task } from "@repo/mocks"; +import { withQueryClient } from "@repo/storybook-utils"; +import { fn } from "storybook/test"; + +import { TaskDetailHeader } from "./TaskDetailHeader"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/TaskDetailHeader", + component: TaskDetailHeader, + decorators: [withQueryClient], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + task: task(), + onBack: fn(), + }, +}; diff --git a/packages/tasks/src/components/TaskDetailView.stories.tsx b/packages/tasks/src/components/TaskDetailView.stories.tsx new file mode 100644 index 00000000..89df37d3 --- /dev/null +++ b/packages/tasks/src/components/TaskDetailView.stories.tsx @@ -0,0 +1,75 @@ +import { taskDetails } from "@repo/mocks"; +import { withQueryClient } from "@repo/storybook-utils"; +import { fn } from "storybook/test"; + +import { TaskDetailView } from "./TaskDetailView"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/TaskDetailView", + component: TaskDetailView, + decorators: [withQueryClient], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + details: taskDetails(), + onBack: fn(), + }, +}; + +export const Error: Story = { + args: { + details: taskDetails({ + task: { + status: "error", + current_state: { + timestamp: "2024-01-01T00:00:00Z", + state: "failed", + message: "Task execution failed", + uri: "", + }, + }, + }), + onBack: fn(), + }, +}; + +export const WorkspaceStarting: Story = { + args: { + details: taskDetails({ + task: { + workspace_status: "starting", + current_state: { + timestamp: "2024-01-01T00:00:00Z", + state: "working", + message: "Starting workspace", + uri: "", + }, + }, + }), + onBack: fn(), + }, +}; + +export const AgentStarting: Story = { + args: { + details: taskDetails({ + task: { + workspace_status: "running", + workspace_agent_lifecycle: "starting", + current_state: { + timestamp: "2024-01-01T00:00:00Z", + state: "working", + message: "Agent initializing", + uri: "", + }, + }, + }), + onBack: fn(), + }, +}; diff --git a/packages/tasks/src/components/TaskItem.stories.tsx b/packages/tasks/src/components/TaskItem.stories.tsx new file mode 100644 index 00000000..d6c60152 --- /dev/null +++ b/packages/tasks/src/components/TaskItem.stories.tsx @@ -0,0 +1,23 @@ +import { task } from "@repo/mocks"; +import { withQueryClient } from "@repo/storybook-utils"; +import { fn } from "storybook/test"; + +import { TaskItem } from "./TaskItem"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/TaskItem", + component: TaskItem, + decorators: [withQueryClient], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + task: task(), + onSelect: fn(), + }, +}; diff --git a/packages/tasks/src/components/TaskList.stories.tsx b/packages/tasks/src/components/TaskList.stories.tsx new file mode 100644 index 00000000..79785136 --- /dev/null +++ b/packages/tasks/src/components/TaskList.stories.tsx @@ -0,0 +1,29 @@ +import { task } from "@repo/mocks"; +import { withQueryClient } from "@repo/storybook-utils"; +import { fn } from "storybook/test"; + +import { TaskList } from "./TaskList"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/TaskList", + component: TaskList, + decorators: [withQueryClient], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + tasks: [ + task({ id: "task-1" }), + task({ id: "task-2", status: "unknown" }), + task({ id: "task-3", status: "error" }), + task({ id: "task-4", status: "paused" }), + task({ id: "task-5", status: "initializing" }), + ], + onSelectTask: fn(), + }, +}; diff --git a/packages/tasks/src/components/TaskMessageInput.stories.tsx b/packages/tasks/src/components/TaskMessageInput.stories.tsx new file mode 100644 index 00000000..79a6b085 --- /dev/null +++ b/packages/tasks/src/components/TaskMessageInput.stories.tsx @@ -0,0 +1,33 @@ +import { task } from "@repo/mocks"; +import { withQueryClient } from "@repo/storybook-utils"; + +import { TaskMessageInput } from "./TaskMessageInput"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/TaskMessageInput", + component: TaskMessageInput, + decorators: [withQueryClient], +}; + +export default meta; +type Story = StoryObj; + +export const Active: Story = { + args: { + task: task(), + }, +}; + +export const Paused: Story = { + args: { + task: task({ status: "paused" }), + }, +}; + +export const Error: Story = { + args: { + task: task({ status: "error" }), + }, +}; diff --git a/packages/tasks/src/components/TasksPanel.stories.tsx b/packages/tasks/src/components/TasksPanel.stories.tsx new file mode 100644 index 00000000..4092bac8 --- /dev/null +++ b/packages/tasks/src/components/TasksPanel.stories.tsx @@ -0,0 +1,56 @@ +import { task } from "@repo/mocks"; +import { withQueryClient } from "@repo/storybook-utils"; +import { fn } from "storybook/test"; + +import { TasksPanel } from "./TasksPanel"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const tasks = [ + task({ id: "task-1" }), + task({ id: "task-2" }), + task({ id: "task-3" }), +]; + +const meta: Meta = { + title: "Tasks/TasksPanel", + component: TasksPanel, + decorators: [withQueryClient], + args: { + tasks, + templates: [], + persisted: { + initialCreateExpanded: true, + initialHistoryExpanded: true, + save: fn(), + }, + }, + parameters: { + layout: "fullscreen", + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; + +export const CollapsibleToggle: Story = { + args: { + persisted: { + initialCreateExpanded: false, + initialHistoryExpanded: false, + save: fn(), + }, + }, +}; + +export const TaskSelection: Story = { + args: { + persisted: { + initialCreateExpanded: false, + initialHistoryExpanded: true, + save: fn(), + }, + }, +}; diff --git a/packages/tasks/src/components/WorkspaceLogs.stories.tsx b/packages/tasks/src/components/WorkspaceLogs.stories.tsx new file mode 100644 index 00000000..31453bf8 --- /dev/null +++ b/packages/tasks/src/components/WorkspaceLogs.stories.tsx @@ -0,0 +1,25 @@ +import { task } from "@repo/mocks"; + +import { WorkspaceLogs } from "./WorkspaceLogs"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; + +const meta: Meta = { + title: "Tasks/WorkspaceLogs", + component: WorkspaceLogs, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + task: task(), + }, +}; + +export const BuildingWorkspace: Story = { + args: { + task: task({ workspace_status: "pending" }), + }, +}; diff --git a/packages/tasks/storybook.preview.ts b/packages/tasks/storybook.preview.ts new file mode 100644 index 00000000..c01b6f9c --- /dev/null +++ b/packages/tasks/storybook.preview.ts @@ -0,0 +1 @@ +import "./src/index.css"; diff --git a/packages/tasks/tsconfig.json b/packages/tasks/tsconfig.json index e1940bf7..27059a98 100644 --- a/packages/tasks/tsconfig.json +++ b/packages/tasks/tsconfig.json @@ -6,5 +6,5 @@ "@repo/webview-shared": ["../webview-shared/src"] } }, - "include": ["src"] + "include": ["src", "storybook.preview.ts"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 277c4f2b..820a984b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,15 @@ catalogs: '@rolldown/plugin-babel': specifier: ^0.2.3 version: 0.2.3 + '@storybook/addon-a11y': + specifier: ^10.3.6 + version: 10.3.6 + '@storybook/addon-docs': + specifier: ^10.3.6 + version: 10.3.6 + '@storybook/react-vite': + specifier: ^10.3.6 + version: 10.3.6 '@tanstack/react-query': specifier: ^5.100.9 version: 5.100.9 @@ -39,12 +48,18 @@ catalogs: date-fns: specifier: ^4.1.0 version: 4.1.0 + eslint-plugin-storybook: + specifier: ^10.3.6 + version: 10.3.6 react: specifier: ^19.2.6 version: 19.2.6 react-dom: specifier: ^19.2.6 version: 19.2.6 + storybook: + specifier: ^10.3.6 + version: 10.3.6 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -123,9 +138,21 @@ importers: '@eslint/markdown': specifier: ^8.0.1 version: 8.0.1 + '@repo/mocks': + specifier: workspace:* + version: link:packages/mocks '@rolldown/plugin-babel': specifier: 'catalog:' version: 0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.18)(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0)) + '@storybook/addon-a11y': + specifier: 'catalog:' + version: 10.3.6(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6)) + '@storybook/addon-docs': + specifier: 'catalog:' + version: 10.3.6(@types/react@19.2.14)(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0)) + '@storybook/react-vite': + specifier: 'catalog:' + version: 10.3.6(esbuild@0.28.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3)(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0)) '@tanstack/react-query': specifier: 'catalog:' version: 5.100.9(react@19.2.6) @@ -162,6 +189,9 @@ importers: '@types/vscode': specifier: 1.106.0 version: 1.106.0 + '@types/vscode-webview': + specifier: 'catalog:' + version: 1.57.5 '@types/ws': specifier: ^8.18.1 version: 8.18.1 @@ -177,6 +207,9 @@ importers: '@vitest/coverage-v8': specifier: ^4.1.5 version: 4.1.5(vitest@4.1.5) + '@vscode/codicons': + specifier: 'catalog:' + version: 0.0.45 '@vscode/test-cli': specifier: ^0.0.12 version: 0.0.12 @@ -225,6 +258,9 @@ importers: eslint-plugin-package-json: specifier: ^0.91.2 version: 0.91.2(@types/estree@1.0.9)(eslint@10.3.0)(jsonc-eslint-parser@3.1.0) + eslint-plugin-storybook: + specifier: 'catalog:' + version: 10.3.6(eslint@10.3.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3) globals: specifier: ^17.6.0 version: 17.6.0 @@ -246,6 +282,9 @@ importers: react-dom: specifier: 'catalog:' version: 19.2.6(react@19.2.6) + storybook: + specifier: 'catalog:' + version: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) typescript: specifier: 'catalog:' version: 6.0.3 @@ -281,6 +320,16 @@ importers: specifier: 'catalog:' version: 8.0.11(@types/node@24.10.12)(esbuild@0.28.0) + packages/mocks: + dependencies: + '@repo/shared': + specifier: workspace:* + version: link:../shared + devDependencies: + typescript: + specifier: 'catalog:' + version: 6.0.3 + packages/shared: devDependencies: typescript: @@ -306,6 +355,22 @@ importers: specifier: 'catalog:' version: 8.0.11(@types/node@24.10.12)(esbuild@0.28.0) + packages/storybook-utils: + dependencies: + '@tanstack/react-query': + specifier: 'catalog:' + version: 5.100.9(react@19.2.6) + react: + specifier: 'catalog:' + version: 19.2.6 + devDependencies: + '@storybook/react-vite': + specifier: 'catalog:' + version: 10.3.6(esbuild@0.28.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3)(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0)) + typescript: + specifier: 'catalog:' + version: 6.0.3 + packages/tasks: dependencies: '@repo/shared': @@ -333,6 +398,12 @@ importers: specifier: 'catalog:' version: 19.2.6(react@19.2.6) devDependencies: + '@repo/mocks': + specifier: workspace:* + version: link:../mocks + '@repo/storybook-utils': + specifier: workspace:* + version: link:../storybook-utils '@rolldown/plugin-babel': specifier: 'catalog:' version: 0.2.3(@babel/core@7.29.0)(@babel/runtime@7.29.2)(rolldown@1.0.0-rc.18)(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0)) @@ -591,156 +662,312 @@ packages: '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.28.0': resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.28.0': resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.28.0': resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.28.0': resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.28.0': resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.28.0': resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.28.0': resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.28.0': resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.28.0': resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.28.0': resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.28.0': resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.28.0': resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.28.0': resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.28.0': resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.28.0': resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.28.0': resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.28.0': resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.28.0': resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.28.0': resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.28.0': resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.28.0': resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.28.0': resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.28.0': resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.28.0': resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.28.0': resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.28.0': resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} engines: {node: '>=18'} @@ -884,6 +1111,15 @@ packages: resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} engines: {node: '>=8'} + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0': + resolution: {integrity: sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ==} + peerDependencies: + typescript: '>= 4.3.x' + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1034,6 +1270,12 @@ packages: '@lit/reactive-element@2.1.2': resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==} + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -1220,6 +1462,15 @@ packages: '@rolldown/pluginutils@1.0.0-rc.7': resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@secretlint/config-creator@10.2.2': resolution: {integrity: sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==} engines: {node: '>=20.0.0'} @@ -1276,6 +1527,75 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@storybook/addon-a11y@10.3.6': + resolution: {integrity: sha512-cbwXIT5CeHZ9AFbTKQ6YB7Ct6TAl/kKOgALbvzzVtFfRvm51JYygGaiJaB7PbPWn9wgJP2olJcFt+erlEc6cRw==} + peerDependencies: + storybook: ^10.3.6 + + '@storybook/addon-docs@10.3.6': + resolution: {integrity: sha512-TvIdADVPtauxW0LzXIpIv7X6GxwetorhyNh+6+7MHC27XSBCWVxxRUwL63YeLlHTuXsIk0quG3b1xgwVRzWOJA==} + peerDependencies: + storybook: ^10.3.6 + + '@storybook/builder-vite@10.3.6': + resolution: {integrity: sha512-gpvR/sE4BcrFtmQZ+Ker7zD23oQzoVeqD9nF6cK6yzY+Q0svJXyX2EPmFG4y+EwygD5/vNzDpP84gGMut8VRwg==} + peerDependencies: + storybook: ^10.3.6 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/csf-plugin@10.3.6': + resolution: {integrity: sha512-9kBf7VRdRqTSIYo+rPtVn5yjYYyK8kP2QhEYx3oiXvfwy4RexmbJnhk/tXa/lNiTqukA1TqaWQ2+5MqF4fu6YQ==} + peerDependencies: + esbuild: '*' + rollup: '*' + storybook: ^10.3.6 + vite: '*' + webpack: '*' + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/icons@2.0.2': + resolution: {integrity: sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@storybook/react-dom-shim@10.3.6': + resolution: {integrity: sha512-/Tu1gPu+Fw+zOnAGmxRmOD30FX3a04LxcTAKflEtdpmtIMVR5bA3qpjy+f5YhoyDCecbXyKmL1OeIU2FIIZHqQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.3.6 + + '@storybook/react-vite@10.3.6': + resolution: {integrity: sha512-tySQRc+8q7V2NkylQMNJjDV8zXy6tkxb8oDqw/DIhHhI9Xn77MTKVZ8Cihbo5NMm7HYTB6xDKr6wqdSMgdufYQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.3.6 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@storybook/react@10.3.6': + resolution: {integrity: sha512-oZQZ6xayWe5IdHmFUTL0TL8rX/gpNNh9gWhT2vzW5eeUvlkVG/RBKdsja6Ndrk2s1D9vcnwiI6r6CNXy3IEEmg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^10.3.6 + typescript: '>= 4.9.x' + peerDependenciesMeta: + typescript: + optional: true + '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -1311,6 +1631,12 @@ packages: '@types/react-dom': optional: true + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@textlint/ast-node-types@15.6.0': resolution: {integrity: sha512-CxZHFbYAU7J0A4izz31wV2ZZfySR6aVj2OSR6/3tppZm7VV6hM7nA7sutsLwIiBL/v4lsB1RM79l4Dc/VrH4qw==} @@ -1359,6 +1685,9 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} @@ -1386,6 +1715,9 @@ packages: '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} @@ -1412,6 +1744,9 @@ packages: '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -1633,6 +1968,9 @@ packages: '@vitest/browser': optional: true + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.1.5': resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==} @@ -1647,6 +1985,9 @@ packages: vite: optional: true + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.1.5': resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} @@ -1656,9 +1997,15 @@ packages: '@vitest/snapshot@4.1.5': resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.1.5': resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.1.5': resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} @@ -1738,6 +2085,9 @@ packages: engines: {node: '>= 20'} hasBin: true + '@webcontainer/env@1.1.1': + resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1812,6 +2162,10 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + ast-v8-to-istanbul@1.0.0: resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} @@ -1822,6 +2176,10 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + axe-core@4.11.4: + resolution: {integrity: sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA==} + engines: {node: '>=4'} + axios@1.16.0: resolution: {integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==} @@ -1952,6 +2310,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -1970,6 +2332,10 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -2114,6 +2480,10 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -2181,6 +2551,10 @@ packages: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -2231,6 +2605,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + empathic@2.0.1: + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} + engines: {node: '>=14'} + encoding-sniffer@0.2.1: resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} @@ -2287,6 +2665,11 @@ packages: es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.28.0: resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} engines: {node: '>=18'} @@ -2409,6 +2792,12 @@ packages: eslint: ^10.3.0 typescript: '*' + eslint-plugin-storybook@10.3.6: + resolution: {integrity: sha512-8udrL+Rmp5LFaZvgRe4J226X1MYls25bWCyHuzR5X8s2qbFTryX+wKC+o/0Ato4A1AvwnDg8OOMPc6yWJ9JpcA==} + peerDependencies: + eslint: '>=8' + storybook: ^10.3.6 + eslint-scope@9.1.2: resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -2452,6 +2841,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -2649,6 +3041,10 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} + global-agent@3.0.0: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} @@ -2795,6 +3191,10 @@ packages: is-bun-module@2.0.0: resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3108,6 +3508,9 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} @@ -3522,6 +3925,9 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -3537,6 +3943,10 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -3649,6 +4059,15 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true + react-docgen-typescript@2.4.0: + resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} + peerDependencies: + typescript: '>= 4.3.x' + + react-docgen@8.0.3: + resolution: {integrity: sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w==} + engines: {node: ^20.9.0 || >=22} + react-dom@19.2.6: resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} peerDependencies: @@ -3684,6 +4103,10 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -3702,6 +4125,11 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} @@ -3896,6 +4324,18 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} + storybook@10.3.6: + resolution: {integrity: sha512-vbSz7g/1rGMC1uAULqMZjALkIuLu2QABqfhRYhyr/11kzyesi+vAmwyJLukZP1FfecxGOgMwOh6GS0YsGpHAvQ==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + vite-plus: ^0.1.15 + peerDependenciesMeta: + prettier: + optional: true + vite-plus: + optional: true + string-ts@2.3.1: resolution: {integrity: sha512-xSJq+BS52SaFFAVxuStmx6n5aYZU571uYUnUrPXkPFCfdHyZMMlbP2v2Wx5sNBnAVzq/2+0+mcBLBa3Xa5ubYw==} @@ -3925,10 +4365,18 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} + engines: {node: '>=12'} + strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -3960,6 +4408,10 @@ packages: resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -3999,6 +4451,9 @@ packages: peerDependencies: tslib: ^2 + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -4010,10 +4465,18 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + tldts-core@7.0.30: resolution: {integrity: sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==} @@ -4053,9 +4516,17 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + ts-pattern@5.9.0: resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -4151,6 +4622,10 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} @@ -4166,6 +4641,11 @@ packages: url-join@4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + utf-8-validate@6.0.6: resolution: {integrity: sha512-q3l3P9UtEEiAHcsgsqTgf9PPjctrDWoIXW3NpOHFdRDbLvu4DLIcxHangJ4RLrWkBcKjmcs/6NkerI8T/rE4LA==} engines: {node: '>=6.14.2'} @@ -4280,6 +4760,9 @@ packages: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -4680,81 +5163,159 @@ snapshots: '@epic-web/invariant@1.0.0': {} + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/aix-ppc64@0.28.0': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm64@0.28.0': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.28.0': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.28.0': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.28.0': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.28.0': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.28.0': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.28.0': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.28.0': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-arm@0.28.0': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-ia32@0.28.0': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-loong64@0.28.0': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.28.0': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.28.0': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.28.0': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-s390x@0.28.0': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/linux-x64@0.28.0': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.28.0': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.28.0': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.28.0': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.28.0': optional: true + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/openharmony-arm64@0.28.0': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.28.0': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.28.0': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-ia32@0.28.0': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@esbuild/win32-x64@0.28.0': optional: true @@ -4931,6 +5492,22 @@ snapshots: '@istanbuljs/schema@0.1.6': {} + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@6.0.3)(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0))': + dependencies: + glob: 13.0.6 + react-docgen-typescript: 2.4.0(typescript@6.0.3) + vite: 8.0.11(@types/node@22.19.17)(esbuild@0.28.0) + optionalDependencies: + typescript: 6.0.3 + + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@6.0.3)(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0))': + dependencies: + glob: 13.0.6 + react-docgen-typescript: 2.4.0(typescript@6.0.3) + vite: 8.0.11(@types/node@24.10.12)(esbuild@0.28.0) + optionalDependencies: + typescript: 6.0.3 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5091,6 +5668,12 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.5.1 + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.6)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.2.14 + react: 19.2.6 + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.10.0 @@ -5288,6 +5871,12 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.7': {} + '@rollup/pluginutils@5.3.0': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.4 + '@secretlint/config-creator@10.2.2': dependencies: '@secretlint/types': 10.2.2 @@ -5368,6 +5957,138 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@storybook/addon-a11y@10.3.6(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))': + dependencies: + '@storybook/global': 5.0.0 + axe-core: 4.11.4 + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + + '@storybook/addon-docs@10.3.6(@types/react@19.2.14)(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.6) + '@storybook/csf-plugin': 10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0)) + '@storybook/icons': 2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@storybook/react-dom-shim': 10.3.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6)) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - esbuild + - rollup + - vite + - webpack + + '@storybook/builder-vite@10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0))': + dependencies: + '@storybook/csf-plugin': 10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0)) + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + ts-dedent: 2.2.0 + vite: 8.0.11(@types/node@22.19.17)(esbuild@0.28.0) + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + '@storybook/builder-vite@10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0))': + dependencies: + '@storybook/csf-plugin': 10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0)) + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + ts-dedent: 2.2.0 + vite: 8.0.11(@types/node@24.10.12)(esbuild@0.28.0) + transitivePeerDependencies: + - esbuild + - rollup + - webpack + + '@storybook/csf-plugin@10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0))': + dependencies: + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.28.0 + vite: 8.0.11(@types/node@22.19.17)(esbuild@0.28.0) + + '@storybook/csf-plugin@10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0))': + dependencies: + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.28.0 + vite: 8.0.11(@types/node@24.10.12)(esbuild@0.28.0) + + '@storybook/global@5.0.0': {} + + '@storybook/icons@2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + '@storybook/react-dom-shim@10.3.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))': + dependencies: + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + + '@storybook/react-vite@10.3.6(esbuild@0.28.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3)(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0))': + dependencies: + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0)) + '@rollup/pluginutils': 5.3.0 + '@storybook/builder-vite': 10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0)) + '@storybook/react': 10.3.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3) + empathic: 2.0.1 + magic-string: 0.30.21 + react: 19.2.6 + react-docgen: 8.0.3 + react-dom: 19.2.6(react@19.2.6) + resolve: 1.22.12 + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + tsconfig-paths: 4.2.0 + vite: 8.0.11(@types/node@22.19.17)(esbuild@0.28.0) + transitivePeerDependencies: + - esbuild + - rollup + - supports-color + - typescript + - webpack + + '@storybook/react-vite@10.3.6(esbuild@0.28.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3)(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0))': + dependencies: + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@6.0.3)(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0)) + '@rollup/pluginutils': 5.3.0 + '@storybook/builder-vite': 10.3.6(esbuild@0.28.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(vite@8.0.11(@types/node@24.10.12)(esbuild@0.28.0)) + '@storybook/react': 10.3.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3) + empathic: 2.0.1 + magic-string: 0.30.21 + react: 19.2.6 + react-docgen: 8.0.3 + react-dom: 19.2.6(react@19.2.6) + resolve: 1.22.12 + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + tsconfig-paths: 4.2.0 + vite: 8.0.11(@types/node@24.10.12)(esbuild@0.28.0) + transitivePeerDependencies: + - esbuild + - rollup + - supports-color + - typescript + - webpack + + '@storybook/react@10.3.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3)': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/react-dom-shim': 10.3.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6)) + react: 19.2.6 + react-docgen: 8.0.3 + react-docgen-typescript: 2.4.0(typescript@6.0.3) + react-dom: 19.2.6(react@19.2.6) + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 @@ -5409,6 +6130,10 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + '@textlint/ast-node-types@15.6.0': {} '@textlint/linter-formatter@15.6.0': @@ -5486,6 +6211,8 @@ snapshots: '@types/deep-eql@4.0.2': {} + '@types/doctrine@0.0.9': {} + '@types/esrecurse@4.3.1': {} '@types/estree@1.0.9': {} @@ -5510,6 +6237,8 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/mdx@2.0.13': {} + '@types/mocha@10.0.10': {} '@types/ms@2.1.0': {} @@ -5537,6 +6266,8 @@ snapshots: dependencies: csstype: 3.2.3 + '@types/resolve@1.20.6': {} + '@types/responselike@1.0.3': dependencies: '@types/node': 22.19.17 @@ -5754,6 +6485,14 @@ snapshots: tinyrainbow: 3.1.0 vitest: 4.1.5(@types/node@22.19.17)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@8.0.11(@types/node@22.19.17)(esbuild@0.28.0)) + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + '@vitest/expect@4.1.5': dependencies: '@standard-schema/spec': 1.1.0 @@ -5771,6 +6510,10 @@ snapshots: optionalDependencies: vite: 8.0.11(@types/node@22.19.17)(esbuild@0.28.0) + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/pretty-format@4.1.5': dependencies: tinyrainbow: 3.1.0 @@ -5787,8 +6530,18 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + '@vitest/spy@4.1.5': {} + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + '@vitest/utils@4.1.5': dependencies: '@vitest/pretty-format': 4.1.5 @@ -5912,6 +6665,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@webcontainer/env@1.1.1': {} + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -5977,6 +6732,10 @@ snapshots: dependencies: tslib: 2.8.1 + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + ast-v8-to-istanbul@1.0.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -5987,6 +6746,8 @@ snapshots: asynckit@0.4.0: {} + axe-core@4.11.4: {} + axios@1.16.0: dependencies: follow-redirects: 1.16.0 @@ -6128,6 +6889,14 @@ snapshots: ccount@2.0.1: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chai@6.2.2: {} chalk@4.1.2: @@ -6141,6 +6910,8 @@ snapshots: character-entities@2.0.2: {} + check-error@2.1.3: {} + cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 @@ -6297,6 +7068,8 @@ snapshots: dependencies: mimic-response: 3.1.0 + deep-eql@5.0.2: {} + deep-extend@0.6.0: optional: true @@ -6353,6 +7126,10 @@ snapshots: diff@7.0.0: {} + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -6407,6 +7184,8 @@ snapshots: emoji-regex@9.2.2: {} + empathic@2.0.1: {} + encoding-sniffer@0.2.1: dependencies: iconv-lite: 0.6.3 @@ -6453,6 +7232,35 @@ snapshots: es6-error@4.1.1: optional: true + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + esbuild@0.28.0: optionalDependencies: '@esbuild/aix-ppc64': 0.28.0 @@ -6657,6 +7465,15 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-storybook@10.3.6(eslint@10.3.0)(storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6))(typescript@6.0.3): + dependencies: + '@typescript-eslint/utils': 8.59.2(eslint@10.3.0)(typescript@6.0.3) + eslint: 10.3.0 + storybook: 10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - supports-color + - typescript + eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 @@ -6721,6 +7538,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -6924,6 +7743,12 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.2 + glob@13.0.6: + dependencies: + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 + global-agent@3.0.0: dependencies: boolean: 3.2.0 @@ -7086,6 +7911,10 @@ snapshots: dependencies: semver: 7.7.4 + is-core-module@2.16.2: + dependencies: + hasown: 2.0.3 + is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -7383,6 +8212,8 @@ snapshots: longest-streak@3.1.0: {} + loupe@3.2.1: {} + lowercase-keys@2.0.0: {} lru-cache@10.4.3: {} @@ -7822,8 +8653,7 @@ snapshots: dependencies: brace-expansion: 2.1.0 - minimist@1.2.8: - optional: true + minimist@1.2.8: {} minipass@7.1.3: {} @@ -8025,6 +8855,8 @@ snapshots: path-key@3.1.1: {} + path-parse@1.0.7: {} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -8039,6 +8871,8 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.1: {} + pend@1.2.0: {} picocolors@1.1.1: {} @@ -8158,6 +8992,25 @@ snapshots: strip-json-comments: 2.0.1 optional: true + react-docgen-typescript@2.4.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + + react-docgen@8.0.3: + dependencies: + '@babel/core': 7.29.0 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.6 + doctrine: 3.0.0 + resolve: 1.22.12 + strip-indent: 4.1.1 + transitivePeerDependencies: + - supports-color + react-dom@19.2.6(react@19.2.6): dependencies: react: 19.2.6 @@ -8202,6 +9055,14 @@ snapshots: readdirp@4.1.2: {} + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -8215,6 +9076,13 @@ snapshots: resolve-pkg-maps@1.0.0: {} + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 @@ -8404,8 +9272,7 @@ snapshots: source-map-js@1.2.1: {} - source-map@0.6.1: - optional: true + source-map@0.6.1: {} spdx-correct@3.2.0: dependencies: @@ -8432,6 +9299,30 @@ snapshots: stdin-discarder@0.2.2: {} + storybook@10.3.6(@testing-library/dom@10.4.1)(bufferutil@4.1.0)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(utf-8-validate@6.0.6): + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + '@webcontainer/env': 1.1.1 + esbuild: 0.25.12 + open: 10.2.0 + recast: 0.23.11 + semver: 7.7.4 + use-sync-external-store: 1.6.0(react@19.2.6) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + optionalDependencies: + prettier: 3.8.3 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - react + - react-dom + - utf-8-validate + string-ts@2.3.1: {} string-width@4.2.3: @@ -8469,10 +9360,14 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-bom@3.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 + strip-indent@4.1.1: {} + strip-json-comments@2.0.1: optional: true @@ -8503,6 +9398,8 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} + symbol-tree@3.2.4: {} table@6.9.0: @@ -8553,6 +9450,8 @@ snapshots: dependencies: tslib: 2.8.1 + tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} tinyexec@1.1.2: {} @@ -8562,8 +9461,12 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyrainbow@2.0.0: {} + tinyrainbow@3.1.0: {} + tinyspy@4.0.4: {} + tldts-core@7.0.30: {} tldts@7.0.30: @@ -8594,8 +9497,16 @@ snapshots: dependencies: typescript: 6.0.3 + ts-dedent@2.2.0: {} + ts-pattern@5.9.0: {} + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@1.14.1: {} tslib@2.8.1: {} @@ -8684,6 +9595,13 @@ snapshots: universalify@2.0.1: {} + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.16.0 + picomatch: 4.0.4 + webpack-virtual-modules: 0.6.2 + unrs-resolver@1.11.1: dependencies: napi-postinstall: 0.3.4 @@ -8720,6 +9638,10 @@ snapshots: url-join@4.0.1: {} + use-sync-external-store@1.6.0(react@19.2.6): + dependencies: + react: 19.2.6 + utf-8-validate@6.0.6: dependencies: node-gyp-build: 4.8.4 @@ -8800,6 +9722,8 @@ snapshots: webidl-conversions@8.0.1: {} + webpack-virtual-modules@0.6.2: {} + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3357825e..28b485ce 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,6 +3,9 @@ packages: catalog: "@rolldown/plugin-babel": ^0.2.3 + "@storybook/addon-a11y": ^10.3.6 + "@storybook/addon-docs": ^10.3.6 + "@storybook/react-vite": ^10.3.6 "@tanstack/react-query": ^5.100.9 "@types/react": ^19.2.14 "@types/react-dom": ^19.2.3 @@ -13,8 +16,10 @@ catalog: babel-plugin-react-compiler: ^1.0.0 coder: github:coder/coder#v2.33.1 date-fns: ^4.1.0 + eslint-plugin-storybook: ^10.3.6 react: ^19.2.6 react-dom: ^19.2.6 + storybook: ^10.3.6 typescript: ^6.0.3 vite: ^8.0.11 diff --git a/scripts/sync-vscode-themes.mjs b/scripts/sync-vscode-themes.mjs new file mode 100755 index 00000000..138712db --- /dev/null +++ b/scripts/sync-vscode-themes.mjs @@ -0,0 +1,71 @@ +#!/usr/bin/env node + +// Fetches dark-v2 and light-v2 theme files from vscode-elements/webview-playground +// and rewrites .storybook/themes/{dark,light}-v2.ts in place. +// +// Usage: +// node scripts/sync-vscode-themes.mjs # fetch latest main +// node scripts/sync-vscode-themes.mjs # fetch a specific commit + +import { writeFileSync } from "node:fs"; +import { resolve, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), ".."); +const REPO = "vscode-elements/webview-playground"; + +const themes = [ + { + remotePath: "dist/themes/dark-v2.js", + localPath: ".storybook/themes/dark-v2.ts", + exportName: "darkTheme", + }, + { + remotePath: "dist/themes/light-v2.js", + localPath: ".storybook/themes/light-v2.ts", + exportName: "lightTheme", + }, +]; + +async function fetchText(url, headers) { + const res = await fetch(url, { headers }); + if (!res.ok) { + throw new Error(`Failed to fetch ${url}: ${res.status} ${res.statusText}`); + } + return res.text(); +} + +const sha = + process.argv[2] ?? + ( + await fetchText(`https://api.github.com/repos/${REPO}/commits/main`, { + Accept: "application/vnd.github.sha", + }) + ).trim(); + +console.log(`Syncing themes from ${REPO}@${sha}`); + +await Promise.all( + themes.map(async ({ remotePath, localPath, exportName }) => { + const js = await fetchText( + `https://raw.githubusercontent.com/${REPO}/${sha}/${remotePath}`, + ); + const match = js.match(/export\s+const\s+theme\s*=\s*(\[[\s\S]*\])/); + if (!match) { + throw new Error(`Could not find theme array in ${remotePath}`); + } + // Upstream escapes dots in CSS property names (e.g. `disabled\.background`). + // These are unnecessary in JS strings and break setProperty lookups. + const arrayLiteral = match[1].replaceAll("\\.", "."); + + const ts = `// Sourced from \`vscode-elements/webview-playground\`. +// https://github.com/${REPO}/blob/${sha}/${remotePath} + +export const ${exportName}: Array<[string, string]> = ${arrayLiteral}; +`; + writeFileSync(resolve(ROOT, localPath), ts); + console.log(` ${localPath}`); + }), +); + +console.log("Done. Run `pnpm format` to normalize the output."); diff --git a/test/unit/inbox.test.ts b/test/unit/inbox.test.ts index 701bedf6..42ee6858 100644 --- a/test/unit/inbox.test.ts +++ b/test/unit/inbox.test.ts @@ -3,12 +3,13 @@ import * as vscode from "vscode"; import { Inbox } from "@/inbox"; +import { workspace as createWorkspace } from "@repo/mocks"; + import { MockConfigurationProvider, MockEventStream, createMockLogger, } from "../mocks/testHelpers"; -import { workspace as createWorkspace } from "../mocks/workspace"; import type { GetInboxNotificationResponse } from "coder/site/src/api/typesGenerated"; diff --git a/test/unit/remote/workspaceStateMachine.test.ts b/test/unit/remote/workspaceStateMachine.test.ts index 24840124..1b62a217 100644 --- a/test/unit/remote/workspaceStateMachine.test.ts +++ b/test/unit/remote/workspaceStateMachine.test.ts @@ -9,17 +9,18 @@ import { import { maybeAskAgent } from "@/promptUtils"; import { WorkspaceStateMachine } from "@/remote/workspaceStateMachine"; +import { + agent as createAgent, + resource as createResource, + workspace as createWorkspace, +} from "@repo/mocks"; + import { createMockLogger, MockProgress, MockTerminalOutputChannel, MockUserInteraction, } from "../../mocks/testHelpers"; -import { - agent as createAgent, - resource as createResource, - workspace as createWorkspace, -} from "../../mocks/workspace"; import type { Workspace, diff --git a/test/unit/webviews/tasks/tasksPanelProvider.test.ts b/test/unit/webviews/tasks/tasksPanelProvider.test.ts index ec804ba3..99526d2a 100644 --- a/test/unit/webviews/tasks/tasksPanelProvider.test.ts +++ b/test/unit/webviews/tasks/tasksPanelProvider.test.ts @@ -4,6 +4,14 @@ import * as vscode from "vscode"; import { streamAgentLogs, streamBuildLogs } from "@/api/workspace"; import { TasksPanelProvider } from "@/webviews/tasks/tasksPanelProvider"; +import { + logEntry, + preset, + task, + taskState, + template, + workspace, +} from "@repo/mocks"; import { TasksApi, defineRequest, @@ -12,19 +20,11 @@ import { type TaskIdParams, } from "@repo/shared"; -import { - logEntry, - preset, - task, - taskState, - template, -} from "../../../mocks/tasks"; import { createAxiosError, createMockLogger, MockUserInteraction, } from "../../../mocks/testHelpers"; -import { workspace } from "../../../mocks/workspace"; import type { ProvisionerJobLog, diff --git a/test/unit/workspace/workspaceMonitor.test.ts b/test/unit/workspace/workspaceMonitor.test.ts index cdb2b0ce..5ceedcad 100644 --- a/test/unit/workspace/workspaceMonitor.test.ts +++ b/test/unit/workspace/workspaceMonitor.test.ts @@ -3,6 +3,8 @@ import * as vscode from "vscode"; import { WorkspaceMonitor } from "@/workspace/workspaceMonitor"; +import { workspace as createWorkspace } from "@repo/mocks"; + import { MockConfigurationProvider, MockContextManager, @@ -10,7 +12,6 @@ import { MockStatusBarItem, createMockLogger, } from "../../mocks/testHelpers"; -import { workspace as createWorkspace } from "../../mocks/workspace"; import type { ServerSentEvent, diff --git a/test/webview/shared/tasks/utils.test.ts b/test/webview/shared/tasks/utils.test.ts index 32f9bd8b..bd375a09 100644 --- a/test/webview/shared/tasks/utils.test.ts +++ b/test/webview/shared/tasks/utils.test.ts @@ -1,5 +1,10 @@ import { describe, expect, it } from "vitest"; +import { + minimalTask as task, + task as fullTask, + taskState as state, +} from "@repo/mocks"; import { getTaskPermissions, isAgentStarting, @@ -11,12 +16,6 @@ import { type TaskPermissions, } from "@repo/shared"; -import { - minimalTask as task, - task as fullTask, - taskState as state, -} from "../../../mocks/tasks"; - import type { WorkspaceAgentLifecycle, WorkspaceStatus, diff --git a/test/webview/tasks/AgentChatHistory.test.tsx b/test/webview/tasks/AgentChatHistory.test.tsx index cd06511e..1b0f7a0d 100644 --- a/test/webview/tasks/AgentChatHistory.test.tsx +++ b/test/webview/tasks/AgentChatHistory.test.tsx @@ -1,9 +1,9 @@ import { screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; +import { logEntry } from "@repo/mocks"; import { AgentChatHistory } from "@repo/tasks/components/AgentChatHistory"; -import { logEntry } from "../../mocks/tasks"; import { renderWithQuery } from "../render"; import type { TaskLogs } from "@repo/shared"; diff --git a/test/webview/tasks/CreateTaskSection.test.tsx b/test/webview/tasks/CreateTaskSection.test.tsx index 561d79fc..0c6297b5 100644 --- a/test/webview/tasks/CreateTaskSection.test.tsx +++ b/test/webview/tasks/CreateTaskSection.test.tsx @@ -1,10 +1,10 @@ import { fireEvent, screen, waitFor } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; +import { taskTemplate } from "@repo/mocks"; import { CreateTaskSection } from "@repo/tasks/components/CreateTaskSection"; import { logger } from "@repo/webview-shared/logger"; -import { taskTemplate } from "../../mocks/tasks"; import { renderWithQuery } from "../render"; import type { TaskTemplate } from "@repo/shared"; diff --git a/test/webview/tasks/ErrorBanner.test.tsx b/test/webview/tasks/ErrorBanner.test.tsx index 425dd8b5..8ed66937 100644 --- a/test/webview/tasks/ErrorBanner.test.tsx +++ b/test/webview/tasks/ErrorBanner.test.tsx @@ -1,9 +1,9 @@ import { fireEvent, screen } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; +import { task } from "@repo/mocks"; import { ErrorBanner } from "@repo/tasks/components/ErrorBanner"; -import { task } from "../../mocks/tasks"; import { renderWithQuery } from "../render"; import type { Task } from "@repo/shared"; diff --git a/test/webview/tasks/StatusIndicator.test.tsx b/test/webview/tasks/StatusIndicator.test.tsx index 7d74457f..e077d056 100644 --- a/test/webview/tasks/StatusIndicator.test.tsx +++ b/test/webview/tasks/StatusIndicator.test.tsx @@ -4,10 +4,9 @@ import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { describe, expect, it } from "vitest"; +import { task } from "@repo/mocks"; import { StatusIndicator } from "@repo/tasks/components/StatusIndicator"; -import { task } from "../../mocks/tasks"; - import type { TaskStatus } from "@repo/shared"; const css = readFileSync(resolve("packages/tasks/src/index.css"), "utf-8"); diff --git a/test/webview/tasks/TaskDetailHeader.test.tsx b/test/webview/tasks/TaskDetailHeader.test.tsx index d45f5a6c..2be328de 100644 --- a/test/webview/tasks/TaskDetailHeader.test.tsx +++ b/test/webview/tasks/TaskDetailHeader.test.tsx @@ -1,9 +1,9 @@ import { fireEvent, screen, waitFor } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; +import { task, taskState } from "@repo/mocks"; import { TaskDetailHeader } from "@repo/tasks/components/TaskDetailHeader"; -import { task, taskState } from "../../mocks/tasks"; import { qs } from "../helpers"; import { renderWithQuery } from "../render"; diff --git a/test/webview/tasks/TaskDetailView.test.tsx b/test/webview/tasks/TaskDetailView.test.tsx index fcb6a790..7f7f7e49 100644 --- a/test/webview/tasks/TaskDetailView.test.tsx +++ b/test/webview/tasks/TaskDetailView.test.tsx @@ -1,9 +1,9 @@ import { screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; +import { logEntry, taskDetails, taskState } from "@repo/mocks"; import { TaskDetailView } from "@repo/tasks/components/TaskDetailView"; -import { logEntry, taskDetails, taskState } from "../../mocks/tasks"; import { qs } from "../helpers"; import { renderWithQuery } from "../render"; diff --git a/test/webview/tasks/TaskItem.test.tsx b/test/webview/tasks/TaskItem.test.tsx index e8a9b600..3101cb98 100644 --- a/test/webview/tasks/TaskItem.test.tsx +++ b/test/webview/tasks/TaskItem.test.tsx @@ -1,9 +1,9 @@ import { fireEvent, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; +import { task } from "@repo/mocks"; import { TaskItem } from "@repo/tasks/components/TaskItem"; -import { task } from "../../mocks/tasks"; import { renderWithQuery } from "../render"; import type { Task } from "@repo/shared"; diff --git a/test/webview/tasks/TaskList.test.tsx b/test/webview/tasks/TaskList.test.tsx index b9b01593..9339fe01 100644 --- a/test/webview/tasks/TaskList.test.tsx +++ b/test/webview/tasks/TaskList.test.tsx @@ -1,9 +1,9 @@ import { fireEvent, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; +import { task } from "@repo/mocks"; import { TaskList } from "@repo/tasks/components/TaskList"; -import { task } from "../../mocks/tasks"; import { renderWithQuery } from "../render"; vi.mock("@repo/tasks/hooks/useTasksApi", () => ({ diff --git a/test/webview/tasks/TaskMessageInput.test.tsx b/test/webview/tasks/TaskMessageInput.test.tsx index ecc23575..5d075d05 100644 --- a/test/webview/tasks/TaskMessageInput.test.tsx +++ b/test/webview/tasks/TaskMessageInput.test.tsx @@ -1,9 +1,9 @@ import { fireEvent, screen, waitFor } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; +import { task, taskState } from "@repo/mocks"; import { TaskMessageInput } from "@repo/tasks/components/TaskMessageInput"; -import { task, taskState } from "../../mocks/tasks"; import { qs } from "../helpers"; import { renderWithQuery } from "../render"; diff --git a/test/webview/tasks/WorkspaceLogs.test.tsx b/test/webview/tasks/WorkspaceLogs.test.tsx index 03dca187..4f2d94e9 100644 --- a/test/webview/tasks/WorkspaceLogs.test.tsx +++ b/test/webview/tasks/WorkspaceLogs.test.tsx @@ -1,10 +1,10 @@ import { screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; +import { task } from "@repo/mocks"; import { WorkspaceLogs } from "@repo/tasks/components/WorkspaceLogs"; import * as hookModule from "@repo/tasks/hooks/useWorkspaceLogs"; -import { task } from "../../mocks/tasks"; import { renderWithQuery } from "../render"; vi.mock("@repo/tasks/hooks/useWorkspaceLogs", () => ({ diff --git a/test/webview/tasks/useTaskMenuItems.test.tsx b/test/webview/tasks/useTaskMenuItems.test.tsx index 0cbf41f6..c0f409ca 100644 --- a/test/webview/tasks/useTaskMenuItems.test.tsx +++ b/test/webview/tasks/useTaskMenuItems.test.tsx @@ -1,10 +1,10 @@ import { act, renderHook, waitFor } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; +import { task } from "@repo/mocks"; import { getTaskLabel, type Task } from "@repo/shared"; import { useTaskMenuItems } from "@repo/tasks/components/useTaskMenuItems"; -import { task } from "../../mocks/tasks"; import { QueryWrapper } from "../render"; import type { ActionMenuItem } from "@repo/tasks/components/ActionMenu";