@spencer-kit/coder-studio 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/esm/bin.mjs +32 -2
- package/dist/esm/bin.mjs.map +2 -2
- package/dist/esm/update-worker.mjs +27 -3
- package/dist/esm/update-worker.mjs.map +2 -2
- package/dist/web/assets/components-BZf_jLGv.js +110 -0
- package/dist/web/assets/components-BZf_jLGv.js.map +1 -0
- package/dist/web/assets/{main-D3dXqSaA.js → main-CEv6hML1.js} +2 -2
- package/dist/web/assets/{main-D3dXqSaA.js.map → main-CEv6hML1.js.map} +1 -1
- package/dist/web/assets/{ui-preview-BGZz053-.js → ui-preview-Cd3euuid.js} +2 -2
- package/dist/web/assets/{ui-preview-BGZz053-.js.map → ui-preview-Cd3euuid.js.map} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/ui-preview.html +2 -2
- package/package.json +1 -1
- package/src/pm2-control.test.ts +48 -6
- package/src/pm2-control.ts +43 -2
- package/src/update-worker.test.ts +60 -0
- package/src/update-worker.ts +37 -4
- package/dist/web/assets/components-omWbMLvf.js +0 -110
- package/dist/web/assets/components-omWbMLvf.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-preview-BGZz053-.js","names":[],"sources":["../../src/features/workspace/views/shared/git-diff-viewer.tsx","../../src/ui-preview/scene-metadata.ts","../../src/ui-preview/scenes/desktop-review-scenes.tsx","../../src/ui-preview/scenes/page-scenes.tsx","../../src/features/supervisor/views/mobile/mobile-supervisor-badge.tsx","../../src/ui-preview/scenes/showcase-scenes.tsx","../../src/ui-preview/catalog.ts","../../src/ui-preview/app.tsx","../../src/ui-preview/preview-store.ts","../../src/ui-preview/main.tsx"],"sourcesContent":["import { X } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { useMemo } from \"react\";\nimport { EmptyState, IconButton, Tooltip } from \"../../../../components/ui\";\nimport { useTranslation } from \"../../../../lib/i18n\";\nimport { PanelHeader } from \"../../../shared/components/panel-header\";\nimport { useGitDiffViewerActions } from \"../../actions/use-git-actions\";\n\ninterface GitDiffViewerProps {\n workspaceId: string;\n onClose?: () => void;\n showCloseButton?: boolean;\n}\n\ntype DiffLineTone = \"meta\" | \"added\" | \"removed\" | \"context\";\n\ninterface DisplayLine {\n id: string;\n line: string;\n lineNumber: number;\n tone?: DiffLineTone;\n}\n\nfunction getDiffLineTone(line: string): DiffLineTone {\n if (\n line.startsWith(\"diff --git\") ||\n line.startsWith(\"index \") ||\n line.startsWith(\"--- \") ||\n line.startsWith(\"+++ \") ||\n line.startsWith(\"@@\")\n ) {\n return \"meta\";\n }\n\n if (line.startsWith(\"+\")) {\n return \"added\";\n }\n\n if (line.startsWith(\"-\")) {\n return \"removed\";\n }\n\n return \"context\";\n}\n\nexport const GitDiffViewer: FC<GitDiffViewerProps> = ({\n workspaceId,\n onClose,\n showCloseButton = true,\n}) => {\n const t = useTranslation();\n const { preview, closePreview } = useGitDiffViewerActions(workspaceId);\n const handleClose = onClose ?? closePreview;\n\n const diffLines = useMemo<DisplayLine[]>(\n () =>\n preview?.diff.split(\"\\n\").map((line, index) => ({\n id: `${index}:${line}`,\n line,\n tone: getDiffLineTone(line),\n lineNumber: index + 1,\n })) ?? [],\n [preview]\n );\n\n return (\n <div className=\"workspace-git-view\">\n <div className=\"code-editor workspace-git-editor\">\n <PanelHeader\n title={preview?.title ?? preview?.path ?? \"Select a changed file to inspect\"}\n actions={\n preview && showCloseButton ? (\n <div className=\"code-mode-toggle\">\n <Tooltip content={t(\"action.close\")}>\n <IconButton\n aria-label={t(\"action.close\")}\n className=\"code-mode-btn\"\n icon={<X size={12} />}\n onClick={handleClose}\n size=\"sm\"\n />\n </Tooltip>\n </div>\n ) : null\n }\n />\n\n <div className=\"code-editor-body\">\n {preview ? (\n <div className=\"code-lines git-diff-lines\">\n {diffLines.map((line) => (\n <div key={line.id} className={`code-line git-diff-line git-diff-line-${line.tone}`}>\n <span className=\"code-line-num\">{line.lineNumber}</span>\n <span className=\"git-diff-line-text\">{line.line || \" \"}</span>\n </div>\n ))}\n </div>\n ) : (\n <EmptyState\n className=\"git-diff-empty\"\n description={\n <p className=\"git-diff-empty-body\">\n Select a staged or modified file on the left to inspect its diff.\n </p>\n }\n title={<p className=\"git-diff-empty-title\">{t(\"label.git\")}</p>}\n />\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default GitDiffViewer;\n","import { THEME_IDS } from \"../theme\";\n\nexport type UiPreviewSceneDevice = \"desktop\" | \"mobile\";\nexport type UiPreviewSceneTheme = (typeof THEME_IDS)[number];\nexport type UiPreviewSceneLocale = \"zh\" | \"en\";\nexport type UiPreviewCategory =\n | \"page\"\n | \"modal\"\n | \"sheet\"\n | \"toast\"\n | \"empty\"\n | \"error\"\n | \"loading\";\nexport type UiPreviewSource = \"real-route\" | \"showcase\";\nexport type UiPreviewSettingsSection = \"general\" | \"appearance\" | \"providers\" | \"shortcuts\";\n\nexport interface UiPreviewSceneMetadata {\n id: string;\n title: string;\n category: UiPreviewCategory;\n source: UiPreviewSource;\n description: string;\n devices: UiPreviewSceneDevice[];\n themes: UiPreviewSceneTheme[];\n locales: UiPreviewSceneLocale[];\n capture?: {\n selector?: string;\n fullPage?: boolean;\n settingsSection?: UiPreviewSettingsSection;\n };\n}\n\nfunction allThemeIds(): UiPreviewSceneTheme[] {\n return [...THEME_IDS] as UiPreviewSceneTheme[];\n}\n\nfunction lightThemeIds(): UiPreviewSceneTheme[] {\n return THEME_IDS.filter((themeId) => themeId.endsWith(\"-light\")) as UiPreviewSceneTheme[];\n}\n\nexport const UI_PREVIEW_SCENE_METADATA: UiPreviewSceneMetadata[] = [\n {\n id: \"welcome\",\n title: \"Welcome\",\n category: \"page\",\n source: \"real-route\",\n description: \"Welcome page on the real / route under the preview harness.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".welcome-card\" },\n },\n {\n id: \"settings-general\",\n title: \"Settings / General\",\n category: \"page\",\n source: \"real-route\",\n description: \"Settings page at /settings with deterministic settings.get data.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\", settingsSection: \"general\" },\n },\n {\n id: \"settings-appearance\",\n title: \"Settings / Appearance\",\n category: \"page\",\n source: \"real-route\",\n description: \"Settings appearance section using route-backed production UI.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\", settingsSection: \"appearance\" },\n },\n {\n id: \"settings-providers\",\n title: \"Settings / Providers\",\n category: \"page\",\n source: \"real-route\",\n description: \"Settings providers section with fixed provider args.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\", settingsSection: \"providers\" },\n },\n {\n id: \"settings-shortcuts\",\n title: \"Settings / Shortcuts\",\n category: \"page\",\n source: \"real-route\",\n description: \"Settings shortcuts section with the keyboard shortcut list and category tabs.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\", settingsSection: \"shortcuts\" },\n },\n {\n id: \"settings-mobile-root\",\n title: \"Settings / Mobile Root\",\n category: \"page\",\n source: \"real-route\",\n description: \"Mobile settings root list before drilling into any subsection.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-mobile-root\" },\n },\n {\n id: \"app-loading-shell\",\n title: \"App Loading Shell\",\n category: \"loading\",\n source: \"real-route\",\n description: \"Top-level shell shown while auth state is still unresolved before routes render.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".app-loading-shell\" },\n },\n {\n id: \"workspace-desktop\",\n title: \"Workspace / Desktop\",\n category: \"page\",\n source: \"real-route\",\n description: \"Desktop workspace shell with seeded workspace, git status, and file tree.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-page\" },\n },\n {\n id: \"workspace-mobile\",\n title: \"Workspace / Mobile\",\n category: \"page\",\n source: \"real-route\",\n description: \"Mobile workspace shell with seeded workspace and no active sessions.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \"[data-testid='mobile-shell']\" },\n },\n {\n id: \"auth-preview\",\n title: \"Auth Preview\",\n category: \"page\",\n source: \"real-route\",\n description: \"Login/auth page component on the real /login route under preview harness.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".auth-card-shell\" },\n },\n {\n id: \"session-gate\",\n title: \"Session Gate\",\n category: \"error\",\n source: \"real-route\",\n description:\n \"Session gate shell shown when activation is displaced and the app requires re-entry.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".auth-card-shell\" },\n },\n {\n id: \"not-found\",\n title: \"Not Found\",\n category: \"page\",\n source: \"real-route\",\n description: \"Not found page for an unknown route path.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".welcome-card\" },\n },\n {\n id: \"workspace-load-error\",\n title: \"Workspace / Load Error\",\n category: \"error\",\n source: \"real-route\",\n description: \"Shared workspace route error shell when workspace list loading fails.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-resolving-card\" },\n },\n {\n id: \"workspace-launch-modal\",\n title: \"Workspace Launch Modal\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Workspace open modal with fixed browse/open responses.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".launch-modal, .mobile-sheet--launch\" },\n },\n {\n id: \"command-palette\",\n title: \"Command Palette\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Command palette forced open with a seeded active workspace.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".command-palette, .command-palette-sheet\" },\n },\n {\n id: \"branch-quick-pick\",\n title: \"Branch Quick Pick\",\n category: \"sheet\",\n source: \"showcase\",\n description: \"Branch picker opened via seeded branchQuickPick atom and fake git.branches data.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-select-sheet--command\" },\n },\n {\n id: \"toast-stack\",\n title: \"Toast Stack\",\n category: \"toast\",\n source: \"showcase\",\n description: \"Success and error toasts for visual review.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".toast-container\" },\n },\n {\n id: \"footer-update-rail-review\",\n title: \"Footer Update Rail Review\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"Workspace footer review with a seeded update-available rail on desktop and mobile.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".footer-update-rail-review\" },\n },\n {\n id: \"footer-update-rail-confirm-review\",\n title: \"Footer Update Rail Confirm Review\",\n category: \"modal\",\n source: \"showcase\",\n description:\n \"Workspace footer review with the confirmation dialog opened after clicking Update Now.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".modal-overlay\" },\n },\n {\n id: \"workspace-icon-review\",\n title: \"Workspace Icon Review\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"File tree, git states, terminal empty state, and mobile dock/supervisor icon surfaces for theme review.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-icon-review\" },\n },\n {\n id: \"toast-icon-review\",\n title: \"Toast Icon Review\",\n category: \"toast\",\n source: \"showcase\",\n description:\n \"Success, warning, error, and info toast icons rendered together for theme review.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".toast-container\" },\n },\n {\n id: \"supervisor-icon-review\",\n title: \"Supervisor Icon Review\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Supervisor dialog header icon and destructive callout surface review.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".supervisor-dialog, .mobile-supervisor-sheet\" },\n },\n {\n id: \"mobile-workspace-drawer\",\n title: \"Mobile Workspace Drawer\",\n category: \"sheet\",\n source: \"showcase\",\n description: \"Opened mobile workspace drawer with two example workspaces.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-workspace-drawer\" },\n },\n {\n id: \"mobile-files-sheet\",\n title: \"Mobile Files Sheet\",\n category: \"sheet\",\n source: \"showcase\",\n description: \"Static mobile files sheet chrome for screenshot comparison.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-sheet--files\" },\n },\n {\n id: \"mobile-terminal-sheet\",\n title: \"Mobile Terminal Sheet\",\n category: \"sheet\",\n source: \"showcase\",\n description:\n \"Mobile terminal fullscreen sheet with compact tool chrome and status bar for screenshot comparison.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-sheet--terminal\" },\n },\n {\n id: \"mobile-supervisor-sheet\",\n title: \"Mobile Supervisor Sheet\",\n category: \"sheet\",\n source: \"showcase\",\n description: \"Mobile supervisor sheet with a seeded supervisor state.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-supervisor-sheet\" },\n },\n {\n id: \"supervisor-dialog\",\n title: \"Supervisor Dialog\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Desktop supervisor objective dialog opened by atom seed.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".supervisor-dialog\" },\n },\n {\n id: \"readme-desktop-hero\",\n title: \"README / Desktop Hero\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"README-focused desktop workspace scene with a live agent session, supervisor summary, and shell verification terminal.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-page\" },\n },\n {\n id: \"readme-desktop-review\",\n title: \"README / Desktop Review\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"README-focused desktop scene showing git review workflow with changed files, history, and an open diff.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-page\" },\n },\n {\n id: \"readme-mobile-progress\",\n title: \"README / Mobile Progress\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"README-focused mobile scene showing an active session with supervisor continuity and branch status.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \"[data-testid='mobile-shell']\" },\n },\n {\n id: \"workspace-topbar-review\",\n title: \"Workspace / Topbar Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop topbar chrome review with seeded workspaces and quick actions.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--topbar\" },\n },\n {\n id: \"workspace-sidebar-files-review\",\n title: \"Workspace / Sidebar Files Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop file tree sidebar review with seeded search and file hierarchy.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--sidebar\" },\n },\n {\n id: \"workspace-sidebar-git-review\",\n title: \"Workspace / Sidebar Git Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop git sidebar review with seeded status, history, and worktrees.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--sidebar\" },\n },\n {\n id: \"workspace-editor-review\",\n title: \"Workspace / Editor Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop editor review with code chrome, dirty state, and static content density.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--editor\" },\n },\n {\n id: \"workspace-diff-review\",\n title: \"Workspace / Diff Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop diff review with populated git preview lines and editor-surface chrome.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--diff\" },\n },\n {\n id: \"workspace-terminal-empty-review\",\n title: \"Workspace / Terminal Empty Review\",\n category: \"empty\",\n source: \"showcase\",\n description: \"Desktop terminal empty state review for bottom panel density and hierarchy.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--terminal\" },\n },\n {\n id: \"settings-density-review\",\n title: \"Settings / Density Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop settings page review for spacing, grouping, and information density.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\" },\n },\n {\n id: \"settings-light-theme-review\",\n title: \"Settings / Light Theme Review\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"Desktop settings review constrained to light themes for surface hierarchy checks.\",\n devices: [\"desktop\"],\n themes: lightThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\" },\n },\n {\n id: \"desktop-overlay-review\",\n title: \"Desktop / Overlay Review\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Desktop overlay comparison for command palette, launcher, and worktree manager.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-grid\" },\n },\n {\n id: \"desktop-statusbar-review\",\n title: \"Desktop / Status Bar Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop status bar review with seeded branch and file-change state.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--statusbar\" },\n },\n {\n id: \"worktree-manager\",\n title: \"Worktree Manager\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Worktree manager surface with seeded worktree list, status, diff, and tree.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".worktree-manager-surface, .mobile-sheet--worktree\" },\n },\n {\n id: \"confirm-dialog-danger\",\n title: \"Confirm Dialog / Danger\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Generic destructive confirm dialog for screenshot review.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".modal-card\" },\n },\n {\n id: \"provider-error-state\",\n title: \"Provider Error State\",\n category: \"error\",\n source: \"showcase\",\n description: \"Inline settings error state for provider/config failures.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page__notice\" },\n },\n {\n id: \"file-tree-delete-confirm\",\n title: \"File Tree / Delete Confirm\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Shared destructive confirm dialog used by the file tree when deleting a file.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".modal-card\" },\n },\n {\n id: \"empty-state\",\n title: \"Empty State\",\n category: \"empty\",\n source: \"showcase\",\n description: \"Shared empty-state shell.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".welcome-card\" },\n },\n {\n id: \"loading-state\",\n title: \"Loading State\",\n category: \"loading\",\n source: \"showcase\",\n description: \"Workspace resolving/loading shell.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-resolving-card\" },\n },\n];\n\nconst UI_PREVIEW_SCENE_METADATA_MAP = new Map(\n UI_PREVIEW_SCENE_METADATA.map((scene) => [scene.id, scene])\n);\n\nexport function getUiPreviewSceneMetadata(id: string): UiPreviewSceneMetadata | null {\n return UI_PREVIEW_SCENE_METADATA_MAP.get(id) ?? null;\n}\n","import type {\n FileNode,\n GitCommitSummary,\n GitStatus,\n Workspace,\n WorktreeInfo,\n} from \"@coder-studio/core\";\nimport { CommandPalette } from \"../../features/command-palette\";\nimport { SettingsPage } from \"../../features/settings\";\nimport { TerminalPanel } from \"../../features/terminal-panel\";\nimport { TopBar } from \"../../features/topbar\";\nimport { FileTreePanel } from \"../../features/workspace/views/shared/file-tree-panel\";\nimport { GitDiffViewer } from \"../../features/workspace/views/shared/git-diff-viewer\";\nimport { GitPanel } from \"../../features/workspace/views/shared/git-panel\";\nimport { WorkspaceLaunchModal } from \"../../features/workspace/views/shared/workspace-launch-modal\";\nimport { WorkspaceStatusBar } from \"../../features/workspace/views/shared/workspace-status-bar\";\nimport { WorktreeManagerSurface } from \"../../features/workspace/views/shared/worktree-manager-surface\";\nimport type { UiPreviewSceneDefinition } from \"../catalog\";\nimport { getUiPreviewSceneMetadata } from \"../scene-metadata\";\n\nconst workspace: Workspace = {\n id: \"ws-review\",\n name: \"coder-studio\",\n path: \"/home/spencer/workspace/coder-studio\",\n targetRuntime: \"native\",\n openedAt: 1,\n lastActiveAt: 1,\n uiState: {\n leftPanelWidth: 280,\n bottomPanelHeight: 220,\n focusMode: false,\n activeSessionId: undefined,\n paneLayout: { id: \"root\", type: \"leaf\" },\n },\n};\n\nconst gitStatus: GitStatus = {\n branch: \"main\",\n ahead: 1,\n behind: 0,\n staged: [{ path: \"packages/web/src/styles/tokens.css\", status: \"modified\" }],\n modified: [\n { path: \"packages/web/src/styles/components.css\", status: \"modified\" },\n { path: \"packages/web/src/ui-preview/scenes/desktop-review-scenes.tsx\", status: \"modified\" },\n ],\n untracked: [\n { path: \"e2e-ui/output/screenshots/page/workspace-topbar-review.png\", status: \"untracked\" },\n ],\n deleted: [],\n};\n\nconst gitHistory: GitCommitSummary[] = [\n {\n sha: \"8f5f7d54d9f8b7f08f483699f2f16c3c442f0a11\",\n shortSha: \"8f5f7d5\",\n subject: \"style: tighten workspace desktop chrome\",\n authorName: \"Spencer\",\n authoredAt: 1715731200000,\n },\n {\n sha: \"f1c44d42d2b8ef3c83bb8aeeb0898422bf94b31c\",\n shortSha: \"f1c44d4\",\n subject: \"test: add ui preview desktop review scenes\",\n authorName: \"Spencer\",\n authoredAt: 1715644800000,\n },\n];\n\nconst worktrees: WorktreeInfo[] = [\n {\n name: \"main\",\n path: \"/home/spencer/workspace/coder-studio\",\n branch: \"main\",\n commit: \"8f5f7d5\",\n status: \"clean\",\n },\n {\n name: \"feat-pc-style-polish\",\n path: \"/home/spencer/workspace/coder-studio/.worktrees/feat-pc-style-polish\",\n branch: \"feat/pc-style-polish\",\n commit: \"f1c44d4\",\n status: \"dirty\",\n },\n];\n\nconst worktreeStatusByPath: Record<string, GitStatus> = {\n [worktrees[1].path]: gitStatus,\n};\n\nconst worktreeTreeByPath: Record<string, FileNode[]> = {\n [worktrees[1].path]: [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"docs\", path: \"docs\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n ],\n};\n\nconst rootTree: FileNode[] = [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"docs\", path: \"docs\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n];\n\nconst packagesTree: FileNode[] = [\n { name: \"web\", path: \"packages/web\", kind: \"dir\" },\n { name: \"core\", path: \"packages/core\", kind: \"dir\" },\n];\n\nconst webTree: FileNode[] = [\n { name: \"src\", path: \"packages/web/src\", kind: \"dir\" },\n { name: \"package.json\", path: \"packages/web/package.json\", kind: \"file\" },\n];\n\nconst srcTree: FileNode[] = [\n { name: \"styles\", path: \"packages/web/src/styles\", kind: \"dir\" },\n { name: \"ui-preview\", path: \"packages/web/src/ui-preview\", kind: \"dir\" },\n { name: \"app.tsx\", path: \"packages/web/src/app.tsx\", kind: \"file\" },\n];\n\nconst searchResults: FileNode[] = [\n { name: \"components.css\", path: \"packages/web/src/styles/components.css\", kind: \"file\" },\n { name: \"tokens.css\", path: \"packages/web/src/styles/tokens.css\", kind: \"file\" },\n];\n\nconst editorReviewLines = [\n \"const headerTitle = isMobile\",\n ' ? t(shouldShowMobileRoot ? \"settings.title\" : activeSectionMeta.labelKey)',\n ' : t(\"settings.title\");',\n \"\",\n \"return (\",\n ' <div className={`settings-page ${isMobile ? \"settings-page--mobile\" : \"\"}`}>',\n ' <header className=\"settings-header\">',\n \" <PageHeader\",\n \" ...\",\n];\n\nfunction scene(\n id: string,\n config: Pick<UiPreviewSceneDefinition, \"router\" | \"seed\" | \"render\">\n): UiPreviewSceneDefinition {\n const metadata = getUiPreviewSceneMetadata(id);\n if (!metadata) {\n throw new Error(`Missing UI preview metadata for ${id}`);\n }\n\n return {\n ...metadata,\n ...config,\n };\n}\n\nfunction buildWorkspaceSeed(context: {\n theme: string;\n locale: \"zh\" | \"en\";\n device: \"desktop\" | \"mobile\";\n}) {\n return {\n ...context,\n workspaces: [\n workspace,\n {\n ...workspace,\n id: \"ws-review-2\",\n name: \"playground\",\n path: \"/home/spencer/workspace/playground\",\n },\n ],\n activeWorkspaceId: workspace.id,\n fileTreeByWorkspaceId: {\n [workspace.id]: new Map<string, FileNode[]>([\n [\".\", rootTree],\n [\"packages\", packagesTree],\n [\"packages/web\", webTree],\n [\"packages/web/src\", srcTree],\n ]),\n },\n gitStateByWorkspaceId: {\n [workspace.id]: gitStatus,\n },\n gitBranchListByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feat/pc-style-polish\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n worktreeListByWorkspaceId: {\n [workspace.id]: worktrees,\n },\n commands: {\n workspaceList: [workspace],\n fileTreeByWorkspaceId: {\n [workspace.id]: {\n \".\": rootTree,\n packages: packagesTree,\n \"packages/web\": webTree,\n \"packages/web/src\": srcTree,\n },\n },\n fileSearchByWorkspaceId: {\n [workspace.id]: searchResults,\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: gitStatus,\n },\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feat/pc-style-polish\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n gitLogByWorkspaceId: {\n [workspace.id]: { entries: gitHistory },\n },\n gitDiffByWorkspaceId: {\n [workspace.id]: {\n diff: \"@@ preview diff\\n- background: #11181f;\\n+ background: var(--bg-elevated);\",\n },\n },\n gitShowByWorkspaceId: {\n [workspace.id]: { diff: \"@@ preview commit diff\\n+ register desktop review scenes\" },\n },\n worktreeListByWorkspaceId: {\n [workspace.id]: worktrees,\n },\n worktreeStatusByPath,\n worktreeDiffByPath: {\n [worktrees[1].path]: \"@@ worktree diff\\n+ packages/web/src/styles/components.css\",\n },\n worktreeTreeByPath,\n terminalListByWorkspaceId: {\n [workspace.id]: [],\n },\n },\n };\n}\n\nfunction DesktopReviewShell({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <div className={className ? `desktop-review-shell ${className}` : \"desktop-review-shell\"}>\n {children}\n </div>\n );\n}\n\nfunction DesktopEditorReviewSurface() {\n return (\n <div className=\"workspace-git-view\">\n <div className=\"code-editor workspace-git-editor\">\n <div className=\"code-editor-header\">\n <span className=\"code-file-path\">\n packages/web/src/features/settings/components/settings-page.tsx\n <span className=\"dirty-indicator\">*</span>\n </span>\n <div className=\"code-mode-toggle\">\n <button type=\"button\" className=\"code-mode-btn\" aria-label=\"Save file\" disabled>\n Save\n </button>\n <button\n type=\"button\"\n className=\"code-mode-btn active\"\n aria-label=\"Preview desktop header\"\n >\n Preview\n </button>\n </div>\n </div>\n <div className=\"code-editor-body\">\n <div className=\"code-lines\">\n {editorReviewLines.map((line, index) => (\n <div key={`${index}:${line}`} className=\"code-line\">\n <span className=\"code-line-num\">{index + 1}</span>\n <span className=\"git-diff-line-text\">{line || \" \"}</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function createDesktopReviewScenes(): UiPreviewSceneDefinition[] {\n return [\n scene(\"workspace-topbar-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--topbar\">\n <TopBar />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-sidebar-files-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--sidebar\">\n <FileTreePanel workspaceId={workspace.id} variant=\"desktop\" />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-sidebar-git-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--sidebar\">\n <GitPanel workspaceId={workspace.id} variant=\"desktop\" />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-editor-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--editor\">\n <DesktopEditorReviewSurface />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-diff-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...buildWorkspaceSeed(context),\n gitDiffPreviewByWorkspaceId: {\n [workspace.id]: {\n path: \"packages/web/src/styles/components.css\",\n diff: [\n \"@@ workspace shell\",\n \"- background: var(--bg-surface);\",\n \"+ background: var(--bg-elevated);\",\n \"+ border-radius: var(--radius-xl);\",\n ].join(\"\\n\"),\n source: \"file\",\n },\n },\n }),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--diff\">\n <GitDiffViewer workspaceId={workspace.id} showCloseButton={false} />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-terminal-empty-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--terminal\">\n <TerminalPanel />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"settings-density-review\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => ({\n ...buildWorkspaceSeed(context),\n commands: {\n ...buildWorkspaceSeed(context).commands,\n settingsGet: {\n \"notifications.enabled\": true,\n \"notifications.soundEnabled\": true,\n \"supervisor.evaluationTimeoutSec\": 600,\n \"appearance.locale\": context.locale,\n \"appearance.themeId\": context.theme,\n \"appearance.terminalRenderer\": \"standard\",\n \"providers.claude.additionalArgs\": [\"--verbose\"],\n \"providers.codex.additionalArgs\": [\"--sandbox\", \"workspace-write\"],\n },\n settingsUpdate: {},\n settingsPreviewCommandByProviderId: {\n claude: \"claude --verbose\",\n codex: \"codex --sandbox workspace-write\",\n },\n },\n }),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-light-theme-review\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => ({\n ...buildWorkspaceSeed(context),\n commands: {\n ...buildWorkspaceSeed(context).commands,\n settingsGet: {\n \"notifications.enabled\": true,\n \"notifications.soundEnabled\": true,\n \"supervisor.evaluationTimeoutSec\": 600,\n \"appearance.locale\": context.locale,\n \"appearance.themeId\": context.theme,\n \"appearance.terminalRenderer\": \"standard\",\n \"providers.claude.additionalArgs\": [\"--verbose\"],\n \"providers.codex.additionalArgs\": [\"--sandbox\", \"workspace-write\"],\n },\n settingsUpdate: {},\n settingsPreviewCommandByProviderId: {\n claude: \"claude --verbose\",\n codex: \"codex --sandbox workspace-write\",\n },\n },\n }),\n render: () => <SettingsPage />,\n }),\n scene(\"desktop-overlay-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...buildWorkspaceSeed(context),\n commandPaletteOpen: true,\n commands: {\n ...buildWorkspaceSeed(context).commands,\n workspaceBrowse: {\n currentPath: \"/home/spencer/workspace\",\n parentPath: \"/home/spencer\",\n directories: [\n { name: \"coder-studio\", path: \"/home/spencer/workspace/coder-studio\", itemCount: 24 },\n { name: \"playground\", path: \"/home/spencer/workspace/playground\", itemCount: 6 },\n ],\n },\n workspaceOpen: workspace,\n },\n }),\n render: () => (\n <div className=\"desktop-review-grid\">\n <div className=\"desktop-review-card\">\n <CommandPalette />\n </div>\n <div className=\"desktop-review-card\">\n <WorkspaceLaunchModal onClose={() => {}} />\n </div>\n <div className=\"desktop-review-card desktop-review-card--worktree\">\n {/* Review-only inline preview: this remains a non-portaled inspection surface, not a product overlay. */}\n <div className=\"desktop-review-embedded-worktree\">\n <WorktreeManagerSurface\n desktopPreviewInline\n workspaceId={workspace.id}\n openView=\"list\"\n onClose={() => {}}\n />\n </div>\n </div>\n </div>\n ),\n }),\n scene(\"desktop-statusbar-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--statusbar\">\n <WorkspaceStatusBar align=\"start\" gitState={gitStatus} workspaceId={workspace.id} />\n </div>\n </DesktopReviewShell>\n ),\n }),\n ];\n}\n","import type { FileNode, GitStatus, Session, Workspace } from \"@coder-studio/core\";\nimport { LoginPage } from \"../../features/auth\";\nimport { SessionGatePage } from \"../../features/auth/session-gate\";\nimport { NotFoundPage } from \"../../features/not-found\";\nimport { SettingsPage } from \"../../features/settings\";\nimport { WelcomePage } from \"../../features/welcome\";\nimport { WorkspaceDesktopView } from \"../../features/workspace/views/desktop/workspace-desktop-view\";\nimport { WorkspaceMobileView } from \"../../features/workspace/views/mobile/workspace-mobile-view\";\nimport { WorkspaceEmptyState } from \"../../features/workspace/views/shared/workspace-empty-state\";\nimport { WorkspaceRouteGate } from \"../../features/workspace/views/shared/workspace-route-gate\";\nimport { DesktopShell } from \"../../shells/desktop-shell\";\nimport { MobileShell } from \"../../shells/mobile-shell\";\nimport type { UiPreviewSceneContext, UiPreviewSceneDefinition } from \"../catalog\";\nimport { getUiPreviewSceneMetadata } from \"../scene-metadata\";\n\nconst workspace: Workspace = {\n id: \"ws-preview\",\n name: \"coder-studio\",\n path: \"/home/spencer/workspace/coder-studio\",\n targetRuntime: \"native\",\n openedAt: 1,\n lastActiveAt: 1,\n uiState: {\n leftPanelWidth: 280,\n bottomPanelHeight: 220,\n focusMode: false,\n paneLayout: { id: \"root\", type: \"leaf\" },\n },\n};\n\nconst gitStatus: GitStatus = {\n branch: \"main\",\n ahead: 0,\n behind: 0,\n staged: [],\n modified: [{ path: \"packages/web/src/app.tsx\", status: \"modified\" }],\n untracked: [{ path: \"e2e-ui/scenes/index.ts\", status: \"untracked\" }],\n deleted: [],\n};\n\nconst fileTreeMap = new Map<string, FileNode[]>();\nfileTreeMap.set(\".\", [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"e2e-ui\", path: \"e2e-ui\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n]);\n\nfunction buildSettingsSeed(context: UiPreviewSceneContext) {\n return {\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n commands: {\n settingsGet: {\n \"notifications.enabled\": true,\n \"notifications.soundEnabled\": true,\n \"supervisor.evaluationTimeoutSec\": 600,\n \"appearance.locale\": context.locale,\n \"appearance.themeId\": context.theme,\n \"appearance.terminalRenderer\": \"standard\",\n \"providers.claude.additionalArgs\": [\"--verbose\"],\n \"providers.codex.additionalArgs\": [\"--sandbox\", \"workspace-write\"],\n },\n settingsUpdate: {},\n settingsPreviewCommandByProviderId: {\n claude: \"claude --verbose\",\n codex: \"codex --sandbox workspace-write\",\n },\n },\n };\n}\n\nfunction buildWorkspaceSeed(context: UiPreviewSceneContext, sessions: Session[] = []) {\n return {\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n sessions,\n paneLayoutByWorkspaceId: {\n [workspace.id]: { id: \"root\", type: \"leaf\" },\n },\n fileTreeByWorkspaceId: {\n [workspace.id]: fileTreeMap,\n },\n gitStateByWorkspaceId: {\n [workspace.id]: gitStatus,\n },\n gitBranchListByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feature/e2e-ui\", isCurrent: false, isRemote: false },\n ],\n },\n },\n worktreeListByWorkspaceId: {\n [workspace.id]: [],\n },\n commands: {\n workspaceList: [workspace],\n sessionListByWorkspaceId: { [workspace.id]: sessions },\n gitStatusByWorkspaceId: { [workspace.id]: gitStatus },\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feature/e2e-ui\", isCurrent: false, isRemote: false },\n ],\n },\n },\n fileTreeByWorkspaceId: {\n [workspace.id]: {\n \".\": fileTreeMap.get(\".\") ?? [],\n },\n },\n worktreeListByWorkspaceId: {\n [workspace.id]: [],\n },\n terminalListByWorkspaceId: {\n [workspace.id]: [],\n },\n },\n };\n}\n\nfunction scene(\n id: string,\n config: Pick<UiPreviewSceneDefinition, \"router\" | \"seed\" | \"render\">\n): UiPreviewSceneDefinition {\n const metadata = getUiPreviewSceneMetadata(id);\n if (!metadata) {\n throw new Error(`Missing UI preview metadata for ${id}`);\n }\n\n return {\n ...metadata,\n ...config,\n };\n}\n\nexport function createPageScenes(): UiPreviewSceneDefinition[] {\n return [\n scene(\"welcome\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({ ...context }),\n render: () => <WelcomePage />,\n }),\n scene(\"settings-general\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed(context),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-appearance\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed(context),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-providers\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed(context),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-shortcuts\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed(context),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-mobile-root\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed({ ...context, device: \"mobile\" }),\n render: () => <SettingsPage />,\n }),\n scene(\"app-loading-shell\", {\n router: () => ({ initialEntries: [\"/\"], path: \"*\" }),\n seed: (context) => ({\n ...context,\n authEnabled: null,\n authenticated: false,\n connectionStatus: \"connecting\",\n workspaces: [],\n activeWorkspaceId: null,\n workspacesLoadState: \"idle\",\n }),\n render: (context) => (context.device === \"mobile\" ? <MobileShell /> : <DesktopShell />),\n }),\n scene(\"workspace-desktop\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <WorkspaceRouteGate>\n <WorkspaceDesktopView />\n </WorkspaceRouteGate>\n ),\n }),\n scene(\"workspace-mobile\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <WorkspaceRouteGate>\n <WorkspaceMobileView />\n </WorkspaceRouteGate>\n ),\n }),\n scene(\"auth-preview\", {\n router: () => ({ initialEntries: [\"/login\"], path: \"/login\" }),\n seed: (context) => ({\n ...context,\n authEnabled: true,\n authenticated: false,\n }),\n render: () => <LoginPage />,\n }),\n scene(\"session-gate\", {\n router: () => ({ initialEntries: [\"/session-gate\"], path: \"/session-gate\" }),\n seed: (context) => ({\n ...context,\n authEnabled: false,\n authenticated: false,\n }),\n render: () => <SessionGatePage />,\n }),\n scene(\"not-found\", {\n router: () => ({ initialEntries: [\"/preview-missing\"], path: \"*\" }),\n seed: (context) => ({ ...context }),\n render: () => <NotFoundPage />,\n }),\n scene(\"workspace-load-error\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n authEnabled: false,\n authenticated: true,\n workspaces: [],\n activeWorkspaceId: null,\n workspacesLoadState: \"error\",\n workspacesLoadError: \"Preview workspace load failure\",\n }),\n render: () => (\n <WorkspaceRouteGate>\n <WorkspaceEmptyState />\n </WorkspaceRouteGate>\n ),\n }),\n ];\n}\n","import type { SupervisorState } from \"@coder-studio/core\";\nimport { useAtomValue } from \"jotai\";\nimport { useMemo } from \"react\";\nimport { ThemedIcon } from \"../../../../components/ui\";\nimport { useTranslation } from \"../../../../lib/i18n\";\nimport { supervisorsAtom } from \"../../atoms\";\n\ninterface MobileSupervisorBadgeProps {\n sessionId: string | null;\n onOpen: () => void;\n}\n\nexport function MobileSupervisorBadge({ sessionId, onOpen }: MobileSupervisorBadgeProps) {\n const supervisors = useAtomValue(supervisorsAtom);\n const t = useTranslation();\n\n const copy = useMemo(() => {\n if (!sessionId) {\n return null;\n }\n\n const supervisor = supervisors.get(sessionId);\n if (!supervisor) {\n return {\n state: \"inactive\" as SupervisorState,\n label: t(\"supervisor.title\"),\n };\n }\n\n return {\n state: supervisor.state,\n label: t(\"supervisor.title\"),\n };\n }, [sessionId, supervisors, t]);\n\n if (!copy) {\n return null;\n }\n\n return (\n <button\n type=\"button\"\n className={`mobile-supervisor-badge mobile-supervisor-badge--${copy.state}`}\n aria-label={t(\"mobile.supervisor.open_sheet\")}\n onClick={onOpen}\n >\n <span className=\"mobile-supervisor-badge__icon\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"supervisor.entry\" size={13} />\n </span>\n <span className=\"mobile-supervisor-badge__label\">{copy.label}</span>\n </button>\n );\n}\n","import type {\n FileNode,\n GitStatus,\n Supervisor,\n UpdateStateView,\n Workspace,\n WorktreeInfo,\n} from \"@coder-studio/core\";\nimport { type CSSProperties, type ReactNode, useState } from \"react\";\nimport { ConfirmDialog, EmptyState, Notice, Sheet, ThemedIcon } from \"../../components/ui\";\nimport { SessionCard } from \"../../features/agent-panes/views/shared/session-card\";\nimport { CommandPalette } from \"../../features/command-palette\";\nimport { ToastContainer } from \"../../features/notifications\";\nimport { MobileSupervisorBadge } from \"../../features/supervisor/views/mobile/mobile-supervisor-badge\";\nimport { MobileSupervisorSheet } from \"../../features/supervisor/views/mobile/mobile-supervisor-sheet\";\nimport { ObjectiveDialog } from \"../../features/supervisor/views/shared/objective-dialog\";\nimport { SupervisorCard } from \"../../features/supervisor/views/shared/supervisor-card\";\nimport { TerminalPanel } from \"../../features/terminal-panel\";\nimport { TopBar } from \"../../features/topbar\";\nimport { WorkspaceDesktopView } from \"../../features/workspace/views/desktop/workspace-desktop-view\";\nimport { MobileDock } from \"../../features/workspace/views/mobile/mobile-dock\";\nimport { MobileFilesSheet } from \"../../features/workspace/views/mobile/mobile-files-sheet\";\nimport { MobileTopBar } from \"../../features/workspace/views/mobile/mobile-topbar\";\nimport { MobileWorkspaceDrawer } from \"../../features/workspace/views/mobile/mobile-workspace-drawer\";\nimport { BranchQuickPick } from \"../../features/workspace/views/shared/branch-quick-pick\";\nimport { GitDiffViewer } from \"../../features/workspace/views/shared/git-diff-viewer\";\nimport { GitPanel } from \"../../features/workspace/views/shared/git-panel\";\nimport { WorkspaceLaunchModal } from \"../../features/workspace/views/shared/workspace-launch-modal\";\nimport { WorkspaceStatusBar } from \"../../features/workspace/views/shared/workspace-status-bar\";\nimport { WorktreeManagerSurface } from \"../../features/workspace/views/shared/worktree-manager-surface\";\nimport { useTranslation } from \"../../lib/i18n\";\nimport type { UiPreviewSceneDefinition } from \"../catalog\";\nimport { getUiPreviewSceneMetadata } from \"../scene-metadata\";\n\nconst workspace: Workspace = {\n id: \"ws-preview\",\n name: \"coder-studio\",\n path: \"/home/spencer/workspace/coder-studio\",\n targetRuntime: \"native\",\n openedAt: 1,\n lastActiveAt: 1,\n uiState: {\n leftPanelWidth: 280,\n bottomPanelHeight: 220,\n focusMode: false,\n activeSessionId: \"session-preview-1\",\n paneLayout: { id: \"root\", type: \"leaf\" },\n },\n};\n\nconst supervisor: Supervisor = {\n id: \"sup-preview-1\",\n sessionId: \"session-preview-1\",\n workspaceId: \"ws-preview\",\n state: \"idle\",\n targetId: \"target-preview-1\",\n objective: \"Review UI regressions before shipping\",\n evaluatorProviderId: \"claude\",\n maxSupervisionCount: 0,\n completedSupervisionCount: 0,\n currentTargetMemory: {\n targetId: \"target-preview-1\",\n decompositionGenerated: true,\n decompositionMode: \"stage\",\n items: [\n {\n id: \"stage-1\",\n kind: \"stage\",\n title: \"Audit compact strip density\",\n objective: \"Review density regressions in the compact strip\",\n deliverable: \"A verified density audit\",\n acceptanceCriteria: [\"Density issues are identified\"],\n status: \"done\",\n },\n {\n id: \"stage-2\",\n kind: \"stage\",\n title: \"Move memory into expandable detail\",\n objective: \"Expose target memory without bloating the strip\",\n deliverable: \"A compact card with explicit decomposition detail\",\n acceptanceCriteria: [\"Decomposition is visible without expanding layout noise\"],\n status: \"in_progress\",\n },\n {\n id: \"stage-3\",\n kind: \"stage\",\n title: \"Validate preview coverage across themes\",\n objective: \"Ensure preview coverage is representative\",\n deliverable: \"A validated preview pass\",\n acceptanceCriteria: [\"Preview coverage is confirmed\"],\n status: \"pending\",\n },\n ],\n activeItemId: \"stage-2\",\n progressSummary: \"Compact strip restored; preview coverage still under review.\",\n stalledCount: 0,\n updatedAt: 1,\n },\n recentTargetCycles: [\n {\n cycleId: \"target-cycle-preview-1\",\n targetId: \"target-preview-1\",\n startedAt: 1,\n completedAt: 2,\n result: \"continue\",\n reason: \"Keep the strip compact and move detailed memory into an explicit disclosure.\",\n },\n ],\n createdAt: 1,\n updatedAt: 1,\n};\n\nconst worktrees: WorktreeInfo[] = [\n {\n name: \"feature/e2e-ui\",\n path: \"/home/spencer/workspace/coder-studio-feature-e2e-ui\",\n branch: \"feature/e2e-ui\",\n commit: \"abc1234\",\n status: \"dirty\",\n },\n];\n\nconst worktreeStatus: GitStatus = {\n branch: \"feature/e2e-ui\",\n ahead: 1,\n behind: 0,\n staged: [],\n modified: [{ path: \"packages/web/src/ui-preview/app.tsx\", status: \"modified\" }],\n untracked: [],\n deleted: [],\n};\n\nconst worktreeTree: FileNode[] = [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"e2e-ui\", path: \"e2e-ui\", kind: \"dir\" },\n];\n\nconst footerUpdateRailPreviewState: UpdateStateView = {\n version: 1,\n currentVersion: \"0.4.0\",\n latestVersion: \"0.5.0\",\n availability: \"update_available\",\n updateStatus: \"idle\",\n lastCheckedAt: 1715731200000,\n targetVersion: null,\n startedAt: null,\n finishedAt: null,\n requiresManualStep: false,\n manualCommand: null,\n errorSummary: null,\n supported: true,\n installKind: \"global_npm\",\n unsupportedReason: null,\n};\n\nconst fileTreeRoot: FileNode[] = [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n { name: \"pnpm-workspace.yaml\", path: \"pnpm-workspace.yaml\", kind: \"file\" },\n];\n\nconst fileTreePackages: FileNode[] = [\n { name: \"web\", path: \"packages/web\", kind: \"dir\" },\n { name: \"core\", path: \"packages/core\", kind: \"dir\" },\n];\n\nconst readmeDesktopGitStatus: GitStatus = {\n branch: \"feature/readme-refresh\",\n ahead: 2,\n behind: 0,\n headSha: \"97cc218f926d61bbeca0d6a8bd4b62582cbf93ea\",\n headShortSha: \"97cc218\",\n headSubject: \"feat: stage readme screenshot refresh scenes\",\n staged: [{ path: \"README.md\", status: \"modified\" }],\n modified: [\n { path: \"packages/web/src/ui-preview/scenes/showcase-scenes.tsx\", status: \"modified\" },\n { path: \"docs/help/assets/screenshot-desktop-workspace-full.png\", status: \"modified\" },\n ],\n untracked: [{ path: \"docs/help/assets/screenshot-mobile-progress.png\", status: \"untracked\" }],\n deleted: [],\n};\n\nconst readmeDesktopHistory = [\n {\n sha: \"97cc218f926d61bbeca0d6a8bd4b62582cbf93ea\",\n shortSha: \"97cc218\",\n subject: \"feat: stage readme screenshot refresh scenes\",\n authorName: \"Spencer\",\n authoredAt: 1_715_731_200_000,\n },\n {\n sha: \"4d6fd0bbce5100f39277c9c9c92677b87de17b73\",\n shortSha: \"4d6fd0b\",\n subject: \"style: tighten header action hierarchy\",\n authorName: \"Spencer\",\n authoredAt: 1_715_644_800_000,\n },\n] as const;\n\nconst readmeDesktopSessions = [\n {\n id: \"session-readme-hero\",\n workspaceId: workspace.id,\n terminalId: \"term-agent-readme-hero\",\n providerId: \"codex\",\n state: \"running\" as const,\n capability: \"full\" as const,\n startedAt: 1,\n lastActiveAt: 3,\n title: \"Ship the header polish and verify README visuals\",\n },\n];\n\nconst readmeMobileSessions = [\n {\n id: \"session-readme-mobile\",\n workspaceId: workspace.id,\n terminalId: \"term-agent-readme-mobile\",\n providerId: \"claude\",\n state: \"idle\" as const,\n capability: \"full\" as const,\n startedAt: 1,\n lastActiveAt: 4,\n title: \"Resume mobile progress review\",\n },\n];\n\nconst readmeSupervisor: Supervisor = {\n id: \"sup-readme-hero\",\n sessionId: \"session-readme-hero\",\n workspaceId: workspace.id,\n state: \"evaluating\",\n targetId: \"target-readme-refresh\",\n objective: \"Refresh README screenshots to highlight active cross-device coding flows\",\n evaluatorProviderId: \"claude\",\n maxSupervisionCount: 0,\n completedSupervisionCount: 3,\n currentTargetMemory: {\n targetId: \"target-readme-refresh\",\n decompositionGenerated: true,\n decompositionMode: \"stage\",\n items: [\n {\n id: \"stage-1\",\n kind: \"stage\",\n title: \"Capture a desktop hero with active session context\",\n objective: \"Show an active desktop coding flow\",\n deliverable: \"A readable hero screenshot\",\n acceptanceCriteria: [\"Hero capture is readable\"],\n status: \"done\",\n },\n {\n id: \"stage-2\",\n kind: \"stage\",\n title: \"Capture a focused git review scene for README\",\n objective: \"Highlight review context clearly\",\n deliverable: \"A focused review screenshot\",\n acceptanceCriteria: [\"Diff emphasis is readable\"],\n status: \"in_progress\",\n },\n {\n id: \"stage-3\",\n kind: \"stage\",\n title: \"Capture a mobile progress check with supervisor status\",\n objective: \"Show mobile progress visibility\",\n deliverable: \"A mobile supervisor progress screenshot\",\n acceptanceCriteria: [\"Mobile supervisor state is legible\"],\n status: \"pending\",\n },\n ],\n activeItemId: \"stage-2\",\n progressSummary: \"Hero scene locked. Review capture is being polished for README readability.\",\n stalledCount: 0,\n updatedAt: 4,\n },\n recentTargetCycles: [\n {\n cycleId: \"target-cycle-readme-1\",\n targetId: \"target-readme-refresh\",\n startedAt: 2,\n completedAt: 3,\n result: \"continue\",\n reason: \"Hero screenshot is readable. Review scene still needs clearer diff emphasis.\",\n },\n ],\n createdAt: 1,\n updatedAt: 4,\n};\n\nconst readmeMobileSupervisor: Supervisor = {\n ...readmeSupervisor,\n id: \"sup-readme-mobile\",\n sessionId: \"session-readme-mobile\",\n state: \"idle\",\n currentTargetMemory: {\n targetId: \"target-readme-refresh\",\n decompositionGenerated: true,\n decompositionMode: \"stage\",\n items: [\n {\n id: \"stage-1\",\n kind: \"stage\",\n title: \"Capture a desktop hero with active session context\",\n objective: \"Show an active desktop coding flow\",\n deliverable: \"A readable hero screenshot\",\n acceptanceCriteria: [\"Hero capture is readable\"],\n status: \"done\",\n },\n {\n id: \"stage-2\",\n kind: \"stage\",\n title: \"Capture a focused git review scene for README\",\n objective: \"Highlight review context clearly\",\n deliverable: \"A focused review screenshot\",\n acceptanceCriteria: [\"Diff emphasis is readable\"],\n status: \"done\",\n },\n {\n id: \"stage-3\",\n kind: \"stage\",\n title: \"Capture a mobile progress check with supervisor status\",\n objective: \"Show mobile progress visibility\",\n deliverable: \"A mobile supervisor progress screenshot\",\n acceptanceCriteria: [\"Mobile supervisor state is legible\"],\n status: \"in_progress\",\n },\n ],\n activeItemId: \"stage-3\",\n progressSummary:\n \"Desktop captures are ready. Mobile continuity shot is the last remaining asset.\",\n stalledCount: 0,\n updatedAt: 5,\n },\n recentTargetCycles: [\n {\n cycleId: \"target-cycle-readme-mobile-1\",\n targetId: \"target-readme-refresh\",\n startedAt: 4,\n completedAt: 5,\n result: \"continue\",\n reason:\n \"Desktop assets are approved. Capture a mobile status-check scene that shows continuity.\",\n },\n ],\n createdAt: 1,\n updatedAt: 5,\n};\n\nfunction createReadmeWorkspaceFileTree() {\n return {\n \".\": [\n { name: \"docs\", path: \"docs\", kind: \"dir\" },\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n { name: \"README.zh-CN.md\", path: \"README.zh-CN.md\", kind: \"file\" },\n ] satisfies FileNode[],\n docs: [\n { name: \"help\", path: \"docs/help\", kind: \"dir\" },\n { name: \"promotion\", path: \"docs/promotion\", kind: \"dir\" },\n ] satisfies FileNode[],\n \"docs/help\": [\n { name: \"assets\", path: \"docs/help/assets\", kind: \"dir\" },\n { name: \"desktop-guide.md\", path: \"docs/help/desktop-guide.md\", kind: \"file\" },\n ] satisfies FileNode[],\n \"docs/help/assets\": [\n {\n name: \"screenshot-desktop-workspace-full.png\",\n path: \"docs/help/assets/screenshot-desktop-workspace-full.png\",\n kind: \"file\",\n },\n {\n name: \"screenshot-pc.png\",\n path: \"docs/help/assets/screenshot-pc.png\",\n kind: \"file\",\n },\n {\n name: \"screenshot-mobile.png\",\n path: \"docs/help/assets/screenshot-mobile.png\",\n kind: \"file\",\n },\n ] satisfies FileNode[],\n packages: [\n { name: \"web\", path: \"packages/web\", kind: \"dir\" },\n { name: \"core\", path: \"packages/core\", kind: \"dir\" },\n ] satisfies FileNode[],\n };\n}\n\nfunction buildReadmeDesktopHeroSeed(context: {\n theme: string;\n locale: \"zh\" | \"en\";\n device: \"desktop\" | \"mobile\";\n}) {\n const fileTreeByPath = createReadmeWorkspaceFileTree();\n\n return {\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n sessions: readmeDesktopSessions,\n paneLayoutByWorkspaceId: {\n [workspace.id]: {\n id: \"root\",\n type: \"split\",\n direction: \"horizontal\",\n children: [\n {\n id: \"hero-left\",\n type: \"leaf\",\n sessionId: \"session-readme-hero\",\n },\n {\n id: \"hero-right\",\n type: \"leaf\",\n sessionId: \"session-readme-hero\",\n },\n ],\n sessionId: \"session-readme-hero\",\n },\n },\n fileTreeByWorkspaceId: {\n [workspace.id]: new Map<string, FileNode[]>(Object.entries(fileTreeByPath)),\n },\n gitStateByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n gitBranchListByWorkspaceId: {\n [workspace.id]: {\n current: \"feature/readme-refresh\",\n branches: [\n { name: \"feature/readme-refresh\", isCurrent: true, isRemote: false },\n { name: \"main\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n terminalMetaById: {\n \"term-agent-readme-hero\": {\n id: \"term-agent-readme-hero\",\n workspaceId: workspace.id,\n kind: \"agent\",\n alive: true,\n title: \"Codex session\",\n },\n \"term-shell-readme-hero\": {\n id: \"term-shell-readme-hero\",\n workspaceId: workspace.id,\n kind: \"shell\",\n alive: true,\n title: \"Workspace Shell\",\n },\n },\n terminalOutputById: {\n \"term-agent-readme-hero\": [\n new TextEncoder().encode(\n [\n '$ codex run --model gpt-5.5 --task \"refresh readme screenshots\"',\n \"Analyzing README usage and current preview scenes...\",\n \"Plan: add README-specific preview scenes, capture desktop hero, capture mobile continuity shot.\",\n \"\",\n \"Editing packages/web/src/ui-preview/scenes/showcase-scenes.tsx\",\n \"Preparing fresh assets in docs/help/assets/\",\n ].join(\"\\n\")\n ),\n ],\n \"term-shell-readme-hero\": [\n new TextEncoder().encode(\n [\n \"$ pnpm --filter @coder-studio/web exec vitest run src/ui-preview/scene-metadata.test.ts src/ui-preview/catalog.test.tsx\",\n \"✓ src/ui-preview/scene-metadata.test.ts (9)\",\n \"✓ src/ui-preview/catalog.test.tsx (35)\",\n \"\",\n '$ pnpm --dir e2e-ui exec playwright test --grep \"README /\"',\n \"capturing desktop hero and mobile progress scenes...\",\n ].join(\"\\n\")\n ),\n ],\n },\n supervisorBySessionId: {\n \"session-readme-hero\": readmeSupervisor,\n },\n commands: {\n workspaceList: [workspace],\n sessionListByWorkspaceId: {\n [workspace.id]: readmeDesktopSessions,\n },\n fileTreeByWorkspaceId: {\n [workspace.id]: fileTreeByPath,\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"feature/readme-refresh\",\n branches: [\n { name: \"feature/readme-refresh\", isCurrent: true, isRemote: false },\n { name: \"main\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n terminalListByWorkspaceId: {\n [workspace.id]: [\n {\n id: \"term-shell-readme-hero\",\n workspaceId: workspace.id,\n kind: \"shell\",\n title: \"Workspace Shell\",\n cwd: workspace.path,\n argv: [\"zsh\"],\n cols: 120,\n rows: 28,\n alive: true,\n createdAt: 2,\n },\n {\n id: \"term-shell-readme-verify\",\n workspaceId: workspace.id,\n kind: \"shell\",\n title: \"Preview Runner\",\n cwd: workspace.path,\n argv: [\"zsh\"],\n cols: 120,\n rows: 28,\n alive: true,\n createdAt: 3,\n },\n ],\n },\n supervisorBySessionId: {\n \"session-readme-hero\": readmeSupervisor,\n },\n },\n };\n}\n\nfunction buildReadmeDesktopReviewSeed(context: {\n theme: string;\n locale: \"zh\" | \"en\";\n device: \"desktop\" | \"mobile\";\n}) {\n const fileTreeByPath = createReadmeWorkspaceFileTree();\n\n return {\n ...buildReadmeDesktopHeroSeed(context),\n fileTreeByWorkspaceId: {\n [workspace.id]: new Map<string, FileNode[]>(Object.entries(fileTreeByPath)),\n },\n gitDiffPreviewByWorkspaceId: {\n [workspace.id]: {\n path: \"packages/web/src/features/topbar/index.tsx\",\n title: \"README capture polish\",\n diff: [\n \"diff --git a/packages/web/src/features/topbar/index.tsx b/packages/web/src/features/topbar/index.tsx\",\n \"@@ Refine the desktop topbar hierarchy\",\n '- <span className=\\\"topbar-btn-label\\\">Quick Actions</span>',\n '+ <span className=\\\"topbar-btn-label\\\">Quick Actions</span>',\n '+ <span className=\\\"topbar-btn-hint\\\">Review README capture targets</span>',\n \"\",\n \"@@ screenshot staging\",\n \"+ <WorkspaceLaunchModal onClose={() => setWorkspaceLaunchOpen(false)} />\",\n ].join(\"\\n\"),\n source: \"file\" as const,\n },\n },\n commands: {\n ...buildReadmeDesktopHeroSeed(context).commands,\n fileTreeByWorkspaceId: {\n [workspace.id]: fileTreeByPath,\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n gitLogByWorkspaceId: {\n [workspace.id]: { entries: [...readmeDesktopHistory] },\n },\n gitDiffByWorkspaceId: {\n [workspace.id]: {\n diff: [\n \"diff --git a/packages/web/src/features/topbar/index.tsx b/packages/web/src/features/topbar/index.tsx\",\n \"@@ Refine the desktop topbar hierarchy\",\n '+ <span className=\"topbar-btn-hint\">Review README capture targets</span>',\n '+ <span className=\"topbar-btn-hint\">Keep the workspace hero readable at README width</span>',\n ].join(\"\\n\"),\n },\n },\n gitShowByWorkspaceId: {\n [workspace.id]: {\n diff: \"@@ latest commit\\n+ refresh README desktop review capture\",\n },\n },\n supervisorBySessionId: {\n \"session-readme-hero\": readmeSupervisor,\n },\n },\n };\n}\n\nfunction ReadmeDesktopReviewWorkspace() {\n return (\n <div className=\"workspace-page workspace-page--desktop\">\n <TopBar />\n <div className=\"workspace-body\">\n <aside className=\"left-panel\" style={{ width: \"324px\" }}>\n <div className=\"nav-panel workspace-sidebar-panel\">\n <div className=\"workspace-sidebar-panel__body\">\n <GitPanel workspaceId={workspace.id} variant=\"desktop\" />\n </div>\n </div>\n </aside>\n <div className=\"split-divider-v\" aria-hidden=\"true\" />\n <div className=\"workspace-main-area\">\n <div className=\"workspace-main-stage\">\n <GitDiffViewer workspaceId={workspace.id} showCloseButton={false} />\n </div>\n </div>\n </div>\n <WorkspaceStatusBar\n align=\"start\"\n workspaceId={workspace.id}\n gitState={readmeDesktopGitStatus}\n />\n </div>\n );\n}\n\nfunction ReadmeMobileProgressWorkspace() {\n const readmeMobileGitState: GitStatus = {\n branch: \"feature/readme-refresh\",\n ahead: 2,\n behind: 0,\n staged: [{ path: \"README.md\", status: \"modified\" }],\n modified: [{ path: \"docs/help/assets/screenshot-mobile.png\", status: \"modified\" }],\n untracked: [],\n deleted: [],\n };\n\n return (\n <div\n className=\"mobile-shell mobile-shell--stacked mobile-shell--motion-reduced\"\n data-testid=\"mobile-shell\"\n >\n <MobileTopBar\n activeWorkspace={workspace}\n drawerOpen={false}\n onOpenSettings={() => {}}\n onToggleDrawer={() => {}}\n />\n <main className=\"mobile-shell__viewport\">\n <div className=\"mobile-shell__content\" style={{ gap: \"12px\", paddingBottom: \"144px\" }}>\n <section className=\"mobile-shell__agent-stage\" style={{ flex: \"0 0 420px\" }}>\n <SessionCard\n sessionId=\"session-readme-mobile\"\n showHeaderActions={false}\n showSupervisorInline={false}\n headerAccessory={\n <MobileSupervisorBadge sessionId=\"session-readme-mobile\" onOpen={() => {}} />\n }\n />\n </section>\n <section style={{ padding: \"0 12px\" }}>\n <SupervisorCard sessionId=\"session-readme-mobile\" workspaceId={workspace.id} />\n </section>\n </div>\n </main>\n <div\n className=\"mobile-shell__bottom-stack\"\n data-testid=\"mobile-bottom-stack\"\n style={{ \"--mobile-keyboard-inset\": \"0px\" } as CSSProperties}\n >\n <div className=\"mobile-dock-shell\">\n <MobileDock activeItem=\"agent\" onSelectItem={() => {}} />\n </div>\n <WorkspaceStatusBar workspaceId={workspace.id} gitState={readmeMobileGitState} />\n </div>\n </div>\n );\n}\n\nfunction buildReadmeMobileProgressSeed(context: {\n theme: string;\n locale: \"zh\" | \"en\";\n device: \"desktop\" | \"mobile\";\n}) {\n const mobileWorkspace = {\n ...workspace,\n uiState: {\n ...workspace.uiState,\n activeSessionId: \"session-readme-mobile\",\n paneLayout: {\n id: \"root\",\n type: \"leaf\" as const,\n sessionId: \"session-readme-mobile\",\n },\n },\n };\n\n return {\n ...context,\n workspaces: [mobileWorkspace],\n activeWorkspaceId: mobileWorkspace.id,\n sessions: readmeMobileSessions,\n paneLayoutByWorkspaceId: {\n [mobileWorkspace.id]: {\n id: \"root\",\n type: \"leaf\",\n sessionId: \"session-readme-mobile\",\n },\n },\n gitStateByWorkspaceId: {\n [mobileWorkspace.id]: {\n branch: \"feature/readme-refresh\",\n ahead: 2,\n behind: 0,\n staged: [{ path: \"README.md\", status: \"modified\" }],\n modified: [{ path: \"docs/help/assets/screenshot-mobile.png\", status: \"modified\" }],\n untracked: [],\n deleted: [],\n },\n },\n terminalMetaById: {\n \"term-agent-readme-mobile\": {\n id: \"term-agent-readme-mobile\",\n workspaceId: mobileWorkspace.id,\n kind: \"agent\",\n alive: true,\n title: \"Claude progress review\",\n },\n },\n terminalOutputById: {\n \"term-agent-readme-mobile\": [\n new TextEncoder().encode(\n [\n \"$ claude review --scene readme-mobile-progress\",\n \"Checking continuity between desktop hero and mobile status view...\",\n \"Recommendation: keep supervisor progress visible above the dock.\",\n \"Status: desktop captures approved, mobile continuity shot queued for export.\",\n ].join(\"\\n\")\n ),\n ],\n },\n supervisorBySessionId: {\n \"session-readme-mobile\": readmeMobileSupervisor,\n },\n commands: {\n workspaceList: [mobileWorkspace],\n sessionListByWorkspaceId: {\n [mobileWorkspace.id]: readmeMobileSessions,\n },\n gitStatusByWorkspaceId: {\n [mobileWorkspace.id]: {\n branch: \"feature/readme-refresh\",\n ahead: 2,\n behind: 0,\n staged: [{ path: \"README.md\", status: \"modified\" }],\n modified: [{ path: \"docs/help/assets/screenshot-mobile.png\", status: \"modified\" }],\n untracked: [],\n deleted: [],\n },\n },\n gitBranchesByWorkspaceId: {\n [mobileWorkspace.id]: {\n current: \"feature/readme-refresh\",\n branches: [\n { name: \"feature/readme-refresh\", isCurrent: true, isRemote: false },\n { name: \"main\", isCurrent: false, isRemote: false },\n ],\n },\n },\n supervisorBySessionId: {\n \"session-readme-mobile\": readmeMobileSupervisor,\n },\n },\n };\n}\n\nfunction scene(\n id: string,\n config: Pick<UiPreviewSceneDefinition, \"router\" | \"seed\" | \"render\">\n): UiPreviewSceneDefinition {\n const metadata = getUiPreviewSceneMetadata(id);\n if (!metadata) {\n throw new Error(`Missing UI preview metadata for ${id}`);\n }\n\n return {\n ...metadata,\n ...config,\n };\n}\n\nfunction FooterUpdateRailPreviewShell({\n device,\n className,\n}: {\n device: \"desktop\" | \"mobile\";\n className: string;\n}) {\n return device === \"mobile\" ? (\n <div\n className={`${className} mobile-shell mobile-shell--stacked mobile-shell--motion-reduced`}\n data-testid=\"mobile-shell\"\n >\n <MobileTopBar\n activeWorkspace={workspace}\n drawerOpen={false}\n onOpenSettings={() => {}}\n onToggleDrawer={() => {}}\n />\n <main className=\"mobile-shell__viewport\">\n <div className=\"mobile-shell__content\" style={{ paddingBottom: \"144px\" }} />\n </main>\n <div\n className=\"mobile-shell__bottom-stack\"\n data-testid=\"mobile-bottom-stack\"\n style={{ \"--mobile-keyboard-inset\": \"0px\" } as CSSProperties}\n >\n <div className=\"mobile-dock-shell\">\n <MobileDock activeItem=\"agent\" onSelectItem={() => {}} />\n </div>\n <WorkspaceStatusBar workspaceId={workspace.id} gitState={readmeDesktopGitStatus} />\n </div>\n </div>\n ) : (\n <div className={className}>\n <div className=\"workspace-page workspace-page--desktop\">\n <TopBar />\n <div className=\"workspace-body\">\n <div className=\"workspace-main-area\">\n <div className=\"workspace-main-stage\" />\n </div>\n </div>\n <WorkspaceStatusBar\n align=\"start\"\n workspaceId={workspace.id}\n gitState={readmeDesktopGitStatus}\n />\n </div>\n </div>\n );\n}\n\nfunction FooterUpdateRailConfirmPreview({ device }: { device: \"desktop\" | \"mobile\" }) {\n const t = useTranslation();\n\n return (\n <>\n <FooterUpdateRailPreviewShell className=\"footer-update-rail-confirm-review\" device={device} />\n <ConfirmDialog\n open\n onOpenChange={() => {}}\n title={t(\"settings.about.confirm_update_title\")}\n description={\n <div className=\"settings-dialog-copy\">\n <p>{t(\"settings.about.confirm_update_message\")}</p>\n <p>\n {t(\"settings.about.confirm_update_activity\", {\n terminals: 1,\n sessions: 2,\n supervisors: 3,\n })}\n </p>\n </div>\n }\n cancelText={t(\"action.cancel\")}\n confirmText={t(\"settings.about.update_now\")}\n tone=\"danger\"\n onConfirm={() => {}}\n />\n </>\n );\n}\n\nexport function createShowcaseScenes(): UiPreviewSceneDefinition[] {\n return [\n scene(\"workspace-launch-modal\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({\n ...context,\n commands: {\n workspaceBrowse: {\n currentPath: \"/home/spencer/workspace\",\n parentPath: \"/home/spencer\",\n directories: [\n { name: \"coder-studio\", path: \"/home/spencer/workspace/coder-studio\", itemCount: 24 },\n { name: \"playground\", path: \"/home/spencer/workspace/playground\", itemCount: 6 },\n ],\n },\n workspaceOpen: workspace,\n },\n }),\n render: () => <WorkspaceLaunchModal onClose={() => {}} />,\n }),\n scene(\"command-palette\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n commandPaletteOpen: true,\n }),\n render: () => <CommandPalette />,\n }),\n scene(\"branch-quick-pick\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n branchQuickPick: {\n visible: true,\n workspaceId: workspace.id,\n inputValue: \"\",\n },\n commands: {\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feature/e2e-ui\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: worktreeStatus,\n },\n },\n }),\n render: () => <BranchQuickPick />,\n }),\n scene(\"toast-stack\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({\n ...context,\n toasts: [\n {\n id: \"toast-success-preview\",\n kind: \"success\",\n title: \"Workspace opened\",\n body: \"coder-studio is ready.\",\n createdAt: 1,\n duration: 0,\n },\n {\n id: \"toast-error-preview\",\n kind: \"error\",\n title: \"Failed to refresh provider config\",\n body: \"Retry after checking the provider settings.\",\n createdAt: 2,\n duration: 0,\n },\n ],\n }),\n render: () => <ToastContainer />,\n }),\n scene(\"footer-update-rail-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n gitStateByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n updateState: footerUpdateRailPreviewState,\n }),\n render: (context) => (\n <FooterUpdateRailPreviewShell\n className=\"footer-update-rail-review\"\n device={context.device}\n />\n ),\n }),\n scene(\"footer-update-rail-confirm-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n gitStateByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n updateState: footerUpdateRailPreviewState,\n }),\n render: (context) => <FooterUpdateRailConfirmPreview device={context.device} />,\n }),\n scene(\"workspace-icon-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n supervisorBySessionId: {\n \"session-preview-1\": supervisor,\n },\n }),\n render: (context) =>\n context.device === \"mobile\" ? (\n <div className=\"workspace-icon-review\">\n <div className=\"mobile-shell__stage\">\n <div className=\"flex items-center justify-between gap-3 p-3\">\n <MobileSupervisorBadge sessionId=\"session-preview-1\" onOpen={() => {}} />\n </div>\n <div className=\"file-tree-shell file-tree-shell--mobile\">\n <div className=\"tree-item\">\n <span className=\"tree-icon folder\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.folder.closed\" size={14} />\n </span>\n <span>packages</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon code\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.code\" size={14} />\n </span>\n <span>app.tsx</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon data\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.data\" size={14} />\n </span>\n <span>theme.json</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon doc\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.doc\" size={14} />\n </span>\n <span>README.md</span>\n </div>\n </div>\n <EmptyState\n className=\"bottom-terminal-empty\"\n description={\n <p className=\"bottom-terminal-empty-hint\">\n Review the terminal empty-state icon and surface treatment.\n </p>\n }\n icon={\n <ThemedIcon\n className=\"bottom-terminal-empty-icon\"\n semantic=\"state.emptyTerminal\"\n size={32}\n />\n }\n title={<p className=\"bottom-terminal-empty-text\">No terminal session</p>}\n />\n <MobileDock activeItem=\"files\" onSelectItem={() => {}} />\n </div>\n </div>\n ) : (\n <div className=\"workspace-icon-review\">\n <div className=\"file-tree-shell\">\n <div className=\"tree-item\">\n <span className=\"tree-icon folder\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.folder.closed\" size={14} />\n </span>\n <span>packages</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon code\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.code\" size={14} />\n </span>\n <span>app.tsx</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon data\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.data\" size={14} />\n </span>\n <span>theme.json</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon doc\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.doc\" size={14} />\n </span>\n <span>README.md</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon media\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.media\" size={14} />\n </span>\n <span>logo.png</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon file\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.default\" size={14} />\n </span>\n <span>LICENSE</span>\n </div>\n </div>\n <div className=\"git-panel\">\n <div className=\"git-row\">\n <span className=\"git-row-icon git-row-icon-staged\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"git.status.staged\" size={12} />\n </span>\n <span>staged.ts</span>\n </div>\n <div className=\"git-row\">\n <span className=\"git-row-icon git-row-icon-modified\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"git.status.modified\" size={12} />\n </span>\n <span>modified.ts</span>\n </div>\n <div className=\"git-row\">\n <span className=\"git-row-icon git-row-icon-deleted\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"git.status.deleted\" size={12} />\n </span>\n <span>deleted.ts</span>\n </div>\n <div className=\"git-row\">\n <span className=\"git-row-icon git-row-icon-untracked\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"git.status.untracked\" size={12} />\n </span>\n <span>untracked.ts</span>\n </div>\n </div>\n <EmptyState\n className=\"bottom-terminal-empty\"\n description={\n <p className=\"bottom-terminal-empty-hint\">\n Review the terminal empty-state icon and surface treatment.\n </p>\n }\n icon={\n <ThemedIcon\n className=\"bottom-terminal-empty-icon\"\n semantic=\"state.emptyTerminal\"\n size={32}\n />\n }\n title={<p className=\"bottom-terminal-empty-text\">No terminal session</p>}\n />\n </div>\n ),\n }),\n scene(\"toast-icon-review\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({\n ...context,\n toasts: [\n {\n id: \"toast-success\",\n kind: \"success\",\n title: \"Workspace opened\",\n body: \"coder-studio is ready.\",\n createdAt: 1,\n duration: 0,\n },\n {\n id: \"toast-warning\",\n kind: \"warning\",\n title: \"Unsaved config\",\n body: \"Review pending changes before continuing.\",\n createdAt: 2,\n duration: 0,\n },\n {\n id: \"toast-error\",\n kind: \"error\",\n title: \"Failed to refresh provider config\",\n body: \"Retry after checking the provider settings.\",\n createdAt: 3,\n duration: 0,\n },\n {\n id: \"toast-info\",\n kind: \"info\",\n title: \"Theme preview active\",\n body: \"Comparing icon palettes across themes.\",\n createdAt: 4,\n duration: 0,\n },\n ],\n }),\n render: () => <ToastContainer />,\n }),\n scene(\"supervisor-icon-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n supervisorBySessionId: {\n \"session-preview-1\": supervisor,\n },\n supervisorDialog: {\n open: true,\n sessionId: \"session-preview-1\",\n mode: \"edit\",\n draftObjective: supervisor.objective,\n draftEvaluatorProviderId: \"claude\",\n draftEvaluatorModel: \"\",\n draftMaxSupervisionCount: \"0\",\n draftScheduledAt: \"\",\n },\n }),\n render: (context) =>\n context.device === \"mobile\" ? (\n <MobileSupervisorSheet\n sessionId=\"session-preview-1\"\n workspaceId={workspace.id}\n onClose={() => {}}\n />\n ) : (\n <ObjectiveDialog workspaceId={workspace.id} sessionId=\"session-preview-1\" />\n ),\n }),\n scene(\"mobile-workspace-drawer\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [\n workspace,\n {\n ...workspace,\n id: \"ws-preview-2\",\n name: \"playground\",\n path: \"/home/spencer/workspace/playground\",\n },\n ],\n activeWorkspaceId: workspace.id,\n }),\n render: () => (\n <MobileWorkspaceDrawer\n activeWorkspaceId={workspace.id}\n isOpen\n workspaces={[\n workspace,\n {\n ...workspace,\n id: \"ws-preview-2\",\n name: \"playground\",\n path: \"/home/spencer/workspace/playground\",\n },\n ]}\n onClose={() => {}}\n onOpenWorkspaceLauncher={() => {}}\n />\n ),\n }),\n scene(\"mobile-files-sheet\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n commands: {\n fileTreeByWorkspaceId: {\n [workspace.id]: {\n \".\": fileTreeRoot,\n packages: fileTreePackages,\n },\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: {\n branch: \"feature/mobile-polish\",\n ahead: 2,\n behind: 0,\n staged: [{ path: \"packages/web/src/styles/components.css\", status: \"modified\" }],\n modified: [\n {\n path: \"packages/web/src/features/settings/components/settings-page.tsx\",\n status: \"modified\",\n },\n {\n path: \"packages/web/src/features/workspace/views/mobile/mobile-workspace-drawer.tsx\",\n status: \"modified\",\n },\n ],\n untracked: [{ path: \"e2e-ui/output/mobile-review.png\", status: \"untracked\" }],\n deleted: [],\n },\n },\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"feature/mobile-polish\",\n branches: [\n { name: \"feature/mobile-polish\", isCurrent: true, isRemote: false },\n { name: \"develop\", isCurrent: false, isRemote: false },\n ],\n },\n },\n terminalListByWorkspaceId: {\n [workspace.id]: [],\n },\n },\n }),\n render: () => (\n <Sheet\n title=\"Files\"\n kicker=\"Workspace\"\n fullscreen\n bodyClassName=\"mobile-sheet__body--flush mobile-sheet__body--fullscreen\"\n contentClassName=\"mobile-sheet--files\"\n onClose={() => {}}\n body={\n <MobileFilesSheet\n workspaceId={workspace.id}\n route={{ kind: \"root\" }}\n activeTab=\"files\"\n />\n }\n />\n ),\n }),\n scene(\"mobile-terminal-sheet\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n terminalMetaById: {\n \"term-preview-1\": {\n id: \"term-preview-1\",\n workspaceId: workspace.id,\n kind: \"shell\",\n alive: true,\n title: \"Workspace Shell\",\n },\n \"term-preview-2\": {\n id: \"term-preview-2\",\n workspaceId: workspace.id,\n kind: \"shell\",\n alive: true,\n title: \"Preview Runner\",\n },\n },\n terminalOutputById: {\n \"term-preview-1\": [new TextEncoder().encode(\"$ pnpm --filter @coder-studio/web test\\n\")],\n \"term-preview-2\": [new TextEncoder().encode(\"$ playwright test --project=mobile\\n\")],\n },\n commands: {\n terminalListByWorkspaceId: {\n [workspace.id]: [\n {\n id: \"term-preview-1\",\n workspaceId: workspace.id,\n kind: \"shell\",\n title: \"Workspace Shell\",\n cwd: workspace.path,\n argv: [\"zsh\"],\n cols: 120,\n rows: 28,\n alive: true,\n createdAt: 1,\n },\n {\n id: \"term-preview-2\",\n workspaceId: workspace.id,\n kind: \"shell\",\n title: \"Preview Runner\",\n cwd: workspace.path,\n argv: [\"zsh\"],\n cols: 120,\n rows: 28,\n alive: true,\n createdAt: 2,\n },\n ],\n },\n },\n }),\n render: () => {\n const MobileTerminalPreviewSheet = () => {\n const [headerAction, setHeaderAction] = useState<ReactNode>(null);\n\n return (\n <Sheet\n title=\"Terminal\"\n kicker={null}\n fullscreen\n bodyClassName=\"mobile-sheet__body--flush mobile-sheet__body--fullscreen\"\n contentClassName=\"mobile-sheet--terminal\"\n headerAction={headerAction}\n onClose={() => {}}\n body={\n <div className=\"mobile-terminal-sheet mobile-terminal-sheet--fullscreen\">\n <TerminalPanel\n chrome=\"mobile-fullscreen\"\n onMobileHeaderActionsChange={setHeaderAction}\n />\n </div>\n }\n footer={\n <WorkspaceStatusBar\n workspaceId={workspace.id}\n gitState={{\n branch: \"feature/mobile-terminal\",\n ahead: 0,\n behind: 0,\n staged: [],\n modified: [\n { path: \"packages/web/src/styles/components.css\", status: \"modified\" },\n ],\n untracked: [],\n deleted: [],\n }}\n flush\n />\n }\n />\n );\n };\n\n return <MobileTerminalPreviewSheet />;\n },\n }),\n scene(\"mobile-supervisor-sheet\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n supervisorBySessionId: {\n \"session-preview-1\": supervisor,\n },\n }),\n render: () => (\n <MobileSupervisorSheet\n sessionId=\"session-preview-1\"\n workspaceId={workspace.id}\n onClose={() => {}}\n />\n ),\n }),\n scene(\"supervisor-dialog\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n supervisorBySessionId: {\n \"session-preview-1\": supervisor,\n },\n supervisorDialog: {\n open: true,\n sessionId: \"session-preview-1\",\n mode: \"edit\",\n draftObjective: supervisor.objective,\n draftEvaluatorProviderId: \"claude\",\n },\n }),\n render: () => <ObjectiveDialog workspaceId={workspace.id} sessionId=\"session-preview-1\" />,\n }),\n scene(\"readme-desktop-hero\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildReadmeDesktopHeroSeed(context),\n render: () => <WorkspaceDesktopView />,\n }),\n scene(\"readme-desktop-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildReadmeDesktopReviewSeed(context),\n render: () => <ReadmeDesktopReviewWorkspace />,\n }),\n scene(\"readme-mobile-progress\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildReadmeMobileProgressSeed({ ...context, device: \"mobile\" }),\n render: () => <ReadmeMobileProgressWorkspace />,\n }),\n scene(\"worktree-manager\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n worktreeListByWorkspaceId: {\n [workspace.id]: worktrees,\n },\n commands: {\n worktreeListByWorkspaceId: {\n [workspace.id]: worktrees,\n },\n worktreeStatusByPath: {\n [worktrees[0].path]: worktreeStatus,\n },\n worktreeDiffByPath: {\n [worktrees[0].path]: \"diff --git a/src/app.tsx b/src/app.tsx\",\n },\n worktreeTreeByPath: {\n [worktrees[0].path]: worktreeTree,\n },\n },\n }),\n render: () => (\n <WorktreeManagerSurface workspaceId={workspace.id} openView=\"list\" onClose={() => {}} />\n ),\n }),\n scene(\"confirm-dialog-danger\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({ ...context }),\n render: () => (\n <ConfirmDialog\n open\n onOpenChange={() => {}}\n tone=\"danger\"\n title=\"Delete worktree?\"\n description=\"This removes the worktree directory from disk.\"\n cancelText=\"Cancel\"\n confirmText=\"Delete\"\n onConfirm={() => {}}\n />\n ),\n }),\n scene(\"provider-error-state\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => ({ ...context }),\n render: () => (\n <div className=\"settings-page\">\n <Notice\n tone=\"error\"\n title=\"Failed to refresh provider config\"\n message=\"Retry after checking the provider settings.\"\n action={<button className=\"settings-link\">Retry</button>}\n />\n </div>\n ),\n }),\n scene(\"file-tree-delete-confirm\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({ ...context }),\n render: () => (\n <ConfirmDialog\n open\n onOpenChange={() => {}}\n tone=\"danger\"\n title=\"Delete preview-file.ts?\"\n description=\"This permanently removes the file from the current workspace.\"\n cancelText=\"Cancel\"\n confirmText=\"Delete\"\n onConfirm={() => {}}\n />\n ),\n }),\n scene(\"empty-state\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({ ...context }),\n render: () => (\n <div className=\"welcome-card\">\n <EmptyState title={<p>No results</p>} description={<p>Try a different filter.</p>} />\n </div>\n ),\n }),\n scene(\"loading-state\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [],\n activeWorkspaceId: null,\n }),\n render: () => (\n <div className=\"workspace-resolving-shell\">\n <div className=\"workspace-resolving-card\">\n <EmptyState title={<p>Loading workspace</p>} description={<p>Please wait...</p>} />\n </div>\n </div>\n ),\n }),\n ];\n}\n","import type { ReactNode } from \"react\";\nimport type { UiPreviewSceneMetadata } from \"./scene-metadata\";\n\nexport type {\n UiPreviewCategory,\n UiPreviewSettingsSection,\n UiPreviewSource,\n} from \"./scene-metadata\";\n\nimport type {\n UiPreviewDevice,\n UiPreviewLocale,\n UiPreviewSeed,\n UiPreviewTheme,\n} from \"./preview-store\";\nimport { createDesktopReviewScenes } from \"./scenes/desktop-review-scenes\";\nimport { createPageScenes } from \"./scenes/page-scenes\";\nimport { createShowcaseScenes } from \"./scenes/showcase-scenes\";\n\nexport interface UiPreviewSceneContext {\n theme: UiPreviewTheme;\n locale: UiPreviewLocale;\n device: UiPreviewDevice;\n}\n\nexport interface UiPreviewSceneDefinition extends UiPreviewSceneMetadata {\n seed: (context: UiPreviewSceneContext) => UiPreviewSeed;\n render: (context: UiPreviewSceneContext) => ReactNode;\n router: (context: UiPreviewSceneContext) => {\n initialEntries: string[];\n path: string;\n };\n}\n\nexport const UI_PREVIEW_SCENES: UiPreviewSceneDefinition[] = [\n ...createPageScenes(),\n ...createShowcaseScenes(),\n ...createDesktopReviewScenes(),\n];\n\nexport function getUiPreviewScene(id: string): UiPreviewSceneDefinition | null {\n return UI_PREVIEW_SCENES.find((scene) => scene.id === id) ?? null;\n}\n","import { MemoryRouter, Route, Routes } from \"react-router-dom\";\nimport { EmptyState } from \"../components/ui\";\nimport { getThemeById, resolveStoredThemeId } from \"../theme\";\nimport { getUiPreviewScene, type UiPreviewSceneDefinition } from \"./catalog\";\nimport type { UiPreviewDevice, UiPreviewLocale, UiPreviewTheme } from \"./preview-store\";\n\nexport interface UiPreviewRequest {\n sceneId: string;\n theme: UiPreviewTheme;\n locale: UiPreviewLocale;\n device: UiPreviewDevice;\n context: {\n theme: UiPreviewTheme;\n locale: UiPreviewLocale;\n device: UiPreviewDevice;\n };\n scene: UiPreviewSceneDefinition | null;\n}\n\nexport function resolvePreviewRequest(search: string): UiPreviewRequest {\n const params = new URLSearchParams(search);\n const sceneId = params.get(\"scene\") ?? \"welcome\";\n const theme = resolveStoredThemeId(params.get(\"theme\"));\n const locale = params.get(\"locale\") === \"en\" ? \"en\" : \"zh\";\n const device = params.get(\"device\") === \"mobile\" ? \"mobile\" : \"desktop\";\n const scene = getUiPreviewScene(sceneId);\n\n return {\n sceneId,\n theme,\n locale,\n device,\n context: { theme, locale, device },\n scene,\n };\n}\n\nfunction UnknownScene({ sceneId }: { sceneId: string }) {\n return (\n <div className=\"welcome-container\">\n <div className=\"welcome-card\">\n <EmptyState title={<p>Unknown preview scene</p>} description={<p>{sceneId}</p>} />\n </div>\n </div>\n );\n}\n\nexport function UiPreviewApp({ request }: { request: UiPreviewRequest }) {\n document.documentElement.setAttribute(\n \"data-theme\",\n getThemeById(request.theme).documentThemeAttr\n );\n document.documentElement.setAttribute(\"lang\", request.locale === \"zh\" ? \"zh\" : \"en\");\n document.body.dataset.uiPreviewDevice = request.device;\n\n if (!request.scene) {\n return <UnknownScene sceneId={request.sceneId} />;\n }\n\n const router = request.scene.router(request.context);\n\n return (\n <MemoryRouter initialEntries={router.initialEntries}>\n <Routes>\n <Route path={router.path} element={request.scene.render(request.context)} />\n </Routes>\n </MemoryRouter>\n );\n}\n","import type {\n FileNode,\n GitBranch,\n GitCommitSummary,\n GitStatus,\n Session,\n Supervisor,\n UpdateStateView,\n Workspace,\n WorktreeInfo,\n} from \"@coder-studio/core\";\nimport { createStore, type Store } from \"jotai\";\nimport { authenticatedAtom, commandPaletteOpenAtom, localeAtom, themeAtom } from \"../atoms/app-ui\";\nimport {\n authEnabledAtom,\n connectionStatusAtom,\n type DispatchCommand,\n wsClientAtom,\n} from \"../atoms/connection\";\nimport { sessionsAtom } from \"../atoms/sessions\";\nimport {\n activeWorkspaceIdAtom,\n type WorkspaceLoadState,\n workspaceOrderAtom,\n workspacesAtom,\n workspacesLoadErrorAtom,\n workspacesLoadStateAtom,\n} from \"../atoms/workspaces\";\nimport { type PaneNode, paneLayoutAtomFamily } from \"../features/agent-panes/atoms/pane-layout\";\nimport { type Toast, toastsAtom } from \"../features/notifications\";\nimport { supervisorDialogAtom, supervisorsAtom } from \"../features/supervisor/atoms\";\nimport { terminalMetaAtomFamily } from \"../features/terminal-panel/atoms\";\nimport { updateStateAtom } from \"../features/updates/atoms\";\nimport {\n activeFilePathAtomFamily,\n branchQuickPickAtom,\n fileTreeAtomFamily,\n gitBranchListAtomFamily,\n gitDiffPreviewAtomFamily,\n gitStateAtomFamily,\n terminalPanelVisibleAtom,\n worktreeListAtomFamily,\n} from \"../features/workspace/atoms\";\nimport { resolveStoredThemeId } from \"../theme\";\n\nexport type UiPreviewTheme = string;\nexport type UiPreviewLocale = \"zh\" | \"en\";\nexport type UiPreviewDevice = \"desktop\" | \"mobile\";\n\nexport interface UiPreviewCommands {\n settingsGet?: Record<string, unknown>;\n settingsUpdate?: Record<string, unknown>;\n settingsPreviewCommandByProviderId?: Record<string, string>;\n workspaceBrowse?: {\n currentPath: string;\n parentPath: string | null;\n directories: Array<{ name: string; path: string; itemCount?: number }>;\n };\n workspaceOpen?: Workspace;\n workspaceUiStateSet?: Workspace;\n workspaceList?: Workspace[];\n sessionListByWorkspaceId?: Record<string, Session[]>;\n gitStatusByWorkspaceId?: Record<string, GitStatus>;\n gitBranchesByWorkspaceId?: Record<string, { current: string; branches: GitBranch[] }>;\n gitLogByWorkspaceId?: Record<string, { entries: GitCommitSummary[] }>;\n gitDiffByWorkspaceId?: Record<string, { diff: string }>;\n gitShowByWorkspaceId?: Record<string, { diff: string }>;\n fileTreeByWorkspaceId?: Record<string, Record<string, FileNode[]>>;\n fileSearchByWorkspaceId?: Record<string, FileNode[]>;\n worktreeListByWorkspaceId?: Record<string, WorktreeInfo[]>;\n worktreeStatusByPath?: Record<string, GitStatus>;\n worktreeDiffByPath?: Record<string, string>;\n worktreeTreeByPath?: Record<string, FileNode[]>;\n terminalListByWorkspaceId?: Record<\n string,\n Array<{\n id: string;\n workspaceId: string;\n kind: \"shell\";\n title: string;\n cwd: string;\n argv: string[];\n cols: number;\n rows: number;\n alive: boolean;\n createdAt: number;\n }>\n >;\n supervisorBySessionId?: Record<string, Supervisor>;\n}\n\nexport interface UiPreviewSeed {\n theme: UiPreviewTheme;\n locale: UiPreviewLocale;\n device: UiPreviewDevice;\n authEnabled?: boolean | null;\n authenticated?: boolean;\n connectionStatus?: \"connecting\" | \"connected\" | \"disconnected\" | \"reconnecting\" | \"rejected\";\n workspaces?: Workspace[];\n activeWorkspaceId?: string | null;\n workspacesLoadState?: WorkspaceLoadState;\n workspacesLoadError?: string | null;\n sessions?: Session[];\n paneLayoutByWorkspaceId?: Record<string, PaneNode>;\n fileTreeByWorkspaceId?: Record<string, Map<string, FileNode[]>>;\n activeFilePathByWorkspaceId?: Record<string, string | null>;\n gitStateByWorkspaceId?: Record<string, GitStatus>;\n gitBranchListByWorkspaceId?: Record<string, { current: string; branches: GitBranch[] }>;\n gitDiffPreviewByWorkspaceId?: Record<\n string,\n { path: string; diff: string; source?: \"file\" | \"commit\" }\n >;\n worktreeListByWorkspaceId?: Record<string, WorktreeInfo[]>;\n terminalMetaById?: Record<\n string,\n { id: string; workspaceId: string; kind: \"agent\" | \"shell\"; alive: boolean; title?: string }\n >;\n terminalOutputById?: Record<string, Uint8Array[]>;\n toasts?: Toast[];\n commandPaletteOpen?: boolean;\n branchQuickPick?: {\n visible: boolean;\n workspaceId?: string;\n inputValue: string;\n selectedBranch?: string;\n };\n terminalPanelVisible?: boolean;\n supervisorBySessionId?: Record<string, Supervisor>;\n supervisorDialog?: {\n open: boolean;\n sessionId: string | null;\n mode: \"enable\" | \"edit\";\n draftObjective: string;\n draftEvaluatorProviderId: \"claude\" | \"codex\";\n draftEvaluatorModel?: string;\n draftMaxSupervisionCount?: string;\n draftScheduledAt?: string;\n };\n updateState?: UpdateStateView | null;\n commands?: UiPreviewCommands;\n}\n\nfunction ok<T>(data: T) {\n return { ok: true as const, data };\n}\n\nfunction getTerminalPreviewBytes(seed: UiPreviewSeed, terminalId: string): Uint8Array {\n const chunks = seed.terminalOutputById?.[terminalId] ?? [];\n if (chunks.length === 0) {\n return new Uint8Array();\n }\n\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n const bytes = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nfunction getTerminalPreviewSeq(seed: UiPreviewSeed, terminalId: string): number {\n return getTerminalPreviewBytes(seed, terminalId).byteLength;\n}\n\nfunction err(message: string) {\n return {\n ok: false as const,\n error: { code: \"preview_missing_handler\", message },\n };\n}\n\nfunction createPreviewDispatcher(seed: UiPreviewSeed): DispatchCommand {\n return async <T>(op: string, args: unknown) => {\n const commands = seed.commands ?? {};\n\n if (op === \"settings.get\") {\n return ok((commands.settingsGet ?? {}) as T);\n }\n\n if (op === \"settings.update\") {\n return ok((commands.settingsUpdate ?? {}) as T);\n }\n\n if (op === \"settings.previewCommand\") {\n const providerId = (args as { providerId?: string })?.providerId ?? \"\";\n return ok({\n preview: commands.settingsPreviewCommandByProviderId?.[providerId] ?? \"\",\n } as unknown as T);\n }\n\n if (op === \"settings.readConfigFile\") {\n return ok({ exists: true, content: \"# preview config\\n\" } as unknown as T);\n }\n\n if (op === \"settings.writeConfigFile\") {\n return ok({ ok: true } as unknown as T);\n }\n\n if (op === \"workspace.list\") {\n return ok((commands.workspaceList ?? seed.workspaces ?? []) as T);\n }\n\n if (op === \"workspace.browse\") {\n if (!commands.workspaceBrowse) {\n return err(\"Missing workspace.browse preview handler\");\n }\n return ok(commands.workspaceBrowse as T);\n }\n\n if (op === \"workspace.open\") {\n if (!commands.workspaceOpen) {\n return err(\"Missing workspace.open preview handler\");\n }\n return ok(commands.workspaceOpen as T);\n }\n\n if (op === \"workspace.uiState.set\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n const uiState = (args as { uiState?: Workspace[\"uiState\"] })?.uiState;\n if (workspaceId && uiState?.paneLayout) {\n store.set(paneLayoutAtomFamily(workspaceId), uiState.paneLayout as PaneNode);\n }\n return ok(\n (commands.workspaceUiStateSet ?? commands.workspaceOpen ?? seed.workspaces?.[0]) as T\n );\n }\n\n if (op === \"session.list\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.sessionListByWorkspaceId?.[workspaceId] ?? []).slice() as T);\n }\n\n if (op === \"git.status\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n const value = commands.gitStatusByWorkspaceId?.[workspaceId];\n return value ? ok(value as T) : ok((seed.gitStateByWorkspaceId?.[workspaceId] ?? null) as T);\n }\n\n if (op === \"git.branches\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n const value = commands.gitBranchesByWorkspaceId?.[workspaceId];\n return value ? ok(value as T) : ok({ current: \"\", branches: [] } as unknown as T);\n }\n\n if (op === \"git.log\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.gitLogByWorkspaceId?.[workspaceId] ?? { entries: [] }) as unknown as T);\n }\n\n if (op === \"git.diff\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.gitDiffByWorkspaceId?.[workspaceId] ?? { diff: \"\" }) as unknown as T);\n }\n\n if (op === \"git.show\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.gitShowByWorkspaceId?.[workspaceId] ?? { diff: \"\" }) as unknown as T);\n }\n\n if (op === \"git.checkout\") {\n return ok({ success: true, message: \"Preview checkout\", branch: \"main\" } as unknown as T);\n }\n\n if (op === \"git.fetch\" || op === \"git.pull\" || op === \"git.push\") {\n return ok({ success: true, message: \"Preview sync\" } as unknown as T);\n }\n\n if (op === \"file.readTree\") {\n const { workspaceId = \"\", subPath } =\n (args as { workspaceId?: string; subPath?: string }) ?? {};\n const key = subPath ?? \".\";\n const children = commands.fileTreeByWorkspaceId?.[workspaceId]?.[key] ?? [];\n return ok({ path: key, children } as unknown as T);\n }\n\n if (op === \"file.search\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok({ files: commands.fileSearchByWorkspaceId?.[workspaceId] ?? [] } as unknown as T);\n }\n\n if (op === \"worktree.list\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok({\n worktrees: commands.worktreeListByWorkspaceId?.[workspaceId] ?? [],\n } as unknown as T);\n }\n\n if (op === \"worktree.status\") {\n const worktreePath = (args as { worktreePath?: string })?.worktreePath ?? \"\";\n const value = commands.worktreeStatusByPath?.[worktreePath];\n return value ? ok({ status: value } as unknown as T) : ok({ status: null } as unknown as T);\n }\n\n if (op === \"worktree.diff\") {\n const worktreePath = (args as { worktreePath?: string })?.worktreePath ?? \"\";\n return ok({ diff: commands.worktreeDiffByPath?.[worktreePath] ?? \"\" } as unknown as T);\n }\n\n if (op === \"worktree.tree\") {\n const worktreePath = (args as { worktreePath?: string })?.worktreePath ?? \"\";\n return ok({ tree: commands.worktreeTreeByPath?.[worktreePath] ?? [] } as unknown as T);\n }\n\n if (op === \"worktree.create\" || op === \"worktree.remove\") {\n return ok({ ok: true } as unknown as T);\n }\n\n if (op === \"terminal.list\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.terminalListByWorkspaceId?.[workspaceId] ?? []) as unknown as T);\n }\n\n if (op === \"terminal.create\") {\n const workspaceId =\n (args as { workspaceId?: string })?.workspaceId ?? seed.activeWorkspaceId ?? \"\";\n return ok({\n id: \"terminal-preview-created\",\n workspaceId,\n kind: \"shell\",\n title: \"Preview Terminal\",\n cwd: \"/home/spencer/workspace/coder-studio\",\n argv: [],\n cols: 120,\n rows: 32,\n alive: true,\n createdAt: 1,\n } as unknown as T);\n }\n\n if (op === \"terminal.snapshot\") {\n const terminalId = (args as { terminalId?: string })?.terminalId ?? \"\";\n const bytes = getTerminalPreviewBytes(seed, terminalId);\n return ok({\n status: \"ok\",\n transport: \"binary\",\n streamId: 1,\n size: bytes.byteLength,\n seq: getTerminalPreviewSeq(seed, terminalId),\n rows: 28,\n cols: 120,\n source: \"headless\",\n bytes,\n } as unknown as T);\n }\n\n if (op === \"terminal.replay\") {\n const terminalId = (args as { terminalId?: string })?.terminalId ?? \"\";\n const lastSeq = (args as { lastSeq?: number })?.lastSeq ?? 0;\n const fullBytes = getTerminalPreviewBytes(seed, terminalId);\n const replayBytes = fullBytes.subarray(Math.max(0, lastSeq));\n return ok({\n status: \"ok\",\n transport: \"binary\",\n streamId: 1,\n size: replayBytes.byteLength,\n seq: fullBytes.byteLength,\n bytes: replayBytes,\n } as unknown as T);\n }\n\n if (\n op === \"terminal.close\" ||\n op === \"terminal.resize\" ||\n op === \"terminal.input\" ||\n op === \"provider.runtimeStatus\" ||\n op === \"provider.install.start\" ||\n op === \"provider.install.get\" ||\n op === \"session.create\" ||\n op === \"session.stop\" ||\n op === \"session.remove\" ||\n op === \"file.create\" ||\n op === \"file.mkdir\" ||\n op === \"file.delete\" ||\n op === \"supervisor.create\" ||\n op === \"supervisor.update\" ||\n op === \"supervisor.delete\"\n ) {\n return ok({} as unknown as T);\n }\n\n if (op === \"supervisor.get\") {\n const sessionId = (args as { sessionId?: string })?.sessionId ?? \"\";\n const supervisor =\n commands.supervisorBySessionId?.[sessionId] ??\n seed.supervisorBySessionId?.[sessionId] ??\n null;\n return ok({ supervisor } as unknown as T);\n }\n\n return err(`Missing preview handler for ${op}`);\n };\n}\n\nexport function buildUiPreviewStore(seed: UiPreviewSeed): Store {\n const store = createStore();\n const dispatch = createPreviewDispatcher(seed);\n const workspaces = seed.workspaces ?? [];\n\n store.set(themeAtom, resolveStoredThemeId(seed.theme));\n store.set(localeAtom, seed.locale);\n store.set(authEnabledAtom, seed.authEnabled === undefined ? false : seed.authEnabled);\n store.set(authenticatedAtom, seed.authenticated ?? true);\n store.set(connectionStatusAtom, seed.connectionStatus ?? \"connected\");\n store.set(\n workspacesAtom,\n Object.fromEntries(workspaces.map((workspace) => [workspace.id, workspace]))\n );\n store.set(\n workspaceOrderAtom,\n workspaces.map((workspace) => workspace.id)\n );\n store.set(workspacesLoadStateAtom, seed.workspacesLoadState ?? \"ready\");\n store.set(workspacesLoadErrorAtom, seed.workspacesLoadError ?? null);\n store.set(\n activeWorkspaceIdAtom,\n seed.activeWorkspaceId === undefined ? (workspaces[0]?.id ?? null) : seed.activeWorkspaceId\n );\n store.set(\n sessionsAtom,\n Object.fromEntries((seed.sessions ?? []).map((session) => [session.id, session]))\n );\n store.set(commandPaletteOpenAtom, seed.commandPaletteOpen ?? false);\n store.set(branchQuickPickAtom, seed.branchQuickPick ?? { visible: false, inputValue: \"\" });\n store.set(terminalPanelVisibleAtom, seed.terminalPanelVisible ?? true);\n store.set(toastsAtom, seed.toasts ?? []);\n store.set(updateStateAtom, seed.updateState ?? null);\n store.set(\n supervisorDialogAtom,\n seed.supervisorDialog\n ? {\n draftEvaluatorModel: \"\",\n draftMaxSupervisionCount: \"0\",\n draftScheduledAt: \"\",\n ...seed.supervisorDialog,\n }\n : {\n open: false,\n sessionId: null,\n mode: \"enable\",\n draftObjective: \"\",\n draftEvaluatorProviderId: \"claude\",\n draftEvaluatorModel: \"\",\n draftMaxSupervisionCount: \"0\",\n draftScheduledAt: \"\",\n }\n );\n store.set(supervisorsAtom, new Map(Object.entries(seed.supervisorBySessionId ?? {})));\n store.set(wsClientAtom, {\n sendCommand: async <T>(op: string, args: unknown) => {\n const result = await dispatch<T>(op, args);\n if (!result.ok) {\n throw new Error(result.error?.message ?? `Preview command failed: ${op}`);\n }\n return result.data as T;\n },\n sendTerminalInput: async () => {},\n subscribe: () => () => {},\n connect: async () => {},\n disconnect: () => {},\n getStatus: () => \"connected\",\n } as never);\n\n for (const [workspaceId, layout] of Object.entries(seed.paneLayoutByWorkspaceId ?? {})) {\n store.set(paneLayoutAtomFamily(workspaceId), layout);\n }\n\n for (const [workspaceId, treeMap] of Object.entries(seed.fileTreeByWorkspaceId ?? {})) {\n store.set(fileTreeAtomFamily(workspaceId), treeMap);\n }\n\n for (const [workspaceId, path] of Object.entries(seed.activeFilePathByWorkspaceId ?? {})) {\n store.set(activeFilePathAtomFamily(workspaceId), path);\n }\n\n for (const [workspaceId, gitState] of Object.entries(seed.gitStateByWorkspaceId ?? {})) {\n store.set(gitStateAtomFamily(workspaceId), gitState);\n }\n\n for (const [workspaceId, branchList] of Object.entries(seed.gitBranchListByWorkspaceId ?? {})) {\n store.set(gitBranchListAtomFamily(workspaceId), {\n ...branchList,\n loading: false,\n });\n }\n\n for (const [workspaceId, preview] of Object.entries(seed.gitDiffPreviewByWorkspaceId ?? {})) {\n store.set(gitDiffPreviewAtomFamily(workspaceId), preview);\n }\n\n for (const [workspaceId, items] of Object.entries(seed.worktreeListByWorkspaceId ?? {})) {\n store.set(worktreeListAtomFamily(workspaceId), {\n items,\n loading: false,\n lastLoadedAt: 1,\n });\n }\n\n for (const [terminalId, meta] of Object.entries(seed.terminalMetaById ?? {})) {\n store.set(terminalMetaAtomFamily(terminalId), meta);\n }\n\n return store;\n}\n","import \"@vitejs/plugin-react/preamble\";\nimport { Provider } from \"jotai\";\nimport ReactDOM from \"react-dom/client\";\nimport { resolvePreviewRequest, UiPreviewApp } from \"./app\";\nimport { buildUiPreviewStore } from \"./preview-store\";\n\nimport \"@xterm/xterm/css/xterm.css\";\nimport \"../styles/fonts.css\";\nimport \"../styles/tokens.css\";\nimport \"../styles/base.css\";\nimport \"../styles/components.css\";\n\nconst request = resolvePreviewRequest(window.location.search);\nconst store = buildUiPreviewStore(\n request.scene ? request.scene.seed(request.context) : request.context\n);\nconst root = ReactDOM.createRoot(document.getElementById(\"root\") as HTMLElement);\n\nroot.render(\n <Provider store={store}>\n <UiPreviewApp request={request} />\n </Provider>\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui-preview-Cd3euuid.js","names":[],"sources":["../../src/features/workspace/views/shared/git-diff-viewer.tsx","../../src/ui-preview/scene-metadata.ts","../../src/ui-preview/scenes/desktop-review-scenes.tsx","../../src/ui-preview/scenes/page-scenes.tsx","../../src/features/supervisor/views/mobile/mobile-supervisor-badge.tsx","../../src/ui-preview/scenes/showcase-scenes.tsx","../../src/ui-preview/catalog.ts","../../src/ui-preview/app.tsx","../../src/ui-preview/preview-store.ts","../../src/ui-preview/main.tsx"],"sourcesContent":["import { X } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { useMemo } from \"react\";\nimport { EmptyState, IconButton, Tooltip } from \"../../../../components/ui\";\nimport { useTranslation } from \"../../../../lib/i18n\";\nimport { PanelHeader } from \"../../../shared/components/panel-header\";\nimport { useGitDiffViewerActions } from \"../../actions/use-git-actions\";\n\ninterface GitDiffViewerProps {\n workspaceId: string;\n onClose?: () => void;\n showCloseButton?: boolean;\n}\n\ntype DiffLineTone = \"meta\" | \"added\" | \"removed\" | \"context\";\n\ninterface DisplayLine {\n id: string;\n line: string;\n lineNumber: number;\n tone?: DiffLineTone;\n}\n\nfunction getDiffLineTone(line: string): DiffLineTone {\n if (\n line.startsWith(\"diff --git\") ||\n line.startsWith(\"index \") ||\n line.startsWith(\"--- \") ||\n line.startsWith(\"+++ \") ||\n line.startsWith(\"@@\")\n ) {\n return \"meta\";\n }\n\n if (line.startsWith(\"+\")) {\n return \"added\";\n }\n\n if (line.startsWith(\"-\")) {\n return \"removed\";\n }\n\n return \"context\";\n}\n\nexport const GitDiffViewer: FC<GitDiffViewerProps> = ({\n workspaceId,\n onClose,\n showCloseButton = true,\n}) => {\n const t = useTranslation();\n const { preview, closePreview } = useGitDiffViewerActions(workspaceId);\n const handleClose = onClose ?? closePreview;\n\n const diffLines = useMemo<DisplayLine[]>(\n () =>\n preview?.diff.split(\"\\n\").map((line, index) => ({\n id: `${index}:${line}`,\n line,\n tone: getDiffLineTone(line),\n lineNumber: index + 1,\n })) ?? [],\n [preview]\n );\n\n return (\n <div className=\"workspace-git-view\">\n <div className=\"code-editor workspace-git-editor\">\n <PanelHeader\n title={preview?.title ?? preview?.path ?? \"Select a changed file to inspect\"}\n actions={\n preview && showCloseButton ? (\n <div className=\"code-mode-toggle\">\n <Tooltip content={t(\"action.close\")}>\n <IconButton\n aria-label={t(\"action.close\")}\n className=\"code-mode-btn\"\n icon={<X size={12} />}\n onClick={handleClose}\n size=\"sm\"\n />\n </Tooltip>\n </div>\n ) : null\n }\n />\n\n <div className=\"code-editor-body\">\n {preview ? (\n <div className=\"code-lines git-diff-lines\">\n {diffLines.map((line) => (\n <div key={line.id} className={`code-line git-diff-line git-diff-line-${line.tone}`}>\n <span className=\"code-line-num\">{line.lineNumber}</span>\n <span className=\"git-diff-line-text\">{line.line || \" \"}</span>\n </div>\n ))}\n </div>\n ) : (\n <EmptyState\n className=\"git-diff-empty\"\n description={\n <p className=\"git-diff-empty-body\">\n Select a staged or modified file on the left to inspect its diff.\n </p>\n }\n title={<p className=\"git-diff-empty-title\">{t(\"label.git\")}</p>}\n />\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default GitDiffViewer;\n","import { THEME_IDS } from \"../theme\";\n\nexport type UiPreviewSceneDevice = \"desktop\" | \"mobile\";\nexport type UiPreviewSceneTheme = (typeof THEME_IDS)[number];\nexport type UiPreviewSceneLocale = \"zh\" | \"en\";\nexport type UiPreviewCategory =\n | \"page\"\n | \"modal\"\n | \"sheet\"\n | \"toast\"\n | \"empty\"\n | \"error\"\n | \"loading\";\nexport type UiPreviewSource = \"real-route\" | \"showcase\";\nexport type UiPreviewSettingsSection = \"general\" | \"appearance\" | \"providers\" | \"shortcuts\";\n\nexport interface UiPreviewSceneMetadata {\n id: string;\n title: string;\n category: UiPreviewCategory;\n source: UiPreviewSource;\n description: string;\n devices: UiPreviewSceneDevice[];\n themes: UiPreviewSceneTheme[];\n locales: UiPreviewSceneLocale[];\n capture?: {\n selector?: string;\n fullPage?: boolean;\n settingsSection?: UiPreviewSettingsSection;\n };\n}\n\nfunction allThemeIds(): UiPreviewSceneTheme[] {\n return [...THEME_IDS] as UiPreviewSceneTheme[];\n}\n\nfunction lightThemeIds(): UiPreviewSceneTheme[] {\n return THEME_IDS.filter((themeId) => themeId.endsWith(\"-light\")) as UiPreviewSceneTheme[];\n}\n\nexport const UI_PREVIEW_SCENE_METADATA: UiPreviewSceneMetadata[] = [\n {\n id: \"welcome\",\n title: \"Welcome\",\n category: \"page\",\n source: \"real-route\",\n description: \"Welcome page on the real / route under the preview harness.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".welcome-card\" },\n },\n {\n id: \"settings-general\",\n title: \"Settings / General\",\n category: \"page\",\n source: \"real-route\",\n description: \"Settings page at /settings with deterministic settings.get data.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\", settingsSection: \"general\" },\n },\n {\n id: \"settings-appearance\",\n title: \"Settings / Appearance\",\n category: \"page\",\n source: \"real-route\",\n description: \"Settings appearance section using route-backed production UI.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\", settingsSection: \"appearance\" },\n },\n {\n id: \"settings-providers\",\n title: \"Settings / Providers\",\n category: \"page\",\n source: \"real-route\",\n description: \"Settings providers section with fixed provider args.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\", settingsSection: \"providers\" },\n },\n {\n id: \"settings-shortcuts\",\n title: \"Settings / Shortcuts\",\n category: \"page\",\n source: \"real-route\",\n description: \"Settings shortcuts section with the keyboard shortcut list and category tabs.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\", settingsSection: \"shortcuts\" },\n },\n {\n id: \"settings-mobile-root\",\n title: \"Settings / Mobile Root\",\n category: \"page\",\n source: \"real-route\",\n description: \"Mobile settings root list before drilling into any subsection.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-mobile-root\" },\n },\n {\n id: \"app-loading-shell\",\n title: \"App Loading Shell\",\n category: \"loading\",\n source: \"real-route\",\n description: \"Top-level shell shown while auth state is still unresolved before routes render.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".app-loading-shell\" },\n },\n {\n id: \"workspace-desktop\",\n title: \"Workspace / Desktop\",\n category: \"page\",\n source: \"real-route\",\n description: \"Desktop workspace shell with seeded workspace, git status, and file tree.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-page\" },\n },\n {\n id: \"workspace-mobile\",\n title: \"Workspace / Mobile\",\n category: \"page\",\n source: \"real-route\",\n description: \"Mobile workspace shell with seeded workspace and no active sessions.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \"[data-testid='mobile-shell']\" },\n },\n {\n id: \"auth-preview\",\n title: \"Auth Preview\",\n category: \"page\",\n source: \"real-route\",\n description: \"Login/auth page component on the real /login route under preview harness.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".auth-card-shell\" },\n },\n {\n id: \"session-gate\",\n title: \"Session Gate\",\n category: \"error\",\n source: \"real-route\",\n description:\n \"Session gate shell shown when activation is displaced and the app requires re-entry.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".auth-card-shell\" },\n },\n {\n id: \"not-found\",\n title: \"Not Found\",\n category: \"page\",\n source: \"real-route\",\n description: \"Not found page for an unknown route path.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".welcome-card\" },\n },\n {\n id: \"workspace-load-error\",\n title: \"Workspace / Load Error\",\n category: \"error\",\n source: \"real-route\",\n description: \"Shared workspace route error shell when workspace list loading fails.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-resolving-card\" },\n },\n {\n id: \"workspace-launch-modal\",\n title: \"Workspace Launch Modal\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Workspace open modal with fixed browse/open responses.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".launch-modal, .mobile-sheet--launch\" },\n },\n {\n id: \"command-palette\",\n title: \"Command Palette\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Command palette forced open with a seeded active workspace.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".command-palette, .command-palette-sheet\" },\n },\n {\n id: \"branch-quick-pick\",\n title: \"Branch Quick Pick\",\n category: \"sheet\",\n source: \"showcase\",\n description: \"Branch picker opened via seeded branchQuickPick atom and fake git.branches data.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-select-sheet--command\" },\n },\n {\n id: \"toast-stack\",\n title: \"Toast Stack\",\n category: \"toast\",\n source: \"showcase\",\n description: \"Success and error toasts for visual review.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".toast-container\" },\n },\n {\n id: \"footer-update-rail-review\",\n title: \"Footer Update Rail Review\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"Workspace footer review with a seeded update-available rail on desktop and mobile.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".footer-update-rail-review\" },\n },\n {\n id: \"footer-update-rail-confirm-review\",\n title: \"Footer Update Rail Confirm Review\",\n category: \"modal\",\n source: \"showcase\",\n description:\n \"Workspace footer review with the confirmation dialog opened after clicking Update Now.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".modal-overlay\" },\n },\n {\n id: \"workspace-icon-review\",\n title: \"Workspace Icon Review\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"File tree, git states, terminal empty state, and mobile dock/supervisor icon surfaces for theme review.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-icon-review\" },\n },\n {\n id: \"toast-icon-review\",\n title: \"Toast Icon Review\",\n category: \"toast\",\n source: \"showcase\",\n description:\n \"Success, warning, error, and info toast icons rendered together for theme review.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".toast-container\" },\n },\n {\n id: \"supervisor-icon-review\",\n title: \"Supervisor Icon Review\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Supervisor dialog header icon and destructive callout surface review.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".supervisor-dialog, .mobile-supervisor-sheet\" },\n },\n {\n id: \"mobile-workspace-drawer\",\n title: \"Mobile Workspace Drawer\",\n category: \"sheet\",\n source: \"showcase\",\n description: \"Opened mobile workspace drawer with two example workspaces.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-workspace-drawer\" },\n },\n {\n id: \"mobile-files-sheet\",\n title: \"Mobile Files Sheet\",\n category: \"sheet\",\n source: \"showcase\",\n description: \"Static mobile files sheet chrome for screenshot comparison.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-sheet--files\" },\n },\n {\n id: \"mobile-terminal-sheet\",\n title: \"Mobile Terminal Sheet\",\n category: \"sheet\",\n source: \"showcase\",\n description:\n \"Mobile terminal fullscreen sheet with compact tool chrome and status bar for screenshot comparison.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-sheet--terminal\" },\n },\n {\n id: \"mobile-supervisor-sheet\",\n title: \"Mobile Supervisor Sheet\",\n category: \"sheet\",\n source: \"showcase\",\n description: \"Mobile supervisor sheet with a seeded supervisor state.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".mobile-supervisor-sheet\" },\n },\n {\n id: \"supervisor-dialog\",\n title: \"Supervisor Dialog\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Desktop supervisor objective dialog opened by atom seed.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".supervisor-dialog\" },\n },\n {\n id: \"readme-desktop-hero\",\n title: \"README / Desktop Hero\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"README-focused desktop workspace scene with a live agent session, supervisor summary, and shell verification terminal.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-page\" },\n },\n {\n id: \"readme-desktop-review\",\n title: \"README / Desktop Review\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"README-focused desktop scene showing git review workflow with changed files, history, and an open diff.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-page\" },\n },\n {\n id: \"readme-mobile-progress\",\n title: \"README / Mobile Progress\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"README-focused mobile scene showing an active session with supervisor continuity and branch status.\",\n devices: [\"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \"[data-testid='mobile-shell']\" },\n },\n {\n id: \"workspace-topbar-review\",\n title: \"Workspace / Topbar Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop topbar chrome review with seeded workspaces and quick actions.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--topbar\" },\n },\n {\n id: \"workspace-sidebar-files-review\",\n title: \"Workspace / Sidebar Files Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop file tree sidebar review with seeded search and file hierarchy.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--sidebar\" },\n },\n {\n id: \"workspace-sidebar-git-review\",\n title: \"Workspace / Sidebar Git Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop git sidebar review with seeded status, history, and worktrees.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--sidebar\" },\n },\n {\n id: \"workspace-editor-review\",\n title: \"Workspace / Editor Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop editor review with code chrome, dirty state, and static content density.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--editor\" },\n },\n {\n id: \"workspace-diff-review\",\n title: \"Workspace / Diff Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop diff review with populated git preview lines and editor-surface chrome.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--diff\" },\n },\n {\n id: \"workspace-terminal-empty-review\",\n title: \"Workspace / Terminal Empty Review\",\n category: \"empty\",\n source: \"showcase\",\n description: \"Desktop terminal empty state review for bottom panel density and hierarchy.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--terminal\" },\n },\n {\n id: \"settings-density-review\",\n title: \"Settings / Density Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop settings page review for spacing, grouping, and information density.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\" },\n },\n {\n id: \"settings-light-theme-review\",\n title: \"Settings / Light Theme Review\",\n category: \"page\",\n source: \"showcase\",\n description:\n \"Desktop settings review constrained to light themes for surface hierarchy checks.\",\n devices: [\"desktop\"],\n themes: lightThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page\" },\n },\n {\n id: \"desktop-overlay-review\",\n title: \"Desktop / Overlay Review\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Desktop overlay comparison for command palette, launcher, and worktree manager.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-grid\" },\n },\n {\n id: \"desktop-statusbar-review\",\n title: \"Desktop / Status Bar Review\",\n category: \"page\",\n source: \"showcase\",\n description: \"Desktop status bar review with seeded branch and file-change state.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".desktop-review-card--statusbar\" },\n },\n {\n id: \"worktree-manager\",\n title: \"Worktree Manager\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Worktree manager surface with seeded worktree list, status, diff, and tree.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".worktree-manager-surface, .mobile-sheet--worktree\" },\n },\n {\n id: \"confirm-dialog-danger\",\n title: \"Confirm Dialog / Danger\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Generic destructive confirm dialog for screenshot review.\",\n devices: [\"desktop\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".modal-card\" },\n },\n {\n id: \"provider-error-state\",\n title: \"Provider Error State\",\n category: \"error\",\n source: \"showcase\",\n description: \"Inline settings error state for provider/config failures.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".settings-page__notice\" },\n },\n {\n id: \"file-tree-delete-confirm\",\n title: \"File Tree / Delete Confirm\",\n category: \"modal\",\n source: \"showcase\",\n description: \"Shared destructive confirm dialog used by the file tree when deleting a file.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".modal-card\" },\n },\n {\n id: \"empty-state\",\n title: \"Empty State\",\n category: \"empty\",\n source: \"showcase\",\n description: \"Shared empty-state shell.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".welcome-card\" },\n },\n {\n id: \"loading-state\",\n title: \"Loading State\",\n category: \"loading\",\n source: \"showcase\",\n description: \"Workspace resolving/loading shell.\",\n devices: [\"desktop\", \"mobile\"],\n themes: allThemeIds(),\n locales: [\"zh\", \"en\"],\n capture: { selector: \".workspace-resolving-card\" },\n },\n];\n\nconst UI_PREVIEW_SCENE_METADATA_MAP = new Map(\n UI_PREVIEW_SCENE_METADATA.map((scene) => [scene.id, scene])\n);\n\nexport function getUiPreviewSceneMetadata(id: string): UiPreviewSceneMetadata | null {\n return UI_PREVIEW_SCENE_METADATA_MAP.get(id) ?? null;\n}\n","import type {\n FileNode,\n GitCommitSummary,\n GitStatus,\n Workspace,\n WorktreeInfo,\n} from \"@coder-studio/core\";\nimport { CommandPalette } from \"../../features/command-palette\";\nimport { SettingsPage } from \"../../features/settings\";\nimport { TerminalPanel } from \"../../features/terminal-panel\";\nimport { TopBar } from \"../../features/topbar\";\nimport { FileTreePanel } from \"../../features/workspace/views/shared/file-tree-panel\";\nimport { GitDiffViewer } from \"../../features/workspace/views/shared/git-diff-viewer\";\nimport { GitPanel } from \"../../features/workspace/views/shared/git-panel\";\nimport { WorkspaceLaunchModal } from \"../../features/workspace/views/shared/workspace-launch-modal\";\nimport { WorkspaceStatusBar } from \"../../features/workspace/views/shared/workspace-status-bar\";\nimport { WorktreeManagerSurface } from \"../../features/workspace/views/shared/worktree-manager-surface\";\nimport type { UiPreviewSceneDefinition } from \"../catalog\";\nimport { getUiPreviewSceneMetadata } from \"../scene-metadata\";\n\nconst workspace: Workspace = {\n id: \"ws-review\",\n name: \"coder-studio\",\n path: \"/home/spencer/workspace/coder-studio\",\n targetRuntime: \"native\",\n openedAt: 1,\n lastActiveAt: 1,\n uiState: {\n leftPanelWidth: 280,\n bottomPanelHeight: 220,\n focusMode: false,\n activeSessionId: undefined,\n paneLayout: { id: \"root\", type: \"leaf\" },\n },\n};\n\nconst gitStatus: GitStatus = {\n branch: \"main\",\n ahead: 1,\n behind: 0,\n staged: [{ path: \"packages/web/src/styles/tokens.css\", status: \"modified\" }],\n modified: [\n { path: \"packages/web/src/styles/components.css\", status: \"modified\" },\n { path: \"packages/web/src/ui-preview/scenes/desktop-review-scenes.tsx\", status: \"modified\" },\n ],\n untracked: [\n { path: \"e2e-ui/output/screenshots/page/workspace-topbar-review.png\", status: \"untracked\" },\n ],\n deleted: [],\n};\n\nconst gitHistory: GitCommitSummary[] = [\n {\n sha: \"8f5f7d54d9f8b7f08f483699f2f16c3c442f0a11\",\n shortSha: \"8f5f7d5\",\n subject: \"style: tighten workspace desktop chrome\",\n authorName: \"Spencer\",\n authoredAt: 1715731200000,\n },\n {\n sha: \"f1c44d42d2b8ef3c83bb8aeeb0898422bf94b31c\",\n shortSha: \"f1c44d4\",\n subject: \"test: add ui preview desktop review scenes\",\n authorName: \"Spencer\",\n authoredAt: 1715644800000,\n },\n];\n\nconst worktrees: WorktreeInfo[] = [\n {\n name: \"main\",\n path: \"/home/spencer/workspace/coder-studio\",\n branch: \"main\",\n commit: \"8f5f7d5\",\n status: \"clean\",\n },\n {\n name: \"feat-pc-style-polish\",\n path: \"/home/spencer/workspace/coder-studio/.worktrees/feat-pc-style-polish\",\n branch: \"feat/pc-style-polish\",\n commit: \"f1c44d4\",\n status: \"dirty\",\n },\n];\n\nconst worktreeStatusByPath: Record<string, GitStatus> = {\n [worktrees[1].path]: gitStatus,\n};\n\nconst worktreeTreeByPath: Record<string, FileNode[]> = {\n [worktrees[1].path]: [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"docs\", path: \"docs\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n ],\n};\n\nconst rootTree: FileNode[] = [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"docs\", path: \"docs\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n];\n\nconst packagesTree: FileNode[] = [\n { name: \"web\", path: \"packages/web\", kind: \"dir\" },\n { name: \"core\", path: \"packages/core\", kind: \"dir\" },\n];\n\nconst webTree: FileNode[] = [\n { name: \"src\", path: \"packages/web/src\", kind: \"dir\" },\n { name: \"package.json\", path: \"packages/web/package.json\", kind: \"file\" },\n];\n\nconst srcTree: FileNode[] = [\n { name: \"styles\", path: \"packages/web/src/styles\", kind: \"dir\" },\n { name: \"ui-preview\", path: \"packages/web/src/ui-preview\", kind: \"dir\" },\n { name: \"app.tsx\", path: \"packages/web/src/app.tsx\", kind: \"file\" },\n];\n\nconst searchResults: FileNode[] = [\n { name: \"components.css\", path: \"packages/web/src/styles/components.css\", kind: \"file\" },\n { name: \"tokens.css\", path: \"packages/web/src/styles/tokens.css\", kind: \"file\" },\n];\n\nconst editorReviewLines = [\n \"const headerTitle = isMobile\",\n ' ? t(shouldShowMobileRoot ? \"settings.title\" : activeSectionMeta.labelKey)',\n ' : t(\"settings.title\");',\n \"\",\n \"return (\",\n ' <div className={`settings-page ${isMobile ? \"settings-page--mobile\" : \"\"}`}>',\n ' <header className=\"settings-header\">',\n \" <PageHeader\",\n \" ...\",\n];\n\nfunction scene(\n id: string,\n config: Pick<UiPreviewSceneDefinition, \"router\" | \"seed\" | \"render\">\n): UiPreviewSceneDefinition {\n const metadata = getUiPreviewSceneMetadata(id);\n if (!metadata) {\n throw new Error(`Missing UI preview metadata for ${id}`);\n }\n\n return {\n ...metadata,\n ...config,\n };\n}\n\nfunction buildWorkspaceSeed(context: {\n theme: string;\n locale: \"zh\" | \"en\";\n device: \"desktop\" | \"mobile\";\n}) {\n return {\n ...context,\n workspaces: [\n workspace,\n {\n ...workspace,\n id: \"ws-review-2\",\n name: \"playground\",\n path: \"/home/spencer/workspace/playground\",\n },\n ],\n activeWorkspaceId: workspace.id,\n fileTreeByWorkspaceId: {\n [workspace.id]: new Map<string, FileNode[]>([\n [\".\", rootTree],\n [\"packages\", packagesTree],\n [\"packages/web\", webTree],\n [\"packages/web/src\", srcTree],\n ]),\n },\n gitStateByWorkspaceId: {\n [workspace.id]: gitStatus,\n },\n gitBranchListByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feat/pc-style-polish\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n worktreeListByWorkspaceId: {\n [workspace.id]: worktrees,\n },\n commands: {\n workspaceList: [workspace],\n fileTreeByWorkspaceId: {\n [workspace.id]: {\n \".\": rootTree,\n packages: packagesTree,\n \"packages/web\": webTree,\n \"packages/web/src\": srcTree,\n },\n },\n fileSearchByWorkspaceId: {\n [workspace.id]: searchResults,\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: gitStatus,\n },\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feat/pc-style-polish\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n gitLogByWorkspaceId: {\n [workspace.id]: { entries: gitHistory },\n },\n gitDiffByWorkspaceId: {\n [workspace.id]: {\n diff: \"@@ preview diff\\n- background: #11181f;\\n+ background: var(--bg-elevated);\",\n },\n },\n gitShowByWorkspaceId: {\n [workspace.id]: { diff: \"@@ preview commit diff\\n+ register desktop review scenes\" },\n },\n worktreeListByWorkspaceId: {\n [workspace.id]: worktrees,\n },\n worktreeStatusByPath,\n worktreeDiffByPath: {\n [worktrees[1].path]: \"@@ worktree diff\\n+ packages/web/src/styles/components.css\",\n },\n worktreeTreeByPath,\n terminalListByWorkspaceId: {\n [workspace.id]: [],\n },\n },\n };\n}\n\nfunction DesktopReviewShell({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <div className={className ? `desktop-review-shell ${className}` : \"desktop-review-shell\"}>\n {children}\n </div>\n );\n}\n\nfunction DesktopEditorReviewSurface() {\n return (\n <div className=\"workspace-git-view\">\n <div className=\"code-editor workspace-git-editor\">\n <div className=\"code-editor-header\">\n <span className=\"code-file-path\">\n packages/web/src/features/settings/components/settings-page.tsx\n <span className=\"dirty-indicator\">*</span>\n </span>\n <div className=\"code-mode-toggle\">\n <button type=\"button\" className=\"code-mode-btn\" aria-label=\"Save file\" disabled>\n Save\n </button>\n <button\n type=\"button\"\n className=\"code-mode-btn active\"\n aria-label=\"Preview desktop header\"\n >\n Preview\n </button>\n </div>\n </div>\n <div className=\"code-editor-body\">\n <div className=\"code-lines\">\n {editorReviewLines.map((line, index) => (\n <div key={`${index}:${line}`} className=\"code-line\">\n <span className=\"code-line-num\">{index + 1}</span>\n <span className=\"git-diff-line-text\">{line || \" \"}</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function createDesktopReviewScenes(): UiPreviewSceneDefinition[] {\n return [\n scene(\"workspace-topbar-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--topbar\">\n <TopBar />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-sidebar-files-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--sidebar\">\n <FileTreePanel workspaceId={workspace.id} variant=\"desktop\" />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-sidebar-git-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--sidebar\">\n <GitPanel workspaceId={workspace.id} variant=\"desktop\" />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-editor-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--editor\">\n <DesktopEditorReviewSurface />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-diff-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...buildWorkspaceSeed(context),\n gitDiffPreviewByWorkspaceId: {\n [workspace.id]: {\n path: \"packages/web/src/styles/components.css\",\n diff: [\n \"@@ workspace shell\",\n \"- background: var(--bg-surface);\",\n \"+ background: var(--bg-elevated);\",\n \"+ border-radius: var(--radius-xl);\",\n ].join(\"\\n\"),\n source: \"file\",\n },\n },\n }),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--diff\">\n <GitDiffViewer workspaceId={workspace.id} showCloseButton={false} />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"workspace-terminal-empty-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--terminal\">\n <TerminalPanel />\n </div>\n </DesktopReviewShell>\n ),\n }),\n scene(\"settings-density-review\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => ({\n ...buildWorkspaceSeed(context),\n commands: {\n ...buildWorkspaceSeed(context).commands,\n settingsGet: {\n \"notifications.enabled\": true,\n \"notifications.soundEnabled\": true,\n \"supervisor.evaluationTimeoutSec\": 600,\n \"appearance.locale\": context.locale,\n \"appearance.themeId\": context.theme,\n \"appearance.terminalRenderer\": \"standard\",\n \"providers.claude.additionalArgs\": [\"--verbose\"],\n \"providers.codex.additionalArgs\": [\"--sandbox\", \"workspace-write\"],\n },\n settingsUpdate: {},\n settingsPreviewCommandByProviderId: {\n claude: \"claude --verbose\",\n codex: \"codex --sandbox workspace-write\",\n },\n },\n }),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-light-theme-review\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => ({\n ...buildWorkspaceSeed(context),\n commands: {\n ...buildWorkspaceSeed(context).commands,\n settingsGet: {\n \"notifications.enabled\": true,\n \"notifications.soundEnabled\": true,\n \"supervisor.evaluationTimeoutSec\": 600,\n \"appearance.locale\": context.locale,\n \"appearance.themeId\": context.theme,\n \"appearance.terminalRenderer\": \"standard\",\n \"providers.claude.additionalArgs\": [\"--verbose\"],\n \"providers.codex.additionalArgs\": [\"--sandbox\", \"workspace-write\"],\n },\n settingsUpdate: {},\n settingsPreviewCommandByProviderId: {\n claude: \"claude --verbose\",\n codex: \"codex --sandbox workspace-write\",\n },\n },\n }),\n render: () => <SettingsPage />,\n }),\n scene(\"desktop-overlay-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...buildWorkspaceSeed(context),\n commandPaletteOpen: true,\n commands: {\n ...buildWorkspaceSeed(context).commands,\n workspaceBrowse: {\n currentPath: \"/home/spencer/workspace\",\n parentPath: \"/home/spencer\",\n directories: [\n { name: \"coder-studio\", path: \"/home/spencer/workspace/coder-studio\", itemCount: 24 },\n { name: \"playground\", path: \"/home/spencer/workspace/playground\", itemCount: 6 },\n ],\n },\n workspaceOpen: workspace,\n },\n }),\n render: () => (\n <div className=\"desktop-review-grid\">\n <div className=\"desktop-review-card\">\n <CommandPalette />\n </div>\n <div className=\"desktop-review-card\">\n <WorkspaceLaunchModal onClose={() => {}} />\n </div>\n <div className=\"desktop-review-card desktop-review-card--worktree\">\n {/* Review-only inline preview: this remains a non-portaled inspection surface, not a product overlay. */}\n <div className=\"desktop-review-embedded-worktree\">\n <WorktreeManagerSurface\n desktopPreviewInline\n workspaceId={workspace.id}\n openView=\"list\"\n onClose={() => {}}\n />\n </div>\n </div>\n </div>\n ),\n }),\n scene(\"desktop-statusbar-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <DesktopReviewShell>\n <div className=\"desktop-review-card desktop-review-card--statusbar\">\n <WorkspaceStatusBar align=\"start\" gitState={gitStatus} workspaceId={workspace.id} />\n </div>\n </DesktopReviewShell>\n ),\n }),\n ];\n}\n","import type { FileNode, GitStatus, Session, Workspace } from \"@coder-studio/core\";\nimport { LoginPage } from \"../../features/auth\";\nimport { SessionGatePage } from \"../../features/auth/session-gate\";\nimport { NotFoundPage } from \"../../features/not-found\";\nimport { SettingsPage } from \"../../features/settings\";\nimport { WelcomePage } from \"../../features/welcome\";\nimport { WorkspaceDesktopView } from \"../../features/workspace/views/desktop/workspace-desktop-view\";\nimport { WorkspaceMobileView } from \"../../features/workspace/views/mobile/workspace-mobile-view\";\nimport { WorkspaceEmptyState } from \"../../features/workspace/views/shared/workspace-empty-state\";\nimport { WorkspaceRouteGate } from \"../../features/workspace/views/shared/workspace-route-gate\";\nimport { DesktopShell } from \"../../shells/desktop-shell\";\nimport { MobileShell } from \"../../shells/mobile-shell\";\nimport type { UiPreviewSceneContext, UiPreviewSceneDefinition } from \"../catalog\";\nimport { getUiPreviewSceneMetadata } from \"../scene-metadata\";\n\nconst workspace: Workspace = {\n id: \"ws-preview\",\n name: \"coder-studio\",\n path: \"/home/spencer/workspace/coder-studio\",\n targetRuntime: \"native\",\n openedAt: 1,\n lastActiveAt: 1,\n uiState: {\n leftPanelWidth: 280,\n bottomPanelHeight: 220,\n focusMode: false,\n paneLayout: { id: \"root\", type: \"leaf\" },\n },\n};\n\nconst gitStatus: GitStatus = {\n branch: \"main\",\n ahead: 0,\n behind: 0,\n staged: [],\n modified: [{ path: \"packages/web/src/app.tsx\", status: \"modified\" }],\n untracked: [{ path: \"e2e-ui/scenes/index.ts\", status: \"untracked\" }],\n deleted: [],\n};\n\nconst fileTreeMap = new Map<string, FileNode[]>();\nfileTreeMap.set(\".\", [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"e2e-ui\", path: \"e2e-ui\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n]);\n\nfunction buildSettingsSeed(context: UiPreviewSceneContext) {\n return {\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n commands: {\n settingsGet: {\n \"notifications.enabled\": true,\n \"notifications.soundEnabled\": true,\n \"supervisor.evaluationTimeoutSec\": 600,\n \"appearance.locale\": context.locale,\n \"appearance.themeId\": context.theme,\n \"appearance.terminalRenderer\": \"standard\",\n \"providers.claude.additionalArgs\": [\"--verbose\"],\n \"providers.codex.additionalArgs\": [\"--sandbox\", \"workspace-write\"],\n },\n settingsUpdate: {},\n settingsPreviewCommandByProviderId: {\n claude: \"claude --verbose\",\n codex: \"codex --sandbox workspace-write\",\n },\n },\n };\n}\n\nfunction buildWorkspaceSeed(context: UiPreviewSceneContext, sessions: Session[] = []) {\n return {\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n sessions,\n paneLayoutByWorkspaceId: {\n [workspace.id]: { id: \"root\", type: \"leaf\" },\n },\n fileTreeByWorkspaceId: {\n [workspace.id]: fileTreeMap,\n },\n gitStateByWorkspaceId: {\n [workspace.id]: gitStatus,\n },\n gitBranchListByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feature/e2e-ui\", isCurrent: false, isRemote: false },\n ],\n },\n },\n worktreeListByWorkspaceId: {\n [workspace.id]: [],\n },\n commands: {\n workspaceList: [workspace],\n sessionListByWorkspaceId: { [workspace.id]: sessions },\n gitStatusByWorkspaceId: { [workspace.id]: gitStatus },\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feature/e2e-ui\", isCurrent: false, isRemote: false },\n ],\n },\n },\n fileTreeByWorkspaceId: {\n [workspace.id]: {\n \".\": fileTreeMap.get(\".\") ?? [],\n },\n },\n worktreeListByWorkspaceId: {\n [workspace.id]: [],\n },\n terminalListByWorkspaceId: {\n [workspace.id]: [],\n },\n },\n };\n}\n\nfunction scene(\n id: string,\n config: Pick<UiPreviewSceneDefinition, \"router\" | \"seed\" | \"render\">\n): UiPreviewSceneDefinition {\n const metadata = getUiPreviewSceneMetadata(id);\n if (!metadata) {\n throw new Error(`Missing UI preview metadata for ${id}`);\n }\n\n return {\n ...metadata,\n ...config,\n };\n}\n\nexport function createPageScenes(): UiPreviewSceneDefinition[] {\n return [\n scene(\"welcome\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({ ...context }),\n render: () => <WelcomePage />,\n }),\n scene(\"settings-general\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed(context),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-appearance\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed(context),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-providers\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed(context),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-shortcuts\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed(context),\n render: () => <SettingsPage />,\n }),\n scene(\"settings-mobile-root\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => buildSettingsSeed({ ...context, device: \"mobile\" }),\n render: () => <SettingsPage />,\n }),\n scene(\"app-loading-shell\", {\n router: () => ({ initialEntries: [\"/\"], path: \"*\" }),\n seed: (context) => ({\n ...context,\n authEnabled: null,\n authenticated: false,\n connectionStatus: \"connecting\",\n workspaces: [],\n activeWorkspaceId: null,\n workspacesLoadState: \"idle\",\n }),\n render: (context) => (context.device === \"mobile\" ? <MobileShell /> : <DesktopShell />),\n }),\n scene(\"workspace-desktop\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <WorkspaceRouteGate>\n <WorkspaceDesktopView />\n </WorkspaceRouteGate>\n ),\n }),\n scene(\"workspace-mobile\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildWorkspaceSeed(context),\n render: () => (\n <WorkspaceRouteGate>\n <WorkspaceMobileView />\n </WorkspaceRouteGate>\n ),\n }),\n scene(\"auth-preview\", {\n router: () => ({ initialEntries: [\"/login\"], path: \"/login\" }),\n seed: (context) => ({\n ...context,\n authEnabled: true,\n authenticated: false,\n }),\n render: () => <LoginPage />,\n }),\n scene(\"session-gate\", {\n router: () => ({ initialEntries: [\"/session-gate\"], path: \"/session-gate\" }),\n seed: (context) => ({\n ...context,\n authEnabled: false,\n authenticated: false,\n }),\n render: () => <SessionGatePage />,\n }),\n scene(\"not-found\", {\n router: () => ({ initialEntries: [\"/preview-missing\"], path: \"*\" }),\n seed: (context) => ({ ...context }),\n render: () => <NotFoundPage />,\n }),\n scene(\"workspace-load-error\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n authEnabled: false,\n authenticated: true,\n workspaces: [],\n activeWorkspaceId: null,\n workspacesLoadState: \"error\",\n workspacesLoadError: \"Preview workspace load failure\",\n }),\n render: () => (\n <WorkspaceRouteGate>\n <WorkspaceEmptyState />\n </WorkspaceRouteGate>\n ),\n }),\n ];\n}\n","import type { SupervisorState } from \"@coder-studio/core\";\nimport { useAtomValue } from \"jotai\";\nimport { useMemo } from \"react\";\nimport { ThemedIcon } from \"../../../../components/ui\";\nimport { useTranslation } from \"../../../../lib/i18n\";\nimport { supervisorsAtom } from \"../../atoms\";\n\ninterface MobileSupervisorBadgeProps {\n sessionId: string | null;\n onOpen: () => void;\n}\n\nexport function MobileSupervisorBadge({ sessionId, onOpen }: MobileSupervisorBadgeProps) {\n const supervisors = useAtomValue(supervisorsAtom);\n const t = useTranslation();\n\n const copy = useMemo(() => {\n if (!sessionId) {\n return null;\n }\n\n const supervisor = supervisors.get(sessionId);\n if (!supervisor) {\n return {\n state: \"inactive\" as SupervisorState,\n label: t(\"supervisor.title\"),\n };\n }\n\n return {\n state: supervisor.state,\n label: t(\"supervisor.title\"),\n };\n }, [sessionId, supervisors, t]);\n\n if (!copy) {\n return null;\n }\n\n return (\n <button\n type=\"button\"\n className={`mobile-supervisor-badge mobile-supervisor-badge--${copy.state}`}\n aria-label={t(\"mobile.supervisor.open_sheet\")}\n onClick={onOpen}\n >\n <span className=\"mobile-supervisor-badge__icon\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"supervisor.entry\" size={13} />\n </span>\n <span className=\"mobile-supervisor-badge__label\">{copy.label}</span>\n </button>\n );\n}\n","import type {\n FileNode,\n GitStatus,\n Supervisor,\n UpdateStateView,\n Workspace,\n WorktreeInfo,\n} from \"@coder-studio/core\";\nimport { type CSSProperties, type ReactNode, useState } from \"react\";\nimport { ConfirmDialog, EmptyState, Notice, Sheet, ThemedIcon } from \"../../components/ui\";\nimport { SessionCard } from \"../../features/agent-panes/views/shared/session-card\";\nimport { CommandPalette } from \"../../features/command-palette\";\nimport { ToastContainer } from \"../../features/notifications\";\nimport { MobileSupervisorBadge } from \"../../features/supervisor/views/mobile/mobile-supervisor-badge\";\nimport { MobileSupervisorSheet } from \"../../features/supervisor/views/mobile/mobile-supervisor-sheet\";\nimport { ObjectiveDialog } from \"../../features/supervisor/views/shared/objective-dialog\";\nimport { SupervisorCard } from \"../../features/supervisor/views/shared/supervisor-card\";\nimport { TerminalPanel } from \"../../features/terminal-panel\";\nimport { TopBar } from \"../../features/topbar\";\nimport { WorkspaceDesktopView } from \"../../features/workspace/views/desktop/workspace-desktop-view\";\nimport { MobileDock } from \"../../features/workspace/views/mobile/mobile-dock\";\nimport { MobileFilesSheet } from \"../../features/workspace/views/mobile/mobile-files-sheet\";\nimport { MobileTopBar } from \"../../features/workspace/views/mobile/mobile-topbar\";\nimport { MobileWorkspaceDrawer } from \"../../features/workspace/views/mobile/mobile-workspace-drawer\";\nimport { BranchQuickPick } from \"../../features/workspace/views/shared/branch-quick-pick\";\nimport { GitDiffViewer } from \"../../features/workspace/views/shared/git-diff-viewer\";\nimport { GitPanel } from \"../../features/workspace/views/shared/git-panel\";\nimport { WorkspaceLaunchModal } from \"../../features/workspace/views/shared/workspace-launch-modal\";\nimport { WorkspaceStatusBar } from \"../../features/workspace/views/shared/workspace-status-bar\";\nimport { WorktreeManagerSurface } from \"../../features/workspace/views/shared/worktree-manager-surface\";\nimport { useTranslation } from \"../../lib/i18n\";\nimport type { UiPreviewSceneDefinition } from \"../catalog\";\nimport { getUiPreviewSceneMetadata } from \"../scene-metadata\";\n\nconst workspace: Workspace = {\n id: \"ws-preview\",\n name: \"coder-studio\",\n path: \"/home/spencer/workspace/coder-studio\",\n targetRuntime: \"native\",\n openedAt: 1,\n lastActiveAt: 1,\n uiState: {\n leftPanelWidth: 280,\n bottomPanelHeight: 220,\n focusMode: false,\n activeSessionId: \"session-preview-1\",\n paneLayout: { id: \"root\", type: \"leaf\" },\n },\n};\n\nconst supervisor: Supervisor = {\n id: \"sup-preview-1\",\n sessionId: \"session-preview-1\",\n workspaceId: \"ws-preview\",\n state: \"idle\",\n targetId: \"target-preview-1\",\n objective: \"Review UI regressions before shipping\",\n evaluatorProviderId: \"claude\",\n maxSupervisionCount: 0,\n completedSupervisionCount: 0,\n currentTargetMemory: {\n targetId: \"target-preview-1\",\n decompositionGenerated: true,\n decompositionMode: \"stage\",\n items: [\n {\n id: \"stage-1\",\n kind: \"stage\",\n title: \"Audit compact strip density\",\n objective: \"Review density regressions in the compact strip\",\n deliverable: \"A verified density audit\",\n acceptanceCriteria: [\"Density issues are identified\"],\n status: \"done\",\n },\n {\n id: \"stage-2\",\n kind: \"stage\",\n title: \"Move memory into expandable detail\",\n objective: \"Expose target memory without bloating the strip\",\n deliverable: \"A compact card with explicit decomposition detail\",\n acceptanceCriteria: [\"Decomposition is visible without expanding layout noise\"],\n status: \"in_progress\",\n },\n {\n id: \"stage-3\",\n kind: \"stage\",\n title: \"Validate preview coverage across themes\",\n objective: \"Ensure preview coverage is representative\",\n deliverable: \"A validated preview pass\",\n acceptanceCriteria: [\"Preview coverage is confirmed\"],\n status: \"pending\",\n },\n ],\n activeItemId: \"stage-2\",\n progressSummary: \"Compact strip restored; preview coverage still under review.\",\n stalledCount: 0,\n updatedAt: 1,\n },\n recentTargetCycles: [\n {\n cycleId: \"target-cycle-preview-1\",\n targetId: \"target-preview-1\",\n startedAt: 1,\n completedAt: 2,\n result: \"continue\",\n reason: \"Keep the strip compact and move detailed memory into an explicit disclosure.\",\n },\n ],\n createdAt: 1,\n updatedAt: 1,\n};\n\nconst worktrees: WorktreeInfo[] = [\n {\n name: \"feature/e2e-ui\",\n path: \"/home/spencer/workspace/coder-studio-feature-e2e-ui\",\n branch: \"feature/e2e-ui\",\n commit: \"abc1234\",\n status: \"dirty\",\n },\n];\n\nconst worktreeStatus: GitStatus = {\n branch: \"feature/e2e-ui\",\n ahead: 1,\n behind: 0,\n staged: [],\n modified: [{ path: \"packages/web/src/ui-preview/app.tsx\", status: \"modified\" }],\n untracked: [],\n deleted: [],\n};\n\nconst worktreeTree: FileNode[] = [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"e2e-ui\", path: \"e2e-ui\", kind: \"dir\" },\n];\n\nconst footerUpdateRailPreviewState: UpdateStateView = {\n version: 1,\n currentVersion: \"0.4.0\",\n latestVersion: \"0.5.0\",\n availability: \"update_available\",\n updateStatus: \"idle\",\n lastCheckedAt: 1715731200000,\n targetVersion: null,\n startedAt: null,\n finishedAt: null,\n requiresManualStep: false,\n manualCommand: null,\n errorSummary: null,\n supported: true,\n installKind: \"global_npm\",\n unsupportedReason: null,\n};\n\nconst fileTreeRoot: FileNode[] = [\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n { name: \"pnpm-workspace.yaml\", path: \"pnpm-workspace.yaml\", kind: \"file\" },\n];\n\nconst fileTreePackages: FileNode[] = [\n { name: \"web\", path: \"packages/web\", kind: \"dir\" },\n { name: \"core\", path: \"packages/core\", kind: \"dir\" },\n];\n\nconst readmeDesktopGitStatus: GitStatus = {\n branch: \"feature/readme-refresh\",\n ahead: 2,\n behind: 0,\n headSha: \"97cc218f926d61bbeca0d6a8bd4b62582cbf93ea\",\n headShortSha: \"97cc218\",\n headSubject: \"feat: stage readme screenshot refresh scenes\",\n staged: [{ path: \"README.md\", status: \"modified\" }],\n modified: [\n { path: \"packages/web/src/ui-preview/scenes/showcase-scenes.tsx\", status: \"modified\" },\n { path: \"docs/help/assets/screenshot-desktop-workspace-full.png\", status: \"modified\" },\n ],\n untracked: [{ path: \"docs/help/assets/screenshot-mobile-progress.png\", status: \"untracked\" }],\n deleted: [],\n};\n\nconst readmeDesktopHistory = [\n {\n sha: \"97cc218f926d61bbeca0d6a8bd4b62582cbf93ea\",\n shortSha: \"97cc218\",\n subject: \"feat: stage readme screenshot refresh scenes\",\n authorName: \"Spencer\",\n authoredAt: 1_715_731_200_000,\n },\n {\n sha: \"4d6fd0bbce5100f39277c9c9c92677b87de17b73\",\n shortSha: \"4d6fd0b\",\n subject: \"style: tighten header action hierarchy\",\n authorName: \"Spencer\",\n authoredAt: 1_715_644_800_000,\n },\n] as const;\n\nconst readmeDesktopSessions = [\n {\n id: \"session-readme-hero\",\n workspaceId: workspace.id,\n terminalId: \"term-agent-readme-hero\",\n providerId: \"codex\",\n state: \"running\" as const,\n capability: \"full\" as const,\n startedAt: 1,\n lastActiveAt: 3,\n title: \"Ship the header polish and verify README visuals\",\n },\n];\n\nconst readmeMobileSessions = [\n {\n id: \"session-readme-mobile\",\n workspaceId: workspace.id,\n terminalId: \"term-agent-readme-mobile\",\n providerId: \"claude\",\n state: \"idle\" as const,\n capability: \"full\" as const,\n startedAt: 1,\n lastActiveAt: 4,\n title: \"Resume mobile progress review\",\n },\n];\n\nconst readmeSupervisor: Supervisor = {\n id: \"sup-readme-hero\",\n sessionId: \"session-readme-hero\",\n workspaceId: workspace.id,\n state: \"evaluating\",\n targetId: \"target-readme-refresh\",\n objective: \"Refresh README screenshots to highlight active cross-device coding flows\",\n evaluatorProviderId: \"claude\",\n maxSupervisionCount: 0,\n completedSupervisionCount: 3,\n currentTargetMemory: {\n targetId: \"target-readme-refresh\",\n decompositionGenerated: true,\n decompositionMode: \"stage\",\n items: [\n {\n id: \"stage-1\",\n kind: \"stage\",\n title: \"Capture a desktop hero with active session context\",\n objective: \"Show an active desktop coding flow\",\n deliverable: \"A readable hero screenshot\",\n acceptanceCriteria: [\"Hero capture is readable\"],\n status: \"done\",\n },\n {\n id: \"stage-2\",\n kind: \"stage\",\n title: \"Capture a focused git review scene for README\",\n objective: \"Highlight review context clearly\",\n deliverable: \"A focused review screenshot\",\n acceptanceCriteria: [\"Diff emphasis is readable\"],\n status: \"in_progress\",\n },\n {\n id: \"stage-3\",\n kind: \"stage\",\n title: \"Capture a mobile progress check with supervisor status\",\n objective: \"Show mobile progress visibility\",\n deliverable: \"A mobile supervisor progress screenshot\",\n acceptanceCriteria: [\"Mobile supervisor state is legible\"],\n status: \"pending\",\n },\n ],\n activeItemId: \"stage-2\",\n progressSummary: \"Hero scene locked. Review capture is being polished for README readability.\",\n stalledCount: 0,\n updatedAt: 4,\n },\n recentTargetCycles: [\n {\n cycleId: \"target-cycle-readme-1\",\n targetId: \"target-readme-refresh\",\n startedAt: 2,\n completedAt: 3,\n result: \"continue\",\n reason: \"Hero screenshot is readable. Review scene still needs clearer diff emphasis.\",\n },\n ],\n createdAt: 1,\n updatedAt: 4,\n};\n\nconst readmeMobileSupervisor: Supervisor = {\n ...readmeSupervisor,\n id: \"sup-readme-mobile\",\n sessionId: \"session-readme-mobile\",\n state: \"idle\",\n currentTargetMemory: {\n targetId: \"target-readme-refresh\",\n decompositionGenerated: true,\n decompositionMode: \"stage\",\n items: [\n {\n id: \"stage-1\",\n kind: \"stage\",\n title: \"Capture a desktop hero with active session context\",\n objective: \"Show an active desktop coding flow\",\n deliverable: \"A readable hero screenshot\",\n acceptanceCriteria: [\"Hero capture is readable\"],\n status: \"done\",\n },\n {\n id: \"stage-2\",\n kind: \"stage\",\n title: \"Capture a focused git review scene for README\",\n objective: \"Highlight review context clearly\",\n deliverable: \"A focused review screenshot\",\n acceptanceCriteria: [\"Diff emphasis is readable\"],\n status: \"done\",\n },\n {\n id: \"stage-3\",\n kind: \"stage\",\n title: \"Capture a mobile progress check with supervisor status\",\n objective: \"Show mobile progress visibility\",\n deliverable: \"A mobile supervisor progress screenshot\",\n acceptanceCriteria: [\"Mobile supervisor state is legible\"],\n status: \"in_progress\",\n },\n ],\n activeItemId: \"stage-3\",\n progressSummary:\n \"Desktop captures are ready. Mobile continuity shot is the last remaining asset.\",\n stalledCount: 0,\n updatedAt: 5,\n },\n recentTargetCycles: [\n {\n cycleId: \"target-cycle-readme-mobile-1\",\n targetId: \"target-readme-refresh\",\n startedAt: 4,\n completedAt: 5,\n result: \"continue\",\n reason:\n \"Desktop assets are approved. Capture a mobile status-check scene that shows continuity.\",\n },\n ],\n createdAt: 1,\n updatedAt: 5,\n};\n\nfunction createReadmeWorkspaceFileTree() {\n return {\n \".\": [\n { name: \"docs\", path: \"docs\", kind: \"dir\" },\n { name: \"packages\", path: \"packages\", kind: \"dir\" },\n { name: \"README.md\", path: \"README.md\", kind: \"file\" },\n { name: \"README.zh-CN.md\", path: \"README.zh-CN.md\", kind: \"file\" },\n ] satisfies FileNode[],\n docs: [\n { name: \"help\", path: \"docs/help\", kind: \"dir\" },\n { name: \"promotion\", path: \"docs/promotion\", kind: \"dir\" },\n ] satisfies FileNode[],\n \"docs/help\": [\n { name: \"assets\", path: \"docs/help/assets\", kind: \"dir\" },\n { name: \"desktop-guide.md\", path: \"docs/help/desktop-guide.md\", kind: \"file\" },\n ] satisfies FileNode[],\n \"docs/help/assets\": [\n {\n name: \"screenshot-desktop-workspace-full.png\",\n path: \"docs/help/assets/screenshot-desktop-workspace-full.png\",\n kind: \"file\",\n },\n {\n name: \"screenshot-pc.png\",\n path: \"docs/help/assets/screenshot-pc.png\",\n kind: \"file\",\n },\n {\n name: \"screenshot-mobile.png\",\n path: \"docs/help/assets/screenshot-mobile.png\",\n kind: \"file\",\n },\n ] satisfies FileNode[],\n packages: [\n { name: \"web\", path: \"packages/web\", kind: \"dir\" },\n { name: \"core\", path: \"packages/core\", kind: \"dir\" },\n ] satisfies FileNode[],\n };\n}\n\nfunction buildReadmeDesktopHeroSeed(context: {\n theme: string;\n locale: \"zh\" | \"en\";\n device: \"desktop\" | \"mobile\";\n}) {\n const fileTreeByPath = createReadmeWorkspaceFileTree();\n\n return {\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n sessions: readmeDesktopSessions,\n paneLayoutByWorkspaceId: {\n [workspace.id]: {\n id: \"root\",\n type: \"split\",\n direction: \"horizontal\",\n children: [\n {\n id: \"hero-left\",\n type: \"leaf\",\n sessionId: \"session-readme-hero\",\n },\n {\n id: \"hero-right\",\n type: \"leaf\",\n sessionId: \"session-readme-hero\",\n },\n ],\n sessionId: \"session-readme-hero\",\n },\n },\n fileTreeByWorkspaceId: {\n [workspace.id]: new Map<string, FileNode[]>(Object.entries(fileTreeByPath)),\n },\n gitStateByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n gitBranchListByWorkspaceId: {\n [workspace.id]: {\n current: \"feature/readme-refresh\",\n branches: [\n { name: \"feature/readme-refresh\", isCurrent: true, isRemote: false },\n { name: \"main\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n terminalMetaById: {\n \"term-agent-readme-hero\": {\n id: \"term-agent-readme-hero\",\n workspaceId: workspace.id,\n kind: \"agent\",\n alive: true,\n title: \"Codex session\",\n },\n \"term-shell-readme-hero\": {\n id: \"term-shell-readme-hero\",\n workspaceId: workspace.id,\n kind: \"shell\",\n alive: true,\n title: \"Workspace Shell\",\n },\n },\n terminalOutputById: {\n \"term-agent-readme-hero\": [\n new TextEncoder().encode(\n [\n '$ codex run --model gpt-5.5 --task \"refresh readme screenshots\"',\n \"Analyzing README usage and current preview scenes...\",\n \"Plan: add README-specific preview scenes, capture desktop hero, capture mobile continuity shot.\",\n \"\",\n \"Editing packages/web/src/ui-preview/scenes/showcase-scenes.tsx\",\n \"Preparing fresh assets in docs/help/assets/\",\n ].join(\"\\n\")\n ),\n ],\n \"term-shell-readme-hero\": [\n new TextEncoder().encode(\n [\n \"$ pnpm --filter @coder-studio/web exec vitest run src/ui-preview/scene-metadata.test.ts src/ui-preview/catalog.test.tsx\",\n \"✓ src/ui-preview/scene-metadata.test.ts (9)\",\n \"✓ src/ui-preview/catalog.test.tsx (35)\",\n \"\",\n '$ pnpm --dir e2e-ui exec playwright test --grep \"README /\"',\n \"capturing desktop hero and mobile progress scenes...\",\n ].join(\"\\n\")\n ),\n ],\n },\n supervisorBySessionId: {\n \"session-readme-hero\": readmeSupervisor,\n },\n commands: {\n workspaceList: [workspace],\n sessionListByWorkspaceId: {\n [workspace.id]: readmeDesktopSessions,\n },\n fileTreeByWorkspaceId: {\n [workspace.id]: fileTreeByPath,\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"feature/readme-refresh\",\n branches: [\n { name: \"feature/readme-refresh\", isCurrent: true, isRemote: false },\n { name: \"main\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n terminalListByWorkspaceId: {\n [workspace.id]: [\n {\n id: \"term-shell-readme-hero\",\n workspaceId: workspace.id,\n kind: \"shell\",\n title: \"Workspace Shell\",\n cwd: workspace.path,\n argv: [\"zsh\"],\n cols: 120,\n rows: 28,\n alive: true,\n createdAt: 2,\n },\n {\n id: \"term-shell-readme-verify\",\n workspaceId: workspace.id,\n kind: \"shell\",\n title: \"Preview Runner\",\n cwd: workspace.path,\n argv: [\"zsh\"],\n cols: 120,\n rows: 28,\n alive: true,\n createdAt: 3,\n },\n ],\n },\n supervisorBySessionId: {\n \"session-readme-hero\": readmeSupervisor,\n },\n },\n };\n}\n\nfunction buildReadmeDesktopReviewSeed(context: {\n theme: string;\n locale: \"zh\" | \"en\";\n device: \"desktop\" | \"mobile\";\n}) {\n const fileTreeByPath = createReadmeWorkspaceFileTree();\n\n return {\n ...buildReadmeDesktopHeroSeed(context),\n fileTreeByWorkspaceId: {\n [workspace.id]: new Map<string, FileNode[]>(Object.entries(fileTreeByPath)),\n },\n gitDiffPreviewByWorkspaceId: {\n [workspace.id]: {\n path: \"packages/web/src/features/topbar/index.tsx\",\n title: \"README capture polish\",\n diff: [\n \"diff --git a/packages/web/src/features/topbar/index.tsx b/packages/web/src/features/topbar/index.tsx\",\n \"@@ Refine the desktop topbar hierarchy\",\n '- <span className=\\\"topbar-btn-label\\\">Quick Actions</span>',\n '+ <span className=\\\"topbar-btn-label\\\">Quick Actions</span>',\n '+ <span className=\\\"topbar-btn-hint\\\">Review README capture targets</span>',\n \"\",\n \"@@ screenshot staging\",\n \"+ <WorkspaceLaunchModal onClose={() => setWorkspaceLaunchOpen(false)} />\",\n ].join(\"\\n\"),\n source: \"file\" as const,\n },\n },\n commands: {\n ...buildReadmeDesktopHeroSeed(context).commands,\n fileTreeByWorkspaceId: {\n [workspace.id]: fileTreeByPath,\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n gitLogByWorkspaceId: {\n [workspace.id]: { entries: [...readmeDesktopHistory] },\n },\n gitDiffByWorkspaceId: {\n [workspace.id]: {\n diff: [\n \"diff --git a/packages/web/src/features/topbar/index.tsx b/packages/web/src/features/topbar/index.tsx\",\n \"@@ Refine the desktop topbar hierarchy\",\n '+ <span className=\"topbar-btn-hint\">Review README capture targets</span>',\n '+ <span className=\"topbar-btn-hint\">Keep the workspace hero readable at README width</span>',\n ].join(\"\\n\"),\n },\n },\n gitShowByWorkspaceId: {\n [workspace.id]: {\n diff: \"@@ latest commit\\n+ refresh README desktop review capture\",\n },\n },\n supervisorBySessionId: {\n \"session-readme-hero\": readmeSupervisor,\n },\n },\n };\n}\n\nfunction ReadmeDesktopReviewWorkspace() {\n return (\n <div className=\"workspace-page workspace-page--desktop\">\n <TopBar />\n <div className=\"workspace-body\">\n <aside className=\"left-panel\" style={{ width: \"324px\" }}>\n <div className=\"nav-panel workspace-sidebar-panel\">\n <div className=\"workspace-sidebar-panel__body\">\n <GitPanel workspaceId={workspace.id} variant=\"desktop\" />\n </div>\n </div>\n </aside>\n <div className=\"split-divider-v\" aria-hidden=\"true\" />\n <div className=\"workspace-main-area\">\n <div className=\"workspace-main-stage\">\n <GitDiffViewer workspaceId={workspace.id} showCloseButton={false} />\n </div>\n </div>\n </div>\n <WorkspaceStatusBar\n align=\"start\"\n workspaceId={workspace.id}\n gitState={readmeDesktopGitStatus}\n />\n </div>\n );\n}\n\nfunction ReadmeMobileProgressWorkspace() {\n const readmeMobileGitState: GitStatus = {\n branch: \"feature/readme-refresh\",\n ahead: 2,\n behind: 0,\n staged: [{ path: \"README.md\", status: \"modified\" }],\n modified: [{ path: \"docs/help/assets/screenshot-mobile.png\", status: \"modified\" }],\n untracked: [],\n deleted: [],\n };\n\n return (\n <div\n className=\"mobile-shell mobile-shell--stacked mobile-shell--motion-reduced\"\n data-testid=\"mobile-shell\"\n >\n <MobileTopBar\n activeWorkspace={workspace}\n drawerOpen={false}\n onOpenSettings={() => {}}\n onToggleDrawer={() => {}}\n />\n <main className=\"mobile-shell__viewport\">\n <div className=\"mobile-shell__content\" style={{ gap: \"12px\", paddingBottom: \"144px\" }}>\n <section className=\"mobile-shell__agent-stage\" style={{ flex: \"0 0 420px\" }}>\n <SessionCard\n sessionId=\"session-readme-mobile\"\n showHeaderActions={false}\n showSupervisorInline={false}\n headerAccessory={\n <MobileSupervisorBadge sessionId=\"session-readme-mobile\" onOpen={() => {}} />\n }\n />\n </section>\n <section style={{ padding: \"0 12px\" }}>\n <SupervisorCard sessionId=\"session-readme-mobile\" workspaceId={workspace.id} />\n </section>\n </div>\n </main>\n <div\n className=\"mobile-shell__bottom-stack\"\n data-testid=\"mobile-bottom-stack\"\n style={{ \"--mobile-keyboard-inset\": \"0px\" } as CSSProperties}\n >\n <div className=\"mobile-dock-shell\">\n <MobileDock activeItem=\"agent\" onSelectItem={() => {}} />\n </div>\n <WorkspaceStatusBar workspaceId={workspace.id} gitState={readmeMobileGitState} />\n </div>\n </div>\n );\n}\n\nfunction buildReadmeMobileProgressSeed(context: {\n theme: string;\n locale: \"zh\" | \"en\";\n device: \"desktop\" | \"mobile\";\n}) {\n const mobileWorkspace = {\n ...workspace,\n uiState: {\n ...workspace.uiState,\n activeSessionId: \"session-readme-mobile\",\n paneLayout: {\n id: \"root\",\n type: \"leaf\" as const,\n sessionId: \"session-readme-mobile\",\n },\n },\n };\n\n return {\n ...context,\n workspaces: [mobileWorkspace],\n activeWorkspaceId: mobileWorkspace.id,\n sessions: readmeMobileSessions,\n paneLayoutByWorkspaceId: {\n [mobileWorkspace.id]: {\n id: \"root\",\n type: \"leaf\",\n sessionId: \"session-readme-mobile\",\n },\n },\n gitStateByWorkspaceId: {\n [mobileWorkspace.id]: {\n branch: \"feature/readme-refresh\",\n ahead: 2,\n behind: 0,\n staged: [{ path: \"README.md\", status: \"modified\" }],\n modified: [{ path: \"docs/help/assets/screenshot-mobile.png\", status: \"modified\" }],\n untracked: [],\n deleted: [],\n },\n },\n terminalMetaById: {\n \"term-agent-readme-mobile\": {\n id: \"term-agent-readme-mobile\",\n workspaceId: mobileWorkspace.id,\n kind: \"agent\",\n alive: true,\n title: \"Claude progress review\",\n },\n },\n terminalOutputById: {\n \"term-agent-readme-mobile\": [\n new TextEncoder().encode(\n [\n \"$ claude review --scene readme-mobile-progress\",\n \"Checking continuity between desktop hero and mobile status view...\",\n \"Recommendation: keep supervisor progress visible above the dock.\",\n \"Status: desktop captures approved, mobile continuity shot queued for export.\",\n ].join(\"\\n\")\n ),\n ],\n },\n supervisorBySessionId: {\n \"session-readme-mobile\": readmeMobileSupervisor,\n },\n commands: {\n workspaceList: [mobileWorkspace],\n sessionListByWorkspaceId: {\n [mobileWorkspace.id]: readmeMobileSessions,\n },\n gitStatusByWorkspaceId: {\n [mobileWorkspace.id]: {\n branch: \"feature/readme-refresh\",\n ahead: 2,\n behind: 0,\n staged: [{ path: \"README.md\", status: \"modified\" }],\n modified: [{ path: \"docs/help/assets/screenshot-mobile.png\", status: \"modified\" }],\n untracked: [],\n deleted: [],\n },\n },\n gitBranchesByWorkspaceId: {\n [mobileWorkspace.id]: {\n current: \"feature/readme-refresh\",\n branches: [\n { name: \"feature/readme-refresh\", isCurrent: true, isRemote: false },\n { name: \"main\", isCurrent: false, isRemote: false },\n ],\n },\n },\n supervisorBySessionId: {\n \"session-readme-mobile\": readmeMobileSupervisor,\n },\n },\n };\n}\n\nfunction scene(\n id: string,\n config: Pick<UiPreviewSceneDefinition, \"router\" | \"seed\" | \"render\">\n): UiPreviewSceneDefinition {\n const metadata = getUiPreviewSceneMetadata(id);\n if (!metadata) {\n throw new Error(`Missing UI preview metadata for ${id}`);\n }\n\n return {\n ...metadata,\n ...config,\n };\n}\n\nfunction FooterUpdateRailPreviewShell({\n device,\n className,\n}: {\n device: \"desktop\" | \"mobile\";\n className: string;\n}) {\n return device === \"mobile\" ? (\n <div\n className={`${className} mobile-shell mobile-shell--stacked mobile-shell--motion-reduced`}\n data-testid=\"mobile-shell\"\n >\n <MobileTopBar\n activeWorkspace={workspace}\n drawerOpen={false}\n onOpenSettings={() => {}}\n onToggleDrawer={() => {}}\n />\n <main className=\"mobile-shell__viewport\">\n <div className=\"mobile-shell__content\" style={{ paddingBottom: \"144px\" }} />\n </main>\n <div\n className=\"mobile-shell__bottom-stack\"\n data-testid=\"mobile-bottom-stack\"\n style={{ \"--mobile-keyboard-inset\": \"0px\" } as CSSProperties}\n >\n <div className=\"mobile-dock-shell\">\n <MobileDock activeItem=\"agent\" onSelectItem={() => {}} />\n </div>\n <WorkspaceStatusBar workspaceId={workspace.id} gitState={readmeDesktopGitStatus} />\n </div>\n </div>\n ) : (\n <div className={className}>\n <div className=\"workspace-page workspace-page--desktop\">\n <TopBar />\n <div className=\"workspace-body\">\n <div className=\"workspace-main-area\">\n <div className=\"workspace-main-stage\" />\n </div>\n </div>\n <WorkspaceStatusBar\n align=\"start\"\n workspaceId={workspace.id}\n gitState={readmeDesktopGitStatus}\n />\n </div>\n </div>\n );\n}\n\nfunction FooterUpdateRailConfirmPreview({ device }: { device: \"desktop\" | \"mobile\" }) {\n const t = useTranslation();\n\n return (\n <>\n <FooterUpdateRailPreviewShell className=\"footer-update-rail-confirm-review\" device={device} />\n <ConfirmDialog\n open\n onOpenChange={() => {}}\n title={t(\"settings.about.confirm_update_title\")}\n description={\n <div className=\"settings-dialog-copy\">\n <p>{t(\"settings.about.confirm_update_message\")}</p>\n <p>\n {t(\"settings.about.confirm_update_activity\", {\n terminals: 1,\n sessions: 2,\n supervisors: 3,\n })}\n </p>\n </div>\n }\n cancelText={t(\"action.cancel\")}\n confirmText={t(\"settings.about.update_now\")}\n tone=\"danger\"\n onConfirm={() => {}}\n />\n </>\n );\n}\n\nexport function createShowcaseScenes(): UiPreviewSceneDefinition[] {\n return [\n scene(\"workspace-launch-modal\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({\n ...context,\n commands: {\n workspaceBrowse: {\n currentPath: \"/home/spencer/workspace\",\n parentPath: \"/home/spencer\",\n directories: [\n { name: \"coder-studio\", path: \"/home/spencer/workspace/coder-studio\", itemCount: 24 },\n { name: \"playground\", path: \"/home/spencer/workspace/playground\", itemCount: 6 },\n ],\n },\n workspaceOpen: workspace,\n },\n }),\n render: () => <WorkspaceLaunchModal onClose={() => {}} />,\n }),\n scene(\"command-palette\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n commandPaletteOpen: true,\n }),\n render: () => <CommandPalette />,\n }),\n scene(\"branch-quick-pick\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n branchQuickPick: {\n visible: true,\n workspaceId: workspace.id,\n inputValue: \"\",\n },\n commands: {\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"main\",\n branches: [\n { name: \"main\", isCurrent: true, isRemote: false },\n { name: \"feature/e2e-ui\", isCurrent: false, isRemote: false },\n { name: \"origin/main\", isCurrent: false, isRemote: true },\n ],\n },\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: worktreeStatus,\n },\n },\n }),\n render: () => <BranchQuickPick />,\n }),\n scene(\"toast-stack\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({\n ...context,\n toasts: [\n {\n id: \"toast-success-preview\",\n kind: \"success\",\n title: \"Workspace opened\",\n body: \"coder-studio is ready.\",\n createdAt: 1,\n duration: 0,\n },\n {\n id: \"toast-error-preview\",\n kind: \"error\",\n title: \"Failed to refresh provider config\",\n body: \"Retry after checking the provider settings.\",\n createdAt: 2,\n duration: 0,\n },\n ],\n }),\n render: () => <ToastContainer />,\n }),\n scene(\"footer-update-rail-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n gitStateByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n updateState: footerUpdateRailPreviewState,\n }),\n render: (context) => (\n <FooterUpdateRailPreviewShell\n className=\"footer-update-rail-review\"\n device={context.device}\n />\n ),\n }),\n scene(\"footer-update-rail-confirm-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n gitStateByWorkspaceId: {\n [workspace.id]: readmeDesktopGitStatus,\n },\n updateState: footerUpdateRailPreviewState,\n }),\n render: (context) => <FooterUpdateRailConfirmPreview device={context.device} />,\n }),\n scene(\"workspace-icon-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n supervisorBySessionId: {\n \"session-preview-1\": supervisor,\n },\n }),\n render: (context) =>\n context.device === \"mobile\" ? (\n <div className=\"workspace-icon-review\">\n <div className=\"mobile-shell__stage\">\n <div className=\"flex items-center justify-between gap-3 p-3\">\n <MobileSupervisorBadge sessionId=\"session-preview-1\" onOpen={() => {}} />\n </div>\n <div className=\"file-tree-shell file-tree-shell--mobile\">\n <div className=\"tree-item\">\n <span className=\"tree-icon folder\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.folder.closed\" size={14} />\n </span>\n <span>packages</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon code\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.code\" size={14} />\n </span>\n <span>app.tsx</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon data\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.data\" size={14} />\n </span>\n <span>theme.json</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon doc\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.doc\" size={14} />\n </span>\n <span>README.md</span>\n </div>\n </div>\n <EmptyState\n className=\"bottom-terminal-empty\"\n description={\n <p className=\"bottom-terminal-empty-hint\">\n Review the terminal empty-state icon and surface treatment.\n </p>\n }\n icon={\n <ThemedIcon\n className=\"bottom-terminal-empty-icon\"\n semantic=\"state.emptyTerminal\"\n size={32}\n />\n }\n title={<p className=\"bottom-terminal-empty-text\">No terminal session</p>}\n />\n <MobileDock activeItem=\"files\" onSelectItem={() => {}} />\n </div>\n </div>\n ) : (\n <div className=\"workspace-icon-review\">\n <div className=\"file-tree-shell\">\n <div className=\"tree-item\">\n <span className=\"tree-icon folder\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.folder.closed\" size={14} />\n </span>\n <span>packages</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon code\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.code\" size={14} />\n </span>\n <span>app.tsx</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon data\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.data\" size={14} />\n </span>\n <span>theme.json</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon doc\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.doc\" size={14} />\n </span>\n <span>README.md</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon media\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.media\" size={14} />\n </span>\n <span>logo.png</span>\n </div>\n <div className=\"tree-item\">\n <span className=\"tree-icon file\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"file.type.default\" size={14} />\n </span>\n <span>LICENSE</span>\n </div>\n </div>\n <div className=\"git-panel\">\n <div className=\"git-row\">\n <span className=\"git-row-icon git-row-icon-staged\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"git.status.staged\" size={12} />\n </span>\n <span>staged.ts</span>\n </div>\n <div className=\"git-row\">\n <span className=\"git-row-icon git-row-icon-modified\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"git.status.modified\" size={12} />\n </span>\n <span>modified.ts</span>\n </div>\n <div className=\"git-row\">\n <span className=\"git-row-icon git-row-icon-deleted\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"git.status.deleted\" size={12} />\n </span>\n <span>deleted.ts</span>\n </div>\n <div className=\"git-row\">\n <span className=\"git-row-icon git-row-icon-untracked\" aria-hidden=\"true\">\n <ThemedIcon semantic=\"git.status.untracked\" size={12} />\n </span>\n <span>untracked.ts</span>\n </div>\n </div>\n <EmptyState\n className=\"bottom-terminal-empty\"\n description={\n <p className=\"bottom-terminal-empty-hint\">\n Review the terminal empty-state icon and surface treatment.\n </p>\n }\n icon={\n <ThemedIcon\n className=\"bottom-terminal-empty-icon\"\n semantic=\"state.emptyTerminal\"\n size={32}\n />\n }\n title={<p className=\"bottom-terminal-empty-text\">No terminal session</p>}\n />\n </div>\n ),\n }),\n scene(\"toast-icon-review\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({\n ...context,\n toasts: [\n {\n id: \"toast-success\",\n kind: \"success\",\n title: \"Workspace opened\",\n body: \"coder-studio is ready.\",\n createdAt: 1,\n duration: 0,\n },\n {\n id: \"toast-warning\",\n kind: \"warning\",\n title: \"Unsaved config\",\n body: \"Review pending changes before continuing.\",\n createdAt: 2,\n duration: 0,\n },\n {\n id: \"toast-error\",\n kind: \"error\",\n title: \"Failed to refresh provider config\",\n body: \"Retry after checking the provider settings.\",\n createdAt: 3,\n duration: 0,\n },\n {\n id: \"toast-info\",\n kind: \"info\",\n title: \"Theme preview active\",\n body: \"Comparing icon palettes across themes.\",\n createdAt: 4,\n duration: 0,\n },\n ],\n }),\n render: () => <ToastContainer />,\n }),\n scene(\"supervisor-icon-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n supervisorBySessionId: {\n \"session-preview-1\": supervisor,\n },\n supervisorDialog: {\n open: true,\n sessionId: \"session-preview-1\",\n mode: \"edit\",\n draftObjective: supervisor.objective,\n draftEvaluatorProviderId: \"claude\",\n draftEvaluatorModel: \"\",\n draftMaxSupervisionCount: \"0\",\n draftScheduledAt: \"\",\n },\n }),\n render: (context) =>\n context.device === \"mobile\" ? (\n <MobileSupervisorSheet\n sessionId=\"session-preview-1\"\n workspaceId={workspace.id}\n onClose={() => {}}\n />\n ) : (\n <ObjectiveDialog workspaceId={workspace.id} sessionId=\"session-preview-1\" />\n ),\n }),\n scene(\"mobile-workspace-drawer\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [\n workspace,\n {\n ...workspace,\n id: \"ws-preview-2\",\n name: \"playground\",\n path: \"/home/spencer/workspace/playground\",\n },\n ],\n activeWorkspaceId: workspace.id,\n }),\n render: () => (\n <MobileWorkspaceDrawer\n activeWorkspaceId={workspace.id}\n isOpen\n workspaces={[\n workspace,\n {\n ...workspace,\n id: \"ws-preview-2\",\n name: \"playground\",\n path: \"/home/spencer/workspace/playground\",\n },\n ]}\n onClose={() => {}}\n onOpenWorkspaceLauncher={() => {}}\n />\n ),\n }),\n scene(\"mobile-files-sheet\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n commands: {\n fileTreeByWorkspaceId: {\n [workspace.id]: {\n \".\": fileTreeRoot,\n packages: fileTreePackages,\n },\n },\n gitStatusByWorkspaceId: {\n [workspace.id]: {\n branch: \"feature/mobile-polish\",\n ahead: 2,\n behind: 0,\n staged: [{ path: \"packages/web/src/styles/components.css\", status: \"modified\" }],\n modified: [\n {\n path: \"packages/web/src/features/settings/components/settings-page.tsx\",\n status: \"modified\",\n },\n {\n path: \"packages/web/src/features/workspace/views/mobile/mobile-workspace-drawer.tsx\",\n status: \"modified\",\n },\n ],\n untracked: [{ path: \"e2e-ui/output/mobile-review.png\", status: \"untracked\" }],\n deleted: [],\n },\n },\n gitBranchesByWorkspaceId: {\n [workspace.id]: {\n current: \"feature/mobile-polish\",\n branches: [\n { name: \"feature/mobile-polish\", isCurrent: true, isRemote: false },\n { name: \"develop\", isCurrent: false, isRemote: false },\n ],\n },\n },\n terminalListByWorkspaceId: {\n [workspace.id]: [],\n },\n },\n }),\n render: () => (\n <Sheet\n title=\"Files\"\n kicker=\"Workspace\"\n fullscreen\n bodyClassName=\"mobile-sheet__body--flush mobile-sheet__body--fullscreen\"\n contentClassName=\"mobile-sheet--files\"\n onClose={() => {}}\n body={\n <MobileFilesSheet\n workspaceId={workspace.id}\n route={{ kind: \"root\" }}\n activeTab=\"files\"\n />\n }\n />\n ),\n }),\n scene(\"mobile-terminal-sheet\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n terminalMetaById: {\n \"term-preview-1\": {\n id: \"term-preview-1\",\n workspaceId: workspace.id,\n kind: \"shell\",\n alive: true,\n title: \"Workspace Shell\",\n },\n \"term-preview-2\": {\n id: \"term-preview-2\",\n workspaceId: workspace.id,\n kind: \"shell\",\n alive: true,\n title: \"Preview Runner\",\n },\n },\n terminalOutputById: {\n \"term-preview-1\": [new TextEncoder().encode(\"$ pnpm --filter @coder-studio/web test\\n\")],\n \"term-preview-2\": [new TextEncoder().encode(\"$ playwright test --project=mobile\\n\")],\n },\n commands: {\n terminalListByWorkspaceId: {\n [workspace.id]: [\n {\n id: \"term-preview-1\",\n workspaceId: workspace.id,\n kind: \"shell\",\n title: \"Workspace Shell\",\n cwd: workspace.path,\n argv: [\"zsh\"],\n cols: 120,\n rows: 28,\n alive: true,\n createdAt: 1,\n },\n {\n id: \"term-preview-2\",\n workspaceId: workspace.id,\n kind: \"shell\",\n title: \"Preview Runner\",\n cwd: workspace.path,\n argv: [\"zsh\"],\n cols: 120,\n rows: 28,\n alive: true,\n createdAt: 2,\n },\n ],\n },\n },\n }),\n render: () => {\n const MobileTerminalPreviewSheet = () => {\n const [headerAction, setHeaderAction] = useState<ReactNode>(null);\n\n return (\n <Sheet\n title=\"Terminal\"\n kicker={null}\n fullscreen\n bodyClassName=\"mobile-sheet__body--flush mobile-sheet__body--fullscreen\"\n contentClassName=\"mobile-sheet--terminal\"\n headerAction={headerAction}\n onClose={() => {}}\n body={\n <div className=\"mobile-terminal-sheet mobile-terminal-sheet--fullscreen\">\n <TerminalPanel\n chrome=\"mobile-fullscreen\"\n onMobileHeaderActionsChange={setHeaderAction}\n />\n </div>\n }\n footer={\n <WorkspaceStatusBar\n workspaceId={workspace.id}\n gitState={{\n branch: \"feature/mobile-terminal\",\n ahead: 0,\n behind: 0,\n staged: [],\n modified: [\n { path: \"packages/web/src/styles/components.css\", status: \"modified\" },\n ],\n untracked: [],\n deleted: [],\n }}\n flush\n />\n }\n />\n );\n };\n\n return <MobileTerminalPreviewSheet />;\n },\n }),\n scene(\"mobile-supervisor-sheet\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n supervisorBySessionId: {\n \"session-preview-1\": supervisor,\n },\n }),\n render: () => (\n <MobileSupervisorSheet\n sessionId=\"session-preview-1\"\n workspaceId={workspace.id}\n onClose={() => {}}\n />\n ),\n }),\n scene(\"supervisor-dialog\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n supervisorBySessionId: {\n \"session-preview-1\": supervisor,\n },\n supervisorDialog: {\n open: true,\n sessionId: \"session-preview-1\",\n mode: \"edit\",\n draftObjective: supervisor.objective,\n draftEvaluatorProviderId: \"claude\",\n },\n }),\n render: () => <ObjectiveDialog workspaceId={workspace.id} sessionId=\"session-preview-1\" />,\n }),\n scene(\"readme-desktop-hero\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildReadmeDesktopHeroSeed(context),\n render: () => <WorkspaceDesktopView />,\n }),\n scene(\"readme-desktop-review\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildReadmeDesktopReviewSeed(context),\n render: () => <ReadmeDesktopReviewWorkspace />,\n }),\n scene(\"readme-mobile-progress\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => buildReadmeMobileProgressSeed({ ...context, device: \"mobile\" }),\n render: () => <ReadmeMobileProgressWorkspace />,\n }),\n scene(\"worktree-manager\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [workspace],\n activeWorkspaceId: workspace.id,\n worktreeListByWorkspaceId: {\n [workspace.id]: worktrees,\n },\n commands: {\n worktreeListByWorkspaceId: {\n [workspace.id]: worktrees,\n },\n worktreeStatusByPath: {\n [worktrees[0].path]: worktreeStatus,\n },\n worktreeDiffByPath: {\n [worktrees[0].path]: \"diff --git a/src/app.tsx b/src/app.tsx\",\n },\n worktreeTreeByPath: {\n [worktrees[0].path]: worktreeTree,\n },\n },\n }),\n render: () => (\n <WorktreeManagerSurface workspaceId={workspace.id} openView=\"list\" onClose={() => {}} />\n ),\n }),\n scene(\"confirm-dialog-danger\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({ ...context }),\n render: () => (\n <ConfirmDialog\n open\n onOpenChange={() => {}}\n tone=\"danger\"\n title=\"Delete worktree?\"\n description=\"This removes the worktree directory from disk.\"\n cancelText=\"Cancel\"\n confirmText=\"Delete\"\n onConfirm={() => {}}\n />\n ),\n }),\n scene(\"provider-error-state\", {\n router: () => ({ initialEntries: [\"/settings\"], path: \"/settings\" }),\n seed: (context) => ({ ...context }),\n render: () => (\n <div className=\"settings-page\">\n <Notice\n tone=\"error\"\n title=\"Failed to refresh provider config\"\n message=\"Retry after checking the provider settings.\"\n action={<button className=\"settings-link\">Retry</button>}\n />\n </div>\n ),\n }),\n scene(\"file-tree-delete-confirm\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({ ...context }),\n render: () => (\n <ConfirmDialog\n open\n onOpenChange={() => {}}\n tone=\"danger\"\n title=\"Delete preview-file.ts?\"\n description=\"This permanently removes the file from the current workspace.\"\n cancelText=\"Cancel\"\n confirmText=\"Delete\"\n onConfirm={() => {}}\n />\n ),\n }),\n scene(\"empty-state\", {\n router: () => ({ initialEntries: [\"/\"], path: \"/\" }),\n seed: (context) => ({ ...context }),\n render: () => (\n <div className=\"welcome-card\">\n <EmptyState title={<p>No results</p>} description={<p>Try a different filter.</p>} />\n </div>\n ),\n }),\n scene(\"loading-state\", {\n router: () => ({ initialEntries: [\"/workspace\"], path: \"/workspace\" }),\n seed: (context) => ({\n ...context,\n workspaces: [],\n activeWorkspaceId: null,\n }),\n render: () => (\n <div className=\"workspace-resolving-shell\">\n <div className=\"workspace-resolving-card\">\n <EmptyState title={<p>Loading workspace</p>} description={<p>Please wait...</p>} />\n </div>\n </div>\n ),\n }),\n ];\n}\n","import type { ReactNode } from \"react\";\nimport type { UiPreviewSceneMetadata } from \"./scene-metadata\";\n\nexport type {\n UiPreviewCategory,\n UiPreviewSettingsSection,\n UiPreviewSource,\n} from \"./scene-metadata\";\n\nimport type {\n UiPreviewDevice,\n UiPreviewLocale,\n UiPreviewSeed,\n UiPreviewTheme,\n} from \"./preview-store\";\nimport { createDesktopReviewScenes } from \"./scenes/desktop-review-scenes\";\nimport { createPageScenes } from \"./scenes/page-scenes\";\nimport { createShowcaseScenes } from \"./scenes/showcase-scenes\";\n\nexport interface UiPreviewSceneContext {\n theme: UiPreviewTheme;\n locale: UiPreviewLocale;\n device: UiPreviewDevice;\n}\n\nexport interface UiPreviewSceneDefinition extends UiPreviewSceneMetadata {\n seed: (context: UiPreviewSceneContext) => UiPreviewSeed;\n render: (context: UiPreviewSceneContext) => ReactNode;\n router: (context: UiPreviewSceneContext) => {\n initialEntries: string[];\n path: string;\n };\n}\n\nexport const UI_PREVIEW_SCENES: UiPreviewSceneDefinition[] = [\n ...createPageScenes(),\n ...createShowcaseScenes(),\n ...createDesktopReviewScenes(),\n];\n\nexport function getUiPreviewScene(id: string): UiPreviewSceneDefinition | null {\n return UI_PREVIEW_SCENES.find((scene) => scene.id === id) ?? null;\n}\n","import { MemoryRouter, Route, Routes } from \"react-router-dom\";\nimport { EmptyState } from \"../components/ui\";\nimport { getThemeById, resolveStoredThemeId } from \"../theme\";\nimport { getUiPreviewScene, type UiPreviewSceneDefinition } from \"./catalog\";\nimport type { UiPreviewDevice, UiPreviewLocale, UiPreviewTheme } from \"./preview-store\";\n\nexport interface UiPreviewRequest {\n sceneId: string;\n theme: UiPreviewTheme;\n locale: UiPreviewLocale;\n device: UiPreviewDevice;\n context: {\n theme: UiPreviewTheme;\n locale: UiPreviewLocale;\n device: UiPreviewDevice;\n };\n scene: UiPreviewSceneDefinition | null;\n}\n\nexport function resolvePreviewRequest(search: string): UiPreviewRequest {\n const params = new URLSearchParams(search);\n const sceneId = params.get(\"scene\") ?? \"welcome\";\n const theme = resolveStoredThemeId(params.get(\"theme\"));\n const locale = params.get(\"locale\") === \"en\" ? \"en\" : \"zh\";\n const device = params.get(\"device\") === \"mobile\" ? \"mobile\" : \"desktop\";\n const scene = getUiPreviewScene(sceneId);\n\n return {\n sceneId,\n theme,\n locale,\n device,\n context: { theme, locale, device },\n scene,\n };\n}\n\nfunction UnknownScene({ sceneId }: { sceneId: string }) {\n return (\n <div className=\"welcome-container\">\n <div className=\"welcome-card\">\n <EmptyState title={<p>Unknown preview scene</p>} description={<p>{sceneId}</p>} />\n </div>\n </div>\n );\n}\n\nexport function UiPreviewApp({ request }: { request: UiPreviewRequest }) {\n document.documentElement.setAttribute(\n \"data-theme\",\n getThemeById(request.theme).documentThemeAttr\n );\n document.documentElement.setAttribute(\"lang\", request.locale === \"zh\" ? \"zh\" : \"en\");\n document.body.dataset.uiPreviewDevice = request.device;\n\n if (!request.scene) {\n return <UnknownScene sceneId={request.sceneId} />;\n }\n\n const router = request.scene.router(request.context);\n\n return (\n <MemoryRouter initialEntries={router.initialEntries}>\n <Routes>\n <Route path={router.path} element={request.scene.render(request.context)} />\n </Routes>\n </MemoryRouter>\n );\n}\n","import type {\n FileNode,\n GitBranch,\n GitCommitSummary,\n GitStatus,\n Session,\n Supervisor,\n UpdateStateView,\n Workspace,\n WorktreeInfo,\n} from \"@coder-studio/core\";\nimport { createStore, type Store } from \"jotai\";\nimport { authenticatedAtom, commandPaletteOpenAtom, localeAtom, themeAtom } from \"../atoms/app-ui\";\nimport {\n authEnabledAtom,\n connectionStatusAtom,\n type DispatchCommand,\n wsClientAtom,\n} from \"../atoms/connection\";\nimport { sessionsAtom } from \"../atoms/sessions\";\nimport {\n activeWorkspaceIdAtom,\n type WorkspaceLoadState,\n workspaceOrderAtom,\n workspacesAtom,\n workspacesLoadErrorAtom,\n workspacesLoadStateAtom,\n} from \"../atoms/workspaces\";\nimport { type PaneNode, paneLayoutAtomFamily } from \"../features/agent-panes/atoms/pane-layout\";\nimport { type Toast, toastsAtom } from \"../features/notifications\";\nimport { supervisorDialogAtom, supervisorsAtom } from \"../features/supervisor/atoms\";\nimport { terminalMetaAtomFamily } from \"../features/terminal-panel/atoms\";\nimport { updateStateAtom } from \"../features/updates/atoms\";\nimport {\n activeFilePathAtomFamily,\n branchQuickPickAtom,\n fileTreeAtomFamily,\n gitBranchListAtomFamily,\n gitDiffPreviewAtomFamily,\n gitStateAtomFamily,\n terminalPanelVisibleAtom,\n worktreeListAtomFamily,\n} from \"../features/workspace/atoms\";\nimport { resolveStoredThemeId } from \"../theme\";\n\nexport type UiPreviewTheme = string;\nexport type UiPreviewLocale = \"zh\" | \"en\";\nexport type UiPreviewDevice = \"desktop\" | \"mobile\";\n\nexport interface UiPreviewCommands {\n settingsGet?: Record<string, unknown>;\n settingsUpdate?: Record<string, unknown>;\n settingsPreviewCommandByProviderId?: Record<string, string>;\n workspaceBrowse?: {\n currentPath: string;\n parentPath: string | null;\n directories: Array<{ name: string; path: string; itemCount?: number }>;\n };\n workspaceOpen?: Workspace;\n workspaceUiStateSet?: Workspace;\n workspaceList?: Workspace[];\n sessionListByWorkspaceId?: Record<string, Session[]>;\n gitStatusByWorkspaceId?: Record<string, GitStatus>;\n gitBranchesByWorkspaceId?: Record<string, { current: string; branches: GitBranch[] }>;\n gitLogByWorkspaceId?: Record<string, { entries: GitCommitSummary[] }>;\n gitDiffByWorkspaceId?: Record<string, { diff: string }>;\n gitShowByWorkspaceId?: Record<string, { diff: string }>;\n fileTreeByWorkspaceId?: Record<string, Record<string, FileNode[]>>;\n fileSearchByWorkspaceId?: Record<string, FileNode[]>;\n worktreeListByWorkspaceId?: Record<string, WorktreeInfo[]>;\n worktreeStatusByPath?: Record<string, GitStatus>;\n worktreeDiffByPath?: Record<string, string>;\n worktreeTreeByPath?: Record<string, FileNode[]>;\n terminalListByWorkspaceId?: Record<\n string,\n Array<{\n id: string;\n workspaceId: string;\n kind: \"shell\";\n title: string;\n cwd: string;\n argv: string[];\n cols: number;\n rows: number;\n alive: boolean;\n createdAt: number;\n }>\n >;\n supervisorBySessionId?: Record<string, Supervisor>;\n}\n\nexport interface UiPreviewSeed {\n theme: UiPreviewTheme;\n locale: UiPreviewLocale;\n device: UiPreviewDevice;\n authEnabled?: boolean | null;\n authenticated?: boolean;\n connectionStatus?: \"connecting\" | \"connected\" | \"disconnected\" | \"reconnecting\" | \"rejected\";\n workspaces?: Workspace[];\n activeWorkspaceId?: string | null;\n workspacesLoadState?: WorkspaceLoadState;\n workspacesLoadError?: string | null;\n sessions?: Session[];\n paneLayoutByWorkspaceId?: Record<string, PaneNode>;\n fileTreeByWorkspaceId?: Record<string, Map<string, FileNode[]>>;\n activeFilePathByWorkspaceId?: Record<string, string | null>;\n gitStateByWorkspaceId?: Record<string, GitStatus>;\n gitBranchListByWorkspaceId?: Record<string, { current: string; branches: GitBranch[] }>;\n gitDiffPreviewByWorkspaceId?: Record<\n string,\n { path: string; diff: string; source?: \"file\" | \"commit\" }\n >;\n worktreeListByWorkspaceId?: Record<string, WorktreeInfo[]>;\n terminalMetaById?: Record<\n string,\n { id: string; workspaceId: string; kind: \"agent\" | \"shell\"; alive: boolean; title?: string }\n >;\n terminalOutputById?: Record<string, Uint8Array[]>;\n toasts?: Toast[];\n commandPaletteOpen?: boolean;\n branchQuickPick?: {\n visible: boolean;\n workspaceId?: string;\n inputValue: string;\n selectedBranch?: string;\n };\n terminalPanelVisible?: boolean;\n supervisorBySessionId?: Record<string, Supervisor>;\n supervisorDialog?: {\n open: boolean;\n sessionId: string | null;\n mode: \"enable\" | \"edit\";\n draftObjective: string;\n draftEvaluatorProviderId: \"claude\" | \"codex\";\n draftEvaluatorModel?: string;\n draftMaxSupervisionCount?: string;\n draftScheduledAt?: string;\n };\n updateState?: UpdateStateView | null;\n commands?: UiPreviewCommands;\n}\n\nfunction ok<T>(data: T) {\n return { ok: true as const, data };\n}\n\nfunction getTerminalPreviewBytes(seed: UiPreviewSeed, terminalId: string): Uint8Array {\n const chunks = seed.terminalOutputById?.[terminalId] ?? [];\n if (chunks.length === 0) {\n return new Uint8Array();\n }\n\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n const bytes = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nfunction getTerminalPreviewSeq(seed: UiPreviewSeed, terminalId: string): number {\n return getTerminalPreviewBytes(seed, terminalId).byteLength;\n}\n\nfunction err(message: string) {\n return {\n ok: false as const,\n error: { code: \"preview_missing_handler\", message },\n };\n}\n\nfunction createPreviewDispatcher(seed: UiPreviewSeed): DispatchCommand {\n return async <T>(op: string, args: unknown) => {\n const commands = seed.commands ?? {};\n\n if (op === \"settings.get\") {\n return ok((commands.settingsGet ?? {}) as T);\n }\n\n if (op === \"settings.update\") {\n return ok((commands.settingsUpdate ?? {}) as T);\n }\n\n if (op === \"settings.previewCommand\") {\n const providerId = (args as { providerId?: string })?.providerId ?? \"\";\n return ok({\n preview: commands.settingsPreviewCommandByProviderId?.[providerId] ?? \"\",\n } as unknown as T);\n }\n\n if (op === \"settings.readConfigFile\") {\n return ok({ exists: true, content: \"# preview config\\n\" } as unknown as T);\n }\n\n if (op === \"settings.writeConfigFile\") {\n return ok({ ok: true } as unknown as T);\n }\n\n if (op === \"workspace.list\") {\n return ok((commands.workspaceList ?? seed.workspaces ?? []) as T);\n }\n\n if (op === \"workspace.browse\") {\n if (!commands.workspaceBrowse) {\n return err(\"Missing workspace.browse preview handler\");\n }\n return ok(commands.workspaceBrowse as T);\n }\n\n if (op === \"workspace.open\") {\n if (!commands.workspaceOpen) {\n return err(\"Missing workspace.open preview handler\");\n }\n return ok(commands.workspaceOpen as T);\n }\n\n if (op === \"workspace.uiState.set\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n const uiState = (args as { uiState?: Workspace[\"uiState\"] })?.uiState;\n if (workspaceId && uiState?.paneLayout) {\n store.set(paneLayoutAtomFamily(workspaceId), uiState.paneLayout as PaneNode);\n }\n return ok(\n (commands.workspaceUiStateSet ?? commands.workspaceOpen ?? seed.workspaces?.[0]) as T\n );\n }\n\n if (op === \"session.list\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.sessionListByWorkspaceId?.[workspaceId] ?? []).slice() as T);\n }\n\n if (op === \"git.status\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n const value = commands.gitStatusByWorkspaceId?.[workspaceId];\n return value ? ok(value as T) : ok((seed.gitStateByWorkspaceId?.[workspaceId] ?? null) as T);\n }\n\n if (op === \"git.branches\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n const value = commands.gitBranchesByWorkspaceId?.[workspaceId];\n return value ? ok(value as T) : ok({ current: \"\", branches: [] } as unknown as T);\n }\n\n if (op === \"git.log\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.gitLogByWorkspaceId?.[workspaceId] ?? { entries: [] }) as unknown as T);\n }\n\n if (op === \"git.diff\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.gitDiffByWorkspaceId?.[workspaceId] ?? { diff: \"\" }) as unknown as T);\n }\n\n if (op === \"git.show\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.gitShowByWorkspaceId?.[workspaceId] ?? { diff: \"\" }) as unknown as T);\n }\n\n if (op === \"git.checkout\") {\n return ok({ success: true, message: \"Preview checkout\", branch: \"main\" } as unknown as T);\n }\n\n if (op === \"git.fetch\" || op === \"git.pull\" || op === \"git.push\") {\n return ok({ success: true, message: \"Preview sync\" } as unknown as T);\n }\n\n if (op === \"file.readTree\") {\n const { workspaceId = \"\", subPath } =\n (args as { workspaceId?: string; subPath?: string }) ?? {};\n const key = subPath ?? \".\";\n const children = commands.fileTreeByWorkspaceId?.[workspaceId]?.[key] ?? [];\n return ok({ path: key, children } as unknown as T);\n }\n\n if (op === \"file.search\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok({ files: commands.fileSearchByWorkspaceId?.[workspaceId] ?? [] } as unknown as T);\n }\n\n if (op === \"worktree.list\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok({\n worktrees: commands.worktreeListByWorkspaceId?.[workspaceId] ?? [],\n } as unknown as T);\n }\n\n if (op === \"worktree.status\") {\n const worktreePath = (args as { worktreePath?: string })?.worktreePath ?? \"\";\n const value = commands.worktreeStatusByPath?.[worktreePath];\n return value ? ok({ status: value } as unknown as T) : ok({ status: null } as unknown as T);\n }\n\n if (op === \"worktree.diff\") {\n const worktreePath = (args as { worktreePath?: string })?.worktreePath ?? \"\";\n return ok({ diff: commands.worktreeDiffByPath?.[worktreePath] ?? \"\" } as unknown as T);\n }\n\n if (op === \"worktree.tree\") {\n const worktreePath = (args as { worktreePath?: string })?.worktreePath ?? \"\";\n return ok({ tree: commands.worktreeTreeByPath?.[worktreePath] ?? [] } as unknown as T);\n }\n\n if (op === \"worktree.create\" || op === \"worktree.remove\") {\n return ok({ ok: true } as unknown as T);\n }\n\n if (op === \"terminal.list\") {\n const workspaceId = (args as { workspaceId?: string })?.workspaceId ?? \"\";\n return ok((commands.terminalListByWorkspaceId?.[workspaceId] ?? []) as unknown as T);\n }\n\n if (op === \"terminal.create\") {\n const workspaceId =\n (args as { workspaceId?: string })?.workspaceId ?? seed.activeWorkspaceId ?? \"\";\n return ok({\n id: \"terminal-preview-created\",\n workspaceId,\n kind: \"shell\",\n title: \"Preview Terminal\",\n cwd: \"/home/spencer/workspace/coder-studio\",\n argv: [],\n cols: 120,\n rows: 32,\n alive: true,\n createdAt: 1,\n } as unknown as T);\n }\n\n if (op === \"terminal.snapshot\") {\n const terminalId = (args as { terminalId?: string })?.terminalId ?? \"\";\n const bytes = getTerminalPreviewBytes(seed, terminalId);\n return ok({\n status: \"ok\",\n transport: \"binary\",\n streamId: 1,\n size: bytes.byteLength,\n seq: getTerminalPreviewSeq(seed, terminalId),\n rows: 28,\n cols: 120,\n source: \"headless\",\n bytes,\n } as unknown as T);\n }\n\n if (op === \"terminal.replay\") {\n const terminalId = (args as { terminalId?: string })?.terminalId ?? \"\";\n const lastSeq = (args as { lastSeq?: number })?.lastSeq ?? 0;\n const fullBytes = getTerminalPreviewBytes(seed, terminalId);\n const replayBytes = fullBytes.subarray(Math.max(0, lastSeq));\n return ok({\n status: \"ok\",\n transport: \"binary\",\n streamId: 1,\n size: replayBytes.byteLength,\n seq: fullBytes.byteLength,\n bytes: replayBytes,\n } as unknown as T);\n }\n\n if (\n op === \"terminal.close\" ||\n op === \"terminal.resize\" ||\n op === \"terminal.input\" ||\n op === \"provider.runtimeStatus\" ||\n op === \"provider.install.start\" ||\n op === \"provider.install.get\" ||\n op === \"session.create\" ||\n op === \"session.stop\" ||\n op === \"session.remove\" ||\n op === \"file.create\" ||\n op === \"file.mkdir\" ||\n op === \"file.delete\" ||\n op === \"supervisor.create\" ||\n op === \"supervisor.update\" ||\n op === \"supervisor.delete\"\n ) {\n return ok({} as unknown as T);\n }\n\n if (op === \"supervisor.get\") {\n const sessionId = (args as { sessionId?: string })?.sessionId ?? \"\";\n const supervisor =\n commands.supervisorBySessionId?.[sessionId] ??\n seed.supervisorBySessionId?.[sessionId] ??\n null;\n return ok({ supervisor } as unknown as T);\n }\n\n return err(`Missing preview handler for ${op}`);\n };\n}\n\nexport function buildUiPreviewStore(seed: UiPreviewSeed): Store {\n const store = createStore();\n const dispatch = createPreviewDispatcher(seed);\n const workspaces = seed.workspaces ?? [];\n\n store.set(themeAtom, resolveStoredThemeId(seed.theme));\n store.set(localeAtom, seed.locale);\n store.set(authEnabledAtom, seed.authEnabled === undefined ? false : seed.authEnabled);\n store.set(authenticatedAtom, seed.authenticated ?? true);\n store.set(connectionStatusAtom, seed.connectionStatus ?? \"connected\");\n store.set(\n workspacesAtom,\n Object.fromEntries(workspaces.map((workspace) => [workspace.id, workspace]))\n );\n store.set(\n workspaceOrderAtom,\n workspaces.map((workspace) => workspace.id)\n );\n store.set(workspacesLoadStateAtom, seed.workspacesLoadState ?? \"ready\");\n store.set(workspacesLoadErrorAtom, seed.workspacesLoadError ?? null);\n store.set(\n activeWorkspaceIdAtom,\n seed.activeWorkspaceId === undefined ? (workspaces[0]?.id ?? null) : seed.activeWorkspaceId\n );\n store.set(\n sessionsAtom,\n Object.fromEntries((seed.sessions ?? []).map((session) => [session.id, session]))\n );\n store.set(commandPaletteOpenAtom, seed.commandPaletteOpen ?? false);\n store.set(branchQuickPickAtom, seed.branchQuickPick ?? { visible: false, inputValue: \"\" });\n store.set(terminalPanelVisibleAtom, seed.terminalPanelVisible ?? true);\n store.set(toastsAtom, seed.toasts ?? []);\n store.set(updateStateAtom, seed.updateState ?? null);\n store.set(\n supervisorDialogAtom,\n seed.supervisorDialog\n ? {\n draftEvaluatorModel: \"\",\n draftMaxSupervisionCount: \"0\",\n draftScheduledAt: \"\",\n ...seed.supervisorDialog,\n }\n : {\n open: false,\n sessionId: null,\n mode: \"enable\",\n draftObjective: \"\",\n draftEvaluatorProviderId: \"claude\",\n draftEvaluatorModel: \"\",\n draftMaxSupervisionCount: \"0\",\n draftScheduledAt: \"\",\n }\n );\n store.set(supervisorsAtom, new Map(Object.entries(seed.supervisorBySessionId ?? {})));\n store.set(wsClientAtom, {\n sendCommand: async <T>(op: string, args: unknown) => {\n const result = await dispatch<T>(op, args);\n if (!result.ok) {\n throw new Error(result.error?.message ?? `Preview command failed: ${op}`);\n }\n return result.data as T;\n },\n sendTerminalInput: async () => {},\n subscribe: () => () => {},\n connect: async () => {},\n disconnect: () => {},\n getStatus: () => \"connected\",\n } as never);\n\n for (const [workspaceId, layout] of Object.entries(seed.paneLayoutByWorkspaceId ?? {})) {\n store.set(paneLayoutAtomFamily(workspaceId), layout);\n }\n\n for (const [workspaceId, treeMap] of Object.entries(seed.fileTreeByWorkspaceId ?? {})) {\n store.set(fileTreeAtomFamily(workspaceId), treeMap);\n }\n\n for (const [workspaceId, path] of Object.entries(seed.activeFilePathByWorkspaceId ?? {})) {\n store.set(activeFilePathAtomFamily(workspaceId), path);\n }\n\n for (const [workspaceId, gitState] of Object.entries(seed.gitStateByWorkspaceId ?? {})) {\n store.set(gitStateAtomFamily(workspaceId), gitState);\n }\n\n for (const [workspaceId, branchList] of Object.entries(seed.gitBranchListByWorkspaceId ?? {})) {\n store.set(gitBranchListAtomFamily(workspaceId), {\n ...branchList,\n loading: false,\n });\n }\n\n for (const [workspaceId, preview] of Object.entries(seed.gitDiffPreviewByWorkspaceId ?? {})) {\n store.set(gitDiffPreviewAtomFamily(workspaceId), preview);\n }\n\n for (const [workspaceId, items] of Object.entries(seed.worktreeListByWorkspaceId ?? {})) {\n store.set(worktreeListAtomFamily(workspaceId), {\n items,\n loading: false,\n lastLoadedAt: 1,\n });\n }\n\n for (const [terminalId, meta] of Object.entries(seed.terminalMetaById ?? {})) {\n store.set(terminalMetaAtomFamily(terminalId), meta);\n }\n\n return store;\n}\n","import \"@vitejs/plugin-react/preamble\";\nimport { Provider } from \"jotai\";\nimport ReactDOM from \"react-dom/client\";\nimport { resolvePreviewRequest, UiPreviewApp } from \"./app\";\nimport { buildUiPreviewStore } from \"./preview-store\";\n\nimport \"@xterm/xterm/css/xterm.css\";\nimport \"../styles/fonts.css\";\nimport \"../styles/tokens.css\";\nimport \"../styles/base.css\";\nimport \"../styles/components.css\";\n\nconst request = resolvePreviewRequest(window.location.search);\nconst store = buildUiPreviewStore(\n request.scene ? request.scene.seed(request.context) : request.context\n);\nconst root = ReactDOM.createRoot(document.getElementById(\"root\") as HTMLElement);\n\nroot.render(\n <Provider store={store}>\n <UiPreviewApp request={request} />\n </Provider>\n);\n"],"mappings":"2xBAuBA,SAAA,GAAA,EAAA,CAmBE,OAlBA,EAAA,WAAA,aAAA,EAAA,EAAA,WAAA,SAAA,EAAA,EAAA,WAAA,OAAA,EAAA,EAAA,WAAA,OAAA,EAAA,EAAA,WAAA,KAAA,CAAA,OAUA,EAAA,WAAA,IAAA,CAAA,QAIA,EAAA,WAAA,IAAA,CAAA,UAIA,UAGF,IAAA,IAAA,CAAA,cAAA,UAAA,kBAAA,MAAA;4EAoBE,OAAA,EAAA,EAAA,KAAA,MAAA,mjCCjCF,SAAS,GAAqC,CAC5C,MAAO,CAAC,GAAG,EAAU,CAGvB,SAAS,IAAuC,CAC9C,OAAO,EAAU,OAAQ,GAAY,EAAQ,SAAS,SAAS,CAAC,CAGlE,IAAa,GAAsD,CACjE,CACE,GAAI,UACJ,MAAO,UACP,SAAU,OACV,OAAQ,aACR,YAAa,8DACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,gBAAiB,CACvC,CACD,CACE,GAAI,mBACJ,MAAO,qBACP,SAAU,OACV,OAAQ,aACR,YAAa,mEACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,iBAAkB,gBAAiB,UAAW,CACpE,CACD,CACE,GAAI,sBACJ,MAAO,wBACP,SAAU,OACV,OAAQ,aACR,YAAa,gEACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,iBAAkB,gBAAiB,aAAc,CACvE,CACD,CACE,GAAI,qBACJ,MAAO,uBACP,SAAU,OACV,OAAQ,aACR,YAAa,uDACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,iBAAkB,gBAAiB,YAAa,CACtE,CACD,CACE,GAAI,qBACJ,MAAO,uBACP,SAAU,OACV,OAAQ,aACR,YAAa,gFACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,iBAAkB,gBAAiB,YAAa,CACtE,CACD,CACE,GAAI,uBACJ,MAAO,yBACP,SAAU,OACV,OAAQ,aACR,YAAa,iEACb,QAAS,CAAC,SAAS,CACnB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,wBAAyB,CAC/C,CACD,CACE,GAAI,oBACJ,MAAO,oBACP,SAAU,UACV,OAAQ,aACR,YAAa,mFACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,qBAAsB,CAC5C,CACD,CACE,GAAI,oBACJ,MAAO,sBACP,SAAU,OACV,OAAQ,aACR,YAAa,4EACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,kBAAmB,CACzC,CACD,CACE,GAAI,mBACJ,MAAO,qBACP,SAAU,OACV,OAAQ,aACR,YAAa,uEACb,QAAS,CAAC,SAAS,CACnB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,+BAAgC,CACtD,CACD,CACE,GAAI,eACJ,MAAO,eACP,SAAU,OACV,OAAQ,aACR,YAAa,4EACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,mBAAoB,CAC1C,CACD,CACE,GAAI,eACJ,MAAO,eACP,SAAU,QACV,OAAQ,aACR,YACE,uFACF,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,mBAAoB,CAC1C,CACD,CACE,GAAI,YACJ,MAAO,YACP,SAAU,OACV,OAAQ,aACR,YAAa,4CACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,gBAAiB,CACvC,CACD,CACE,GAAI,uBACJ,MAAO,yBACP,SAAU,QACV,OAAQ,aACR,YAAa,wEACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,4BAA6B,CACnD,CACD,CACE,GAAI,yBACJ,MAAO,yBACP,SAAU,QACV,OAAQ,WACR,YAAa,yDACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,uCAAwC,CAC9D,CACD,CACE,GAAI,kBACJ,MAAO,kBACP,SAAU,QACV,OAAQ,WACR,YAAa,8DACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,2CAA4C,CAClE,CACD,CACE,GAAI,oBACJ,MAAO,oBACP,SAAU,QACV,OAAQ,WACR,YAAa,mFACb,QAAS,CAAC,SAAS,CACnB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,gCAAiC,CACvD,CACD,CACE,GAAI,cACJ,MAAO,cACP,SAAU,QACV,OAAQ,WACR,YAAa,8CACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,mBAAoB,CAC1C,CACD,CACE,GAAI,4BACJ,MAAO,4BACP,SAAU,OACV,OAAQ,WACR,YACE,qFACF,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,6BAA8B,CACpD,CACD,CACE,GAAI,oCACJ,MAAO,oCACP,SAAU,QACV,OAAQ,WACR,YACE,yFACF,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,iBAAkB,CACxC,CACD,CACE,GAAI,wBACJ,MAAO,wBACP,SAAU,OACV,OAAQ,WACR,YACE,0GACF,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,yBAA0B,CAChD,CACD,CACE,GAAI,oBACJ,MAAO,oBACP,SAAU,QACV,OAAQ,WACR,YACE,oFACF,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,mBAAoB,CAC1C,CACD,CACE,GAAI,yBACJ,MAAO,yBACP,SAAU,QACV,OAAQ,WACR,YAAa,wEACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,+CAAgD,CACtE,CACD,CACE,GAAI,0BACJ,MAAO,0BACP,SAAU,QACV,OAAQ,WACR,YAAa,8DACb,QAAS,CAAC,SAAS,CACnB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,2BAA4B,CAClD,CACD,CACE,GAAI,qBACJ,MAAO,qBACP,SAAU,QACV,OAAQ,WACR,YAAa,8DACb,QAAS,CAAC,SAAS,CACnB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,uBAAwB,CAC9C,CACD,CACE,GAAI,wBACJ,MAAO,wBACP,SAAU,QACV,OAAQ,WACR,YACE,sGACF,QAAS,CAAC,SAAS,CACnB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,0BAA2B,CACjD,CACD,CACE,GAAI,0BACJ,MAAO,0BACP,SAAU,QACV,OAAQ,WACR,YAAa,0DACb,QAAS,CAAC,SAAS,CACnB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,2BAA4B,CAClD,CACD,CACE,GAAI,oBACJ,MAAO,oBACP,SAAU,QACV,OAAQ,WACR,YAAa,2DACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,qBAAsB,CAC5C,CACD,CACE,GAAI,sBACJ,MAAO,wBACP,SAAU,OACV,OAAQ,WACR,YACE,yHACF,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,kBAAmB,CACzC,CACD,CACE,GAAI,wBACJ,MAAO,0BACP,SAAU,OACV,OAAQ,WACR,YACE,0GACF,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,kBAAmB,CACzC,CACD,CACE,GAAI,yBACJ,MAAO,2BACP,SAAU,OACV,OAAQ,WACR,YACE,sGACF,QAAS,CAAC,SAAS,CACnB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,+BAAgC,CACtD,CACD,CACE,GAAI,0BACJ,MAAO,4BACP,SAAU,OACV,OAAQ,WACR,YAAa,yEACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,+BAAgC,CACtD,CACD,CACE,GAAI,iCACJ,MAAO,mCACP,SAAU,OACV,OAAQ,WACR,YAAa,0EACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,gCAAiC,CACvD,CACD,CACE,GAAI,+BACJ,MAAO,iCACP,SAAU,OACV,OAAQ,WACR,YAAa,yEACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,gCAAiC,CACvD,CACD,CACE,GAAI,0BACJ,MAAO,4BACP,SAAU,OACV,OAAQ,WACR,YAAa,mFACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,+BAAgC,CACtD,CACD,CACE,GAAI,wBACJ,MAAO,0BACP,SAAU,OACV,OAAQ,WACR,YAAa,kFACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,6BAA8B,CACpD,CACD,CACE,GAAI,kCACJ,MAAO,oCACP,SAAU,QACV,OAAQ,WACR,YAAa,8EACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,iCAAkC,CACxD,CACD,CACE,GAAI,0BACJ,MAAO,4BACP,SAAU,OACV,OAAQ,WACR,YAAa,+EACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,iBAAkB,CACxC,CACD,CACE,GAAI,8BACJ,MAAO,gCACP,SAAU,OACV,OAAQ,WACR,YACE,oFACF,QAAS,CAAC,UAAU,CACpB,OAAQ,IAAe,CACvB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,iBAAkB,CACxC,CACD,CACE,GAAI,yBACJ,MAAO,2BACP,SAAU,QACV,OAAQ,WACR,YAAa,kFACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,uBAAwB,CAC9C,CACD,CACE,GAAI,2BACJ,MAAO,8BACP,SAAU,OACV,OAAQ,WACR,YAAa,sEACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,kCAAmC,CACzD,CACD,CACE,GAAI,mBACJ,MAAO,mBACP,SAAU,QACV,OAAQ,WACR,YAAa,8EACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,qDAAsD,CAC5E,CACD,CACE,GAAI,wBACJ,MAAO,0BACP,SAAU,QACV,OAAQ,WACR,YAAa,4DACb,QAAS,CAAC,UAAU,CACpB,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,cAAe,CACrC,CACD,CACE,GAAI,uBACJ,MAAO,uBACP,SAAU,QACV,OAAQ,WACR,YAAa,4DACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,yBAA0B,CAChD,CACD,CACE,GAAI,2BACJ,MAAO,6BACP,SAAU,QACV,OAAQ,WACR,YAAa,gFACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,cAAe,CACrC,CACD,CACE,GAAI,cACJ,MAAO,cACP,SAAU,QACV,OAAQ,WACR,YAAa,4BACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,gBAAiB,CACvC,CACD,CACE,GAAI,gBACJ,MAAO,gBACP,SAAU,UACV,OAAQ,WACR,YAAa,qCACb,QAAS,CAAC,UAAW,SAAS,CAC9B,OAAQ,GAAa,CACrB,QAAS,CAAC,KAAM,KAAK,CACrB,QAAS,CAAE,SAAU,4BAA6B,CACnD,CACF,CAEK,GAAgC,IAAI,IACxC,GAA0B,IAAK,GAAU,CAAC,EAAM,GAAI,EAAM,CAAC,CAC5D,CAED,SAAgB,EAA0B,EAA2C,CACnF,OAAO,GAA8B,IAAI,EAAG,EAAI,KChiBlD,IAAM,EAAuB,CAC3B,GAAI,YACJ,KAAM,eACN,KAAM,uCACN,cAAe,SACf,SAAU,EACV,aAAc,EACd,QAAS,CACP,eAAgB,IAChB,kBAAmB,IACnB,UAAW,GACX,gBAAiB,IAAA,GACjB,WAAY,CAAE,GAAI,OAAQ,KAAM,OAAQ,CACzC,CACF,CAEK,EAAuB,CAC3B,OAAQ,OACR,MAAO,EACP,OAAQ,EACR,OAAQ,CAAC,CAAE,KAAM,qCAAsC,OAAQ,WAAY,CAAC,CAC5E,SAAU,CACR,CAAE,KAAM,yCAA0C,OAAQ,WAAY,CACtE,CAAE,KAAM,+DAAgE,OAAQ,WAAY,CAC7F,CACD,UAAW,CACT,CAAE,KAAM,6DAA8D,OAAQ,YAAa,CAC5F,CACD,QAAS,EAAE,CACZ,CAEK,GAAiC,CACrC,CACE,IAAK,2CACL,SAAU,UACV,QAAS,0CACT,WAAY,UACZ,WAAY,WACb,CACD,CACE,IAAK,2CACL,SAAU,UACV,QAAS,6CACT,WAAY,UACZ,WAAY,WACb,CACF,CAEK,EAA4B,CAChC,CACE,KAAM,OACN,KAAM,uCACN,OAAQ,OACR,OAAQ,UACR,OAAQ,QACT,CACD,CACE,KAAM,uBACN,KAAM,uEACN,OAAQ,uBACR,OAAQ,UACR,OAAQ,QACT,CACF,CAEK,GAAkD,EACrD,EAAU,GAAG,MAAO,EACtB,CAEK,GAAiD,EACpD,EAAU,GAAG,MAAO,CACnB,CAAE,KAAM,WAAY,KAAM,WAAY,KAAM,MAAO,CACnD,CAAE,KAAM,OAAQ,KAAM,OAAQ,KAAM,MAAO,CAC3C,CAAE,KAAM,YAAa,KAAM,YAAa,KAAM,OAAQ,CACvD,CACF,CAEK,GAAuB,CAC3B,CAAE,KAAM,WAAY,KAAM,WAAY,KAAM,MAAO,CACnD,CAAE,KAAM,OAAQ,KAAM,OAAQ,KAAM,MAAO,CAC3C,CAAE,KAAM,YAAa,KAAM,YAAa,KAAM,OAAQ,CACvD,CAEK,GAA2B,CAC/B,CAAE,KAAM,MAAO,KAAM,eAAgB,KAAM,MAAO,CAClD,CAAE,KAAM,OAAQ,KAAM,gBAAiB,KAAM,MAAO,CACrD,CAEK,GAAsB,CAC1B,CAAE,KAAM,MAAO,KAAM,mBAAoB,KAAM,MAAO,CACtD,CAAE,KAAM,eAAgB,KAAM,4BAA6B,KAAM,OAAQ,CAC1E,CAEK,GAAsB,CAC1B,CAAE,KAAM,SAAU,KAAM,0BAA2B,KAAM,MAAO,CAChE,CAAE,KAAM,aAAc,KAAM,8BAA+B,KAAM,MAAO,CACxE,CAAE,KAAM,UAAW,KAAM,2BAA4B,KAAM,OAAQ,CACpE,CAEK,GAA4B,CAChC,CAAE,KAAM,iBAAkB,KAAM,yCAA0C,KAAM,OAAQ,CACxF,CAAE,KAAM,aAAc,KAAM,qCAAsC,KAAM,OAAQ,CACjF,CAEK,GAAoB,CACxB,+BACA,8EACA,2BACA,GACA,WACA,iFACA,2CACA,oBACA,cACD,CAED,SAAS,EACP,EACA,EAC0B,CAC1B,IAAM,EAAW,EAA0B,EAAG,CAC9C,GAAI,CAAC,EACH,MAAU,MAAM,mCAAmC,IAAK,CAG1D,MAAO,CACL,GAAG,EACH,GAAG,EACJ,CAGH,SAAS,EAAmB,EAIzB,CACD,MAAO,CACL,GAAG,EACH,WAAY,CACV,EACA,CACE,GAAG,EACH,GAAI,cACJ,KAAM,aACN,KAAM,qCACP,CACF,CACD,kBAAmB,EAAU,GAC7B,sBAAuB,EACpB,EAAU,IAAK,IAAI,IAAwB,CAC1C,CAAC,IAAK,GAAS,CACf,CAAC,WAAY,GAAa,CAC1B,CAAC,eAAgB,GAAQ,CACzB,CAAC,mBAAoB,GAAQ,CAC9B,CAAC,CACH,CACD,sBAAuB,EACpB,EAAU,IAAK,EACjB,CACD,2BAA4B,EACzB,EAAU,IAAK,CACd,QAAS,OACT,SAAU,CACR,CAAE,KAAM,OAAQ,UAAW,GAAM,SAAU,GAAO,CAClD,CAAE,KAAM,uBAAwB,UAAW,GAAO,SAAU,GAAO,CACnE,CAAE,KAAM,cAAe,UAAW,GAAO,SAAU,GAAM,CAC1D,CACF,CACF,CACD,0BAA2B,EACxB,EAAU,IAAK,EACjB,CACD,SAAU,CACR,cAAe,CAAC,EAAU,CAC1B,sBAAuB,EACpB,EAAU,IAAK,CACd,IAAK,GACL,SAAU,GACV,eAAgB,GAChB,mBAAoB,GACrB,CACF,CACD,wBAAyB,EACtB,EAAU,IAAK,GACjB,CACD,uBAAwB,EACrB,EAAU,IAAK,EACjB,CACD,yBAA0B,EACvB,EAAU,IAAK,CACd,QAAS,OACT,SAAU,CACR,CAAE,KAAM,OAAQ,UAAW,GAAM,SAAU,GAAO,CAClD,CAAE,KAAM,uBAAwB,UAAW,GAAO,SAAU,GAAO,CACnE,CAAE,KAAM,cAAe,UAAW,GAAO,SAAU,GAAM,CAC1D,CACF,CACF,CACD,oBAAqB,EAClB,EAAU,IAAK,CAAE,QAAS,GAAY,CACxC,CACD,qBAAsB,EACnB,EAAU,IAAK,CACd,KAAM;;mCACP,CACF,CACD,qBAAsB,EACnB,EAAU,IAAK,CAAE,KAAM;kCAA4D,CACrF,CACD,0BAA2B,EACxB,EAAU,IAAK,EACjB,CACD,wBACA,mBAAoB,EACjB,EAAU,GAAG,MAAO;0CACtB,CACD,sBACA,0BAA2B,EACxB,EAAU,IAAK,EAAE,CACnB,CACF,CACF,CAGH,SAAS,EAAmB,CAC1B,WACA,aAIC,CACD,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAY,wBAAwB,IAAc,uBAC/D,WACG,CAAA,CAIV,SAAS,IAA6B,CACpC,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+BACb,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4CAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8BAAf,EACE,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,0BAAhB,CAAiC,mEAE/B,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,2BAAkB,IAAQ,CAAA,CACrC,IACP,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4BAAf,EACE,EAAA,EAAA,KAAC,SAAD,CAAQ,KAAK,SAAS,UAAU,gBAAgB,aAAW,YAAY,SAAA,YAAS,OAEvE,CAAA,EACT,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,UAAU,uBACV,aAAW,kCACZ,UAEQ,CAAA,CACL,GACF,IACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACZ,GAAkB,KAAK,EAAM,KAC5B,EAAA,EAAA,MAAC,MAAD,CAA8B,UAAU,qBAAxC,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,yBAAiB,EAAQ,EAAS,CAAA,EAClD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,8BAAsB,GAAQ,IAAW,CAAA,CACrD,EAHI,GAAG,EAAM,GAAG,IAGhB,CACN,CACE,CAAA,CACF,CAAA,CACF,GACF,CAAA,CAIV,SAAgB,IAAwD,CACtE,MAAO,CACL,EAAM,0BAA2B,CAC/B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,EAAmB,EAAQ,CAC9C,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,4DACb,EAAA,EAAA,KAAC,EAAD,EAAU,CAAA,CACN,CAAA,CACa,CAAA,CAExB,CAAC,CACF,EAAM,iCAAkC,CACtC,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,EAAmB,EAAQ,CAC9C,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6DACb,EAAA,EAAA,KAAC,GAAD,CAAe,YAAa,EAAU,GAAI,QAAQ,UAAY,CAAA,CAC1D,CAAA,CACa,CAAA,CAExB,CAAC,CACF,EAAM,+BAAgC,CACpC,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,EAAmB,EAAQ,CAC9C,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6DACb,EAAA,EAAA,KAAC,EAAD,CAAU,YAAa,EAAU,GAAI,QAAQ,UAAY,CAAA,CACrD,CAAA,CACa,CAAA,CAExB,CAAC,CACF,EAAM,0BAA2B,CAC/B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,EAAmB,EAAQ,CAC9C,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,4DACb,EAAA,EAAA,KAAC,GAAD,EAA8B,CAAA,CAC1B,CAAA,CACa,CAAA,CAExB,CAAC,CACF,EAAM,wBAAyB,CAC7B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EAAmB,EAAQ,CAC9B,4BAA6B,EAC1B,EAAU,IAAK,CACd,KAAM,yCACN,KAAM,CACJ,qBACA,oCACA,qCACA,sCACD,CAAC,KAAK;EAAK,CACZ,OAAQ,OACT,CACF,CACF,EACD,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0DACb,EAAA,EAAA,KAAC,GAAD,CAAe,YAAa,EAAU,GAAI,gBAAiB,GAAS,CAAA,CAChE,CAAA,CACa,CAAA,CAExB,CAAC,CACF,EAAM,kCAAmC,CACvC,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,EAAmB,EAAQ,CAC9C,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8DACb,EAAA,EAAA,KAAC,EAAD,EAAiB,CAAA,CACb,CAAA,CACa,CAAA,CAExB,CAAC,CACF,EAAM,0BAA2B,CAC/B,YAAe,CAAE,eAAgB,CAAC,YAAY,CAAE,KAAM,YAAa,EACnE,KAAO,IAAa,CAClB,GAAG,EAAmB,EAAQ,CAC9B,SAAU,CACR,GAAG,EAAmB,EAAQ,CAAC,SAC/B,YAAa,CACX,wBAAyB,GACzB,6BAA8B,GAC9B,kCAAmC,IACnC,oBAAqB,EAAQ,OAC7B,qBAAsB,EAAQ,MAC9B,8BAA+B,WAC/B,kCAAmC,CAAC,YAAY,CAChD,iCAAkC,CAAC,YAAa,kBAAkB,CACnE,CACD,eAAgB,EAAE,CAClB,mCAAoC,CAClC,OAAQ,mBACR,MAAO,kCACR,CACF,CACF,EACD,YAAc,EAAA,EAAA,KAAC,EAAD,EAAgB,CAAA,CAC/B,CAAC,CACF,EAAM,8BAA+B,CACnC,YAAe,CAAE,eAAgB,CAAC,YAAY,CAAE,KAAM,YAAa,EACnE,KAAO,IAAa,CAClB,GAAG,EAAmB,EAAQ,CAC9B,SAAU,CACR,GAAG,EAAmB,EAAQ,CAAC,SAC/B,YAAa,CACX,wBAAyB,GACzB,6BAA8B,GAC9B,kCAAmC,IACnC,oBAAqB,EAAQ,OAC7B,qBAAsB,EAAQ,MAC9B,8BAA+B,WAC/B,kCAAmC,CAAC,YAAY,CAChD,iCAAkC,CAAC,YAAa,kBAAkB,CACnE,CACD,eAAgB,EAAE,CAClB,mCAAoC,CAClC,OAAQ,mBACR,MAAO,kCACR,CACF,CACF,EACD,YAAc,EAAA,EAAA,KAAC,EAAD,EAAgB,CAAA,CAC/B,CAAC,CACF,EAAM,yBAA0B,CAC9B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EAAmB,EAAQ,CAC9B,mBAAoB,GACpB,SAAU,CACR,GAAG,EAAmB,EAAQ,CAAC,SAC/B,gBAAiB,CACf,YAAa,0BACb,WAAY,gBACZ,YAAa,CACX,CAAE,KAAM,eAAgB,KAAM,uCAAwC,UAAW,GAAI,CACrF,CAAE,KAAM,aAAc,KAAM,qCAAsC,UAAW,EAAG,CACjF,CACF,CACD,cAAe,EAChB,CACF,EACD,YACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gCACb,EAAA,EAAA,KAAC,EAAD,EAAkB,CAAA,CACd,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gCACb,EAAA,EAAA,KAAC,EAAD,CAAsB,YAAe,GAAM,CAAA,CACvC,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8DAEb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6CACb,EAAA,EAAA,KAAC,EAAD,CACE,qBAAA,GACA,YAAa,EAAU,GACvB,SAAS,OACT,YAAe,GACf,CAAA,CACE,CAAA,CACF,CAAA,CACF,GAET,CAAC,CACF,EAAM,2BAA4B,CAChC,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,EAAmB,EAAQ,CAC9C,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+DACb,EAAA,EAAA,KAAC,EAAD,CAAoB,MAAM,QAAQ,SAAU,EAAW,YAAa,EAAU,GAAM,CAAA,CAChF,CAAA,CACa,CAAA,CAExB,CAAC,CACH,CC/cH,IAAM,EAAuB,CAC3B,GAAI,aACJ,KAAM,eACN,KAAM,uCACN,cAAe,SACf,SAAU,EACV,aAAc,EACd,QAAS,CACP,eAAgB,IAChB,kBAAmB,IACnB,UAAW,GACX,WAAY,CAAE,GAAI,OAAQ,KAAM,OAAQ,CACzC,CACF,CAEK,GAAuB,CAC3B,OAAQ,OACR,MAAO,EACP,OAAQ,EACR,OAAQ,EAAE,CACV,SAAU,CAAC,CAAE,KAAM,2BAA4B,OAAQ,WAAY,CAAC,CACpE,UAAW,CAAC,CAAE,KAAM,yBAA0B,OAAQ,YAAa,CAAC,CACpE,QAAS,EAAE,CACZ,CAEK,EAAc,IAAI,IACxB,EAAY,IAAI,IAAK,CACnB,CAAE,KAAM,WAAY,KAAM,WAAY,KAAM,MAAO,CACnD,CAAE,KAAM,SAAU,KAAM,SAAU,KAAM,MAAO,CAC/C,CAAE,KAAM,YAAa,KAAM,YAAa,KAAM,OAAQ,CACvD,CAAC,CAEF,SAAS,EAAkB,EAAgC,CACzD,MAAO,CACL,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,SAAU,CACR,YAAa,CACX,wBAAyB,GACzB,6BAA8B,GAC9B,kCAAmC,IACnC,oBAAqB,EAAQ,OAC7B,qBAAsB,EAAQ,MAC9B,8BAA+B,WAC/B,kCAAmC,CAAC,YAAY,CAChD,iCAAkC,CAAC,YAAa,kBAAkB,CACnE,CACD,eAAgB,EAAE,CAClB,mCAAoC,CAClC,OAAQ,mBACR,MAAO,kCACR,CACF,CACF,CAGH,SAAS,GAAmB,EAAgC,EAAsB,EAAE,CAAE,CACpF,MAAO,CACL,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,WACA,wBAAyB,EACtB,EAAU,IAAK,CAAE,GAAI,OAAQ,KAAM,OAAQ,CAC7C,CACD,sBAAuB,EACpB,EAAU,IAAK,EACjB,CACD,sBAAuB,EACpB,EAAU,IAAK,GACjB,CACD,2BAA4B,EACzB,EAAU,IAAK,CACd,QAAS,OACT,SAAU,CACR,CAAE,KAAM,OAAQ,UAAW,GAAM,SAAU,GAAO,CAClD,CAAE,KAAM,iBAAkB,UAAW,GAAO,SAAU,GAAO,CAC9D,CACF,CACF,CACD,0BAA2B,EACxB,EAAU,IAAK,EAAE,CACnB,CACD,SAAU,CACR,cAAe,CAAC,EAAU,CAC1B,yBAA0B,EAAG,EAAU,IAAK,EAAU,CACtD,uBAAwB,EAAG,EAAU,IAAK,GAAW,CACrD,yBAA0B,EACvB,EAAU,IAAK,CACd,QAAS,OACT,SAAU,CACR,CAAE,KAAM,OAAQ,UAAW,GAAM,SAAU,GAAO,CAClD,CAAE,KAAM,iBAAkB,UAAW,GAAO,SAAU,GAAO,CAC9D,CACF,CACF,CACD,sBAAuB,EACpB,EAAU,IAAK,CACd,IAAK,EAAY,IAAI,IAAI,EAAI,EAAE,CAChC,CACF,CACD,0BAA2B,EACxB,EAAU,IAAK,EAAE,CACnB,CACD,0BAA2B,EACxB,EAAU,IAAK,EAAE,CACnB,CACF,CACF,CAGH,SAAS,EACP,EACA,EAC0B,CAC1B,IAAM,EAAW,EAA0B,EAAG,CAC9C,GAAI,CAAC,EACH,MAAU,MAAM,mCAAmC,IAAK,CAG1D,MAAO,CACL,GAAG,EACH,GAAG,EACJ,CAGH,SAAgB,IAA+C,CAC7D,MAAO,CACL,EAAM,UAAW,CACf,YAAe,CAAE,eAAgB,CAAC,IAAI,CAAE,KAAM,IAAK,EACnD,KAAO,IAAa,CAAE,GAAG,EAAS,EAClC,YAAc,EAAA,EAAA,KAAC,GAAD,EAAe,CAAA,CAC9B,CAAC,CACF,EAAM,mBAAoB,CACxB,YAAe,CAAE,eAAgB,CAAC,YAAY,CAAE,KAAM,YAAa,EACnE,KAAO,GAAY,EAAkB,EAAQ,CAC7C,YAAc,EAAA,EAAA,KAAC,EAAD,EAAgB,CAAA,CAC/B,CAAC,CACF,EAAM,sBAAuB,CAC3B,YAAe,CAAE,eAAgB,CAAC,YAAY,CAAE,KAAM,YAAa,EACnE,KAAO,GAAY,EAAkB,EAAQ,CAC7C,YAAc,EAAA,EAAA,KAAC,EAAD,EAAgB,CAAA,CAC/B,CAAC,CACF,EAAM,qBAAsB,CAC1B,YAAe,CAAE,eAAgB,CAAC,YAAY,CAAE,KAAM,YAAa,EACnE,KAAO,GAAY,EAAkB,EAAQ,CAC7C,YAAc,EAAA,EAAA,KAAC,EAAD,EAAgB,CAAA,CAC/B,CAAC,CACF,EAAM,qBAAsB,CAC1B,YAAe,CAAE,eAAgB,CAAC,YAAY,CAAE,KAAM,YAAa,EACnE,KAAO,GAAY,EAAkB,EAAQ,CAC7C,YAAc,EAAA,EAAA,KAAC,EAAD,EAAgB,CAAA,CAC/B,CAAC,CACF,EAAM,uBAAwB,CAC5B,YAAe,CAAE,eAAgB,CAAC,YAAY,CAAE,KAAM,YAAa,EACnE,KAAO,GAAY,EAAkB,CAAE,GAAG,EAAS,OAAQ,SAAU,CAAC,CACtE,YAAc,EAAA,EAAA,KAAC,EAAD,EAAgB,CAAA,CAC/B,CAAC,CACF,EAAM,oBAAqB,CACzB,YAAe,CAAE,eAAgB,CAAC,IAAI,CAAE,KAAM,IAAK,EACnD,KAAO,IAAa,CAClB,GAAG,EACH,YAAa,KACb,cAAe,GACf,iBAAkB,aAClB,WAAY,EAAE,CACd,kBAAmB,KACnB,oBAAqB,OACtB,EACD,OAAS,GAAa,EAAQ,SAAW,UAAW,EAAA,EAAA,KAAC,GAAD,EAAe,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,EAAgB,CAAA,CACvF,CAAC,CACF,EAAM,oBAAqB,CACzB,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,GAAmB,EAAQ,CAC9C,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,GAAD,EAAwB,CAAA,CACL,CAAA,CAExB,CAAC,CACF,EAAM,mBAAoB,CACxB,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,GAAmB,EAAQ,CAC9C,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,GAAD,EAAuB,CAAA,CACJ,CAAA,CAExB,CAAC,CACF,EAAM,eAAgB,CACpB,YAAe,CAAE,eAAgB,CAAC,SAAS,CAAE,KAAM,SAAU,EAC7D,KAAO,IAAa,CAClB,GAAG,EACH,YAAa,GACb,cAAe,GAChB,EACD,YAAc,EAAA,EAAA,KAAC,GAAD,EAAa,CAAA,CAC5B,CAAC,CACF,EAAM,eAAgB,CACpB,YAAe,CAAE,eAAgB,CAAC,gBAAgB,CAAE,KAAM,gBAAiB,EAC3E,KAAO,IAAa,CAClB,GAAG,EACH,YAAa,GACb,cAAe,GAChB,EACD,YAAc,EAAA,EAAA,KAAC,GAAD,EAAmB,CAAA,CAClC,CAAC,CACF,EAAM,YAAa,CACjB,YAAe,CAAE,eAAgB,CAAC,mBAAmB,CAAE,KAAM,IAAK,EAClE,KAAO,IAAa,CAAE,GAAG,EAAS,EAClC,YAAc,EAAA,EAAA,KAAC,GAAD,EAAgB,CAAA,CAC/B,CAAC,CACF,EAAM,uBAAwB,CAC5B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,YAAa,GACb,cAAe,GACf,WAAY,EAAE,CACd,kBAAmB,KACnB,oBAAqB,QACrB,oBAAqB,iCACtB,EACD,YACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,GAAD,EAAuB,CAAA,CACJ,CAAA,CAExB,CAAC,CACH,CCzOH,SAAgB,GAAsB,CAAE,YAAW,UAAsC,CACvF,IAAM,EAAc,GAAa,EAAgB,CAC3C,EAAI,GAAgB,CAEpB,GAAA,EAAA,EAAA,aAAqB,CACzB,GAAI,CAAC,EACH,OAAO,KAGT,IAAM,EAAa,EAAY,IAAI,EAAU,CAQ7C,OAPK,EAOE,CACL,MAAO,EAAW,MAClB,MAAO,EAAE,mBAAmB,CAC7B,CATQ,CACL,MAAO,WACP,MAAO,EAAE,mBAAmB,CAC7B,EAOF,CAAC,EAAW,EAAa,EAAE,CAAC,CAM/B,OAJK,GAKH,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,UAAW,oDAAoD,EAAK,QACpE,aAAY,EAAE,+BAA+B,CAC7C,QAAS,WAJX,EAME,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gCAAgC,cAAY,iBAC1D,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,mBAAmB,KAAM,GAAM,CAAA,CAC/C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,0CAAkC,EAAK,MAAa,CAAA,CAC7D,GAdF,KCFX,IAAM,EAAuB,CAC3B,GAAI,aACJ,KAAM,eACN,KAAM,uCACN,cAAe,SACf,SAAU,EACV,aAAc,EACd,QAAS,CACP,eAAgB,IAChB,kBAAmB,IACnB,UAAW,GACX,gBAAiB,oBACjB,WAAY,CAAE,GAAI,OAAQ,KAAM,OAAQ,CACzC,CACF,CAEK,EAAyB,CAC7B,GAAI,gBACJ,UAAW,oBACX,YAAa,aACb,MAAO,OACP,SAAU,mBACV,UAAW,wCACX,oBAAqB,SACrB,oBAAqB,EACrB,0BAA2B,EAC3B,oBAAqB,CACnB,SAAU,mBACV,uBAAwB,GACxB,kBAAmB,QACnB,MAAO,CACL,CACE,GAAI,UACJ,KAAM,QACN,MAAO,8BACP,UAAW,kDACX,YAAa,2BACb,mBAAoB,CAAC,gCAAgC,CACrD,OAAQ,OACT,CACD,CACE,GAAI,UACJ,KAAM,QACN,MAAO,qCACP,UAAW,kDACX,YAAa,oDACb,mBAAoB,CAAC,0DAA0D,CAC/E,OAAQ,cACT,CACD,CACE,GAAI,UACJ,KAAM,QACN,MAAO,0CACP,UAAW,4CACX,YAAa,2BACb,mBAAoB,CAAC,gCAAgC,CACrD,OAAQ,UACT,CACF,CACD,aAAc,UACd,gBAAiB,+DACjB,aAAc,EACd,UAAW,EACZ,CACD,mBAAoB,CAClB,CACE,QAAS,yBACT,SAAU,mBACV,UAAW,EACX,YAAa,EACb,OAAQ,WACR,OAAQ,+EACT,CACF,CACD,UAAW,EACX,UAAW,EACZ,CAEK,EAA4B,CAChC,CACE,KAAM,iBACN,KAAM,sDACN,OAAQ,iBACR,OAAQ,UACR,OAAQ,QACT,CACF,CAEK,GAA4B,CAChC,OAAQ,iBACR,MAAO,EACP,OAAQ,EACR,OAAQ,EAAE,CACV,SAAU,CAAC,CAAE,KAAM,sCAAuC,OAAQ,WAAY,CAAC,CAC/E,UAAW,EAAE,CACb,QAAS,EAAE,CACZ,CAEK,GAA2B,CAC/B,CAAE,KAAM,WAAY,KAAM,WAAY,KAAM,MAAO,CACnD,CAAE,KAAM,SAAU,KAAM,SAAU,KAAM,MAAO,CAChD,CAEK,GAAgD,CACpD,QAAS,EACT,eAAgB,QAChB,cAAe,QACf,aAAc,mBACd,aAAc,OACd,cAAe,WACf,cAAe,KACf,UAAW,KACX,WAAY,KACZ,mBAAoB,GACpB,cAAe,KACf,aAAc,KACd,UAAW,GACX,YAAa,aACb,kBAAmB,KACpB,CAEK,GAA2B,CAC/B,CAAE,KAAM,WAAY,KAAM,WAAY,KAAM,MAAO,CACnD,CAAE,KAAM,YAAa,KAAM,YAAa,KAAM,OAAQ,CACtD,CAAE,KAAM,sBAAuB,KAAM,sBAAuB,KAAM,OAAQ,CAC3E,CAEK,GAA+B,CACnC,CAAE,KAAM,MAAO,KAAM,eAAgB,KAAM,MAAO,CAClD,CAAE,KAAM,OAAQ,KAAM,gBAAiB,KAAM,MAAO,CACrD,CAEK,EAAoC,CACxC,OAAQ,yBACR,MAAO,EACP,OAAQ,EACR,QAAS,2CACT,aAAc,UACd,YAAa,+CACb,OAAQ,CAAC,CAAE,KAAM,YAAa,OAAQ,WAAY,CAAC,CACnD,SAAU,CACR,CAAE,KAAM,yDAA0D,OAAQ,WAAY,CACtF,CAAE,KAAM,yDAA0D,OAAQ,WAAY,CACvF,CACD,UAAW,CAAC,CAAE,KAAM,kDAAmD,OAAQ,YAAa,CAAC,CAC7F,QAAS,EAAE,CACZ,CAEK,GAAuB,CAC3B,CACE,IAAK,2CACL,SAAU,UACV,QAAS,+CACT,WAAY,UACZ,WAAY,WACb,CACD,CACE,IAAK,2CACL,SAAU,UACV,QAAS,yCACT,WAAY,UACZ,WAAY,WACb,CACF,CAEK,GAAwB,CAC5B,CACE,GAAI,sBACJ,YAAa,EAAU,GACvB,WAAY,yBACZ,WAAY,QACZ,MAAO,UACP,WAAY,OACZ,UAAW,EACX,aAAc,EACd,MAAO,mDACR,CACF,CAEK,GAAuB,CAC3B,CACE,GAAI,wBACJ,YAAa,EAAU,GACvB,WAAY,2BACZ,WAAY,SACZ,MAAO,OACP,WAAY,OACZ,UAAW,EACX,aAAc,EACd,MAAO,gCACR,CACF,CAEK,EAA+B,CACnC,GAAI,kBACJ,UAAW,sBACX,YAAa,EAAU,GACvB,MAAO,aACP,SAAU,wBACV,UAAW,2EACX,oBAAqB,SACrB,oBAAqB,EACrB,0BAA2B,EAC3B,oBAAqB,CACnB,SAAU,wBACV,uBAAwB,GACxB,kBAAmB,QACnB,MAAO,CACL,CACE,GAAI,UACJ,KAAM,QACN,MAAO,qDACP,UAAW,qCACX,YAAa,6BACb,mBAAoB,CAAC,2BAA2B,CAChD,OAAQ,OACT,CACD,CACE,GAAI,UACJ,KAAM,QACN,MAAO,gDACP,UAAW,mCACX,YAAa,8BACb,mBAAoB,CAAC,4BAA4B,CACjD,OAAQ,cACT,CACD,CACE,GAAI,UACJ,KAAM,QACN,MAAO,yDACP,UAAW,kCACX,YAAa,0CACb,mBAAoB,CAAC,qCAAqC,CAC1D,OAAQ,UACT,CACF,CACD,aAAc,UACd,gBAAiB,8EACjB,aAAc,EACd,UAAW,EACZ,CACD,mBAAoB,CAClB,CACE,QAAS,wBACT,SAAU,wBACV,UAAW,EACX,YAAa,EACb,OAAQ,WACR,OAAQ,+EACT,CACF,CACD,UAAW,EACX,UAAW,EACZ,CAEK,GAAqC,CACzC,GAAG,EACH,GAAI,oBACJ,UAAW,wBACX,MAAO,OACP,oBAAqB,CACnB,SAAU,wBACV,uBAAwB,GACxB,kBAAmB,QACnB,MAAO,CACL,CACE,GAAI,UACJ,KAAM,QACN,MAAO,qDACP,UAAW,qCACX,YAAa,6BACb,mBAAoB,CAAC,2BAA2B,CAChD,OAAQ,OACT,CACD,CACE,GAAI,UACJ,KAAM,QACN,MAAO,gDACP,UAAW,mCACX,YAAa,8BACb,mBAAoB,CAAC,4BAA4B,CACjD,OAAQ,OACT,CACD,CACE,GAAI,UACJ,KAAM,QACN,MAAO,yDACP,UAAW,kCACX,YAAa,0CACb,mBAAoB,CAAC,qCAAqC,CAC1D,OAAQ,cACT,CACF,CACD,aAAc,UACd,gBACE,kFACF,aAAc,EACd,UAAW,EACZ,CACD,mBAAoB,CAClB,CACE,QAAS,+BACT,SAAU,wBACV,UAAW,EACX,YAAa,EACb,OAAQ,WACR,OACE,0FACH,CACF,CACD,UAAW,EACX,UAAW,EACZ,CAED,SAAS,IAAgC,CACvC,MAAO,CACL,IAAK,CACH,CAAE,KAAM,OAAQ,KAAM,OAAQ,KAAM,MAAO,CAC3C,CAAE,KAAM,WAAY,KAAM,WAAY,KAAM,MAAO,CACnD,CAAE,KAAM,YAAa,KAAM,YAAa,KAAM,OAAQ,CACtD,CAAE,KAAM,kBAAmB,KAAM,kBAAmB,KAAM,OAAQ,CACnE,CACD,KAAM,CACJ,CAAE,KAAM,OAAQ,KAAM,YAAa,KAAM,MAAO,CAChD,CAAE,KAAM,YAAa,KAAM,iBAAkB,KAAM,MAAO,CAC3D,CACD,YAAa,CACX,CAAE,KAAM,SAAU,KAAM,mBAAoB,KAAM,MAAO,CACzD,CAAE,KAAM,mBAAoB,KAAM,6BAA8B,KAAM,OAAQ,CAC/E,CACD,mBAAoB,CAClB,CACE,KAAM,wCACN,KAAM,yDACN,KAAM,OACP,CACD,CACE,KAAM,oBACN,KAAM,qCACN,KAAM,OACP,CACD,CACE,KAAM,wBACN,KAAM,yCACN,KAAM,OACP,CACF,CACD,SAAU,CACR,CAAE,KAAM,MAAO,KAAM,eAAgB,KAAM,MAAO,CAClD,CAAE,KAAM,OAAQ,KAAM,gBAAiB,KAAM,MAAO,CACrD,CACF,CAGH,SAAS,EAA2B,EAIjC,CACD,IAAM,EAAiB,IAA+B,CAEtD,MAAO,CACL,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,SAAU,GACV,wBAAyB,EACtB,EAAU,IAAK,CACd,GAAI,OACJ,KAAM,QACN,UAAW,aACX,SAAU,CACR,CACE,GAAI,YACJ,KAAM,OACN,UAAW,sBACZ,CACD,CACE,GAAI,aACJ,KAAM,OACN,UAAW,sBACZ,CACF,CACD,UAAW,sBACZ,CACF,CACD,sBAAuB,EACpB,EAAU,IAAK,IAAI,IAAwB,OAAO,QAAQ,EAAe,CAAC,CAC5E,CACD,sBAAuB,EACpB,EAAU,IAAK,EACjB,CACD,2BAA4B,EACzB,EAAU,IAAK,CACd,QAAS,yBACT,SAAU,CACR,CAAE,KAAM,yBAA0B,UAAW,GAAM,SAAU,GAAO,CACpE,CAAE,KAAM,OAAQ,UAAW,GAAO,SAAU,GAAO,CACnD,CAAE,KAAM,cAAe,UAAW,GAAO,SAAU,GAAM,CAC1D,CACF,CACF,CACD,iBAAkB,CAChB,yBAA0B,CACxB,GAAI,yBACJ,YAAa,EAAU,GACvB,KAAM,QACN,MAAO,GACP,MAAO,gBACR,CACD,yBAA0B,CACxB,GAAI,yBACJ,YAAa,EAAU,GACvB,KAAM,QACN,MAAO,GACP,MAAO,kBACR,CACF,CACD,mBAAoB,CAClB,yBAA0B,CACxB,IAAI,aAAa,CAAC,OAChB,CACE,kEACA,uDACA,kGACA,GACA,iEACA,8CACD,CAAC,KAAK;EAAK,CACb,CACF,CACD,yBAA0B,CACxB,IAAI,aAAa,CAAC,OAChB,CACE,0HACA,8CACA,yCACA,GACA,6DACA,uDACD,CAAC,KAAK;EAAK,CACb,CACF,CACF,CACD,sBAAuB,CACrB,sBAAuB,EACxB,CACD,SAAU,CACR,cAAe,CAAC,EAAU,CAC1B,yBAA0B,EACvB,EAAU,IAAK,GACjB,CACD,sBAAuB,EACpB,EAAU,IAAK,EACjB,CACD,uBAAwB,EACrB,EAAU,IAAK,EACjB,CACD,yBAA0B,EACvB,EAAU,IAAK,CACd,QAAS,yBACT,SAAU,CACR,CAAE,KAAM,yBAA0B,UAAW,GAAM,SAAU,GAAO,CACpE,CAAE,KAAM,OAAQ,UAAW,GAAO,SAAU,GAAO,CACnD,CAAE,KAAM,cAAe,UAAW,GAAO,SAAU,GAAM,CAC1D,CACF,CACF,CACD,0BAA2B,EACxB,EAAU,IAAK,CACd,CACE,GAAI,yBACJ,YAAa,EAAU,GACvB,KAAM,QACN,MAAO,kBACP,IAAK,EAAU,KACf,KAAM,CAAC,MAAM,CACb,KAAM,IACN,KAAM,GACN,MAAO,GACP,UAAW,EACZ,CACD,CACE,GAAI,2BACJ,YAAa,EAAU,GACvB,KAAM,QACN,MAAO,iBACP,IAAK,EAAU,KACf,KAAM,CAAC,MAAM,CACb,KAAM,IACN,KAAM,GACN,MAAO,GACP,UAAW,EACZ,CACF,CACF,CACD,sBAAuB,CACrB,sBAAuB,EACxB,CACF,CACF,CAGH,SAAS,GAA6B,EAInC,CACD,IAAM,EAAiB,IAA+B,CAEtD,MAAO,CACL,GAAG,EAA2B,EAAQ,CACtC,sBAAuB,EACpB,EAAU,IAAK,IAAI,IAAwB,OAAO,QAAQ,EAAe,CAAC,CAC5E,CACD,4BAA6B,EAC1B,EAAU,IAAK,CACd,KAAM,6CACN,MAAO,wBACP,KAAM,CACJ,uGACA,yCACA,mEACA,mEACA,kFACA,GACA,wBACA,gFACD,CAAC,KAAK;EAAK,CACZ,OAAQ,OACT,CACF,CACD,SAAU,CACR,GAAG,EAA2B,EAAQ,CAAC,SACvC,sBAAuB,EACpB,EAAU,IAAK,EACjB,CACD,uBAAwB,EACrB,EAAU,IAAK,EACjB,CACD,oBAAqB,EAClB,EAAU,IAAK,CAAE,QAAS,CAAC,GAAG,GAAqB,CAAE,CACvD,CACD,qBAAsB,EACnB,EAAU,IAAK,CACd,KAAM,CACJ,uGACA,yCACA,4EACA,+FACD,CAAC,KAAK;EAAK,CACb,CACF,CACD,qBAAsB,EACnB,EAAU,IAAK,CACd,KAAM;yCACP,CACF,CACD,sBAAuB,CACrB,sBAAuB,EACxB,CACF,CACF,CAGH,SAAS,IAA+B,CACtC,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kDAAf,EACE,EAAA,EAAA,KAAC,EAAD,EAAU,CAAA,EACV,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,QAAD,CAAO,UAAU,aAAa,MAAO,CAAE,MAAO,QAAS,WACrD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8CACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0CACb,EAAA,EAAA,KAAC,EAAD,CAAU,YAAa,EAAU,GAAI,QAAQ,UAAY,CAAA,CACrD,CAAA,CACF,CAAA,CACA,CAAA,EACR,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBAAkB,cAAY,OAAS,CAAA,EACtD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gCACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iCACb,EAAA,EAAA,KAAC,GAAD,CAAe,YAAa,EAAU,GAAI,gBAAiB,GAAS,CAAA,CAChE,CAAA,CACF,CAAA,CACF,IACN,EAAA,EAAA,KAAC,EAAD,CACE,MAAM,QACN,YAAa,EAAU,GACvB,SAAU,EACV,CAAA,CACE,GAIV,SAAS,IAAgC,CAWvC,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,kEACV,cAAY,wBAFd,EAIE,EAAA,EAAA,KAAC,EAAD,CACE,gBAAiB,EACjB,WAAY,GACZ,mBAAsB,GACtB,mBAAsB,GACtB,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCACd,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wBAAwB,MAAO,CAAE,IAAK,OAAQ,cAAe,QAAS,UAArF,EACE,EAAA,EAAA,KAAC,UAAD,CAAS,UAAU,4BAA4B,MAAO,CAAE,KAAM,YAAa,WACzE,EAAA,EAAA,KAAC,GAAD,CACE,UAAU,wBACV,kBAAmB,GACnB,qBAAsB,GACtB,iBACE,EAAA,EAAA,KAAC,GAAD,CAAuB,UAAU,wBAAwB,WAAc,GAAM,CAAA,CAE/E,CAAA,CACM,CAAA,EACV,EAAA,EAAA,KAAC,UAAD,CAAS,MAAO,CAAE,QAAS,SAAU,WACnC,EAAA,EAAA,KAAC,EAAD,CAAgB,UAAU,wBAAwB,YAAa,EAAU,GAAM,CAAA,CACvE,CAAA,CACN,GACD,CAAA,EACP,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,6BACV,cAAY,sBACZ,MAAO,CAAE,0BAA2B,MAAO,UAH7C,EAKE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8BACb,EAAA,EAAA,KAAC,EAAD,CAAY,WAAW,QAAQ,iBAAoB,GAAM,CAAA,CACrD,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAoB,YAAa,EAAU,GAAI,SAAU,CA7C7D,OAAQ,yBACR,MAAO,EACP,OAAQ,EACR,OAAQ,CAAC,CAAE,KAAM,YAAa,OAAQ,WAAY,CAAC,CACnD,SAAU,CAAC,CAAE,KAAM,yCAA0C,OAAQ,WAAY,CAAC,CAClF,UAAW,EAAE,CACb,QAAS,EAAE,CAuCkD,CAAwB,CAAA,CAC7E,GACF,GAIV,SAAS,GAA8B,EAIpC,CACD,IAAM,EAAkB,CACtB,GAAG,EACH,QAAS,CACP,GAAG,EAAU,QACb,gBAAiB,wBACjB,WAAY,CACV,GAAI,OACJ,KAAM,OACN,UAAW,wBACZ,CACF,CACF,CAED,MAAO,CACL,GAAG,EACH,WAAY,CAAC,EAAgB,CAC7B,kBAAmB,EAAgB,GACnC,SAAU,GACV,wBAAyB,EACtB,EAAgB,IAAK,CACpB,GAAI,OACJ,KAAM,OACN,UAAW,wBACZ,CACF,CACD,sBAAuB,EACpB,EAAgB,IAAK,CACpB,OAAQ,yBACR,MAAO,EACP,OAAQ,EACR,OAAQ,CAAC,CAAE,KAAM,YAAa,OAAQ,WAAY,CAAC,CACnD,SAAU,CAAC,CAAE,KAAM,yCAA0C,OAAQ,WAAY,CAAC,CAClF,UAAW,EAAE,CACb,QAAS,EAAE,CACZ,CACF,CACD,iBAAkB,CAChB,2BAA4B,CAC1B,GAAI,2BACJ,YAAa,EAAgB,GAC7B,KAAM,QACN,MAAO,GACP,MAAO,yBACR,CACF,CACD,mBAAoB,CAClB,2BAA4B,CAC1B,IAAI,aAAa,CAAC,OAChB,CACE,iDACA,qEACA,mEACA,+EACD,CAAC,KAAK;EAAK,CACb,CACF,CACF,CACD,sBAAuB,CACrB,wBAAyB,GAC1B,CACD,SAAU,CACR,cAAe,CAAC,EAAgB,CAChC,yBAA0B,EACvB,EAAgB,IAAK,GACvB,CACD,uBAAwB,EACrB,EAAgB,IAAK,CACpB,OAAQ,yBACR,MAAO,EACP,OAAQ,EACR,OAAQ,CAAC,CAAE,KAAM,YAAa,OAAQ,WAAY,CAAC,CACnD,SAAU,CAAC,CAAE,KAAM,yCAA0C,OAAQ,WAAY,CAAC,CAClF,UAAW,EAAE,CACb,QAAS,EAAE,CACZ,CACF,CACD,yBAA0B,EACvB,EAAgB,IAAK,CACpB,QAAS,yBACT,SAAU,CACR,CAAE,KAAM,yBAA0B,UAAW,GAAM,SAAU,GAAO,CACpE,CAAE,KAAM,OAAQ,UAAW,GAAO,SAAU,GAAO,CACpD,CACF,CACF,CACD,sBAAuB,CACrB,wBAAyB,GAC1B,CACF,CACF,CAGH,SAAS,EACP,EACA,EAC0B,CAC1B,IAAM,EAAW,EAA0B,EAAG,CAC9C,GAAI,CAAC,EACH,MAAU,MAAM,mCAAmC,IAAK,CAG1D,MAAO,CACL,GAAG,EACH,GAAG,EACJ,CAGH,SAAS,GAA6B,CACpC,SACA,aAIC,CACD,OAAO,IAAW,UAChB,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,GAAG,EAAU,kEACxB,cAAY,wBAFd,EAIE,EAAA,EAAA,KAAC,EAAD,CACE,gBAAiB,EACjB,WAAY,GACZ,mBAAsB,GACtB,mBAAsB,GACtB,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCACd,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wBAAwB,MAAO,CAAE,cAAe,QAAS,CAAI,CAAA,CACvE,CAAA,EACP,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,6BACV,cAAY,sBACZ,MAAO,CAAE,0BAA2B,MAAO,UAH7C,EAKE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8BACb,EAAA,EAAA,KAAC,EAAD,CAAY,WAAW,QAAQ,iBAAoB,GAAM,CAAA,CACrD,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAoB,YAAa,EAAU,GAAI,SAAU,EAA0B,CAAA,CAC/E,GACF,IAEN,EAAA,EAAA,KAAC,MAAD,CAAgB,sBACd,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kDAAf,EACE,EAAA,EAAA,KAAC,EAAD,EAAU,CAAA,EACV,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,2BACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gCACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uBAAyB,CAAA,CACpC,CAAA,CACF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CACE,MAAM,QACN,YAAa,EAAU,GACvB,SAAU,EACV,CAAA,CACE,GACF,CAAA,CAIV,SAAS,GAA+B,CAAE,UAA4C,CACpF,IAAM,EAAI,GAAgB,CAE1B,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,GAAD,CAA8B,UAAU,oCAA4C,SAAU,CAAA,EAC9F,EAAA,EAAA,KAAC,EAAD,CACE,KAAA,GACA,iBAAoB,GACpB,MAAO,EAAE,sCAAsC,CAC/C,aACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gCAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAA,SAAI,EAAE,wCAAwC,CAAK,CAAA,EACnD,EAAA,EAAA,KAAC,IAAD,CAAA,SACG,EAAE,yCAA0C,CAC3C,UAAW,EACX,SAAU,EACV,YAAa,EACd,CAAC,CACA,CAAA,CACA,GAER,WAAY,EAAE,gBAAgB,CAC9B,YAAa,EAAE,4BAA4B,CAC3C,KAAK,SACL,cAAiB,GACjB,CAAA,CACD,CAAA,CAAA,CAIP,SAAgB,IAAmD,CACjE,MAAO,CACL,EAAM,yBAA0B,CAC9B,YAAe,CAAE,eAAgB,CAAC,IAAI,CAAE,KAAM,IAAK,EACnD,KAAO,IAAa,CAClB,GAAG,EACH,SAAU,CACR,gBAAiB,CACf,YAAa,0BACb,WAAY,gBACZ,YAAa,CACX,CAAE,KAAM,eAAgB,KAAM,uCAAwC,UAAW,GAAI,CACrF,CAAE,KAAM,aAAc,KAAM,qCAAsC,UAAW,EAAG,CACjF,CACF,CACD,cAAe,EAChB,CACF,EACD,YAAc,EAAA,EAAA,KAAC,EAAD,CAAsB,YAAe,GAAM,CAAA,CAC1D,CAAC,CACF,EAAM,kBAAmB,CACvB,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,mBAAoB,GACrB,EACD,YAAc,EAAA,EAAA,KAAC,EAAD,EAAkB,CAAA,CACjC,CAAC,CACF,EAAM,oBAAqB,CACzB,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,gBAAiB,CACf,QAAS,GACT,YAAa,EAAU,GACvB,WAAY,GACb,CACD,SAAU,CACR,yBAA0B,EACvB,EAAU,IAAK,CACd,QAAS,OACT,SAAU,CACR,CAAE,KAAM,OAAQ,UAAW,GAAM,SAAU,GAAO,CAClD,CAAE,KAAM,iBAAkB,UAAW,GAAO,SAAU,GAAO,CAC7D,CAAE,KAAM,cAAe,UAAW,GAAO,SAAU,GAAM,CAC1D,CACF,CACF,CACD,uBAAwB,EACrB,EAAU,IAAK,GACjB,CACF,CACF,EACD,YAAc,EAAA,EAAA,KAAC,GAAD,EAAmB,CAAA,CAClC,CAAC,CACF,EAAM,cAAe,CACnB,YAAe,CAAE,eAAgB,CAAC,IAAI,CAAE,KAAM,IAAK,EACnD,KAAO,IAAa,CAClB,GAAG,EACH,OAAQ,CACN,CACE,GAAI,wBACJ,KAAM,UACN,MAAO,mBACP,KAAM,yBACN,UAAW,EACX,SAAU,EACX,CACD,CACE,GAAI,sBACJ,KAAM,QACN,MAAO,oCACP,KAAM,8CACN,UAAW,EACX,SAAU,EACX,CACF,CACF,EACD,YAAc,EAAA,EAAA,KAAC,EAAD,EAAkB,CAAA,CACjC,CAAC,CACF,EAAM,4BAA6B,CACjC,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,sBAAuB,EACpB,EAAU,IAAK,EACjB,CACD,YAAa,GACd,EACD,OAAS,IACP,EAAA,EAAA,KAAC,GAAD,CACE,UAAU,4BACV,OAAQ,EAAQ,OAChB,CAAA,CAEL,CAAC,CACF,EAAM,oCAAqC,CACzC,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,sBAAuB,EACpB,EAAU,IAAK,EACjB,CACD,YAAa,GACd,EACD,OAAS,IAAY,EAAA,EAAA,KAAC,GAAD,CAAgC,OAAQ,EAAQ,OAAU,CAAA,CAChF,CAAC,CACF,EAAM,wBAAyB,CAC7B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,sBAAuB,CACrB,oBAAqB,EACtB,CACF,EACD,OAAS,GACP,EAAQ,SAAW,UACjB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kCACb,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wDACb,EAAA,EAAA,KAAC,GAAD,CAAuB,UAAU,oBAAoB,WAAc,GAAM,CAAA,CACrE,CAAA,EACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mDAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mBAAmB,cAAY,iBAC7C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,qBAAqB,KAAM,GAAM,CAAA,CACjD,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,WAAe,CAAA,CACjB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iBAAiB,cAAY,iBAC3C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,iBAAiB,KAAM,GAAM,CAAA,CAC7C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,UAAc,CAAA,CAChB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iBAAiB,cAAY,iBAC3C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,iBAAiB,KAAM,GAAM,CAAA,CAC7C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,aAAiB,CAAA,CACnB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBAAgB,cAAY,iBAC1C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,gBAAgB,KAAM,GAAM,CAAA,CAC5C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,YAAgB,CAAA,CAClB,GACF,IACN,EAAA,EAAA,KAAC,EAAD,CACE,UAAU,wBACV,aACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,sCAA6B,8DAEtC,CAAA,CAEN,MACE,EAAA,EAAA,KAAC,EAAD,CACE,UAAU,6BACV,SAAS,sBACT,KAAM,GACN,CAAA,CAEJ,OAAO,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,sCAA6B,sBAAuB,CAAA,CACxE,CAAA,EACF,EAAA,EAAA,KAAC,EAAD,CAAY,WAAW,QAAQ,iBAAoB,GAAM,CAAA,CACrD,GACF,CAAA,EAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iCAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,2BAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mBAAmB,cAAY,iBAC7C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,qBAAqB,KAAM,GAAM,CAAA,CACjD,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,WAAe,CAAA,CACjB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iBAAiB,cAAY,iBAC3C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,iBAAiB,KAAM,GAAM,CAAA,CAC7C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,UAAc,CAAA,CAChB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iBAAiB,cAAY,iBAC3C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,iBAAiB,KAAM,GAAM,CAAA,CAC7C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,aAAiB,CAAA,CACnB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBAAgB,cAAY,iBAC1C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,gBAAgB,KAAM,GAAM,CAAA,CAC5C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,YAAgB,CAAA,CAClB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,kBAAkB,cAAY,iBAC5C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,kBAAkB,KAAM,GAAM,CAAA,CAC9C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,WAAe,CAAA,CACjB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iBAAiB,cAAY,iBAC3C,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,oBAAoB,KAAM,GAAM,CAAA,CAChD,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,UAAc,CAAA,CAChB,GACF,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qBAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCAAmC,cAAY,iBAC7D,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,oBAAoB,KAAM,GAAM,CAAA,CAChD,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,YAAgB,CAAA,CAClB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qCAAqC,cAAY,iBAC/D,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,sBAAsB,KAAM,GAAM,CAAA,CAClD,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,cAAkB,CAAA,CACpB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oCAAoC,cAAY,iBAC9D,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,qBAAqB,KAAM,GAAM,CAAA,CACjD,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,aAAiB,CAAA,CACnB,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mBAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sCAAsC,cAAY,iBAChE,EAAA,EAAA,KAAC,EAAD,CAAY,SAAS,uBAAuB,KAAM,GAAM,CAAA,CACnD,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,eAAmB,CAAA,CACrB,GACF,IACN,EAAA,EAAA,KAAC,EAAD,CACE,UAAU,wBACV,aACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,sCAA6B,8DAEtC,CAAA,CAEN,MACE,EAAA,EAAA,KAAC,EAAD,CACE,UAAU,6BACV,SAAS,sBACT,KAAM,GACN,CAAA,CAEJ,OAAO,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,sCAA6B,sBAAuB,CAAA,CACxE,CAAA,CACE,GAEX,CAAC,CACF,EAAM,oBAAqB,CACzB,YAAe,CAAE,eAAgB,CAAC,IAAI,CAAE,KAAM,IAAK,EACnD,KAAO,IAAa,CAClB,GAAG,EACH,OAAQ,CACN,CACE,GAAI,gBACJ,KAAM,UACN,MAAO,mBACP,KAAM,yBACN,UAAW,EACX,SAAU,EACX,CACD,CACE,GAAI,gBACJ,KAAM,UACN,MAAO,iBACP,KAAM,4CACN,UAAW,EACX,SAAU,EACX,CACD,CACE,GAAI,cACJ,KAAM,QACN,MAAO,oCACP,KAAM,8CACN,UAAW,EACX,SAAU,EACX,CACD,CACE,GAAI,aACJ,KAAM,OACN,MAAO,uBACP,KAAM,yCACN,UAAW,EACX,SAAU,EACX,CACF,CACF,EACD,YAAc,EAAA,EAAA,KAAC,EAAD,EAAkB,CAAA,CACjC,CAAC,CACF,EAAM,yBAA0B,CAC9B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,sBAAuB,CACrB,oBAAqB,EACtB,CACD,iBAAkB,CAChB,KAAM,GACN,UAAW,oBACX,KAAM,OACN,eAAgB,EAAW,UAC3B,yBAA0B,SAC1B,oBAAqB,GACrB,yBAA0B,IAC1B,iBAAkB,GACnB,CACF,EACD,OAAS,GACP,EAAQ,SAAW,UACjB,EAAA,EAAA,KAAC,EAAD,CACE,UAAU,oBACV,YAAa,EAAU,GACvB,YAAe,GACf,CAAA,EAEF,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAa,EAAU,GAAI,UAAU,oBAAsB,CAAA,CAEjF,CAAC,CACF,EAAM,0BAA2B,CAC/B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,CACV,EACA,CACE,GAAG,EACH,GAAI,eACJ,KAAM,aACN,KAAM,qCACP,CACF,CACD,kBAAmB,EAAU,GAC9B,EACD,YACE,EAAA,EAAA,KAAC,GAAD,CACE,kBAAmB,EAAU,GAC7B,OAAA,GACA,WAAY,CACV,EACA,CACE,GAAG,EACH,GAAI,eACJ,KAAM,aACN,KAAM,qCACP,CACF,CACD,YAAe,GACf,4BAA+B,GAC/B,CAAA,CAEL,CAAC,CACF,EAAM,qBAAsB,CAC1B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,SAAU,CACR,sBAAuB,EACpB,EAAU,IAAK,CACd,IAAK,GACL,SAAU,GACX,CACF,CACD,uBAAwB,EACrB,EAAU,IAAK,CACd,OAAQ,wBACR,MAAO,EACP,OAAQ,EACR,OAAQ,CAAC,CAAE,KAAM,yCAA0C,OAAQ,WAAY,CAAC,CAChF,SAAU,CACR,CACE,KAAM,kEACN,OAAQ,WACT,CACD,CACE,KAAM,+EACN,OAAQ,WACT,CACF,CACD,UAAW,CAAC,CAAE,KAAM,kCAAmC,OAAQ,YAAa,CAAC,CAC7E,QAAS,EAAE,CACZ,CACF,CACD,yBAA0B,EACvB,EAAU,IAAK,CACd,QAAS,wBACT,SAAU,CACR,CAAE,KAAM,wBAAyB,UAAW,GAAM,SAAU,GAAO,CACnE,CAAE,KAAM,UAAW,UAAW,GAAO,SAAU,GAAO,CACvD,CACF,CACF,CACD,0BAA2B,EACxB,EAAU,IAAK,EAAE,CACnB,CACF,CACF,EACD,YACE,EAAA,EAAA,KAAC,EAAD,CACE,MAAM,QACN,OAAO,YACP,WAAA,GACA,cAAc,2DACd,iBAAiB,sBACjB,YAAe,GACf,MACE,EAAA,EAAA,KAAC,GAAD,CACE,YAAa,EAAU,GACvB,MAAO,CAAE,KAAM,OAAQ,CACvB,UAAU,QACV,CAAA,CAEJ,CAAA,CAEL,CAAC,CACF,EAAM,wBAAyB,CAC7B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,iBAAkB,CAChB,iBAAkB,CAChB,GAAI,iBACJ,YAAa,EAAU,GACvB,KAAM,QACN,MAAO,GACP,MAAO,kBACR,CACD,iBAAkB,CAChB,GAAI,iBACJ,YAAa,EAAU,GACvB,KAAM,QACN,MAAO,GACP,MAAO,iBACR,CACF,CACD,mBAAoB,CAClB,iBAAkB,CAAC,IAAI,aAAa,CAAC,OAAO;EAA2C,CAAC,CACxF,iBAAkB,CAAC,IAAI,aAAa,CAAC,OAAO;EAAuC,CAAC,CACrF,CACD,SAAU,CACR,0BAA2B,EACxB,EAAU,IAAK,CACd,CACE,GAAI,iBACJ,YAAa,EAAU,GACvB,KAAM,QACN,MAAO,kBACP,IAAK,EAAU,KACf,KAAM,CAAC,MAAM,CACb,KAAM,IACN,KAAM,GACN,MAAO,GACP,UAAW,EACZ,CACD,CACE,GAAI,iBACJ,YAAa,EAAU,GACvB,KAAM,QACN,MAAO,iBACP,IAAK,EAAU,KACf,KAAM,CAAC,MAAM,CACb,KAAM,IACN,KAAM,GACN,MAAO,GACP,UAAW,EACZ,CACF,CACF,CACF,CACF,EACD,YA0CS,EAAA,EAAA,SAzCkC,CACvC,GAAM,CAAC,EAAc,IAAA,EAAA,EAAA,UAAuC,KAAK,CAEjE,OACE,EAAA,EAAA,KAAC,EAAD,CACE,MAAM,WACN,OAAQ,KACR,WAAA,GACA,cAAc,2DACd,iBAAiB,yBACH,eACd,YAAe,GACf,MACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oEACb,EAAA,EAAA,KAAC,EAAD,CACE,OAAO,oBACP,4BAA6B,EAC7B,CAAA,CACE,CAAA,CAER,QACE,EAAA,EAAA,KAAC,EAAD,CACE,YAAa,EAAU,GACvB,SAAU,CACR,OAAQ,0BACR,MAAO,EACP,OAAQ,EACR,OAAQ,EAAE,CACV,SAAU,CACR,CAAE,KAAM,yCAA0C,OAAQ,WAAY,CACvE,CACD,UAAW,EAAE,CACb,QAAS,EAAE,CACZ,CACD,MAAA,GACA,CAAA,CAEJ,CAAA,EAIC,EAA8B,CAAA,CAExC,CAAC,CACF,EAAM,0BAA2B,CAC/B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,sBAAuB,CACrB,oBAAqB,EACtB,CACF,EACD,YACE,EAAA,EAAA,KAAC,EAAD,CACE,UAAU,oBACV,YAAa,EAAU,GACvB,YAAe,GACf,CAAA,CAEL,CAAC,CACF,EAAM,oBAAqB,CACzB,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,sBAAuB,CACrB,oBAAqB,EACtB,CACD,iBAAkB,CAChB,KAAM,GACN,UAAW,oBACX,KAAM,OACN,eAAgB,EAAW,UAC3B,yBAA0B,SAC3B,CACF,EACD,YAAc,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAa,EAAU,GAAI,UAAU,oBAAsB,CAAA,CAC3F,CAAC,CACF,EAAM,sBAAuB,CAC3B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,EAA2B,EAAQ,CACtD,YAAc,EAAA,EAAA,KAAC,GAAD,EAAwB,CAAA,CACvC,CAAC,CACF,EAAM,wBAAyB,CAC7B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,GAA6B,EAAQ,CACxD,YAAc,EAAA,EAAA,KAAC,GAAD,EAAgC,CAAA,CAC/C,CAAC,CACF,EAAM,yBAA0B,CAC9B,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,GAAY,GAA8B,CAAE,GAAG,EAAS,OAAQ,SAAU,CAAC,CAClF,YAAc,EAAA,EAAA,KAAC,GAAD,EAAiC,CAAA,CAChD,CAAC,CACF,EAAM,mBAAoB,CACxB,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,CAAC,EAAU,CACvB,kBAAmB,EAAU,GAC7B,0BAA2B,EACxB,EAAU,IAAK,EACjB,CACD,SAAU,CACR,0BAA2B,EACxB,EAAU,IAAK,EACjB,CACD,qBAAsB,EACnB,EAAU,GAAG,MAAO,GACtB,CACD,mBAAoB,EACjB,EAAU,GAAG,MAAO,yCACtB,CACD,mBAAoB,EACjB,EAAU,GAAG,MAAO,GACtB,CACF,CACF,EACD,YACE,EAAA,EAAA,KAAC,EAAD,CAAwB,YAAa,EAAU,GAAI,SAAS,OAAO,YAAe,GAAM,CAAA,CAE3F,CAAC,CACF,EAAM,wBAAyB,CAC7B,YAAe,CAAE,eAAgB,CAAC,IAAI,CAAE,KAAM,IAAK,EACnD,KAAO,IAAa,CAAE,GAAG,EAAS,EAClC,YACE,EAAA,EAAA,KAAC,EAAD,CACE,KAAA,GACA,iBAAoB,GACpB,KAAK,SACL,MAAM,mBACN,YAAY,iDACZ,WAAW,SACX,YAAY,SACZ,cAAiB,GACjB,CAAA,CAEL,CAAC,CACF,EAAM,uBAAwB,CAC5B,YAAe,CAAE,eAAgB,CAAC,YAAY,CAAE,KAAM,YAAa,EACnE,KAAO,IAAa,CAAE,GAAG,EAAS,EAClC,YACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0BACb,EAAA,EAAA,KAAC,GAAD,CACE,KAAK,QACL,MAAM,oCACN,QAAQ,8CACR,QAAQ,EAAA,EAAA,KAAC,SAAD,CAAQ,UAAU,yBAAgB,QAAc,CAAA,CACxD,CAAA,CACE,CAAA,CAET,CAAC,CACF,EAAM,2BAA4B,CAChC,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAAE,GAAG,EAAS,EAClC,YACE,EAAA,EAAA,KAAC,EAAD,CACE,KAAA,GACA,iBAAoB,GACpB,KAAK,SACL,MAAM,0BACN,YAAY,gEACZ,WAAW,SACX,YAAY,SACZ,cAAiB,GACjB,CAAA,CAEL,CAAC,CACF,EAAM,cAAe,CACnB,YAAe,CAAE,eAAgB,CAAC,IAAI,CAAE,KAAM,IAAK,EACnD,KAAO,IAAa,CAAE,GAAG,EAAS,EAClC,YACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,yBACb,EAAA,EAAA,KAAC,EAAD,CAAY,OAAO,EAAA,EAAA,KAAC,IAAD,CAAA,SAAG,aAAc,CAAA,CAAE,aAAa,EAAA,EAAA,KAAC,IAAD,CAAA,SAAG,0BAA2B,CAAA,CAAI,CAAA,CACjF,CAAA,CAET,CAAC,CACF,EAAM,gBAAiB,CACrB,YAAe,CAAE,eAAgB,CAAC,aAAa,CAAE,KAAM,aAAc,EACrE,KAAO,IAAa,CAClB,GAAG,EACH,WAAY,EAAE,CACd,kBAAmB,KACpB,EACD,YACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sCACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,qCACb,EAAA,EAAA,KAAC,EAAD,CAAY,OAAO,EAAA,EAAA,KAAC,IAAD,CAAA,SAAG,oBAAqB,CAAA,CAAE,aAAa,EAAA,EAAA,KAAC,IAAD,CAAA,SAAG,iBAAkB,CAAA,CAAI,CAAA,CAC/E,CAAA,CACF,CAAA,CAET,CAAC,CACH,CC5+CH,IAAa,GAAgD,CAC3D,GAAG,IAAkB,CACrB,GAAG,IAAsB,CACzB,GAAG,IAA2B,CAC/B,CAED,SAAgB,GAAkB,EAA6C,CAC7E,OAAO,GAAkB,KAAM,GAAU,EAAM,KAAO,EAAG,EAAI,KCtB/D,SAAgB,GAAsB,EAAkC,CACtE,IAAM,EAAS,IAAI,gBAAgB,EAAO,CACpC,EAAU,EAAO,IAAI,QAAQ,EAAI,UACjC,EAAQ,EAAqB,EAAO,IAAI,QAAQ,CAAC,CACjD,EAAS,EAAO,IAAI,SAAS,GAAK,KAAO,KAAO,KAChD,EAAS,EAAO,IAAI,SAAS,GAAK,SAAW,SAAW,UACxD,EAAQ,GAAkB,EAAQ,CAExC,MAAO,CACL,UACA,QACA,SACA,SACA,QAAS,CAAE,QAAO,SAAQ,SAAQ,CAClC,QACD,CAGH,SAAS,GAAa,CAAE,WAAgC,CACtD,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8BACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,yBACb,EAAA,EAAA,KAAC,EAAD,CAAY,OAAO,EAAA,EAAA,KAAC,IAAD,CAAA,SAAG,wBAAyB,CAAA,CAAE,aAAa,EAAA,EAAA,KAAC,IAAD,CAAA,SAAI,EAAY,CAAA,CAAI,CAAA,CAC9E,CAAA,CACF,CAAA,CAIV,SAAgB,GAAa,CAAE,WAA0C,CAQvE,GAPA,SAAS,gBAAgB,aACvB,aACA,GAAa,EAAQ,MAAM,CAAC,kBAC7B,CACD,SAAS,gBAAgB,aAAa,OAAQ,EAAQ,SAAW,KAAO,KAAO,KAAK,CACpF,SAAS,KAAK,QAAQ,gBAAkB,EAAQ,OAE5C,CAAC,EAAQ,MACX,OAAO,EAAA,EAAA,KAAC,GAAD,CAAc,QAAS,EAAQ,QAAW,CAAA,CAGnD,IAAM,EAAS,EAAQ,MAAM,OAAO,EAAQ,QAAQ,CAEpD,OACE,EAAA,EAAA,KAAC,GAAD,CAAc,eAAgB,EAAO,yBACnC,EAAA,EAAA,KAAC,GAAD,CAAA,UACE,EAAA,EAAA,KAAC,GAAD,CAAO,KAAM,EAAO,KAAM,QAAS,EAAQ,MAAM,OAAO,EAAQ,QAAQ,CAAI,CAAA,CACrE,CAAA,CACI,CAAA,CC4EnB,SAAS,EAAM,EAAS,CACtB,MAAO,CAAE,GAAI,GAAe,OAAM,CAGpC,SAAS,EAAwB,EAAqB,EAAgC,CACpF,IAAM,EAAS,EAAK,qBAAqB,IAAe,EAAE,CAC1D,GAAI,EAAO,SAAW,EACpB,OAAO,IAAI,WAGb,IAAM,EAAc,EAAO,QAAQ,EAAK,IAAU,EAAM,EAAM,WAAY,EAAE,CACtE,EAAQ,IAAI,WAAW,EAAY,CACrC,EAAS,EACb,IAAK,IAAM,KAAS,EAClB,EAAM,IAAI,EAAO,EAAO,CACxB,GAAU,EAAM,WAElB,OAAO,EAGT,SAAS,GAAsB,EAAqB,EAA4B,CAC9E,OAAO,EAAwB,EAAM,EAAW,CAAC,WAGnD,SAAS,EAAI,EAAiB,CAC5B,MAAO,CACL,GAAI,GACJ,MAAO,CAAE,KAAM,0BAA2B,UAAS,CACpD,CAGH,SAAS,GAAwB,EAAsC,CACrE,OAAO,MAAU,EAAY,IAAkB,CAC7C,IAAM,EAAW,EAAK,UAAY,EAAE,CAEpC,GAAI,IAAO,eACT,OAAO,EAAI,EAAS,aAAe,EAAE,CAAO,CAG9C,GAAI,IAAO,kBACT,OAAO,EAAI,EAAS,gBAAkB,EAAE,CAAO,CAGjD,GAAI,IAAO,0BAA2B,CACpC,IAAM,EAAc,GAAkC,YAAc,GACpE,OAAO,EAAG,CACR,QAAS,EAAS,qCAAqC,IAAe,GACvE,CAAiB,CAGpB,GAAI,IAAO,0BACT,OAAO,EAAG,CAAE,OAAQ,GAAM,QAAS;EAAsB,CAAiB,CAG5E,GAAI,IAAO,2BACT,OAAO,EAAG,CAAE,GAAI,GAAM,CAAiB,CAGzC,GAAI,IAAO,iBACT,OAAO,EAAI,EAAS,eAAiB,EAAK,YAAc,EAAE,CAAO,CAGnE,GAAI,IAAO,mBAIT,OAHK,EAAS,gBAGP,EAAG,EAAS,gBAAqB,CAF/B,EAAI,2CAA2C,CAK1D,GAAI,IAAO,iBAIT,OAHK,EAAS,cAGP,EAAG,EAAS,cAAmB,CAF7B,EAAI,yCAAyC,CAKxD,GAAI,IAAO,wBAAyB,CAClC,IAAM,EAAe,GAAmC,aAAe,GACjE,EAAW,GAA6C,QAI9D,OAHI,GAAe,GAAS,YAC1B,MAAM,IAAI,EAAqB,EAAY,CAAE,EAAQ,WAAuB,CAEvE,EACJ,EAAS,qBAAuB,EAAS,eAAiB,EAAK,aAAa,GAC9E,CAGH,GAAI,IAAO,eAAgB,CACzB,IAAM,EAAe,GAAmC,aAAe,GACvE,OAAO,GAAI,EAAS,2BAA2B,IAAgB,EAAE,EAAE,OAAO,CAAM,CAGlF,GAAI,IAAO,aAAc,CACvB,IAAM,EAAe,GAAmC,aAAe,GACjE,EAAQ,EAAS,yBAAyB,GAChD,OAAe,EAAR,IAA6B,EAAK,wBAAwB,IAAgB,MAAW,CAG9F,GAAI,IAAO,eAAgB,CACzB,IAAM,EAAe,GAAmC,aAAe,GACjE,EAAQ,EAAS,2BAA2B,GAClD,OAAe,EAAR,GAA4B,CAAE,QAAS,GAAI,SAAU,EAAE,CAAE,CAAiB,CAGnF,GAAI,IAAO,UAAW,CACpB,IAAM,EAAe,GAAmC,aAAe,GACvE,OAAO,EAAI,EAAS,sBAAsB,IAAgB,CAAE,QAAS,EAAE,CAAE,CAAkB,CAG7F,GAAI,IAAO,WAAY,CACrB,IAAM,EAAe,GAAmC,aAAe,GACvE,OAAO,EAAI,EAAS,uBAAuB,IAAgB,CAAE,KAAM,GAAI,CAAkB,CAG3F,GAAI,IAAO,WAAY,CACrB,IAAM,EAAe,GAAmC,aAAe,GACvE,OAAO,EAAI,EAAS,uBAAuB,IAAgB,CAAE,KAAM,GAAI,CAAkB,CAG3F,GAAI,IAAO,eACT,OAAO,EAAG,CAAE,QAAS,GAAM,QAAS,mBAAoB,OAAQ,OAAQ,CAAiB,CAG3F,GAAI,IAAO,aAAe,IAAO,YAAc,IAAO,WACpD,OAAO,EAAG,CAAE,QAAS,GAAM,QAAS,eAAgB,CAAiB,CAGvE,GAAI,IAAO,gBAAiB,CAC1B,GAAM,CAAE,cAAc,GAAI,WACvB,GAAuD,EAAE,CACtD,EAAM,GAAW,IAEvB,OAAO,EAAG,CAAE,KAAM,EAAK,SADN,EAAS,wBAAwB,KAAe,IAAQ,EAAE,CAC1C,CAAiB,CAGpD,GAAI,IAAO,cAAe,CACxB,IAAM,EAAe,GAAmC,aAAe,GACvE,OAAO,EAAG,CAAE,MAAO,EAAS,0BAA0B,IAAgB,EAAE,CAAE,CAAiB,CAG7F,GAAI,IAAO,gBAAiB,CAC1B,IAAM,EAAe,GAAmC,aAAe,GACvE,OAAO,EAAG,CACR,UAAW,EAAS,4BAA4B,IAAgB,EAAE,CACnE,CAAiB,CAGpB,GAAI,IAAO,kBAAmB,CAC5B,IAAM,EAAgB,GAAoC,cAAgB,GACpE,EAAQ,EAAS,uBAAuB,GAC9C,OAAe,EAAR,EAAW,CAAE,OAAQ,EAAO,CAAuB,CAAE,OAAQ,KAAM,CAAiB,CAG7F,GAAI,IAAO,gBAAiB,CAC1B,IAAM,EAAgB,GAAoC,cAAgB,GAC1E,OAAO,EAAG,CAAE,KAAM,EAAS,qBAAqB,IAAiB,GAAI,CAAiB,CAGxF,GAAI,IAAO,gBAAiB,CAC1B,IAAM,EAAgB,GAAoC,cAAgB,GAC1E,OAAO,EAAG,CAAE,KAAM,EAAS,qBAAqB,IAAiB,EAAE,CAAE,CAAiB,CAGxF,GAAI,IAAO,mBAAqB,IAAO,kBACrC,OAAO,EAAG,CAAE,GAAI,GAAM,CAAiB,CAGzC,GAAI,IAAO,gBAAiB,CAC1B,IAAM,EAAe,GAAmC,aAAe,GACvE,OAAO,EAAI,EAAS,4BAA4B,IAAgB,EAAE,CAAkB,CAGtF,GAAI,IAAO,kBAGT,OAAO,EAAG,CACR,GAAI,2BACJ,YAHC,GAAmC,aAAe,EAAK,mBAAqB,GAI7E,KAAM,QACN,MAAO,mBACP,IAAK,uCACL,KAAM,EAAE,CACR,KAAM,IACN,KAAM,GACN,MAAO,GACP,UAAW,EACZ,CAAiB,CAGpB,GAAI,IAAO,oBAAqB,CAC9B,IAAM,EAAc,GAAkC,YAAc,GAC9D,EAAQ,EAAwB,EAAM,EAAW,CACvD,OAAO,EAAG,CACR,OAAQ,KACR,UAAW,SACX,SAAU,EACV,KAAM,EAAM,WACZ,IAAK,GAAsB,EAAM,EAAW,CAC5C,KAAM,GACN,KAAM,IACN,OAAQ,WACR,QACD,CAAiB,CAGpB,GAAI,IAAO,kBAAmB,CAC5B,IAAM,EAAc,GAAkC,YAAc,GAC9D,EAAW,GAA+B,SAAW,EACrD,EAAY,EAAwB,EAAM,EAAW,CACrD,EAAc,EAAU,SAAS,KAAK,IAAI,EAAG,EAAQ,CAAC,CAC5D,OAAO,EAAG,CACR,OAAQ,KACR,UAAW,SACX,SAAU,EACV,KAAM,EAAY,WAClB,IAAK,EAAU,WACf,MAAO,EACR,CAAiB,CAGpB,GACE,IAAO,kBACP,IAAO,mBACP,IAAO,kBACP,IAAO,0BACP,IAAO,0BACP,IAAO,wBACP,IAAO,kBACP,IAAO,gBACP,IAAO,kBACP,IAAO,eACP,IAAO,cACP,IAAO,eACP,IAAO,qBACP,IAAO,qBACP,IAAO,oBAEP,OAAO,EAAG,EAAE,CAAiB,CAG/B,GAAI,IAAO,iBAAkB,CAC3B,IAAM,EAAa,GAAiC,WAAa,GAKjE,OAAO,EAAG,CAAE,WAHV,EAAS,wBAAwB,IACjC,EAAK,wBAAwB,IAC7B,KACsB,CAAiB,CAG3C,OAAO,EAAI,+BAA+B,IAAK,EAInD,SAAgB,GAAoB,EAA4B,CAC9D,IAAM,EAAQ,IAAa,CACrB,EAAW,GAAwB,EAAK,CACxC,EAAa,EAAK,YAAc,EAAE,CAExC,EAAM,IAAI,GAAW,EAAqB,EAAK,MAAM,CAAC,CACtD,EAAM,IAAI,GAAY,EAAK,OAAO,CAClC,EAAM,IAAI,EAAiB,EAAK,cAAgB,IAAA,GAAY,GAAQ,EAAK,YAAY,CACrF,EAAM,IAAI,GAAmB,EAAK,eAAiB,GAAK,CACxD,EAAM,IAAI,GAAsB,EAAK,kBAAoB,YAAY,CACrE,EAAM,IACJ,GACA,OAAO,YAAY,EAAW,IAAK,GAAc,CAAC,EAAU,GAAI,EAAU,CAAC,CAAC,CAC7E,CACD,EAAM,IACJ,GACA,EAAW,IAAK,GAAc,EAAU,GAAG,CAC5C,CACD,EAAM,IAAI,GAAyB,EAAK,qBAAuB,QAAQ,CACvE,EAAM,IAAI,GAAyB,EAAK,qBAAuB,KAAK,CACpE,EAAM,IACJ,GACA,EAAK,oBAAsB,IAAA,GAAa,EAAW,IAAI,IAAM,KAAQ,EAAK,kBAC3E,CACD,EAAM,IACJ,GACA,OAAO,aAAa,EAAK,UAAY,EAAE,EAAE,IAAK,GAAY,CAAC,EAAQ,GAAI,EAAQ,CAAC,CAAC,CAClF,CACD,EAAM,IAAI,GAAwB,EAAK,oBAAsB,GAAM,CACnE,EAAM,IAAI,GAAqB,EAAK,iBAAmB,CAAE,QAAS,GAAO,WAAY,GAAI,CAAC,CAC1F,EAAM,IAAI,GAA0B,EAAK,sBAAwB,GAAK,CACtE,EAAM,IAAI,GAAY,EAAK,QAAU,EAAE,CAAC,CACxC,EAAM,IAAI,EAAiB,EAAK,aAAe,KAAK,CACpD,EAAM,IACJ,GACA,EAAK,iBACD,CACE,oBAAqB,GACrB,yBAA0B,IAC1B,iBAAkB,GAClB,GAAG,EAAK,iBACT,CACD,CACE,KAAM,GACN,UAAW,KACX,KAAM,SACN,eAAgB,GAChB,yBAA0B,SAC1B,oBAAqB,GACrB,yBAA0B,IAC1B,iBAAkB,GACnB,CACN,CACD,EAAM,IAAI,EAAiB,IAAI,IAAI,OAAO,QAAQ,EAAK,uBAAyB,EAAE,CAAC,CAAC,CAAC,CACrF,EAAM,IAAI,GAAc,CACtB,YAAa,MAAU,EAAY,IAAkB,CACnD,IAAM,EAAS,MAAM,EAAY,EAAI,EAAK,CAC1C,GAAI,CAAC,EAAO,GACV,MAAU,MAAM,EAAO,OAAO,SAAW,2BAA2B,IAAK,CAE3E,OAAO,EAAO,MAEhB,kBAAmB,SAAY,GAC/B,kBAAuB,GACvB,QAAS,SAAY,GACrB,eAAkB,GAClB,cAAiB,YAClB,CAAU,CAEX,IAAK,GAAM,CAAC,EAAa,KAAW,OAAO,QAAQ,EAAK,yBAA2B,EAAE,CAAC,CACpF,EAAM,IAAI,EAAqB,EAAY,CAAE,EAAO,CAGtD,IAAK,GAAM,CAAC,EAAa,KAAY,OAAO,QAAQ,EAAK,uBAAyB,EAAE,CAAC,CACnF,EAAM,IAAI,GAAmB,EAAY,CAAE,EAAQ,CAGrD,IAAK,GAAM,CAAC,EAAa,KAAS,OAAO,QAAQ,EAAK,6BAA+B,EAAE,CAAC,CACtF,EAAM,IAAI,GAAyB,EAAY,CAAE,EAAK,CAGxD,IAAK,GAAM,CAAC,EAAa,KAAa,OAAO,QAAQ,EAAK,uBAAyB,EAAE,CAAC,CACpF,EAAM,IAAI,GAAmB,EAAY,CAAE,EAAS,CAGtD,IAAK,GAAM,CAAC,EAAa,KAAe,OAAO,QAAQ,EAAK,4BAA8B,EAAE,CAAC,CAC3F,EAAM,IAAI,GAAwB,EAAY,CAAE,CAC9C,GAAG,EACH,QAAS,GACV,CAAC,CAGJ,IAAK,GAAM,CAAC,EAAa,KAAY,OAAO,QAAQ,EAAK,6BAA+B,EAAE,CAAC,CACzF,EAAM,IAAI,GAAyB,EAAY,CAAE,EAAQ,CAG3D,IAAK,GAAM,CAAC,EAAa,KAAU,OAAO,QAAQ,EAAK,2BAA6B,EAAE,CAAC,CACrF,EAAM,IAAI,EAAuB,EAAY,CAAE,CAC7C,QACA,QAAS,GACT,aAAc,EACf,CAAC,CAGJ,IAAK,GAAM,CAAC,EAAY,KAAS,OAAO,QAAQ,EAAK,kBAAoB,EAAE,CAAC,CAC1E,EAAM,IAAI,EAAuB,EAAW,CAAE,EAAK,CAGrD,OAAO,EC3eT,IAAM,EAAU,GAAsB,OAAO,SAAS,OAAO,CACvD,GAAQ,GACZ,EAAQ,MAAQ,EAAQ,MAAM,KAAK,EAAQ,QAAQ,CAAG,EAAQ,QAC/D,IACqB,WAAW,SAAS,eAAe,OAAO,CAEhE,CAAK,QACH,EAAA,EAAA,KAAC,GAAD,CAAiB,MAAA,aACf,EAAA,EAAA,KAAC,GAAD,CAAuB,UAAW,CAAA,CACzB,CAAA,CACZ"}
|